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

Digitize a Song With Arduino: 6 Βήματα
Digitize a Song With Arduino: 6 Βήματα

Βίντεο: Digitize a Song With Arduino: 6 Βήματα

Βίντεο: Digitize a Song With Arduino: 6 Βήματα
Βίντεο: Using ISD1700 Sound Audio recorder with Arduino Code to record, play, erase sound 2024, Νοέμβριος
Anonim
Digηφιοποιήστε ένα τραγούδι με το Arduino
Digηφιοποιήστε ένα τραγούδι με το Arduino

Wantedθελα να δημιουργήσω ένα έργο που να συνδυάζει δύο από τα αγαπημένα μου θέματα: επιστήμη και μουσική. Σκέφτηκα όλους τους τρόπους με τους οποίους θα μπορούσα να συνδυάσω αυτούς τους δύο τομείς και, σκέφτηκα ότι θα ήταν ενδιαφέρον να φτιάξω ένα Arduino να παίξει τη γούνα Elise ενώ εμφανίζαμε το ύψος της νότας στο Hertz. Τώρα, ας αρχίσουμε να χτίζουμε!

Θα χρειαστείτε ένα Arduino Uno ή Mega, πολλά καλώδια για jumper, ένα βομβητή Piezo, ένα breadboard, μια οθόνη LCD 16*2 με όλες τις καρφίτσες των υαλοκαθαριστήρων στη θέση τους και ένα ποτενσιόμετρο 10k (μπορεί επίσης να ακούσετε να αναφέρονται ως ποτμέτρα). Είναι καλύτερο να συγκεντρώσουμε όλα αυτά τα εφόδια πριν ξεκινήσουμε την κατασκευή.

Βήμα 1: Μετατρέψτε τη μουσική παρτιτούρα σε ψηφιακές σημειώσεις: Τιμές καθυστέρησης

Μετατρέψτε τη μουσική παράσταση σε ψηφιακές σημειώσεις: Τιμές καθυστέρησης
Μετατρέψτε τη μουσική παράσταση σε ψηφιακές σημειώσεις: Τιμές καθυστέρησης

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

Βήμα 2: Μετατρέψτε τη μουσική παράσταση σε ψηφιακές σημειώσεις: Τιμές Hertz

Μετατρέψτε τη μουσική παράσταση σε ψηφιακές σημειώσεις: Τιμές Hertz
Μετατρέψτε τη μουσική παράσταση σε ψηφιακές σημειώσεις: Τιμές Hertz

Πριν ξεκινήσω αυτό το βήμα, επιτρέψτε μου να ορίσω ορισμένους τεχνικούς όρους. Η "αξία" μιας νότας μπορεί να χρησιμοποιηθεί εναλλακτικά με τις λέξεις "βήμα", "αξία" και "σημείωση". Τώρα, πρέπει να διαβάσετε κάθε νότα του τραγουδιού από την παρτιτούρα. Στη συνέχεια, θα πρέπει να μεταφράσετε κάθε νότα σε Hertz χρησιμοποιώντας ένα τραπέζι μουσικής σε Hertz, το οποίο μπορείτε εύκολα να βρείτε στο διαδίκτυο. Ένα πράγμα που πρέπει να θυμάστε είναι ότι το μεσαίο C αναφέρεται ως C4 στο τραπέζι και μια οκτάβα υψηλότερο είναι το C5, και ούτω καθεξής. Μόλις όλες αυτές οι σημειώσεις μεταγραφούν σε Hertz, θα τοποθετήσετε τις τιμές στον τόνο της συνάρτησης (x, y, z). όπου X είναι ο αριθμός pin ή const int, ένας τρόπος καθορισμού μεταβλητών που θα εξηγήσω αργότερα. Y θα είναι η τιμή Hertz που μόλις μεταγράψατε και Z θα είναι η διάρκεια της νότα σε χιλιοστά του δευτερολέπτου στρογγυλοποιημένη στο πλησιέστερο εκατοστό. Η καθυστέρηση(); τιμές θα είναι η διάρκεια της σημείωσης. Τώρα, ας σχεδιάσουμε το κύκλωμα που μπορεί να παίξει τη μουσική.

Βήμα 3: Σχεδιασμός κυκλωμάτων

Σχεδιασμός κυκλωμάτων
Σχεδιασμός κυκλωμάτων

Τώρα που μεταφράσαμε όλες τις σημειώσεις σε ψηφιακές τιμές που μπορεί να καταλάβει ένας υπολογιστής, ήρθε η ώρα να δημιουργήσουμε το κύκλωμα. Ξεκινήστε παίρνοντας ένα breadboard και τοποθετώντας την οθόνη LCD με την πρώτη καρφίτσα (GND) στη σειρά 14. Τοποθετήστε το βομβητή όπου θέλετε και τοποθετήστε ένα ποτενσιόμετρο δίπλα του. Ο στόχος είναι να ευθυγραμμιστούν τα πάντα, να ελαχιστοποιηθεί η ακαταστασία των καλωδίων. Τοποθετήστε το Arduino δίπλα στο breadboard και συνδέστε τον πείρο 5v στη θετική ράγα του breadboard και τον πείρο γείωσης στην αρνητική ράγα. Τώρα, είμαστε έτοιμοι να συνδέσουμε τους βραχυκυκλωτήρες μεταξύ του Arduino και των εξαρτημάτων.

Τώρα, ας μιλήσουμε για τις ακίδες στην οθόνη LCD και πώς να τις συνδέσετε.

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

Το VCC σημαίνει Voltage at the Common Collector και εδώ συνδέετε την πηγή ισχύος 5 βολτ σας (τη θετική ράγα ισχύος).

Το VO σημαίνει Αντίθεση, συνδέστε το στη μεσαία ακίδα του ποτενσιόμετρου. Συνδέστε τον αριστερό πείρο του ποτενσιόμετρου στη ράγα θετικής ισχύος και τον δεξιό πείρο στη ράγα γείωσης.

Το RS σημαίνει Καταχώρηση επιλογής και αυτό χρησιμοποιείται από το Arduino για να πει στην οθόνη πού να αποθηκεύσει δεδομένα. Συνδέστε αυτόν τον πείρο στην καρφίτσα 12 στο Arduino.

Το RW σημαίνει καρφίτσα ανάγνωσης/εγγραφής, το οποίο το Arduino χρησιμοποιεί για να ελέγξει εάν η οθόνη δείχνει αυτό που έχετε προγραμματίσει να εμφανίζεται. Συνδέστε αυτόν τον πείρο στην αρνητική ράγα στην σανίδα ψωμιού.

Το E σημαίνει Ενεργοποίηση, το οποίο λέει στην LCD ποια εικονοστοιχεία πρέπει να ενεργοποιήσει (ενεργοποιήσει) ή να απενεργοποιήσει (απενεργοποιήσει). Συνδέστε αυτόν τον πείρο στον ακροδέκτη Arduino 11.

Οι D4, D5, D6 και D7 είναι ακίδες εμφάνισης που ελέγχουν τους χαρακτήρες και τα γράμματα που εμφανίζονται. Συνδέστε τα στις καρφίτσες Arduino 5, 4, 3 και 2, αντίστοιχα.

Το pin A, μερικές φορές με την ένδειξη LED, είναι η άνοδος LED για τον οπίσθιο φωτισμό. Συνδέστε το στη ράγα θετικής ισχύος με σύρμα ή με αντίσταση 220 ohm. Η αντίσταση είναι καλύτερη για μεγαλύτερη χρήση καθώς εξοικονομεί LCD, αλλά αν η συσκευή δεν πρόκειται να χρησιμοποιηθεί μέρα και νύχτα, δεν χρειάζεστε την αντίσταση.

Ο πείρος Κ, μερικές φορές επίσης (με σύγχυση) επισημαίνεται με LED, είναι ο πείρος γείωσης LED. Συνδέστε το με τη ράγα γείωσης.

Βήμα 4: Μεταφόρτωση κώδικα: Πώς να το κάνετε

Συνδέστε το Arduino στο USB του υπολογιστή σας. Ανεβάστε τον ακόλουθο κώδικα χρησιμοποιώντας τον προγραμματιστή Arduino IDE.

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

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal LCD (rs, en, d4, d5, d6, d7);

void setup () {

// ρυθμίστε τον αριθμό των στηλών και των σειρών LCD: lcd.begin (16, 2); // Εκτυπώστε ένα μήνυμα στην οθόνη LCD. lcd.print ("Hertz Pitch:!"); καθυστέρηση (1000)? void loop () {// αναπαραγωγή e4 καθυστέρηση (600); // παύση για τόνο 0,6 δευτερολέπτων (10, 329,63, 300). // αναπαραγωγή e στο βομβητή στην ακίδα 10, τελευταία για 0,3 δευτ. 329.63 "); // εμφάνιση μηνύματος στην οθόνη LCD" 329.63"

καθυστέρηση (350), // καθυστέρηση για 0,35 δευτερόλεπτα

lcd.clear (); // διαγραφή LCD και επαναφορά για το επόμενο μήνυμα // αναπαραγωγή ήχου d4# (10, 311.13, 300). lcd.print ("311.13"); καθυστέρηση (350)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (350)? lcd.clear (); // αναπαραγωγή d4# τόνος (10, 311.13, 300); lcd.print ("311.13"); καθυστέρηση (350)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (350)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 300). lcd.print ("246.94"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου d4 (10, 293.66, 300). lcd.print ("293.66"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 300). lcd.print ("261.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου a3 (10, 220, 900). lcd.print ("220.0"); καθυστέρηση (1000)? lcd.clear (); // line60 // helpsave // avrdude.failure.eeprom // play d3 tone (10, 146.83, 300); lcd.print ("146.63"); καθυστέρηση (350)? lcd.clear (); // αναπαραγωγή τόνου f3 (10, 174,61, 300). lcd.print ("174.61"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου a3 (10, 220, 300). lcd.print ("220"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 900). lcd.print ("246.94"); καθυστέρηση (1000)? lcd.clear ();

// αναπαραγωγή e3

τόνος (10, 164,81, 300). lcd.print ("164.81"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου g3# (10, 207.65, 300); lcd.print ("207.65"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 300). lcd.print ("246.94"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 900). lcd.print ("261.63"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή e tone (10, 164.81, 300). lcd.print ("164.81"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή d4# τόνος (10, 311.13, 300); lcd.print ("311.13"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή d4# τόνος (10, 311.13, 300); lcd.print ("311.13"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 300). lcd.print ("246.94"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου d4 (10, 293.66, 300). lcd.print ("293.66"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 300). lcd.print ("261.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου a3 (10, 220, 900). lcd.print ("220.0"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου d3 (10, 146,83, 300). lcd.print ("146.83"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου f3 (10, 174,61, 300). // eeprom 20-6 yesno, flash 65--0 noyes lcd.print ("174.61"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου a3 (10, 220, 300). lcd.print ("220.0"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 900). lcd.print ("246.94"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου f3 (10, 174,61, 300). lcd.print ("174.61"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 300). lcd.print ("261.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 300). lcd.print ("246.94"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου a3 (10, 220, 900). lcd.print ("220.0"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 300). lcd.print ("246.94"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 300). lcd.print ("261.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου d4 (10, 293.66, 300). lcd.print ("293.66"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 900). lcd.print ("329.63"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου g3 (10, 196, 300). lcd.print ("196.0"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου f4 (10, 349,23, 300). lcd.print ("349.23"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,23, 300). lcd.print ("329.23"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου d4 (10, 293,63, 900). lcd.print ("293.63"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου e3 (10, 164,81, 300). lcd.print ("164.81"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου d4 (10, 293,63, 300). lcd.print ("293.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 900). lcd.print ("261.63"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου d3 (10, 146,83, 300). lcd.print ("146.83"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου d4 (10, 293,63, 300). lcd.print ("293.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 300). lcd.print ("261.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 900). lcd.print ("246.94"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή d4# τόνος (10, 311.13, 300); lcd.print ("311.13"); καθυστέρηση (350)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (350)? lcd.clear (); // αναπαραγωγή ήχου d4# (10, 311.13, 300); lcd.print ("311.13"); καθυστέρηση (350)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (350)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 300). lcd.print ("246.94"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου d4 (10, 293.66, 300). lcd.print ("293.66"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 300). lcd.print ("261.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου a3 (10, 220, 900). lcd.print ("220.0"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου d3 (10, 146,83, 300). lcd.print ("146.83"); καθυστέρηση (350)? lcd.clear (); // αναπαραγωγή τόνου f3 (10, 174,61, 300). lcd.print ("174.61"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου a3 (10, 220, 300). lcd.print ("220.0"); καθυστέρηση (400)? // αναπαραγωγή b3 lcd.clear (); τόνος (10, 246,94, 900); lcd.print ("246.94"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου e3 (10, 164,81, 300). lcd.print ("164.81"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου g#3 (10, 207.65, 300). lcd.print ("207.65"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 300). lcd.print ("246.94"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 900). lcd.print ("261.63"); καθυστέρηση (1000)? καθυστέρηση (300)? lcd.clear (); // αναπαραγωγή τόνου e3 (10, 164,81, 300). lcd.print ("164.81"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή d4# τόνος (10, 311.13, 300); lcd.print ("311.13"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή ήχου d4# (10, 311.13, 300); lcd.print ("311.13"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου e4 (10, 329,63, 300). lcd.print ("329.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 300). lcd.print ("246.94"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου d4 (10, 293.66, 300). lcd.print ("293.66"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 300). lcd.print ("261.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου a3 (10, 220, 900). lcd.print ("220.0"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου d3 (10, 146,83, 300). lcd.print ("146.83"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου f3 (10, 174,61, 300). lcd.print ("174.61"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου a3 (10, 220, 300). lcd.print ("220.0"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 900). lcd.print ("246.94"); καθυστέρηση (1000)? lcd.clear (); // αναπαραγωγή τόνου f3 (10, 174,61, 300). lcd.print ("174.61"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου c4 (10, 261.63, 300). lcd.print ("261.63"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου b3 (10, 246,94, 300). lcd.print ("246.94"); καθυστέρηση (400)? lcd.clear (); // αναπαραγωγή τόνου a3 (10, 220, 900). lcd.print ("220.0"); καθυστέρηση (1000)? lcd.clear (); }

Βήμα 5: Μεταφόρτωση κώδικα: Τι σημαίνει όλο αυτό;

Ας ορίσουμε ορισμένες συναρτήσεις στα αγγλικά, ώστε να κατανοήσετε τον κώδικα.

τόνος (x, y, z); = παίξτε έναν τόνο με ένα ύψος y Hertz, σε έναν βομβητή στο pin x, για z χιλιοστά του δευτερολέπτου.

lcd.print ("XYZ"); = εκτυπώστε ένα μήνυμα με τους χαρακτήρες XYZ στην οθόνη LCD. (π.χ. εμφάνιση του βήματος Hertz)

καθυστέρηση (x)? = παύση για x χιλιοστά του δευτερολέπτου.

const int X = Y = ορίστε μια σταθερή μεταβλητή X στο pin Y και χρησιμοποιήστε είτε το X είτε το Y για να αναθέσετε εργασίες στη συσκευή.

lcd.clear (); = εκκαθάριση της οθόνης LCD και επαναφορά για νέα οθόνη

pinMode (X, OUTPUT); = ορίστε τον ακροδέκτη X για λειτουργία εξόδου

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

Βήμα 6: Ολοκληρώθηκε !

Πεπερασμένος!!!
Πεπερασμένος!!!
Πεπερασμένος!!!
Πεπερασμένος!!!

Είτε έχετε ένα Arduino που παίζει Fur Elise και εμφανίζει τις τιμές των σημειώσεων σε Hertz, είτε έχετε δημιουργήσει ένα Arduino που παίζει τη μελωδία του τραγουδιού που επιλέξατε και εμφανίζει κείμενο που θέλετε να εμφανιστεί. Σας ευχαριστώ που επισκεφτήκατε αυτό το σεμινάριο και ελπίζω σε αυτό το έργο στο Arduino.

Συνιστάται: