Abbonati ora!

Il Kit di ESPertino: simulatore di uccellino

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.
Figura 1: esempio di "sweep"quadro ascendente ad ampiezza fissa, nel dominio del tempo

Figura 1: esempio di "sweep"quadro ascendente ad ampiezza fissa, nel dominio del tempo

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.

Figura 2: il semplice cablaggio del simulatore di uccellino

Figura 2: il semplice cablaggio del simulatore di uccellino

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.

Figura 3: la forma d'onda del suono riprodotto dell'uccellino

Figura 3: la forma d'onda del suono riprodotto dell'uccellino

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.

 

3 Commenti

  1. Giovanni Di Maria Giovanni Di Maria 22 dicembre 2017
  2. Giovanni Di Maria Giovanni Di Maria 22 dicembre 2017

Scrivi un commento

EOS-Academy