
Proponiamo, in questo articolo, un simpaticissimo simulatore del verso di un uccellino, realizzato con la scheda ESPertino e il buzzer a corredo con lo STARTER KIT. Variando i parametri di chiamata di una funzione è possibile cambiare il verso del volatile.
Introduzione
Imitare il verso degli uccelli, digitalmente, è cosa assai facile. E' sufficiente, infatti, effettuare uno "sweep" di frequenza (vedi figura 1) per ottenere un realistico suono. A ogni modo, le condizioni principali per raggiungere lo scopo sono essenzialmente due:
- Lo sweep deve essere molto veloce;
- La frequenza d'inizio e di fine deve risultare abbastanza alta, diciamo almeno 4000 Hz.
Connessioni elettriche
Lo schema elettrico risulta essenziale ed è sufficiente collegare il buzzer dello STARTER KIT alla porta 5 di ESPertino, come mostrato in figura 2. In questa maniera si può anche controllare il suo stato logico attraverso il relativo diodo Led onboard. E' possibile inserire, nella linea, una resistenza di limitazione dal basso valore ohmico, per una eventuale protezione. Essa non è strettamente necessaria.
Lo sketch
Il programma utilizza la funzione setup() esclusivamente per configurare la porta di uscita alla quale risulta collegato il buzzer. La funzione loop() attua all'infinito, invece, le generazioni del verso del volatile. A tale scopo sono state create due diverse funzioni:
- uccellino_calante(), che genera uno sweep a frequenza discendente;
- uccellino_crescente(), che genera uno sweep a frequenza ascendente.
I parametri passati a esse sono i seguenti:
- Start: durata (in microsecondi) del semiperiodo iniziale del segnale;
- Stop: durata (in microsecondi) del semiperiodo finale del segnale;
- Durata: durata (in numero cicli) del suono prodotto;
- Pausa: pausa di attesa dopo il suono prodotto.
#define PIN_BUZZER 5 // Pin per il buzzer void setup() { pinMode(PIN_BUZZER,OUTPUT); digitalWrite(PIN_BUZZER,LOW); } void loop() { uccellino_calante(90,130,50,100); uccellino_calante(120,130,20,60); uccellino_calante(120,130,20,60); uccellino_calante(120,130,20,60); uccellino_calante(120,130,20,60); uccellino_calante(120,130,20,60); uccellino_calante(120,130,20,100); uccellino_crescente(120,100,50,300); uccellino_calante(120,130,40,60); uccellino_calante(120,130,40,60); uccellino_crescente(120,100,50,800); } void uccellino_calante(int start,int stop,int durata,int pausa) { for(int p=start;p<=stop;p++) { for(int k=1;k<=durata;k++) { digitalWrite(PIN_BUZZER,HIGH); delayMicroseconds(p); digitalWrite(PIN_BUZZER,LOW); delayMicroseconds(p); } } delay(pausa); } void uccellino_crescente(int start,int stop,int durata,int pausa) { for(int p=start;p>=stop;p--) { for(int k=1;k<=durata;k++) { digitalWrite(PIN_BUZZER,HIGH); delayMicroseconds(p); digitalWrite(PIN_BUZZER,LOW); delayMicroseconds(p); } } delay(pausa); }
Utilizzo
E' sufficiente fornire la tensione alla scheda ESPertino, dopo averla programmata, per ascoltare, sul buzzer, il verso dell'uccellino. L'esempio proposto si avvale di undici chiamate alle funzioni generatrici ed è, sicuramente, migliorabile. Non è una cifra elevata ma se si creano nuovi suoni con tante invocazioni alle procedure in più, i risultati saranno di qualità maggiore. Si potrebbe anche effettuare una parametrizzazione "casuale" degli argomenti passati, in modo che il suono prodotto risulti sempre differente. La forma d'onda di quella dello sketch proposto è mostrata in figura 3.
E' possibile ascoltare qui sotto il verso dell'uccellino prodotto dal prototipo illustrato nell'articolo.
Conclusioni
Invitiamo i lettori a proporre versi più realistici o interessanti, scrivendo nei commenti le proprie sequenze delle funzioni uccellino_calante() e uccellino_crescente(). Buona sperimentazione a tutti con lo STARTER KIT di ESPertino.

Registrando il reale verso degli uccelli, in un bosco, e riproducendolo a velocità diverse (magari rallendandolo) si scoprono tante cose interessanti della natura.
Non usate il richiamo per attirare gli uccelli, nella caccia.
Sarebbe codardo e disumano.
Concordo pienamente Giovanni,