Proseguiamo con la trattazione dei sensori che consentono ad Arduino di interagire con il mondo esterno: nello specifico vediamo cosa sono e come utilizzare i sensori ad ultrasuoni HC-SR04 per misurare lo spazio.

HC-SR04

I sensori ad ultrasuoni hanno svariate applicazioni nella vita quotidiana: basti pensare che sono indispensabili per la realizzazione di sistemi di allarme o sistemi robotici che siano in grado di evitare gli ostacoli...

""""

Nello specifico, i sensori HC-SR04 si compongono di 4 terminali (Vcc - Trig - Echo - GND) e di due altoparlanti, di cui uno funge da trasmettitore e l’altro da ricevitore. 
Supponendo che davanti al sensore ci sia un ostacolo, la misurazione avviene in questo modo: quando viene attivato il pin trigger, immediatamente l’altoparlante trasmettitore emette in linea retta un segnale ad ultrasuoni, che fisicamente colpisce l’ostacolo e viene riflesso in senso opposto come eco; intanto l’altoparlante ricevitore viene attivato in ascolto dal pin echo in modo che sia pronto a ricevere il suono appena emesso: a questo punto, siccome la velocità del suono nell’aria, a meno di interferenze, è costante, Arduino potrà calcolare la distanza tra il sensore e l’ostacolo in base al tempo che il suono ha impiegato a ritornare alla sorgente.

""""

HARDWARE

Il collegamento di questo sensore è molto semplice:

""""

SOFTWARE

Per programmare il sensore utilizzeremo la libreria <NewPing>, che non è già inclusa nell’IDE Arduino (in gergo si dice non è nativa). Download.

In realtà esistono molte librerie per la gestione dei sensori HC-SR04, ma abbiamo selezionato questa come la migliore per i seguenti motivi:

  • Consente ad Arduino di verificare se il suono che ritorna come eco corrisponde a quello effettivamente emesso, per evitare che delle interferenze possano falsare le letture.
  • Implementa una variabile di max distance che definisce la massima distanza a cui si vuole effettuare la misurazione.
  • Implementa una funzione che restituisce la misurazione direttamente in centimetri, e ciò consente di risparmiare parecchie righe di codice e calcoli per convertire il tempo in lunghezza. 
  • Implementa una funzione che effettua più letture del sensore e ne restituisce una media, garantendo una maggiore affidabilità e precisione delle misurazioni.
  • Consente di unire il trigger e l’echo sullo stesso pin.
  • È costantemente aggiornata, infatti quando è stato realizzato il video c’era la versione 1.8, adesso invece è disponibile la 1.9

Come installare la libreria
È molto semplice! Estraete il contenuto dell’archivio zippato nella cartella “libraries\” che sarà nella directory in cui avete installato l’IDE. 
Dopo aver riavviato l'ambiente di sviluppo, aprite un nuovo sketch e dalla barra degli strumenti selezionate “Sketch->Include Library->New Ping

Comparirà la direttiva:   #include <NewPing.h>

 

Scriviamo un programma che, fissato un limite massimo, misuri la distanza di un ostacolo dal sensore e stampi a video la misurazione in centimetri.

Per utilizzare un sensore ad ultrasuoni, la libreria NewPing richiede che questo venga dichiarato specificando:

  • Il nome del sensore (a piacere).1
  • I pin di trigger ed echo (in ordine).
  • Il valore della distanza massima.

1Se per esempio aveste più sensori piazzati su un robot, potreste chiamarli “destro”, “sinistro”, “frontale” , “posteriore” etc.

Ecco un esempio di dichiarazione: 
NewPing nome(pin_trigger, pin_echo, max_distance)

Dato che questi tre valori sono costanti, sarebbe opportuno dichiararli con la direttiva #define che abbiamo visto nell’articolo #10.

La libreria mette a disposizione varie funzioni per la lettura del sensore, a seconda delle situazioni e delle unità di misura desiderate: noi utilizzeremo quella che restituisce la distanza in centimetri, ovvero
nome.ping_cm()

Se siete interessati, a seguito è riportata una lista completa delle funzioni (da Arduino Playground).

""""

Ecco il codice:

  • La variabile “lettura” conterrà i valori restituiti dalla funzione sonar.ping_cm().
  • È obbligatorio impostare un delay di almeno 38 ms per evitare che il sensore “si confonda” tra gli ultrasuoni emessi e quelli ricevuti (noi abbiamo scelto 50 ms per sicurezza) .
  • Potete modificare il valore della distanza massima a piacere, ma ricordate che il sensore ha una portata di 4 metri (in basso avete il datasheet completo).

""""

<<Con il termine datasheet si indica la documentazione che riassume le caratteristiche di un componente (ad esempio un componente elettronico o meccanico), un apparato (ad esempio un alimentatore o una caldaia), un software o anche un composto chimico>> (Wikipedia)