Compartir:



Como medir distancias por ultra-sonido, sensor HC-SR04 y Arduino



Si deseamos conocer la distancia entre dos puntos, una opción fácil es utilizar una cinta métrica, pero no siempre podemos recurrir a esta, o no queremos. Por ejemplo supongamos una aplicación de robótica donde se necesita detectar obstáculos, la misma debe ser suficientemente inteligente y automática como para poder detectarlos.

Otra opción es recurrir al sonido, de la misma forma que se usa en barcos(Sonar) y en algunos animales(Ecolocación).

Imagen en representacion del sonar
Sonar activo, imagen de Wikimedia

La forma de funcionamiento es emitir un sonido, este se refleje en el objetivo y luego recibir el eco. Entonces conociendo la velocidad de propagación del sonido(340m/s) y la duración entre la emisión y recepción, es decir el tiempo entra ida y vuelta, podemos conocer la distancia.

formula para relacionar velocidad del sonido y distancia
Formula para obtener la distancia(en cm), conociendo la velocidad y el tiempo

Esta es una excelente forma de detección sin contacto, a diferencia de métodos lumínicos no se presenta alteraciones en el funcionamiento por la luz del sol o materiales negros, sin embargo se puede dificultar con materiales acústicos y la forma en que esta orientado el objeto también supone una dificultad, ya que al rebotar la onda sonora lo puede hacer en una dirección no deseada.

El Sensor

Imagen-HC-SR04
HC-SR04

El HC-SR04 es un sensor ultrasonico, que opera básicamente como lo detallado anteriormente, para tal fin tiene un transmisor y un receptor. Con el mismo, se pueden obtener medidas desde 2cm hasta los 400cm, con una resolución de 0.3cm.

El sensor tiene 4 pines, dos los necesarios para la alimentación(trabaja con 5V) y dos mas que son necesarios para iniciar el proceso de medición y obtener los datos para el calculo de la distancia. Para comenzar con la medición el sensor debe recibir un pulso en alto en el pin de disparo(trigger), con una duración de al menos 10us, esto inicia una transmisión de 8 ciclos de una ráfaga de ultrasonido a 40khz. Cuando el receptor detecta el eco, pone el pin Echo en alto(5V) por un tiempo igual al que tardo el sonido en salir y volver(se encuentra en el orden de los us). En el diagrama temporal se observa el modo de operación.

Diagrama temporal
Diagrama temporal

Prueba con Arduino.

La conexión con Arduino o cualquier microcontrolador es sencilla. Necesitamos solamente 2 pines, uno como entrada y otro como salida. A través de un display LCD de 16x2 se indica la distancia. El conexionado completo es:

Esquematico HC-SR04 y Arduino

Y el código a cargar en el Arduino es el siguiente:

/*
Codigo para Arduino, para medir distancias con el sensor ultrasonico
HC-SR04 y visualizarla en un display LCD 16x2
 Circuito:
* LCD RS pin- D12
* LCD Enable pin - D11
* LCD D4 pin - D5
* LCD D5 pin - D4
* LCD D6 pin - D3
* LCD D7 pin - D2
* Potenciometro de 10K :
* El pin del medio a LCD Vo(pin3)
* Los demas entre 5V y GND
* Trigger HC-SR04 - D8
* Echo HC-SR04 - D9
*/
// include the library code:
#include <LiquidCrystal.h>

//Inicializo la libreria del LCD con los pines correspondientes a la conexion realizada
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
long distancia;
long tiempo;

void setup() {
 // Configuracion del LCD 16x2
 lcd.begin(16, 2);
 pinMode(9, OUTPUT); //Pin D9 como salida
 pinMode(8, INPUT); //Pind D8 como entrada

}

void loop() {
 lcd.clear(); //Limpio el LCD
 lcd.setCursor(0, 0); //Ubico el cursor
 digitalWrite(9,LOW);
 delayMicroseconds(5);
 digitalWrite(9, HIGH); //Inicio el proceso de medicion
 delayMicroseconds(10); //El pulso de disparo debe estar en alto por 10us
 tiempo=pulseIn(8, HIGH); //Funcion para medir el tiempo en alto del pin echo
 distancia= int(0.01653*tiempo); //Convierto los us en cm, el tiempo es proporcional a la distancia
 lcd.print("Distancia: ");
 lcd.print(distancia);
 lcd.print("cm");
 delay(500);
}
Ariel Sperduti avatar

Full Stack web development, Ingeniero Electronico

Ir Arriba!