Premessa:
Questa guida ci accompagnerà passo passo alla realizzazione di un misuratore di distanza con un sensore ultrasuoni HC-SR04 comunemente usati su rover per rilevare la distanza ad esempio da un ostacolo.
LISTA DEI MATERIALI:
Per cominiciare osserviamo i collegamenti base del sensore e dello schema che andremo ad affrontare:
I collegamenti che andremo ad effettuare sono:
- led verde pin 10 arduino
- led rosso pin 11 arduino
- 5v e gnd di arduino per alimentare il sensore ultrasuono corrispettivi jumper rossi e neri sulla breadboard
- trig del sensore ultrasuoni pin 13
- echo del sensore ultrasuoni pin 12
COME FUNZIONA:
Un sensore a ultrasuoni misura il tempo impiegato dalle onde sonore emesse dal trig, che verrano riflesse da un ostacolo o un muro, al suo ritorno lette accuratamente dal pin echo. La velocità del suono nell’aria alla temperatura di 20° circa quindi una temperatura mediamente idonea è di circa 343,4 m/s. Quindi il sensore restituisce il tempo impiegato per andare e tornare dalle onde sonore in microsecondi, inoltre è comodo avere la misura in cm, quindi bisogna convertire la velocità del suono da m/s in cm/microsecondo.
Il tutto va ancora diviso per 2 in quanto il tempo che abbiamo convertito è quello impiegato per andare e tornare indietro dalle onde, mentre per calcolare la distanza dall’oggetto ci basta metà di questo tempo, la formula finale, dove t è il tempo restituito dal sensore in cm/microsec è:
S = 1.7 * 10^-2 * t cm
Il sensore dispone di 4 pin: Vcc (+5V), Trigger, Echo, GND. Si invia un impulso alto sul pin Trigger per almeno 10 microsec, a questo punto il sensore invierà il ping sonoro e aspetterà il ritorno delle onde riflesse, il sensore risponderà sul pin Echo con un impulso alto della durata corrispondente a quella di viaggio delle onde sonore, dopo 38 millisec si considera che non sia stato incontrato alcun ostacolo. Per sicurezza si aspettano in genere 50-60 millisec per far si che non vi siano interferenze con la misura successiva.
Esempio Skatch Arduino Sensore Ultrasuoni:
#define trigPin 13 #define echoPin 12 #define led 11 #define led2 10 void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(led, OUTPUT); pinMode(led2, OUTPUT); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; if (distance < 4) { // This is where the LED On/Off happens digitalWrite(led,HIGH); // When the Red condition is met, the Green LED should turn off digitalWrite(led2,LOW); } else { digitalWrite(led,LOW); digitalWrite(led2,HIGH); } if (distance >= 200 || distance <= 0){ Serial.println("Out of range"); } else { Serial.print(distance); Serial.println(" cm"); } delay(500); }
L’istruzione pulseIn() del pin echo serve per leggere il tempo che il pin rimane in stato HIGH, nel momento in cui lo stato del pin sarà LOW la funzione restituirà il tempo in cui è rimasto HIGH quindi livello ALTO il pin.
Buon Progetto.