Mi sono accorto di non aver mai dedicato un articolo alla gestione del suono con Arduino
devo ammetterlo non sono un cultore della musica, sopratutto mi dicono che mi manca completamente il senso del ritmo e forse chi me lo dice ha ragione 🙂 deve essere questo il motivo per cui non ho dedicato al suono alcun articolo.
Ma come si dice? C’è sempre una prima volta.
Per questo tutorial puoi utilizzare lo sketch di esempio fornito con l’IDE Arduino: ToneMelody
Componenti
l’elenco del materiale questa volta è davvero piccola:
- n.1 scheda Arduino (2009, diecimila, uno, mega, mini, ….)
- n.1 altoparlante o speaker da 8ohm, in alternativa un cicalino
- n.1 resistenza da 100ohm, non necessario se usi un cicalino
Lo schema
Lo schema è riportato nell’articolo originale, ma puoi realizzarlo con colo un cicalino tipo quello presente nello Starter Kit Arduino 2 e senza la resistenza:
lo sketch
Per caricarlo dall’IDE segui il percorso: File -> Examples -> Digital -> ToneMelody ti si presenterà il seguente sketch:
/* Melody Plays a melody circuit: * 8-ohm speaker on digital pin 8 created 21 Jan 2010 modified 30 Aug 2011 by Tom Igoe This example code is in the public domain. http://arduino.cc/en/Tutorial/Tone */ #include "pitches.h" // notes in the melody: int melody[] = { NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4}; // note durations: 4 = quarter note, 8 = eighth note, etc.: int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 }; void setup() { // iterate over the notes of the melody: for (int thisNote = 0; thisNote < 8; thisNote++) { // to calculate the note duration, take one second // divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000/noteDurations[thisNote]; tone(8, melody[thisNote],noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // stop the tone playing: noTone(8); } } void loop() { // no need to repeat the melody. }
parti subito dalle prime linee successive al commento introduttivo:
linea 18: includi la classe pitches.h che contiene tra le altre cose l’elenco della codifica delle note che utilizza lo sketch;
linee 21-22: definisci la melodia, quella di esempio è realizzata con le note:
Costante | Frequanza |
NOTE_C4 | 262 |
NOTE_G3 | 196 |
NOTE_A3 | 220 |
NOTE_B3 | 247 |
puoi trovare in questo link l’associazione Costanti – Frequanze in Hz;
linea 25: definisci i tempi di durata di ciascuna nota, come puoi leggere nel commento alla linea precedente 8 vuol dire ottavo di nota e 4 quarto di nota.
linea 29: esegui un ciclo da 0 a 8, le note della melodia, utilizzando come cursore per spostarti lungo l’array della melodia e della durata la variabile thisNote;
linea 34: la durata della nota è espressa in quarti e ottavi di secondo, in arduino sai che un secondo è espresso in 1000 millisecondi, per cui la durata è data dalla formula: (1000/durata);
linea 35: usa il comando tone( pin, frequanza, durata ) per inviare il segnale al pin 8 di arduino con la frequenza desiderata e per il tempo specificato;
linea 39: calcola la variabile pauseBetweenNotes come (durata della nota * 1.30) ossia il 30% in più della durata della nota stessa;
linea 40: attendi il tempo appena calcolato tra una nota e la successiva;
linea 42: usa il comando noTone( pin ) per interrompere l’esecuzione della nota, senza questa linea la nota non sarebbe mai interrotta.
Lo sketch esegue una simpatica melodia, provalo e sarai piacevolmente colpito.
Nella ricerca di un esempio di melodia realizzata con Arduino da farti ascoltare per comprendere le potenzialità dei comandi tone, noTone, ecc… mi sono imbattuto in questo video:
Buon ascolto !!!
Prima di inserire un commento, per favore, leggi il regolamento
37 pings
Skip to comment form