Sensore a ultrasuoni HC-SR04 + Arduino
In questo articolo vedremo come misurare distanze con il sensore a ultrasuoni HCSR04.
INGREDIENTI:
-1x Arduino UNO
-1x Bredboard
-1x Sensore a ultrasuoni HCSR04
-Cavetti vari
Gli ultrasuoni sono delle onde sonore non udibili all’orecchio umano. Per misurare le distanze si usa la capacità delle onde di riflettersi sugli oggetti; Viene mandata un’onda e si misura il tempo che impiega per tornare indietro.
Sapendo poi la velocità del suono nell’aria, si può calcolare la distanza con la semplice equazione S=VxT V è la velocità del suono, che per comodità, si può assumere il suo valore a 20°, ovvero 331.4m/s; Se si hanno elevate variazione di temperatura, per avere risultati accurati, è opportuno calcolare la velocità con la formula V = 331.4 + 0.62*t.
Per avere un risultato apprezzabile, ci conviene convertire la velocità in cm/ms (centimetri al microsecondo) in modo da ottenere il risultato in centimetri. Il nuovo valore di V sarà quindi pari a 3.4*10^-2 cm/microsec. Per avere informazioni dal sensore, bisogna mettere il pin trigger a stato logico alto per almeno 10 microsecondi. Il sensore emetterà le onde e aspetterà il loro ritorno, poi manderà un un impulso di stato logico alto al pin echo, della stessa duranta del tempo impiegato dall’onda per compiere il suo percorso.
Il tempo T restituitoci dal sensore, è quello impiegato dall’onda per andare e tornare in microsecondi, quindi dobbiamo dividerlo per due per avere il tempo trascorso prima di essere riflesso. lo schema da realizzare è il seguente:
lo sketch da caricare su arduino:
//Creato da Mohamed Fadiga momodesine@hotmail.it int trigger=7; int echo=8; void setup() { pinMode(trigger,OUTPUT); pinMode(echo,INPUT); Serial.begin(9600); } void loop() { digitalWrite(trigger,LOW); digitalWrite(trigger,HIGH); delayMicroseconds(10); digitalWrite(trigger,LOW); long duration=pulseIn(echo,HIGH); long distance=0.017*duration; Serial.print("distanza: "); //dopo 38ms è fuori dalla portata del sensore if(duration < 40000)Serial.println("fuori portata"); else { Serial.print(distance); Serial.println("cm"); } delay(1500); }