El sensor ultrasònic HC-SR04 permet mesurar distàncies en aplicacions com la detecció d'obstacles, de persones, per mesurar el nivell d'un líquid ...
Pot mesurar distàncies entre 3 cm i 3 m, amb una precisió de ± 3 mm.
.
Està format per un transmissor (Trig) que emet un tren de senyals ultrasòniques amb una freqüència de 40 kHz (inaudible) que es desplacen per l'aire, reboten en trobar un obstacle i són captades pel receptor del sensor (Echo), que emet un senyal d'entrada proporcional al temps que ha trigat en rebre el retorn.
A partir del temps entre l'emissió i el retorn, conexent la velocitat del so (343 m/s) es calcula la distància a la que està l'obstacle.
Entenc que els pins Trig i Echo han de ser sortides analògiques, capaços d'emetre senyals PWM.
Jo he connectat Trig a pin 12 i Echo a pin 14.
L'alimentació ha de ser de 5V. Podem fer-ho des del pin VIN de l'ESP32 o utilitzar la mateixa font d'alimentació dels servos del nostre braç.
La llibreria hcsr04.py
MicroPython no inclou la possibilitat de treballar amb l'HC-SR04. Per tant utilitzarem una llibreria externa que descarregarem des d'aquest repositori de GitHub
Per descarregar el programa, dins el repositori cliquem el botó CODE i Download ZIP (veieu la imatge).
Un cop descarregat i descomprimit, obrim l'arxiu hcsr04.py amb Thonny i el desem a la carpeta lib del dispositiu amb el mateix nom.
Tenint en compte la velocitat del so a l'aire i el temps de viatge (temps transcorregut des de la transmissió i recepció del senyal) podem calcular la distància a un objecte. Aquí teniu la fórmula:
distance to an object = ((speed of sound in the air)*time)/2
velocitat del so a l'aire a 20ºC (68ºF) = 343 m/s
Per calcular al distància haurem de definir una funció que interpreti la informació que ens proporciona el sensor. En aquest cas, la informació que tindrem és el temps transcorregut entre que s'emet l'ona i es rep el rebot. Com que sabem que:
Distancia (d) = velocitat (v) * temps (t)
La velocitat del so a l'aire són 343 m/s. En el nostre cas, com que volem molta precisió treballarem amb microsegons i centímetres, per tant:
velocitat del so (v) = 0,034 cm/us
Si per exemple, si el temps transcorregut entre que s'emet l'ona i es rep el rebot és de 500 microsegons. La distància serà:
d = 0,034 (cm/us) * 500 (us)
Però cal tenir en compte que el temps mesurat és el que ha transcorregut entre l'anada i tornada del senyal fins a l'objecte, i per tant, per tenir la distància de l'objecte, hem de dividir el total per 2:
d = (0,034 * 500) / 2 = 8,5 cm
Monitorització de les distàncies mesurades pel sensor
El resultat té molts decimals. Si no necessitem tanta precissió tenim dues opcions:
Recuperar la distància en mm (ho fa sense decimals)
Arrodonir el resultat, especificant el nombre de decimals que volem. Jo en vull 2:
print('Distancia:', round(distancia,2), 'cm')
EXERCICI 8: SENSOR D'APARCAMENT
En aquest exercici has d'utilitzar el sensor d'ultrasons i un brunzidor per fer un detector d'aparcament per a un cotxe. A mesura que el cotxe s'aproxima a un obstacle, el brunzidor ha de sonar cada cop més ràpid.
Un cop hagis trobat la distància a l'obstacle (amb la funció que hem vist a l'exemple), hauràs de crear un valor d'espera (l'estona que el brunzidor estarà funcionant i apagat) que variarà en funció de la distància. A mesura que el cotxe s'acosta a l'obstacle, aquest valor d'espera es redueix, fent que el timbre soni més de pressa (més freqüentment) per avisar al conductor que el cotxe s'acosta a l'obstacle. Si, en canvi, el cotxe s'allunya de l'obstacle, el retard es fa més gran de manera que el timbre soni més lent (menys sovint) per informar el conductor que l'obstacle no està a prop.