Corso base di Arduino: musica con Arduino

Arduino, come tutti gli altri microcontrollori, può generare note musicali dalle sue uscite. Esistono diversi metodi per fare ciò. Esaminiamo alcuni di essi.

Avatar di Elettronica Open Source

a cura di Elettronica Open Source

banner prova1

Produrre note acustiche in elettronica è davvero molto semplice. È sufficiente far vibrare qualsiasi dispositivo sonoro (altoparlante, buzzer, etc.) molte volte al secondo, per generare dei suoni. E Arduino non esclude tale possibilità. Lo scopo finale è quello di accendere e spegnere, molto velocemente, una porta in uscita alla quale viene collegato il dispositivo di riproduzione sonora. È necessario, però, che la frequenza di tale "treno d'impulsi" rientri in quella udibile dall'uomo, ossia compresa tra i 20 e i 20.000 Hz. Gli animali riescono anche a percepire frequenze superiori.

Riproduzione "grezza" della nota LA

Per riprodurre la nota musicale LA, corrispondente a 440 Hz, occorre generare un treno d'impulsi (ON-OFF) opportunamente cadenzato. La nota generata non risulterà molto pulita, in quanto caratterizzata da una forma d'onda quadra e non sinusoidale. Saranno presenti molte armoniche di disturbo ma, al momento, ciò è irrilevante. Per conoscere, dunque, la durata del periodo di tale frequenza occorre calcolare il suo reciproco, secondo la formula:

t=1/f

ossia:

t=1/440

In questo caso, l'intero periodo del segnale ha una durata di 0.0022727 secondi, pari a 2,2727 millisecondi (o 2272 microsecondi), metà dei quali con segnale di uscita pari a 5V (livello logico alto) e l'altra metà con segnale di uscita pari a 0V (livello logico basso). La successione dei due segnali, come visibile in figura 1) produce la nota di 440 Hz sull'altoparlante.

figura 1 onda quadra 440
Figura 1: onda quadra di 440 Hz

Bene, adesso che abbiamo compreso la modalità di generazione sonora, è semplice approntare uno sketch che esegua questo lavoro. Si comprenda come sia la matematica a legare questa tipologia di applicazione. Per il funzionamento del prototipo è sufficiente collegare la porta 9 di Arduino a un piccolo altoparlante, tramite una resistenza di 50-100 ohm.

figura 2 listato 440 hz
Figura 2: Lo sketch per la generazione di una nota 440 Hz

Se si assimila bene tale filosofia, è possibile generare qualsiasi nota (anche ultrasuoni) per ogni durata.

Uso della funzione tone()

La libreria di Arduino mette a disposizione una interessante funzione, bella e pronta, per produrre una nota acustica senza effettuare calcoli matematici di sorta. Si tratta della funzione tone() che accetta, come parametri, i seguenti argomenti:

tone(pin, frequency, duration) 

dove:

  • pin è il piedino di uscita del segnale audio
  • frequency è la frequenza di generazione, compresa tra 31 Hz e 65535 Hz
  • duration è la durata della nota, espressa in millisecondi. Tale parametro è opzionale.

Il segnale generato è sempre un'onda quadra con duty cycle al 50%. Ovviamente, la funzione non prevede la generazione polifonica delle note. Il seguente listato genera una semplice scala musicale (Do, Re, Mi, Fa, Sol, La, Si, Do).

figura 3 listato scala musicale
Figura 3: Lo sketch che utilizza la funzione tone()

Lo schema di collegamento è proposto in figura 4.

figura 4 collegamento
Figura 4: Il cablaggio del dispositivo di riproduzione sonora

Tom's Consiglia

Per chi inizia ora e voglia dotarsi di tutto l'occorrente, Arduino Uno si trova facilmente a un prezzo abbordabile.