- Απαιτείται υλικό:
- Κατανόηση της συνάρτησης Tone () του Arduino:
- Το αρχείο κεφαλίδας pitches.h :
- Παίζοντας μουσικές νότες για το Arduino:
- Σχηματικό και υλικό:
- Επεξήγηση προγράμματος Arduino:
- Εργασία αυτού του Melody Player Arduino Circuit:
Το Arduino είναι ένας εξαιρετικός τρόπος απλοποίησης και επιτάχυνσης των έργων μικροελεγκτή σας, χάρη στην κοινότητα προγραμματιστών που έχουν κάνει σχεδόν τα πάντα να φαίνονται απλά. Υπάρχουν πολλά έργα Arduino εδώ για να δοκιμάσετε και να διασκεδάσετε. Μερικά από τα έργα σας μπορεί να χρειαστούν κάποια ενέργεια για να ειδοποιήσουν κάτι ή απλώς για να εντυπωσιάσουν τους θεατές. Τι γίνεται αν σας είπα ότι σχεδόν όλα τα θεματικά τραγούδια που θα μπορούσαν να παιχτούν σε πιάνο μπορούν να μιμηθούν στο Arduino σας με τη βοήθεια ενός απλού προγράμματος και ενός φτηνού ηχείου Piezo;
Σε αυτό το σεμινάριο θα μάθουμε πόσο απλό και εύκολο είναι να παίξετε Melody σε Piezo Buzzer ή Speaker χρησιμοποιώντας τη λειτουργία Arduino tone (). Στο τέλος αυτού του σεμιναρίου θα μπορείτε να παίξετε μερικούς διάσημους τόνους των Pirates of Caribbean, Crazy Frog, Super Mario και Titanic. Θα μάθετε επίσης πώς να παίζετε οποιοδήποτε κομμάτι μουσικής πιάνου με τον Arduino. Ελέγξτε το βίντεο στο τέλος.
Απαιτείται υλικό:
- Arduino (οποιαδήποτε έκδοση - το UNO χρησιμοποιείται εδώ)
- Ηχείο Piezo / Buzzer ή οποιοδήποτε άλλο ηχείο 8ohm.
- Ψωμί
- Σύνδεση καλωδίων
- Πιέστε τα κουμπιά
- 1 k αντίσταση (προαιρετικό)
Κατανόηση της συνάρτησης Tone () του Arduino:
Προτού καταλάβουμε πώς λειτουργεί ένας τόνος () , πρέπει να γνωρίζουμε πώς λειτουργεί ένας βομβητής Piezo. Μπορεί να μάθαμε για τους κρυστάλλους Piezo στο σχολείο μας, δεν είναι παρά ένας κρύσταλλος που μετατρέπει τις μηχανικές δονήσεις σε ηλεκτρική ενέργεια ή το αντίστροφο. Εδώ εφαρμόζουμε ένα μεταβλητό ρεύμα (συχνότητα) για το οποίο ο κρύσταλλος δονείται δημιουργώντας έτσι ήχο. Ως εκ τούτου, για να κάνουμε τον βομβητή Piezo να κάνει κάποιο θόρυβο, πρέπει να κάνουμε τον ηλεκτρικό κρύσταλλο Piezo να δονείται, ο τόνος και ο τόνος του θορύβου εξαρτάται από το πόσο γρήγορα δονείται ο κρύσταλλος. Ως εκ τούτου, ο τόνος και το βήμα μπορούν να ελεγχθούν μεταβάλλοντας τη συχνότητα του ρεύματος.
Εντάξει, λοιπόν, πώς παίρνουμε μια μεταβλητή συχνότητα από το Arduino; Εδώ μπαίνει η λειτουργία τόνου (). Ο τόνος () μπορεί να δημιουργήσει μια συγκεκριμένη συχνότητα σε έναν συγκεκριμένο πείρο. Η χρονική διάρκεια μπορεί επίσης να αναφερθεί εάν απαιτείται. Η σύνταξη για τον τόνο () είναι
Τόνος σύνταξης (ακίδα, συχνότητα) τόνος (ακίδα, συχνότητα, διάρκεια) Καρφίτσα παραμέτρων: ο ακροδέκτης στον οποίο δημιουργείται η συχνότητα τόνου: η συχνότητα του τόνου σε hertz - διάρκεια χωρίς υπογραφή: η διάρκεια του τόνου σε χιλιοστά του δευτερολέπτου (προαιρετικά) - χωρίς υπογραφή πολύ
Οι τιμές του pin μπορεί να είναι οποιαδήποτε από την ψηφιακή σας καρφίτσα. Έχω χρησιμοποιήσει τον αριθμό pin 8 εδώ. Η συχνότητα που μπορεί να δημιουργηθεί εξαρτάται από το μέγεθος του χρονοδιακόπτη στην πλακέτα Arduino. Για το UNO και τους περισσότερους άλλους κοινούς πίνακες, η ελάχιστη συχνότητα που μπορεί να παραχθεί είναι 31Hz και η μέγιστη συχνότητα που μπορεί να παραχθεί είναι 65535Hz. Ωστόσο, εμείς οι άνθρωποι μπορούμε να ακούμε μόνο συχνότητες μεταξύ 2000Hz και 5000 Hz.
Το αρχείο κεφαλίδας pitches.h :
Τώρα, ξέρουμε πώς να παράγουμε λίγο θόρυβο χρησιμοποιώντας τη λειτουργία τόνος arduino () . Αλλά, πώς ξέρουμε τι είδους τόνος θα δημιουργηθεί για κάθε συχνότητα;
Ο Arduino μας έδωσε έναν πίνακα σημειώσεων που εξισώνει κάθε συχνότητα με έναν συγκεκριμένο τύπο μουσικής νότας. Αυτός ο πίνακας σημειώσεων γράφτηκε αρχικά από τον Brett Hagman, στο έργο του οποίου βασίστηκε η εντολή tone () . Θα χρησιμοποιήσουμε αυτόν τον πίνακα σημειώσεων για να παίξουμε τα θέματα μας. Αν είστε κάποιος εξοικειωμένος με την παρτιτούρα θα πρέπει να έχετε τη δυνατότητα να κατανοήσετε αυτό το τραπέζι, για άλλους σαν κι εμένα αυτά είναι απλά ένα άλλο μπλοκ κώδικα.
# καθορισμός ΣΗΜΕΙΩΣΗ_B0 31 # καθορισμός ΣΗΜΕΙΩΣΗ_C1 33 # καθορισμός ΣΗΜΕΙΩΣΗ_CS1 35 # καθορισμός ΣΗΜΕΙΩΣΗ_D1 37 # καθορισμός ΣΗΜΕΙΩΣΗ_DS1 39 # καθορισμός ΣΗΜΕΙΩΣΗ_E1 41 # καθορισμός ΣΗΜΕΙΩΣΗ_F1 44 # καθορισμός ΣΗΜΕΙΩΣΗ_FS1 46 # καθορισμός ΣΗΜΕΙΩΣΗ_G1 49 # καθορισμός ΣΗΜΕΙΩΣΗ_B1 62 # καθορισμός ΣΗΜΕΙΩΣΗ_C2 65 # καθορισμός ΣΗΜΕΙΩΣΗ_CS2 69 # καθορισμός ΣΗΜΕΙΩΣΗ_D2 73 # καθορισμός ΣΗΜΕΙΩΣΗ_DS2 78 # καθορισμός ΣΗΜΕΙΩΣΗ_E2 82 # καθορισμός ΣΗΜΕΙΩΣΗ_F2 87 # ορίστε ΣΗΜΕΙΩΣΗ_FS2 93 # ορίστε ΣΗΜΕΙΩΣΗ_G2 98 # ορίστε ΣΗΜΕΙΩΣΗ_122Συνεπίστερη # ορίστε ΣΗΜΕΙΩΣΗ_C3 131 # ορίστε ΣΗΜΕΙΩΣΗ_CS3 139 # ορίστε ΣΗΜΕΙΩΣΗ_D3 147 # ορίστε ΣΗΜΕΙΩΣΗ_DS3 156 # ορίστε ΣΗΜΕΙΩΣΗ_E3 165 # ορίστε ΣΗΜΕΙΩΣΗ_F3 175 # ορίστε ΣΗΜΕΙΩΣΗ_FS3 185 # ορίστε ΣΗΜΕΙΩΣΗ_FS3 185 # ορίστε ΣΗΜΕΙΩΣΗ_G3 196 # ορίστε ΣΗΜΕΙΩΣΗ_3_διόρθωση NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349# καθορισμός ΣΗΜΕΙΩΣΗ_FS4 370 # καθορισμός ΣΗΜΕΙΩΣΗ_G4 392 # καθορισμός ΣΗΜΕΙΩΣΗ_GS4 415 # καθορισμός ΣΗΜΕΙΩΣΗ_A4 440 # καθορισμός ΣΗΜΕΙΩΣΗ_AS4 466 # καθορισμός ΣΗΜΕΙΩΣΗ_B4 494 # ορίστε ΣΗΜΕΙΩΣΗ_C5 523 # ορίστε ΣΗΜΕΙΩΣΗ_C5 523 # ορίστε ΣΗΜΕΙΩΣΗ_CS5 554 # ορίστε ΣΗΜΕΙΩΣΗ_FS5 740 # καθορισμός ΣΗΜΕΙΩΣΗ_G5 784 # καθορισμός ΣΗΜΕΙΩΣΗ_GS5 831 # καθορισμός ΣΗΜΕΙΩΣΗ_Α5 880 # καθορισμός ΣΗΜΕΙΩΣΗ_AS5 932 # καθορισμός ΣΗΜΕΙΩΣΗ_B5 988 # καθορισμός ΣΗΜΕΙΩΣΗ_C6 1047 # ορίστε ΣΗΜΕΙΩΣΗ_C6 1047 # ορίστε ΣΗΜΕΙΩΣΗ_CS6 1109 # ορίστε ΣΗΜΕΙΩΣΗ_146Συνεχίστε_146 # καθορισμός ΣΗΜΕΙΩΣΗ_G6 1568 # καθορισμός ΣΗΜΕΙΩΣΗ_GS6 1661 # καθορισμός ΣΗΜΕΙΩΣΗ_A6 1760 # καθορισμός ΣΗΜΕΙΩΣΗ_AS6 1865 # καθορισμός ΣΗΜΕΙΩΣΗ_B6 1976 # καθορισμός ΣΗΜΕΙΩΣΗ_C7 2093 # ορίστε ΣΗΜΕΙΩΣΗ_CS7 2217 # ορίστε ΣΗΜΕΙΩΣΗ_CS7 2217 # ορίστε ΣΗΜΕΙΩΣΗ_D7 2349 # προσδιορίστε NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 # καθορισμός NOTE_AS73729 # καθορισμός NOTE_B7 3951 # καθορισμός NOTE_C8 4186 # καθορισμός NOTE_CS8 4435 # ορισμός NOTE_D8 4699 # καθορισμός NOTE_DS8 4978
Ο παραπάνω κώδικας δίνεται στο αρχείο κεφαλίδας pitches.h σε αυτό το αρχείο zip , απλώς πρέπει να κάνετε λήψη και να συμπεριλάβετε αυτό το αρχείο στον κώδικα Arduino όπως δίνεται στο τέλος αυτού του σεμιναρίου ή χρησιμοποιήστε τον κωδικό που δίνεται στο αρχείο zip.
Παίζοντας μουσικές νότες για το Arduino:
Για να παίξουμε μια αξιοπρεπή μελωδία χρησιμοποιώντας το Arduino πρέπει να γνωρίζουμε τι αποτελεί αυτές τις μελωδίες. Οι τρεις βασικοί παράγοντες που απαιτούνται για να παίξετε ένα θέμα είναι
- Σημείωση τιμής
- Σημείωση Διάρκεια
- Ρυθμός
Έχουμε το αρχείο κεφαλίδας pitches.h για να παίξουμε οποιαδήποτε τιμή σημείωσης, τώρα πρέπει να μάθουμε τη συγκεκριμένη διάρκεια της νότας για να την παίξουμε. Το Tempo δεν είναι παρά το πόσο γρήγορα πρέπει να παίζεται η μελωδία. Μόλις ξέρετε την τιμή Σημείωση και τη διάρκεια της Σημείωσης, μπορείτε να τις χρησιμοποιήσετε με τον τόνο () όπως
τόνος (pinName, Note Note, Note Διάρκεια);
Για τους ήχους που παίζονται σε αυτό το σεμινάριο σας έχω δώσει τη νότα αξία και τη διάρκεια της σημείωσης μέσα στο αρχείο κεφαλίδας "themes.h" χρησιμοποιώντας τα οποία μπορείτε να τα παίξετε στα έργα σας Αλλά αν έχετε κάποιο συγκεκριμένο τόνο στο δικό σας και θέλετε να το παίξετε στο έργο σας, διαβάστε…. Διαφορετικά, παραλείψτε αυτό το θέμα και πέστε στο επόμενο.
Για να παίξετε οποιονδήποτε συγκεκριμένο τόνο, πρέπει να λάβετε την παρτιτούρα της συγκεκριμένης μουσικής και να μετατρέψετε την παρτιτούρα σε σκίτσο Arduino διαβάζοντας την τιμή και τη διάρκεια της νότας από αυτήν. Αν είστε μαθητής μουσικής θα ήταν ένα κομμάτι κέικ για εσάς, αλλιώς περάσατε λίγο χρόνο και σπάστε το κεφάλι σας όπως εγώ. Αλλά στο τέλος της ημέρας όταν ο τόνος σας παίζει στο βομβητή Piezo θα βρείτε την προσπάθειά σας αξίζει τον κόπο.
Μόλις έχετε την τιμή και τη διάρκεια της νότας, φορτώστε τις στο πρόγραμμα μέσα στο αρχείο κεφαλίδας "themes.h" όπως φαίνεται παρακάτω
// ############## ** "HE IS A PIRATE" Θεματικό τραγούδι των Πειρατών της Καραϊβικής ** ############## // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4 NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4 NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_G4, NOTA_ 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}. int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,8,8,8,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8} · // ########### Το τέλος του είναι ένα τραγούδι πειρατή ############# //
Το παραπάνω μπλοκ κώδικα δείχνει την αξία και τη διάρκεια της νότας του θέματος "Αυτός είναι πειρατής" από την ταινία Pirates of the Caribbean. Μπορείτε να προσθέσετε το θέμα σας με παρόμοιο τρόπο.
Σχηματικό και υλικό:
Το σχήμα αυτού του έργου Arduino Tone Generator Project φαίνεται στο παρακάτω σχήμα:
Η σύνδεση είναι πολύ απλή, έχουμε ένα ηχείο Piezo το οποίο συνδέεται με τον ακροδέκτη 8 και τη γείωση του Arduino μέσω μιας αντίστασης 1K Αυτή η αντίσταση 1k είναι μια αντίσταση περιορισμού ρεύματος, η οποία χρησιμοποιείται για τη διατήρηση του ρεύματος εντός των ορίων ασφαλείας. Έχουμε επίσης τέσσερις διακόπτες για να επιλέξουμε την απαιτούμενη μελωδία. Το ένα άκρο του διακόπτη συνδέεται στη γείωση και το άλλο άκρο συνδέεται στους ακροδέκτες 2, 3, 4 και 5 αντίστοιχα. Οι διακόπτες θα έχουν ενεργοποιημένες εσωτερικές αντιστάσεις χρησιμοποιώντας το λογισμικό. Δεδομένου ότι το κύκλωμα είναι πολύ απλό, μπορεί να συνδεθεί χρησιμοποιώντας μια πλακέτα ψωμιού όπως φαίνεται παρακάτω:
Επεξήγηση προγράμματος Arduino:
Μόλις καταλάβετε την ιδέα, το πρόγραμμα Arduino είναι αρκετά απλό. Ο πλήρης κωδικός δίνεται στο τέλος του σεμιναρίου. Εάν δεν είστε εξοικειωμένοι με την προσθήκη αρχείων κεφαλίδας, μπορείτε να κατεβάσετε τον κώδικα ως αρχείο ZIP από εδώ και να τον ανεβάσετε απευθείας στο Arduino.
Τα δύο παραπάνω είναι τα αρχεία κεφαλίδας που πρέπει να προστεθούν. Το "pitches.h" χρησιμοποιείται για την εξίσωση κάθε μουσικής νότας με μια συγκεκριμένη συχνότητα και το "θέματα.h" περιέχει την αξία της νότας και τη διάρκεια της νότας και των τεσσάρων τόνων.
#include "pitches.h" #include "θέματα.h"
Δημιουργείται μια λειτουργία για αναπαραγωγή κάθε τόνου όταν απαιτείται Εδώ, όταν η λειτουργία Play_Pirates () ονομάζεται "Αυτός είναι πειρατής" θα παιχτεί. Αυτή η λειτουργία αποτελείται από τη λειτουργία τόνου που παράγει τη συχνότητα στον αριθμό pin 8. Ο NoTone (8) καλείται να σταματήσει τη μουσική μετά την αναπαραγωγή του. Αν θέλετε να παίξετε το δικό σας τόνο, να αλλάξετε την Pirates_note και Pirates_duration στα νέα σημείωση και τη διάρκεια αξίες που έχετε αποθηκεύσει στο «themes.h» αξία
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // μετατροπή διάρκειας σε τόνο καθυστέρησης χρόνου (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Εδώ το 1.05 είναι tempo, αύξηση για να το παίξετε πιο αργή καθυστέρηση (pauseBetweenNotes). noTone (8); }}
Οι ακίδες 2, 3, 4 και 5 χρησιμοποιούνται για την επιλογή του συγκεκριμένου τόνου που θα παιχτεί. Αυτές οι ακίδες διατηρούνται ψηλά από προεπιλογή χρησιμοποιώντας τις εσωτερικές αντιστάσεις έλξης χρησιμοποιώντας την παραπάνω γραμμή κώδικα. Όταν πατηθεί το κουμπί, τραβιέται προς τα κάτω.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Το παρακάτω μπλοκ κώδικα χρησιμοποιείται για την αναπαραγωγή του τραγουδιού όταν πατηθεί ένα κουμπί. Διαβάζει την ψηφιακή τιμή κάθε κουμπιού και όταν πέσει χαμηλά (μηδέν) υποθέτει ότι το κουμπί πατηθεί και παίζει τον αντίστοιχο τόνο καλώντας την απαιτούμενη λειτουργία.
if (digitalRead (2) == 0) {Serial.println ("Selected -> 'Είναι πειρατής'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Selected -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Selected -> 'Mario UnderWorld'"); Παίξτε_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Selected -> 'Αυτός είναι πειρατής'"); Play_Pirates (); }
Εργασία αυτού του Melody Player Arduino Circuit:
Μόλις ο κωδικός και το υλικό σας είναι έτοιμο, απλώς γράψτε το πρόγραμμα στο Arduino σας και θα πρέπει να μπορείτε να παίξετε τον τόνο πατώντας απλά τα κουμπιά. Εάν έχετε προβλήματα, ρίξτε μια ματιά στη σειριακή οθόνη για εντοπισμό σφαλμάτων ή χρησιμοποιήστε την ενότητα σχολίων για να αναφέρετε το πρόβλημα και θα χαρώ να σας βοηθήσω.
Η πλήρης εργασία του έργου φαίνεται στο παρακάτω βίντεο. Ελπίζω να σας άρεσε το έργο και να το χρησιμοποιούσατε σε κάποιο από τα έργα σας ή να δημιουργήσετε έναν νέο τόνο για το έργο σας Εάν ναι, μη διστάσετε να μοιραστείτε την εργασία σας στην ενότητα σχολίων.