Sensor Ultrasónico HC-SR04 con Arduino
El sensor ultrasónico HC-SR04 se utiliza, entre otras posibles aplicaciones, para medir distancias y evitar chocar contra algún objeto o generar un sensor de movimiento.
Funciona enviando un pulso de ultrasonido (inaudible para el oído humano por su alta frecuencia) a través de un emisor (T) y esperando a que dicho sonido rebote sobre un objeto y vuelva para ser captado por receptor (R).
![](https://www.ioteca.com.ar/images/fotos/nws/19_HCSR04-Arduino.jpg)
Este módulo tiene un área de trabajo de entre 3cm y 3m con una precisión de 3mm y se alimenta a 5V (15 ma) lo que lo hace ideal para proyectos con Arduino.
El funcionamiento del sensor se basa en medir el tiempo entre el envío y la recepción de un pulso ultrasónico. Sabemos que la velocidad del sonido es 343,2 m/s en condiciones normales.
![](https://www.ioteca.com.ar/images/fotos/nws/19_Formula-1.jpg)
Por lo tanto una onda de sonido necesita 0,002914 segundos para recorrer un metro.
En el programa vamos a utilizar un pulso de 10 µs(micro segundo, millonésima parted de un segundo) y medir en centímetros, por lo tanto realizamos la siguiente conversión de unidades.
![](https://www.ioteca.com.ar/images/fotos/nws/19_Formula-2.jpg)
Por último estaremos registrando el tiempo que tarda en llegar el pulso al objeto, rebotar,y volver.
![](https://www.ioteca.com.ar/images/fotos/nws/19_eco-ultrasonido.jpg)
Entones la fórmula para calcular la distancia deberá resultar de dividir el trayecto en dos.
![](https://www.ioteca.com.ar/images/fotos/nws/19_Formula-3.jpg)
Conexiones
HC-SR0 | Arduino Uno |
---|---|
VCC | 5V |
Trig | 6 |
Echo | 5 |
GND | GND |
![](https://www.ioteca.com.ar/images/fotos/nws/19_conexion-HRCSR04.jpg)
En el siguiente sketch utilizaremos la fórmula para obtener la distancia a partir del tiempo entre la emisión (Trigger) y recepción (Eco).
const int Echo = 5; const int Trigger = 6; void setup() { Serial.begin(9600); pinMode(Trigger, OUTPUT); pinMode(Echo, INPUT); } void loop() { int dist }ancia = calcularDistancia(Trigger, Echo); Serial.println(String(distancia) + " cm"); delay(1000); int calcularDistancia(int TriggerPin, int EchoPin) { long intervalo, distancia; digitalWrite(TriggerPin, LOW); //pin a LOW durante 4us para generar un pulso limpio delayMicroseconds(4); digitalWrite(TriggerPin, HIGH); //genera el Trigger (disparo) delayMicroseconds(10); // pulso activo por 10us digitalWrite(TriggerPin, LOW); //corta el pulso y espera el eco intervalo = pulseIn(EchoPin, HIGH); //medimos el intervalo entre pulsos, en microsegundos distancia = ((intervalo * 100) / 2914) / 2; // multiplicado por 100 para no utilizar flotantes return distancia;
Si se prefiere no realizar estas fórmulas, una opción es emplear la librería NewPing, explicada en Sensor Ultrasónico HC-SR04 con Arduino y NewPing