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)