- Maquinari necessari:
- Comprensió de la funció Tone () d'Arduino:
- El fitxer de capçalera pitches.h :
- Reproducció de notes musicals a Arduino:
- Esquema i maquinari:
- Explicació del programa Arduino:
- Funcionament d'aquest circuit Arduino de Melody Player:
Arduino és una manera excel·lent de simplificar i accelerar els vostres projectes de microcontroladors, gràcies a la seva comunitat de desenvolupadors que han fet que gairebé tot sembli senzill. Hi ha molts projectes Arduino aquí perquè pugueu provar i divertir-vos. És possible que alguns dels vostres projectes necessitin accions sonores per notificar alguna cosa o simplement per impressionar els espectadors. Què passa si us digui que gairebé qualsevol tema que es pugui reproduir al piano es pot imitar al vostre Arduino amb l'ajut d'un programa senzill i un altaveu Piezo barat?
En aquest tutorial aprendrem el fàcil i senzill de reproduir Melody en Piezo Buzzer o Speaker mitjançant la funció Arduino tone (). Al final d’aquest tutorial podreu reproduir alguns tons famosos de Pirates of Caribbean, Crazy Frog, Super Mario i Titanic. També aprendràs a tocar qualsevol peça de música de piano amb Arduino. Consulteu el vídeo al final.
Maquinari necessari:
- Arduino (aquí es fa servir qualsevol versió - UNO)
- Altaveu / zumbador piezoelèctric o qualsevol altre altaveu de 8ohm.
- Taula de pa
- Connexió de cables
- Polsadors
- 1 k resistència (opcional)
Comprensió de la funció Tone () d'Arduino:
Abans de poder entendre com funciona un to () hem de saber com funciona un timbre Piezo. Podríem haver après sobre els cristalls piezoelèctrics a la nostra escola, no és res més que un cristall que converteix les vibracions mecàniques en electricitat o viceversa. Aquí apliquem un corrent (freqüència) variable per al qual el cristall vibra produint so. Per tant, per fer que el brunzidor piezoelèctric faci soroll, hem de fer vibrar el cristall elèctric piezoelèctric, el to i el to del soroll depèn de la velocitat amb què el cristall vibri. Per tant, el to i el to es poden controlar variant la freqüència del corrent.
D’acord, doncs, com obtenim una freqüència variable d’Arduino ? Aquí és on entra la funció tone (). El tone () pot generar una freqüència particular en un pin específic. També es pot esmentar la durada del temps, si cal. La sintaxi de tone () és
To de sintaxi (pin, freqüència) to (pin, freqüència, durada) Paràmetres pin: pin en què es genera la freqüència del to: la freqüència del to en hertz - durada int sense signatura: la durada del to en mil·lisegons (opcional) - sense signar llarg
Els valors del pin poden ser qualsevol dels vostres pins digitals. He utilitzat el pin número 8 aquí. La freqüència que es pot generar depèn de la mida del temporitzador de la placa Arduino. Per a UNO i la majoria de les altres plaques comunes, la freqüència mínima que es pot produir és de 31Hz i la freqüència màxima que es pot produir és de 65535Hz. No obstant això, els humans només podem escoltar freqüències entre 2000Hz i 5000Hz.
El fitxer de capçalera pitches.h :
Ara sabem com produir una mica de soroll mitjançant la funció de toni arduino () . Però, com sabem quin tipus de to es generarà per a cada freqüència?
Arduino ens ha proporcionat una taula de notes que equipara cada freqüència a un tipus de nota musical específic. Aquesta taula de notes va ser escrita originalment per Brett Hagman, en el treball del qual es basava l'ordre tone () . Utilitzarem aquesta taula de notes per reproduir els nostres temes. Si sou algú familiaritzat amb les partitures, hauríeu de poder donar sentit a aquesta taula, per a altres com jo, això és només un bloc de codi més.
#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 52 #define NOTE_A1 55 #define NOTE_ 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 110 #define NOTE_AS2 117 #define #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 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define 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 587 #define NOTE_DS5 622 #define NOTA_define 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 #define NOTE_DS6 1245 #define #DE_6 #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 #define NOTE_E7 2637 #define 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
El codi anterior es dóna al fitxer de capçalera pitches.h d’aquest fitxer zip , només heu de descarregar i incloure aquest fitxer al nostre codi Arduino tal com es dóna al final d’aquest tutorial o utilitzar el codi que es mostra al fitxer zip.
Reproducció de notes musicals a Arduino:
Per reproduir una melodia decent amb Arduino, hem de saber què constitueixen aquestes melodies. Els tres factors principals necessaris per reproduir un tema són
- Nota del valor
- Durada de la nota
- Tempo
Tenim el fitxer de capçalera pitches.h per reproduir qualsevol valor de nota, ara hauríem d’esbrinar la seva durada de nota específica per reproduir-la. El tempo no és res més que la rapidesa amb què s’ha de tocar la melodia. Un cop conegut el valor de la nota i la durada de la nota, podeu utilitzar-los amb el to () com
to (pinName, Valor de la nota, Durada de la nota);
Per als tons reproduïts en aquest tutorial, us he donat la nota Valor i durada de la nota dins del fitxer de capçalera "themes.h" amb el qual podeu reproduir-los en els vostres projectes. Però si teniu algun to específic a la vostra mina i voleu reproduir-lo al vostre projecte, seguiu llegint… Altrament, ometeu aquest tema i aneu al següent.
Per reproduir qualsevol to específic, heu d’aconseguir la partitura d’aquesta música en particular i convertir la partitura en esbós Arduino llegint el valor de la nota i la durada de la nota. Si sou estudiant de música, seria un tros de pastís per a vosaltres; en cas contrari, passaria una estona i us trencaria el cap com jo. Però al final del dia, quan es toqui el to del timbre Piezo, trobareu la pena.
Un cop tingueu el valor de la nota i la durada de la nota, carregueu-los al programa dins del fitxer de capçalera "themes.h", tal com es mostra a continuació
// ############## ** ** ÉS UN PIRATA "Cançó temàtica de Pirates del Carib ** ############### // int Pirates_note = {NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA, NOTA, NOTA, NOTA, NOTA, NOTA_A3, NOTA_C4, NOTA_D4, NOTA_D4, NOTA_D4, NOTA_E4, NOTA_F4, NOTA_F4, NOTA_F4, NOTA_G4, NOTA_E4, NOTA_E4, NOTA_D4, NOTA_4, NOTA_C4, NOTA_D4, 0, NOTA_3, NOTA_4, NOTA, NOTA, NOTA, NOTA, NOTA, 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_A, 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 is a Pirate song ############## //
El bloc de codi anterior mostra el valor de la nota i la durada de la nota del tema "Ell és un pirata" de la pel·lícula Pirates del Carib. Podeu afegir el vostre tema de manera similar a aquesta.
Esquema i maquinari:
La figura següent mostra l’ esquema d’aquest projecte Arduino Tone Generator Project.

La connexió és bastant senzilla, tenim un altaveu piezoelèctric que està connectat al pin 8 i a la terra de l’Arduino mitjançant una resistència de 1K. Aquesta resistència de 1 k és una resistència de limitació de corrent, que s’utilitza per mantenir el corrent dins dels límits de seguretat. També tenim quatre commutadors per seleccionar la melodia necessària. Un extrem del commutador està connectat a terra i l’altre extrem està connectat als pins 2, 3, 4 i 5 respectivament. Els commutadors tindran habilitades les resistències pull up internament mitjançant el programari. Com que el circuit és bastant senzill, es pot connectar mitjançant una placa de pa, com es mostra a continuació:

Explicació del programa Arduino:
Un cop entès el concepte, el programa Arduino és força senzill. El codi complet es dóna al final del tutorial. Si no esteu familiaritzat amb afegir fitxers de capçalera, podeu descarregar el codi com a fitxer ZIP des d’aquí i penjar-lo directament al vostre Arduino.
Els dos anteriors són els fitxers de capçalera que cal afegir. "Pitches.h" s'utilitza per equiparar cada nota musical a una freqüència concreta i "themes.h" conté el valor de la nota i la durada de la nota de tots els quatre tons.
#include "pitches.h" #include "themes.h"
Es crea una funció per reproduir cada to quan sigui necessari. Aquí, quan s'anomeni la funció Play_Pirates () , es reproduirà el to "He is a Pirate". Aquesta funció consisteix en la funció de to que produeix la freqüència al número 8. El noTone (8) es diu per aturar la música un cop es reprodueix. Si voleu reproduir el vostre propi to, canvieu la Pirates_note i Pirates_duration per la nova nota i els valors de durada que heu desat al valor "themes.h"
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // convertir la durada en to de retard de temps (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1,05; // Aquí 1.05 és el tempo, augmenta per reproduir-lo més lentament (pausaBetweenNotes); noTone (8); }}
Els passadors 2, 3, 4 i 5 s’utilitzen per seleccionar el to concret que es vol reproduir. Aquests pins es mantenen alts per defecte mitjançant les resistències internes de tracció mitjançant la línia de codi anterior. Quan es prem el botó, es tira cap a terra.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
A sota del bloc de codi s’utilitza per reproduir la cançó quan es prem un botó. Es llegeix el valor digital de cada botó i quan es fa baix (zero) assumeix que es prem el botó i toca el to corresponent trucant a la funció requerida.
if (digitalRead (2) == 0) {Serial.println ("Seleccionat -> 'Ell és un pirata'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Seleccionat -> 'Granota boja'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Seleccionat -> 'Mario UnderWorld'"); Reprodueix_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Seleccionat -> 'Ell és un pirata'"); Play_Pirates (); }
Funcionament d'aquest circuit Arduino de Melody Player:
Un cop el codi i el maquinari estiguin preparats, només cal gravar el programa al vostre Arduino i hauríeu de poder tocar el to simplement prement els botons. Si teniu algun problema, mireu el vostre monitor sèrie per depurar-lo o utilitzeu la secció de comentaris per informar del problema i estaré encantat d'ajudar-vos.

El funcionament complet del projecte es mostra al vídeo següent. Espero que us hagi agradat el projecte i l’utilitzeu en alguns dels vostres projectes o creeu un to nou per al vostre projecte. Si és així, no dubteu a compartir el vostre treball a la secció de comentaris.
