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.

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.

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).

Lo schema di collegamento è proposto in figura 4.

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