Ben ritrovati su 9minuti.it, oggi vedremo quello che è, a mio parere, uno dei sensori ad ultrasuoni più versatili e divertenti da usare, ovvero il sensore di prossimità (o di distanza) HC-SR04.
Il sensore ad ultrasuoni HC-SR04 è composto da due ‘occhioni’, uno dei quali invia un’onda sonora, la quale rimbalza sulla superficie che si trova davanti e viene letta dall’altro ‘occhio’.
Se mi chiedessero quali sono i limiti del sensore ad ultrasuoni HC-SR04 risponderei che non fa il caffè.
Un limite che ho riscontrato, oltre ovviamente a non passare i vetri e non fare il caffè, cosa piuttosto ovvia, è che se posto contro una superficie molto irregolare, come ad esempio un maglione di lana a maglie larghe, smette di funzionare.
La lana infatti assorbe le onde e impedisce a queste di tornare indietro.
La precisione è notevole e su distanze di circa un paio di metri ha una tolleranza di pochi centrimetri.
Il collegamento
Lo sketch
Passiamo ora allo sketch e alla spiegazione riga per riga.
#define ultrasuoni_out 13 #define ultrasuoni_in 12 float durata; float distanza; void setup() { pinMode(ultrasuoni_out, OUTPUT); pinMode(ultrasuoni_in, INPUT); Serial.begin(9600); } void loop() { digitalWrite(ultrasuoni_out, HIGH); delay(10); digitalWrite(ultrasuoni_out, LOW); durata = pulseIn(ultrasuoni_in, HIGH); distanza = 0.034 * durata / 2; Serial.print(distanza); Serial.print(" cm\n"); delay(100); }
1 – Definiamo il pin 11 con il nome ultrasuoni_out
2 – Definiamo il pin 12 con il nome ultrasuoni_in
3 – Creiamo la variabile di tipo float durata
4 – Creaiamo la variabile di tipo float distanza
8 – Dichiariamo che il pin ultrasuoni_out verrà usato come OUTPUT
9 – Dichiariamo che il pin ultrasuoni_in verrà usato come INPUT
11 – Chiamiamo il metodo begin() dell’oggetto Serial per far partire la comunicazione seriale.
16 – Accendiamo il pin ultrasuoni_out
17 – Delay di 10 millisecondi
18 – Spegnamo il pin ultrasuoni_out
20 – Assegnamo alla variabile durata il valore restituito dalla funzione pulseIn(), la quale tiene conto del tempo in millisecondi da quando il pin è su HIGH e poi nuovamente su LOW. Se vi interessa approfondire QUA ci sono maggiori informazioni.
21 – Sapendo qual è la velocità del suono (0.034) e il tempo che le onde sonore hanno impiegato (durata) possiamo ricavare la distanza percorsa. Dividiamo per due perché abbiamo sia un’andata che un ritorno.
23, 24 – Facciamo una stampa sul Serial Monitor della nostra distanza appena calcolata.
26 – Delay di 100 millisecondi
Divertiamoci con il sensore di prossimità ad ultrasuoni
Non ci resta altro da fare, ormai abbiamo capito come utilizzarlo e lo possiamo impiegare in uno dei nostri progetti con Arduino.
Un esercizio carino che prevede l’utilizzo di questo sensore consiste nel illuminare un led a seconda di quant’è la distanza, utilizzando quindi gli if e gli else.
Ad esempio,
if ( distanza < 50){ digitalWrite(13, HIGH); } else{ digitalWrite(13, LOW); }
Ovviamente dobbiamo ricordarci di aggiungere il pin 13 come OUTPUT nel setup().
Se ti è piaciuto l’articolo ti prego di farmelo sapere nei commenti e di condividerlo sulle tue pagine social in modo da supportare il blog.
Vi ringrazio per l’attenzione e rimango a disposizione per aiutarvi nel caso doveste averne bisogno.
Alessandro