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).
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.
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.
Por último estaremos registrando el tiempo que tarda en llegar el pulso al objeto, rebotar,y volver.
Entones la fórmula para calcular la distancia deberá resultar de dividir el trayecto en dos.
Conexiones
HC-SR0 | Arduino Uno |
---|---|
VCC | 5V |
Trig | 6 |
Echo | 5 |
GND | GND |
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