Πίνακας περιεχομένων:

DIY Smart Electronic Ukulele With Arduino: 14 βήματα (με εικόνες)
DIY Smart Electronic Ukulele With Arduino: 14 βήματα (με εικόνες)

Βίντεο: DIY Smart Electronic Ukulele With Arduino: 14 βήματα (με εικόνες)

Βίντεο: DIY Smart Electronic Ukulele With Arduino: 14 βήματα (με εικόνες)
Βίντεο: Джон Ли: Нестандартное использование беспроводного контроллера Ви 2024, Ιούλιος
Anonim
DIY Smart Electronic Ukulele With Arduino
DIY Smart Electronic Ukulele With Arduino

Θα εξηγήσουμε βήμα προς βήμα πώς μπορείτε να σχεδιάσετε το δικό σας ukulele και να προσθέσετε μερικά εφέ που θα το κάνουν μοναδικό, όπως να σχεδιάσετε κάτι που θέλουμε στην επιφάνεια του ukulele ή να προσθέσετε μερικά εφέ φωτός.

Για να γίνει αυτό, είναι απαραίτητο να αγοράσετε ένα κιτ ukulele.

Θα εξηγήσουμε πώς να συναρμολογήσετε το όργανο και να λύσετε τα διάφορα προβλήματα που θα μπορούσαν να εμφανιστούν.

Βήμα 1: Υλικά

Υλικά
Υλικά
Υλικά
Υλικά

Υλικά δομής:

DIY κιτ τοποθέτησης ukelele (θα μπορούσε να είναι ένα άλλο διαφορετικό κιτ) που σχηματίζεται από:

1- Σώμα.

2-λαιμός.

3-Σέλα

Υποστήριξη 4 σχοινιών

5-Γέφυρα

6-παξιμάδι χορδών.

7-Δακτύλιος στερέωσης για την κεφαλή του μηχανήματος (x4).

8-κεφαλές μηχανής (x4).

9-Βίδες στερέωσης για κεφαλές μηχανής (x8).

10-Βίδες στερέωσης για γέφυρα μηχανήματος (x2).

11 καπάκια για βίδες στερέωσης γέφυρας (x2).

12-χορδές (x4).

Ηλεκτρονικά υλικά:

  • NANO Arduino.
  • Wheel of Leds WS2812.
  • Επιταχυνσιόμετρο BMA220 (προαιρετικό).
  • Υποδοχή μπαταρίας.
  • Μπαταρία 9V.
  • Διακόπτης.

Οι υπολοιποι

  • Βερνίκι ξύλου.
  • Velcro.
  • Κασσίτερος συγκόλλησης.
  • Προστατευτικό πλαστικό για βερνίκωμα.
  • Σιλικόνη θερμής τήξης.

Εργαλεία:

  • Χαρακτική με λέιζερ.
  • Γυαλόχαρτο
  • Κατσαβίδι αστεριού.
  • Πινελο ΖΩΓΡΑΦΙΚΗΣ.
  • Όπλο θερμού τήγματος.
  • Συγκολλητικό σίδερο από κασσίτερο.

Βήμα 2: Προσαρμόστε το Ukulele

Προσαρμόστε το Ukulele
Προσαρμόστε το Ukulele
Προσαρμόστε το Ukulele
Προσαρμόστε το Ukulele
Προσαρμόστε το Ukulele
Προσαρμόστε το Ukulele

Για να στολίσουμε το ukulele μας θα μπορούσαμε να κάνουμε μια χάραξη ενός σχεδίου με έναν κόπτη λέιζερ στο σώμα. Σε περίπτωση που δεν έχουμε αυτό το εργαλείο, θα μπορούσαμε να το βάψουμε.

Η εικόνα που επιλέξαμε είναι η πρώτη που εμφανίζεται.

Πρώτα απ 'όλα, πρέπει να σχεδιάσουμε το πρότυπο σχεδίασης για να κάνουμε την χάραξη.

Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε ένα λογισμικό που ονομάζεται «Inkscape», το οποίο θα μπορούσαμε να αποκτήσουμε από αυτόν τον σύνδεσμο:

Για να το χρησιμοποιήσουμε, πρέπει να προσαρμόσουμε την εικόνα που θέλουμε να χρησιμοποιήσουμε όπως δείχνουμε στη δεύτερη εικόνα. Θα μπορούσατε να δείτε ότι περιστρέψαμε την αρχική εικόνα για να προσαρμόσουμε τον κώνο του χεριού με τον κύκλο του οργάνου. Όπως έχουμε ξαναπεί, μπορείτε να βάλετε οποιαδήποτε εικόνα.

Βήμα 3: Διανυσματίστε μια εικόνα χρησιμοποιώντας το Inkscape

Διανύστε μια εικόνα χρησιμοποιώντας το Inkscape
Διανύστε μια εικόνα χρησιμοποιώντας το Inkscape
Διανύστε μια εικόνα χρησιμοποιώντας το Inkscape
Διανύστε μια εικόνα χρησιμοποιώντας το Inkscape
Διανύστε μια εικόνα χρησιμοποιώντας το Inkscape
Διανύστε μια εικόνα χρησιμοποιώντας το Inkscape
Διανύστε μια εικόνα χρησιμοποιώντας το Inkscape
Διανύστε μια εικόνα χρησιμοποιώντας το Inkscape

Θα δούμε πώς να δημιουργήσουμε ένα διανυσματικό αρχείο από pixmap (jpg, png, όποια μορφή ράστερ μπορεί να ανοίξει το Inkscape).

Inkscape Το Inkscape είναι ένας επεξεργαστής γραφικών διανυσματικού ανοιχτού κώδικα και όπως υποδηλώνει ο τίτλος, αυτό είναι το εργαλείο που θα χρησιμοποιήσω για τη διανυσματική διαμόρφωση των λογότυπων. Βήματα διανύσματος Τα βήματα είναι κοινά για κάθε διανυσματοποίηση που μπορεί να θέλουμε να κάνουμε.

  1. Ανοίξτε την εικόνα στο Inkscape
  2. Ανοίξτε το Trace Bitmap Tool Path-> Trace Bitmap
  3. Παίξτε γύρω από τις επιλογές Trace Bitmap
  4. Εκτελέστε τον εντοπισμό
  5. Καθαρίστε τα αποτελέσματα (εάν είναι απαραίτητο)

Σημειώστε το κομμάτι «παίζοντας». Δεν είμαι ειδικός στην ανίχνευση, οπότε αντιμετωπίζω αυτό το εργαλείο ως ένα μαύρο κουτί με πόμολα και φώτα, στρίβοντας και αλλάζοντας μέχρι να έχω το καλύτερο αποτέλεσμα

Βήμα 4: Χαρακτική λογότυπου

Image
Image
Χαρακτική λογότυπου
Χαρακτική λογότυπου
Χαρακτική λογότυπου
Χαρακτική λογότυπου

Για αυτό, είναι σημαντικό να έχετε μια σιλουέτα της επιφάνειας στην οποία θα δημιουργηθεί η χάραξη του σχεδίου.

Για τη χάραξη, θα χρησιμοποιήσουμε το λογισμικό «T2Laser». Θα μπορούσαμε να αποκτήσουμε αυτό το λογισμικό από:

Μόλις ανοίξουμε το λογισμικό, πρέπει να φορτώσουμε την εικόνα που δημιουργήσαμε στο τελευταίο βήμα. Στη συνέχεια, πατήστε το κουμπί "λέιζερ ελέγχου" και εμφανίζονται τα στοιχεία ελέγχου cnc. Οι δύο εικόνες δείχνουν τη διαδικασία και το αποτέλεσμα της χάραξης με τον κόπτη λέιζερ μας.

Βήμα 5: Λείανση και βερνίκωμα

Λείανση και βερνίκωμα
Λείανση και βερνίκωμα
Λείανση και βερνίκωμα
Λείανση και βερνίκωμα
Λείανση και βερνίκωμα
Λείανση και βερνίκωμα
Λείανση και βερνίκωμα
Λείανση και βερνίκωμα

Για να αφήσουμε το ukulele μας φωτεινό και με ένα στρώμα χωρίς τραχύτητα μπορούμε να τρίψουμε ομαλά τα δύο μέρη που απαρτίζουν το όργανο μας με προσοχή, γιατί μπορούμε να καταστρέψουμε το σχέδιο που έχει γίνει (αν έχετε επιλέξει να βάψετε το ukulele, θα πρέπει να τρίψτε πρώτα). Στη συνέχεια, θα βερνικώσουμε τα δύο μέρη μας έτσι ώστε να αποκτήσουν ένα πιο σκούρο χρώμα και το ξύλο να παρουσιάζει μεγαλύτερη αντίσταση. Μπορούμε να χρησιμοποιήσουμε ένα κανονικό βερνίκι ξύλου, δεν χρειάζεται να είναι ιδιαίτερο.

Μόλις έχουμε το βερνίκι, το ανακατεύουμε με λίγο διαλύτη ώστε να διαλυθεί λίγο. Στη συνέχεια, εφαρμόζουμε το μείγμα με ένα πινέλο στο λαιμό και το σώμα του οργάνου και το αφήνουμε να στεγνώσει.

Αν δούμε ότι το προϊόν χρειάζεται μια δεύτερη στρώση, μπορούμε να τρίψουμε λίγο τα δύο μέρη και να εφαρμόσουμε ξανά μια στρώση αραιωμένου βερνικιού.

** ΠΡΟΦΥΛΑΞΕΙΣ: Το βερνίκι είναι χημικό προϊόν, επομένως είναι απαραίτητο να εκτελέσετε αυτήν τη διαδικασία σε αεριζόμενο χώρο, να φοράτε μάσκα για να αποφύγετε την εισπνοή οσμών και προστατευτικά γυαλιά.

Τα υλικά που χρειαζόμαστε για να μπορέσουμε να δουλέψουμε σωστά είναι αυτά που εμφανίζονται στις φωτογραφίες. Κυρίως θα δουλέψουμε με ένα πινέλο, ένα βερνίκι (στην περίπτωσή μας κόκκινο χρώμα), λίγο διαλύτη και οπτική προστασία. Και πάνω απ 'όλα εργάζονται σε καλά αεριζόμενους χώρους.

Βήμα 6: Υλικό

Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα

Η πλάκα μας με το Arduino, το βηματικόμετρο και τον τροχό με λαμπάκια πρόκειται να εισαχθούν σε μια μικρή αγκύλη για να αποφευχθεί η κίνηση όλων των εξαρτημάτων στο όργανο.

Προσθέσαμε επίσης μια θήκη μπαταρίας και έναν διακόπτη για να είναι πιο άνετη και δεν φθείρουμε την μπαταρία όταν δεν χρησιμοποιούμε το όργανο. Θα τοποθετήσουμε αυτό το στήριγμα με ένα κομμάτι Velcro (θα λειτουργούσε επίσης με σιλικόνη και πιστόλι θερμής τήξης) στην εσωτερική όψη του σώματος του ukulele. Από την άλλη πλευρά, ο τροχός LED είναι μικρότερος από την τρύπα, οπότε θα έπεφτε Το Ένα στήριγμα έχει σχεδιαστεί έτσι ώστε να συγκρατείται καλά και να μπορεί να εκτελέσει τη λειτουργία του.

Βήμα 7: Λογισμικό

Λογισμικό
Λογισμικό
Λογισμικό
Λογισμικό
Λογισμικό
Λογισμικό

Για να δώσουμε μια ξεχωριστή διακόσμηση στο ukulele μας, θα μπορούσαμε να προσθέσουμε εφέ φωτισμού χάρη σε έναν τροχό led. Θα χρησιμοποιήσουμε το WS2812, αλλά μπορείτε να χρησιμοποιήσετε οποιοδήποτε άλλο ακολουθώντας τις οδηγίες του φύλλου δεδομένων. Θα χρησιμοποιήσουμε επίσης ένα ωροσκόπιο (BMA220), που μας επιτρέπει να κάνουμε μια επίδραση της βαρύτητας.

Στην πραγματικότητα, θα έχουμε 4 παιχνίδια φωτός, που περιλαμβάνονται στη βιβλιοθήκη υπολογιστών που ονομάζεται «Adafruit» του Arduino. Για αυτό, πρέπει να κάνουμε μια σωστή συνεννόηση μεταξύ των τριών συστατικών: Arduino NANO, WS2812 και BMA220, όπως φαίνεται στην πρώτη εικόνα.

Τα κόκκινα καλώδια είναι για τροφοδοσία, τα μαύρα GND και τα υπόλοιπα είναι απαραίτητες συνδέσεις για τη σωστή λειτουργία. Ο κωδικός που χρησιμοποιήσαμε για το κιτ φωτισμού είναι προσαρτημένος σε ένα αρχείο που ονομάζεται "play_of_light_v0.ino". Βεβαιωθείτε ότι έχετε συμπεριλάβει τις απαραίτητες βιβλιοθήκες για τη σωστή λειτουργία του προγράμματος. Η μπαταρία που προσθέτουμε εξωτερικά στο κύκλωμα πρέπει να έχει ελάχιστη τάση 9V και πρέπει να διασφαλίσουμε ότι είναι ικανή να δώσει το ελάχιστο ρεύμα που απαιτείται για την τροφοδοσία ολόκληρου του κυκλώματος.

// Μεταβλητές contador e interrupciónint counter; // Μεταβλητές Ejemplo gravedad #include #include #include #define NUMBER_OF_LEDS_ON_RING 16 #define NEOPIXEL_RING_DATA_PIN 9

byte Έκδοση [3];

int8_t x_data; int8_t y_data; int8_t z_data; εύρος byte = 0x00; float divi = 16; float x, y, z; float pi = 3.14159265359; float nx, ny, angle? int led, previousLed; QueueList ledQueue; Adafruit_NeoPixel neoring = Adafruit_NeoPixel (NUMBER_OF_LEDS_ON_RING, NEOPIXEL_RING_DATA_PIN, NEO_GRB + NEO_KHZ800);

// Μεταβλητές Luces arcoiris

#include #ifdef _AVR_ #include #endif #define PIN 9 // Παράμετρος 1 = αριθμός εικονοστοιχείων στη λωρίδα // Παράμετρος 2 = αριθμός pin Arduino (οι περισσότεροι είναι έγκυροι) // Παράμετρος 3 = σημαίες τύπου pixel, προσθέστε μαζί όπως απαιτείται: // NEO_KHZ800 800 KHz bitstream (τα περισσότερα προϊόντα NeoPixel w/WS2812 LED) // NEO_KHZ400 400 KHz (κλασικά «v1» (όχι v2) εικονοστοιχεία FLORA, προγράμματα οδήγησης WS2811) // NEO_GRB Pixels είναι ενσύρματα για GRB bitstream (τα περισσότερα προϊόντα NeoPixel)/ / Τα εικονοστοιχεία NEO_RGB είναι συνδεδεμένα για RGB bitstream (v1 εικονοστοιχεία FLORA και όχι v2) // ΣΗΜΑΝΤΙΚΟ: Για να μειώσετε τον κίνδυνο εξάντλησης NeoPixel, προσθέστε πυκνωτή 1000 uF στα καλώδια τροφοδοσίας // pixel, προσθέστε αντίσταση 300 - 500 Ohm στην εισαγωγή δεδομένων του πρώτου pixel // και ελαχιστοποιήστε την απόσταση μεταξύ Arduino και πρώτου pixel. Αποφύγετε τη σύνδεση // σε ζωντανό κύκλωμα … εάν πρέπει, συνδέστε πρώτα το GND.

// Μεταβλητές Rueda de colores

// Απλό σκίτσο NeoPixel Ring (γ) 2013 Shae Erisson // κυκλοφόρησε με άδεια GPLv3 για να ταιριάζει με την υπόλοιπη βιβλιοθήκη AdoFruit NeoPixel

#περιλαμβάνω

#ifdef _AVR_ #Include #endif

// Ποια ακίδα στο Arduino είναι συνδεδεμένη με τα NeoPixels;

// Σε ένα μπιχλιμπίδι ή Gemma προτείνουμε να το αλλάξετε σε 1 #καθορίστε το PIN 9

// Πόσα NeoPixel είναι προσαρτημένα στο Arduino;

#define NUMPIXELS 16

// Όταν ρυθμίζουμε τη βιβλιοθήκη NeoPixel, της λέμε πόσα εικονοστοιχεία και ποια ακίδα πρέπει να χρησιμοποιηθεί για την αποστολή σημάτων.

// Σημειώστε ότι για παλαιότερες λωρίδες NeoPixel μπορεί να χρειαστεί να αλλάξετε την τρίτη παράμετρο-δείτε το παράδειγμα strandtest // για περισσότερες πληροφορίες σχετικά με πιθανές τιμές. Εικονοστοιχεία Adafruit_NeoPixel = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int καθυστέρηση = 50; // καθυστέρηση για 50ms

// Μεταβλητές colores aleatorios

#include #ifdef _AVR_ #include #endif

#καθορίστε το PIN 9

#ορίστε NUM_LEDS 16

#define BRIGHTNESS 200

// Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

byte neopix_gamma = {

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101, 102, 104, 105, 107, 109, 110, 112, 114, 115, 117, 119, 120, 122, 124, 126, 127, 129, 131, 133, 135, 137, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 167, 169, 171, 173, 175, 177, 180, 182, 184, 186, 189, 191, 193, 196, 198, 200, 203, 205, 208, 210, 213, 215, 218, 220, 223, 225, 228, 231, 233, 236, 239, 241, 244, 247, 249, 252, 255 }; /////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////

/METODO SETUP

void setup () {// Código: Dirección de la gravedad neoring.begin (); neoring.setBrightness (200); Serial.begin (9600); Wire.begin (); Wire.beginTransmission (0x0A); // διεύθυνση του επιταχυνσιόμετρου // ρυθμίσεις εύρους Wire.write (0x22); // εγγραφή διεύθυνσης Wire.write (εύρος); // μπορεί να οριστεί σε "0x00" "0x01" "0x02" "0x03", ανατρέξτε στο Datashhet στο wiki // low pass filter Wire.write (0x20). // εγγραφή διεύθυνσης Wire.write (0x05); // μπορεί να οριστεί σε "0x05" "0x04" …… "0x01" "0x00", ανατρέξτε στο Datashhet στο wiki Wire.endTransmission ();

// Codigo; Luces Arcoiris

// Αυτό είναι για Trinket 5V 16MHz, μπορείτε να αφαιρέσετε αυτές τις τρεις γραμμές εάν δεν χρησιμοποιείτε Trinket #if καθορισμένο (_AVR_ATtiny85_) εάν (F_CPU == 16000000) clock_prescale_set (clock_div_1). #endif // Τέλος μπιχλιμπιδιού ειδικός κωδικός strip.begin (); strip.show (); // Αρχικοποίηση όλων των εικονοστοιχείων σε "απενεργοποίηση"

// Código Rueda de colores

// Αυτό ισχύει για Trinket 5V 16MHz, μπορείτε να καταργήσετε αυτές τις τρεις γραμμές εάν δεν χρησιμοποιείτε Trinket #if #endif // Ειδικός κωδικός τέλους μπιχλιμπιδιού

pixels.begin (); // Αυτό προετοιμάζει τη βιβλιοθήκη NeoPixel.

// Codigo Interrupcion

μετρητής = 1;

// Codigo Colores varios

// Αυτό είναι για Trinket 5V 16MHz, μπορείτε να αφαιρέσετε αυτές τις τρεις γραμμές εάν δεν χρησιμοποιείτε Trinket #if καθορισμένο (_AVR_ATtiny85_) εάν (F_CPU == 16000000) clock_prescale_set (clock_div_1). #endif // Τέλος μπιχλιμπιδιού ειδική λωρίδα κώδικα.setBrightness (BRIGHTNESS); strip.begin (); strip.show (); // Αρχικοποίηση όλων των εικονοστοιχείων σε "απενεργοποίηση"}

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/Bucle infinito

void loop () {// Caso 1: Juego de luces de la gravedad? if (counter == 1) {for (int i = 0; i 0.0) {if (nx 0.0) angle+= 180; else γωνία += 360; } // τερματίστε αλλού εάν (γωνία == 360,0) γωνία = 0,0; led = κυκλοφορία (γωνία / (360 / NUMBER_OF_LEDS_ON_RING)); // κάντε την κίνηση led ομαλή εάν (previousLed == led) {// τίποτα να κάνετε} αλλιώς εάν (counterClockwiseDistanceBetweenLeds (previousLed, led) <= 8) led = circularize (previousLed + 1); else led = κυκλοφόρησε (προηγούμενοLed - 1)? ledQueue.push (led); makeLightShow (); previousLed = led; καθυστέρηση (25)? } μετρητής = 2; } // Τέλος αν μετρητής == 1 // Caso 2: Codigo del juego de luces del arcoiris else if (counter == 2) {for (int j = 0; j <5; j ++) {// Μερικές διαδικασίες που δείχνουν παράδειγμα πώς να εμφανίζεται στα εικονοστοιχεία: colorWipe1 (strip. Color (255, 0, 0), 50); // Κόκκινο χρώμαWipe1 (λωρίδα. Χρώμα (0, 255, 0), 50); // Πράσινο χρώμαWipe1 (λωρίδα. Χρώμα (0, 0, 255), 50); // Μπλε χρώμαWipe1 (λωρίδα. Χρώμα (0, 0, 0, 255), 50); // Λευκό RGBW // Αποστολή θεάτρου pixel στο… // Λευκό θέατρο Chase (λωρίδα. Χρώμα (127, 0, 0), 50). // Red theaterChase (λωρίδα. Χρώμα (0, 0, 127), 50); // Μπλε

ουράνιο τόξο (5)?

rainbowCycle (5); TheaterChaseRainbow (5); } μετρητής = 3; } // Τέλος αν μετρητής == 2 // Caso 3: Luces Aleatorias άλλος αν (μετρητής == 3) {για (int k = 0; k <50; k ++) {// Για ένα σύνολο NeoPixels το πρώτο NeoPixel είναι 0, το δεύτερο είναι 1, μέχρι τον αριθμό των εικονοστοιχείων μείον ένα. int a = τυχαίο (255); int b = τυχαίο (255); int c = τυχαίο (255); για (int i = 0; i

// εικονοστοιχεία. Το χρώμα λαμβάνει τιμές RGB, από 0, 0, 0 έως 255, 255, 255

pixels.setPixelColor (i, pixels. Color (a, b, c)); // Μέτρια φωτεινό πράσινο χρώμα.

pixels.show (); // Αυτό στέλνει το ενημερωμένο χρώμα pixel στο υλικό.

καθυστέρηση (καθυστέρηση)? // Καθυστέρηση για ένα χρονικό διάστημα (σε χιλιοστά του δευτερολέπτου).

} a = τυχαίο (255); b = τυχαίο (255); c = τυχαίο (255); για (int i = NUMPIXELS; i> 0; i-) {

// εικονοστοιχεία. Το χρώμα λαμβάνει τιμές RGB, από 0, 0, 0 έως 255, 255, 255

pixels.setPixelColor (i, pixels. Color (a, b, c)); // Μέτρια φωτεινό πράσινο χρώμα.

pixels.show (); // Αυτό στέλνει το ενημερωμένο χρώμα pixel στο υλικό.

καθυστέρηση (καθυστέρηση)? // Καθυστέρηση για ένα χρονικό διάστημα (σε χιλιοστά του δευτερολέπτου).

}} μετρητής = 4; } else if (counter == 4) {for (int g = 0; g <= 6; g ++) {// Ορισμένες διαδικασίες που δείχνουν πώς να εμφανίζονται στα εικονοστοιχεία: colorWipe (strip. Color (255, 0, 0), 50); // Κόκκινο χρώμαWipe (λωρίδα. Χρώμα (0, 255, 0), 50); // Πράσινο χρώμαWipe (λωρίδα. Χρώμα (0, 0, 255), 50); // Μπλε χρώμαWipe (λωρίδα. Χρώμα (0, 0, 0, 255), 50); // Λευκό whiteOverRainbow (20, 75, 5); παλμός Λευκό (5); // fullWhite (); // καθυστέρηση (2000). rainbowFade2White (3, 3, 1)?

}

μετρητής = 1; }} /////////////////////////////////////////////// /////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////// ///////////////////

/Metodos del Ejemplo de la gravedad

void AccelerometerInit () {Wire.beginTransmission (0x0A); // διεύθυνση του επιταχυνσιόμετρου // επαναφορά του επιταχυνσιόμετρου Wire.write (0x04); // X data Wire.endTransmission (); Wire.requestFrom (0x0A, 1)? // να ζητήσει 6 byte από τη συσκευή slave #2 ενώ (Wire.available ()) // ο slave μπορεί να στείλει λιγότερα από τα ζητούμενα {Έκδοση [0] = Wire.read (); // λάβετε ένα byte ως χαρακτήρα} x_data = (int8_t) Έκδοση [0] >> 2; Wire.beginTransmission (0x0A); // διεύθυνση του επιταχυνσιόμετρου // επαναφέρετε το επιταχυνσιόμετρο Wire.write (0x06); // Y data Wire.endTransmission (); Wire.requestFrom (0x0A, 1)? // να ζητήσει 6 byte από τη συσκευή υποκατάστασης #2 ενώ (Wire.available ()) // ο slave μπορεί να στείλει λιγότερα από τα ζητούμενα {Έκδοση [1] = Wire.read (); // λάβετε ένα byte ως χαρακτήρα} y_data = (int8_t) Έκδοση [1] >> 2; Wire.beginTransmission (0x0A); // διεύθυνση του επιταχυνσιόμετρου // επαναφέρετε το επιταχυνσιόμετρο Wire.write (0x08); // Z data Wire.endTransmission (); Wire.requestFrom (0x0A, 1)? // να ζητήσει 6 byte από τη συσκευή slave #2 ενώ (Wire.available ()) // ο slave μπορεί να στείλει λιγότερα από τα ζητούμενα {Έκδοση [2] = Wire.read (); // λάβετε ένα byte ως χαρακτήρα} z_data = (int8_t) Έκδοση [2] >> 2; x = (float) x_data/divi; y = (float) y_data/divi; z = (float) z_data/divi; Serial.print ("X ="); Serial.print (x); // εκτύπωση του χαρακτήρα Serial.print (""); Serial.print ("Y ="); Serial.print (y); // εκτύπωση του χαρακτήρα Serial.print (""); Serial.print ("Z ="); // εκτύπωση του χαρακτήρα Serial.println (z); }

int circularize (int pos) {

αν (pos> = NUMBER_OF_LEDS_ON_RING) επιστρέψει (pos - NUMBER_OF_LEDS_ON_RING)? αλλιώς αν (pos <0) επιστροφή (pos + NUMBER_OF_LEDS_ON_RING)? αλλιώς επιστροφή (pos)? }

int απόσταση?

int counterClockwiseDistanceBetweenLeds (int prevPos, int nextPos) {distance = nextPos - prevPos; εάν (απόσταση <0) απόσταση += NUMBER_OF_LEDS_ON_RING, επιστροφή (απόσταση)? }

int ledPosition, currentQueueSize;

#define NUMBER_OF_LEDS_TO_SHINE 10 int brightnessStep = 255/NUMBER_OF_LEDS_TO_SHINE;

void makeLightShow () {

για (int j = 0; j <NUMBER_OF_LEDS_ON_RING; j ++) neoring.setPixelColor (j, 0, 0, 0); currentQueueSize = ledQueue.count (); για (int k = 0; k <currentQueueSize; k ++) {ledPosition = ledQueue.pop (); neoring.setPixelColor (ledPosition, 0, (brightnessStep * k), 0); if ((k == 0 && currentQueueSize 0) ledQueue.push (ledPosition);} neoring.show ();}

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/Metodos del juego de luces del arcoiris

// Γεμίστε τις τελείες η μία μετά την άλλη με ένα χρώμα κενό χρώμαWipe (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i

void rainbow (uint8_t αναμονή) {

uint16_t i, j;

για (j = 0; j <256; j ++) {για (i = 0; i

// Ελαφρώς διαφορετικό, αυτό κάνει το ουράνιο τόξο να κατανέμεται εξίσου σε ολόκληρο

void rainbowCycle (uint8_t αναμονή) {uint16_t i, j;

για (j = 0; j <256*5; j ++) {// 5 κύκλοι όλων των χρωμάτων στον τροχό για (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); καθυστέρηση (αναμονή)? }}

// Ανιχνευτικά φώτα σε στιλ θεάτρου.

void theaterChase (uint32_t c, uint8_t wait) {for (int j = 0; j <10; j ++) {// κάντε 10 κύκλους κυνηγίας για (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // ενεργοποιήστε κάθε τρίτο pixel στο} strip.show ();

καθυστέρηση (αναμονή)?

για (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // απενεργοποιήστε κάθε τρίτο pixel}}}}

// Ανιχνευτικά φώτα σε στιλ θεάτρου με εφέ ουράνιου τόξου

void theaterChaseRainbow (uint8_t αναμονή) {για (int j = 0; j <256; j ++) {// κυκλώστε και τα 256 χρώματα στον τροχό για (int q = 0; q <3; q ++) {για (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, Τροχός ((i+j) % 255)); // ενεργοποιήστε κάθε τρίτο pixel στο} strip.show ();

καθυστέρηση (αναμονή)?

για (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // απενεργοποιήστε κάθε τρίτο pixel}}}}

// Εισαγάγετε μια τιμή 0 έως 255 για να λάβετε μια τιμή χρώματος.

// Τα χρώματα είναι μια μετάβαση r - g - b - πίσω στο r. uint32_t Τροχός (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {strip return. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos -= 85; λωρίδα επιστροφής. Χρώμα (0, WheelPos * 3, 255 - WheelPos * 3). } WheelPos -= 170; λωρίδα επιστροφής. Χρώμα (WheelPos * 3, 255 - WheelPos * 3, 0). }

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/Metodos Rueda de colores

// int elegirColor = τυχαίο (0x000000, 0xffffff); // Επιλογή δικαιώματος για την εκδήλωση χρωμάτων comprendida entre 0x000000 y 0xFFFFFF

// CylonEyeColor = HtmlColor (elegirColor); // int elegirColor = random (1, 7); // Podemos elegir aleatoriamente entre los 7 colores que hay debajo0xf0ffff // if (elegirColor == 1) CylonEyeColor = HtmlColor (0xff0000); // Rojo // if (elegirColor == 2) CylonEyeColor = HtmlColor (0x00ff00); // Verde // if (elegirColor == 3) CylonEyeColor = HtmlColor (0x0000ff); // Azul // if (elegirColor == 4) CylonEyeColor = HtmlColor (0xff) // if (elegirColor == 5) CylonEyeColor = HtmlColor (0x200020); // Morado // if (elegirColor == 6) CylonEyeColor = HtmlColor (0x00ffff); // Azul Claro // if (elegirColor == 7) CylonEye HtmlColor (0x100010); // Rosa // CylonEyeColor = HtmlColor (0x000000);

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/Metodos luces varias

// Γεμίστε τις τελείες η μία μετά την άλλη με ένα χρώμα

void colorWipe1 (uint32_t c, uint8_t αναμονή) {για (uint16_t i = 0; i

void pulseWhite (uint8_t αναμονή) {

για (int j = 0; j <256; j ++) {για (uint16_t i = 0; i

για (int j = 255; j> = 0; j-) {

για (uint16_t i = 0; i

void rainbowFade2White (uint8_t αναμονή, int rainbowLoops, int whiteLoops) {

float fadeMax = 100.0; int fadeVal = 0; uint32_t wheelVal; int redVal, greenVal, blueVal;

για (int k = 0; k <rainbowLoops; k ++) {για (int j = 0; j <256; j ++) {// 5 κύκλοι όλων των χρωμάτων στον τροχό

για (int i = 0; i <strip.numPixels (); i ++) {

wheelVal = Τροχός (((i * 256 / strip.numPixels ()) + j) & 255);

redVal = κόκκινο (wheelVal) * float (fadeVal/fadeMax);

greenVal = πράσινο (wheelVal) * float (fadeVal/fadeMax); blueVal = μπλε (wheelVal) * float (fadeVal/fadeMax);

strip.setPixelColor (i, strip. Color (redVal, greenVal, blueVal));

}

// Πρώτος βρόχος, ξεθωριάστε!

if (k == 0 && fadeVal <fadeMax-1) {fadeVal ++; }

// Τελευταίος βρόχος, ξεθώριασε!

else if (k == rainbowLoops - 1 && j> 255 - fadeMax) {fadeVal--; }

strip.show ();

καθυστέρηση (αναμονή)? }}

καθυστέρηση (500)?

για (int k = 0; k <whiteLoops; k ++) {

για (int j = 0; j <256; j ++) {

για (uint16_t i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0, neopix_gamma [j])); } strip.show (); }

καθυστέρηση (2000).

για (int j = 255; j> = 0; j-) {

για (uint16_t i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0, neopix_gamma [j])); } strip.show (); }}

καθυστέρηση (500)?

}

void whiteOverRainbow (uint8_t αναμονή, uint8_t whiteSpeed, uint8_t whiteLength) {

if (whiteLength> = strip.numPixels ()) whiteLength = strip.numPixels () - 1;

int head = whiteLength - 1;

int ουρα = 0;

int βρόχοι = 3;

int loopNum = 0;

στατικό ανυπόγραφο long lastTime = 0;

ενώ (αληθινό) {

για (int j = 0; j <256; j ++) {for (uint16_t i = 0; i = tail && i head && i> = tail) || (ουρά> κεφάλι && i <= κεφάλι)) {strip.setPixelColor (i, strip. Color (0, 0, 0, 255)); } else {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); }}

if (millis () - lastTime> whiteSpeed) {

κεφάλι ++? ουρα ++? if (head == strip.numPixels ()) {loopNum ++; } lastTime = millis (); }

εάν (loopNum == βρόχοι) επιστρέψει?

head%= strip.numPixels (); ουρά%= strip.numPixels (); strip.show (); καθυστέρηση (αναμονή)? }}} void fullWhite () {for (uint16_t i = 0; i

// Ελαφρώς διαφορετικό, αυτό κάνει το ουράνιο τόξο να κατανέμεται εξίσου σε ολόκληρο

void rainbowCycle1 (uint8_t αναμονή) {uint16_t i, j;

για (j = 0; j <256 * 5; j ++) {// 5 κύκλοι όλων των χρωμάτων στον τροχό για (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); καθυστέρηση (αναμονή)? }}

void rainbow1 (uint8_t αναμονή) {

uint16_t i, j;

για (j = 0; j <256; j ++) {για (i = 0; i

// Εισαγάγετε μια τιμή 0 έως 255 για να λάβετε μια τιμή χρώματος.

// Τα χρώματα είναι μια μετάβαση r - g - b - πίσω στο r. uint32_t Τροχός1 (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {strip return. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0); } if (WheelPos <170) {WheelPos -= 85; λωρίδα επιστροφής. Χρώμα (0, WheelPos * 3, 255 - WheelPos * 3, 0). } WheelPos -= 170; λωρίδα επιστροφής. Χρώμα (WheelPos * 3, 255 - WheelPos * 3, 0, 0). }

uint8_t κόκκινο (uint32_t c) {

επιστροφή (c >> 16)? } uint8_t πράσινο (uint32_t c) {return (c >> 8); } uint8_t μπλε (uint32_t c) {επιστροφή (c); }

Βήμα 8: Σχεδιασμός 3D

Τρισδιάστατος σχεδιασμός
Τρισδιάστατος σχεδιασμός
Τρισδιάστατος σχεδιασμός
Τρισδιάστατος σχεδιασμός
Τρισδιάστατος σχεδιασμός
Τρισδιάστατος σχεδιασμός

Πρώτον, πρέπει να μεγεθύνετε τα στοιχεία του υλικού σας για να είστε σίγουροι για το σωστό. Εάν είναι ίδια με τα δικά μας, μπορείτε να χρησιμοποιήσετε τα ίδια αρχεία που σας δανείζουμε.

Και τα δύο υποστηρίγματα έχουν σχεδιαστεί με τρισδιάστατο εκτυπωτή, τα οποία περιλαμβάνονται επίσης ως:

ukelele_support_arduino_v0.stl: https://www.tinkercad.com/things/1aAGZ1xFptA-ukel… ukelele_support_WS2812_v0.stl:

Τέλος, το φως θα είναι σαν τις δύο τελευταίες εικόνες.

Βήμα 9: Τοποθέτηση του λαιμού

Τοποθέτηση του λαιμού
Τοποθέτηση του λαιμού
Τοποθέτηση του λαιμού
Τοποθέτηση του λαιμού

Αρχικά θα τοποθετήσουμε το διάσελο στο λαιμό. Οι τρύπες που χρειάζονται οι βίδες για να τη συγκρατήσουν δεν είναι εκεί, οπότε θα πρέπει να τις κάνουμε, σημειώνοντας πού πρέπει να πάνε και προσεκτικά, με ένα τρυπάνι, κάνοντας την τρύπα.

Το ίδιο ισχύει και για τις οπές όπου οι βίδες που συγκρατούν τον ίδιο το λαιμό στο σώμα του οργάνου. Δεν είναι απαραίτητο να τα κάνουμε, αφού δεν υπάρχουν βίδες για αυτή τη στερέωση, αλλά αν θέλουμε να το κάνουμε, δεν θα υπήρχε πρόβλημα.

ΣΗΜΑΝΤΙΚΟ: Αφήστε χώρο 5mm μεταξύ της έναρξης του ιστού και της έναρξης του πιρουνιού, γιατί σε αυτήν την τρύπα θα τοποθετηθεί το παξιμάδι.

Θα κολλήσουμε το παξιμάδι με κόλλα, στην κατεύθυνση που υποδεικνύει το σχήμα.

Τέλος, θα εισαγάγουμε τους 4 πείρους στις οπές που βρίσκονται στην αρχή του ιστού, κρατώντας κάθε πείρο με 2 κοντές βίδες όπως φαίνεται στην εικόνα.

Βήμα 10: Τοποθέτηση του Birdge

Τοποθέτηση του Birdge
Τοποθέτηση του Birdge
Τοποθέτηση του Birdge
Τοποθέτηση του Birdge

Η γέφυρα στερεώνεται με κόλληση και με τις δύο μακριές βίδες σε κεντρική θέση στο σώμα. Συνιστάται να σημειώσετε με ένα μολύβι τη σωστή θέση στο σώμα. Θα πάρουμε τις αποστάσεις που σημειώνονται στην εικόνα.

Θα εφαρμόσουμε κόλλα στην ένωση των δύο συστατικών. Στερεώνουμε τα δύο μέρη προσεκτικά με τη βοήθεια μιας βίδας σύσφιξης μέχρι να στεγνώσει ο σύνδεσμος. Θα κάνουμε τις δύο τρύπες για τις βίδες με τρυπάνι 1,5mm για ξύλο. Διορθώστε τη γέφυρα με τις δύο μακριές βίδες στο σώμα. Και τέλος, βάζουμε τα προστατευτικά καλύμματα στις κεφαλές των βιδών.

Βήμα 11: Συναρμολόγηση σώματος και λαιμού

Συναρμολόγηση σώματος και λαιμού
Συναρμολόγηση σώματος και λαιμού
Συναρμολόγηση σώματος και λαιμού
Συναρμολόγηση σώματος και λαιμού

Για να συναρμολογήσουμε τα δύο μέρη, έχουμε τρύπες στο κεφάλι του σώματος, όπου ο λαιμός θα ταιριάζει με δύο προεξοχές που έχει. Μπορούμε να τα κολλήσουμε με κόλλα ή με το πιστόλι θερμής τήξης. Για μεγαλύτερη στερέωση, μπορείτε να κάνετε τις τρύπες που βρίσκονται στο τέλος του πιρουνιού συντονισμού για να το ενώσετε με το σώμα.

Βήμα 12: Βάλτε τις χορδές Ukulele

Image
Image
Βάλτε τις χορδές Ukulele
Βάλτε τις χορδές Ukulele
Βάλτε τις χορδές Ukulele
Βάλτε τις χορδές Ukulele

Τέλος πρέπει να τοποθετήσουμε τις χορδές έτσι ώστε το όργανο μας να έχει τελειώσει.

Προηγουμένως θα εισάγουμε τους δακτυλίους στερέωσης των πείρων στις προεξοχές αυτών που περνούν από τον ιστό. Για να τοποθετήσουμε τις χορδές, πήραμε τις 4 χορδές που συνοδεύουν το κιτ. Πρώτα πρέπει να διακρίνετε κάθε συμβολοσειρά γιατί δεν είναι όλες ίδιες. Πρέπει να δέσετε το ένα άκρο κάθε χορδής (τα δύο χοντρά με κανονικό κόμπο και τα δύο λεπτά με διπλό) και να εισάγετε τις χορδές στις σχισμές της γέφυρας.

Στη συνέχεια, θα τοποθετήσουμε τις χορδές με τέτοιο τρόπο ώστε:

• Πρώτη θέση: Χορδή G (δεύτερη παχύτερη χορδή).

• Δεύτερη θέση: Χορδή C (παχύτερη χορδή).

• Τρίτη θέση: Χορδή Ε (δεύτερη λεπτότερη χορδή).

• Τέταρτη θέση: Μια χορδή (πιο λεπτή χορδή).

Περάστε τις χορδές στις οπές του παρεχόμενου βύσματος. Προσπαθήστε να διορθώσετε κάθε σχοινί δίνοντας δύο ή τρεις στροφές στον πείρο. Τεντώστε τις χορδές χωρίς να ασκήσετε υπερβολική δύναμη και ελέγξτε την απόσταση μεταξύ των χορδών και της σέλας.

Εάν έχετε οποιαδήποτε αμφιβολία για το πώς να το φτιάξετε, μπορείτε να βρείτε αυτό το σεμινάριο που σας εξηγεί πώς να βάλετε σωστά τις χορδές.

Βήμα 13: Δοκιμή

Δοκιμές
Δοκιμές
Δοκιμές
Δοκιμές

Τέλος, πρέπει να δούμε αν το ukulele έχει συναρμολογηθεί σωστά με τέτοιο τρόπο ώστε η ιδανική απόσταση στο πρώτο φρεάτιο να είναι 0,1mm και στο δωδέκατο να είναι περίπου 1,2mm.

Είναι απαραίτητο να συντονίσετε τις χορδές του ukulele. Σας συνιστώ αυτήν την εφαρμογή: GuitarTuna

Βήμα 14: Απολαύστε το

Τώρα, δεν έχετε παρά να απολαύσετε το ukulele σας.

Αν θέλετε να μάθετε περισσότερες πληροφορίες για εμάς, μπορείτε να μας βρείτε στη διεύθυνση:

Twitter: @Innovart_cc

Facebook: @Innovartcc

Instagram: @Innovart_cc

Ιστότοπος: Innovart.cc

Συνιστάται: