Los sensores que miden la distancia utilizando este tipo de sonidos tienen dos transductores. Los transductores son componentes electrónicos capaces de transformar una magnitud física en otra (en nuestro caso electricidad en sonido). Uno actua como un altavoz y lanza un pulso de ultrasonidos que, al impactar contra un objeto, producen un eco. El otro transductor actúa como un micrófono y escucha este eco.
Si sabemos el tiempo que ha tardado el micrófono en recibir el eco, podemos saber la distancia a la que se encuentra el objeto utilizando una sencilla fórmula:
D = v · t/2
Dónde la D es la distancia que buscamos, v la velocidad del sonido en el aire y t el tiempo que tarda en llegar el eco al micrófono. Lo dividimos entre debido a que el eco recorre dos veces la distancia entre el objeto y el sensor.
Los radares, los murciélagos y los submarinos funcionan utilizando este principio.
Material necesario
- Arduino UNO, nano, Mega, etc
- Sensor HC-SR04
- Protoboard y cables
Procedimiento
Antes que nada, es bueno echar una ojeada a la documentación oficial del HC-SR04.
El sensor HC-SR04 tiene 4 pines que irán conectados de la siguiente forma:
- VCC a 5V de Arduino
- Trig al Digital pin 8
- Echo al Digital pin 7
- GND a GND
El código es muy sencillo. Consiste en una función que recibe como argumento el valor de trigger, echo y un booleano, realiza una medida con el sensor y devuelve la distancia en centímetros o pulgadas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
| /*
Escribe los valores que lee el sensor HC-SR04 en el monitor serial.
Conexiones: VCC a Arduino 5v Trig a Arduino Digital pin 7 Echo a Arduino Digital pin 6 GND a GND */ #define trig 7 #define echo 6 void setup() { Serial.begin(9600); pinMode(trig, OUTPUT); pinMode(echo, INPUT); } void loop() { //llamamos la funcion calcularDistancia() y guardamos su //retorno en una variable int distancia = calcularDistancia(trig, echo, true ); Serial.println(distancia); delay(200); } int calcularDistancia( int trigPin, int echoPin, bool metric) { //Devuelve la distancia detectada por el sensor en centimetros o //en pulgadas int duracion; int medida; //En la documentacion establece que para iniciar una medicion //hay que suministrar un pulso de 10 microsegundos digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); //Calcula el tiempo que tarda en recibir el eco duracion = pulseIn(echoPin, HIGH); //Si metric es cierto, devuelve la distancia en centimetros. //Si no, devuelve la distancia en pulgadas. //Aplicamos las formulas que aparecen en la documentacion if (metric) medida = duracion/58; else medida = duracion/148; return medida; } |
Ahora ya puedes utilizar esta función en cualquier proyecto. Siéntete libre de modificarla y hacer lo que quieras con ella.