- Hardware richiesto:
- Capire la funzione Tone () di Arduino:
- Il file di intestazione pitches.h :
- Riproduzione di note musicali su Arduino:
- Schema e hardware:
- Spiegazione del programma Arduino:
- Funzionamento di questo circuito Arduino di Melody Player:
Arduino è un ottimo modo per semplificare e velocizzare i tuoi progetti di microcontrollore, grazie alla sua comunità di sviluppatori che hanno reso quasi tutto semplice. Ci sono molti progetti Arduino qui fuori che puoi provare e divertirti. Alcuni dei tuoi progetti potrebbero richiedere un'azione sonora per notificare qualcosa o semplicemente per impressionare gli spettatori. E se ti dicessi che quasi tutte le sigle che potrebbero essere suonate su un pianoforte possono essere imitate sul tuo Arduino con l'aiuto di un semplice programma e un altoparlante piezo economico?
In questo tutorial impareremo quanto sia semplice e facile suonare la melodia su Piezo Buzzer o Speaker utilizzando la funzione Arduino tone (). Alla fine di questo tutorial sarai in grado di suonare alcuni toni famosi di Pirati dei Caraibi, Crazy Frog, Super Mario e Titanic. Imparerai anche come suonare qualsiasi brano di musica per pianoforte con Arduino. Controlla il video alla fine.
Hardware richiesto:
- Arduino (qualsiasi versione - qui viene utilizzato UNO)
- Altoparlante piezoelettrico / cicalino o qualsiasi altro altoparlante da 8ohm.
- Breadboard
- Collegamento dei cavi
- Premi i pulsanti
- Resistenza da 1k (opzionale)
Capire la funzione Tone () di Arduino:
Prima di poter capire come funziona un tone () , dovremmo sapere come funziona un cicalino piezo. Potremmo aver imparato a conoscere i cristalli Piezo nella nostra scuola, non è altro che un cristallo che converte le vibrazioni meccaniche in elettricità o viceversa. Qui applichiamo una corrente (frequenza) variabile per la quale il cristallo vibra producendo suono. Quindi, per fare in modo che il cicalino Piezo emetta un po 'di rumore, dobbiamo far vibrare il cristallo elettrico Piezo, il tono e il tono del rumore dipendono dalla velocità con cui vibra il cristallo. Quindi il tono e il tono possono essere controllati variando la frequenza della corrente.
Ok, quindi come possiamo ottenere una frequenza variabile da Arduino ? È qui che entra in gioco la funzione tone (). Tone () può generare una frequenza particolare su un pin specifico. Se necessario, è possibile indicare anche la durata. La sintassi per tone () è
Sintassi tono (pin, frequenza) tono (pin, frequenza, durata) Parametri pin: il pin su cui generare il tono frequency: la frequenza del tono in hertz - unsigned int duration: la durata del tono in millisecondi (opzionale) - non firmato a lungo
I valori del pin possono essere qualsiasi dei tuoi pin digitali. Ho usato il pin numero 8 qui. La frequenza che può essere generata dipende dalla dimensione del timer nella tua scheda Arduino. Per UNO e la maggior parte delle altre schede comuni la frequenza minima che può essere prodotta è 31Hz e la frequenza massima che può essere prodotta è 65535Hz. Tuttavia noi umani possiamo sentire solo frequenze comprese tra 2000Hz e 5000 Hz.
Il file di intestazione pitches.h :
Ora sappiamo come produrre del rumore usando la funzione arduino tone () . Ma come facciamo a sapere che tipo di tono verrà generato per ciascuna frequenza?
Arduino ci ha fornito una tabella delle note che equipara ogni frequenza a un tipo di nota musicale specifico. Questa tabella delle note è stata originariamente scritta da Brett Hagman, sul cui lavoro è stato basato il comando tone () . Useremo questa tabella delle note per riprodurre i nostri temi. Se hai familiarità con gli spartiti dovresti essere in grado di dare un senso a questa tabella, per altri come me questi sono solo un altro blocco di codice.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 NOTE 52_define1 NOTE_GS1 52_define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 # 123 NOTE_BE2 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 2083 #define # NOTE_A3 220 #define3 NOTE_A3 220_def3 NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 # NOTE5define_def NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 # NOTAE619def #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 # 2489 #definedef NOTE_DS7 # 2489 #definedef NOTE_DS7 # 2794definedef NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Il codice sopra è fornito nel file di intestazione pitches.h in questo file zip , devi solo scaricare e includere questo file nel nostro codice Arduino come indicato alla fine di questo tutorial o utilizzare il codice fornito nel file zip.
Riproduzione di note musicali su Arduino:
Per suonare una melodia decente usando Arduino dovremmo sapere cosa costituisce queste melodie. I tre fattori principali richiesti per riprodurre un tema sono
- Nota valore
- Durata nota
- Tempo
Abbiamo il file di intestazione pitches.h per riprodurre qualsiasi valore di nota, ora dovremmo scoprire la sua durata specifica della nota per riprodurlo. Il tempo non è altro che la velocità con cui deve essere suonata la melodia. Una volta che conosci il valore della nota e la durata della nota puoi usarli con il tono () come
tono (pinName, valore nota, durata nota);
Per i toni riprodotti in questo tutorial ti ho fornito la nota Valore e Durata nota all'interno del file di intestazione "temi.h" utilizzando la quale puoi riprodurle nei tuoi progetti. Ma se hai un tono specifico nel tuo e vuoi riprodurlo nel tuo progetto continua a leggere…. Altrimenti salta questo argomento e passa al prossimo.
Per riprodurre un tono specifico devi ottenere gli spartiti di quella particolare musica e convertire gli spartiti in uno schizzo di Arduino leggendo il valore della nota e la durata della nota da esso. Se sei uno studente di musica sarebbe un gioco da ragazzi per te, altrimenti spendere un po 'di tempo e romperti la testa come ho fatto io. Ma alla fine della giornata, quando il tuo tono suona sul cicalino piezo, scoprirai che ne vale la pena.
Una volta che hai il valore della nota e la durata della nota, caricale nel programma all'interno del file di intestazione "temi.h" come mostrato di seguito
// ############## ** "HE IS A PIRATE" Theme song of Pirates of caribbean ** ############## // 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_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, 0, NOTE_A3, NOTE_C4, NOTE_B4, NOTE_C4, NOTE_B4, NOTE_C4, NOTE_B4 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_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE 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,4,8,4,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}; // ########### End of He è una canzone dei pirati ############# //
Il blocco di codice sopra mostra il valore e la durata della nota del tema “He is a Pirate” dal film Pirati dei Caraibi. Puoi aggiungere il tuo tema in modo simile in questo modo.
Schema e hardware:
Lo schema di questo progetto Arduino Tone Generator Project è mostrato nella figura seguente:
La connessione è piuttosto semplice, abbiamo un altoparlante piezo collegato al pin 8 e alla massa di Arduino tramite una resistenza da 1K. Questo resistore da 1k è un resistore limitatore di corrente, che viene utilizzato per mantenere la corrente entro i limiti di sicurezza. Abbiamo anche quattro interruttori per selezionare la melodia richiesta. Un'estremità dell'interruttore è collegata a massa e l'altra estremità è collegata rispettivamente ai pin 2, 3, 4 e 5. Gli interruttori avranno resistenze di pull up abilitate internamente utilizzando il software. Poiché il circuito è piuttosto semplice, può essere collegato utilizzando una breadboard come mostrato di seguito:
Spiegazione del programma Arduino:
Una volta compreso il concetto, il programma Arduino è piuttosto semplice. Il codice completo viene fornito alla fine del tutorial. Se non hai familiarità con l'aggiunta di file di intestazione, puoi scaricare il codice come file ZIP da qui e caricarlo direttamente sul tuo Arduino.
I due precedenti sono i file di intestazione che devono essere aggiunti. "Pitches.h" viene utilizzato per equiparare ogni nota musicale a una particolare frequenza e "themes.h" contiene il valore della nota e la durata della nota di tutti e quattro i toni.
#include "pitches.h" #include "themes.h"
Viene creata una funzione per riprodurre ogni tono quando richiesto. Qui quando la funzione Play_Pirates () viene chiamata, verrà riprodotto il tono "He is a Pirate". Questa funzione consiste nella funzione tone che produce la frequenza al pin numero 8. Il noTone (8) è chiamato per fermare la musica una volta che è stata riprodotta. Se vuoi suonare il tuo tono, cambia Pirates_note e Pirates_duration con i nuovi valori di nota e durata che hai salvato nel valore "themes.h"
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // converte la durata in un tono di ritardo (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Qui 1.05 è il tempo, aumenta per riprodurlo più lentamente delay (pauseBetweenNotes); noTone (8); }}
I pin 2, 3, 4 e 5 vengono utilizzati per selezionare il tono particolare da riprodurre. Questi pin sono tenuti alti per impostazione predefinita utilizzando le resistenze di pull up interne utilizzando la riga di codice sopra. Quando il pulsante viene premuto, viene abbassato a terra.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Il blocco di codice sottostante viene utilizzato per riprodurre la canzone quando viene premuto un pulsante. Legge il valore digitale di ciascun pulsante e quando si abbassa (zero) assume che il pulsante sia premuto e riproduce il rispettivo tono chiamando la funzione richiesta.
if (digitalRead (2) == 0) {Serial.println ("Selected -> 'He is a Pirate'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Selected -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Selected -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Selected -> 'He is a Pirate'"); Play_Pirates (); }
Funzionamento di questo circuito Arduino di Melody Player:
Una volta che il codice e l'hardware sono pronti, masterizza semplicemente il programma nel tuo Arduino e dovresti essere in grado di riprodurre il tono semplicemente premendo i pulsanti. Se hai problemi dai un'occhiata al tuo monitor seriale per il debug o usa la sezione dei commenti per segnalare il problema e sarò felice di aiutarti.
Il funzionamento completo del progetto è mostrato nel video sottostante. Spero che il progetto ti sia piaciuto e che lo userai in alcuni dei tuoi progetti o che crei un nuovo tono per il tuo progetto. Se sì, sentiti libero di condividere il tuo lavoro nella sezione commenti.