Hace unos días me ha llegado desde mi proveedor asiático habitual un par de módulos de sensores de ultrasonido HC-SR04 para incluir en mis próximos proyectos de electrónica.
Antes de la compra había visto numerosos vídeos en Youtube acerca de este módulo y sus usos. El bajo precio de estos me animaron a pedirlo, y allí estaba Aliexpress.
Tras la espera habitual, me acaban de llegar las dos unidades pedidas, sorprendéntemente el acabado es realmente bueno. Siempre me pregunto como es rentable fabricar y enviar estos componentes por medio mundo, a un precio tan sumamente económico.
El funcionamiento es bien sencillo: el HC-SR04 dispone de 4 pins, de los cuales dos están dedicados a la alimentación de 5v (Vcc) y tierra (Gnd), y otros dos a las señales de entrada Trig y de salida Echo. La activación de la señal de Trig genera una serie de pulsos cuyo eco es recibido y trasmitido por la salida Echo. Conociendo el espacio de tiempo desde el envío del tren de pulsos a su recepción, podemos calcular el espacio recorrido por la señal acústica (ultrasónica), y con ella la distancia al obstáculo. El rango de distancia que nos permite medir se encuentra entre los 3 y 400 cm.
Si bien no es un procedimiento muy exacto, porque puede depender de la textura, el material, la forma y la orientación del objeto, en general es un buen sensor para usos como el de esquivar obstáculos, evitar paredes o detectar la llegada de un objeto en una cinta transportadora, etc..
A continuación comparto un vídeo con una excelente descripción del módulo en el canal de Youtube vt en línea:
Para la primera prueba nos basta con un conexionado mínimo de los 4 pines a los pines del sensor a los pines de Arduino Vcc, Gnd. Pin2 (Trig) y Pin3 (Echo). Con esa sencilla configuración y el siguiente script tenemos el sistema funcionando y reportando la distancia en centímetros:
// Configuramos los pines del sensor Trigger y Echo const int PinTrig = 2; const int PinEcho = 3; // Constante velocidad sonido en cm/s const float VelocidadSonido = 34000.0; // Ajuste de distancia del objeto a nuestra posición de referencia const Ajuste = -0.2; float distancia; void setup() { // Iniciamos el monitor serie para mostrar el resultado Serial.begin(9600); // Ponemos el pin Trig en modo salida pinMode(PinTrig, OUTPUT); // Ponemos el pin Echo en modo entrada pinMode(PinEcho, INPUT); } void loop() { iniciarTrigger(); // La función pulseIn obtiene el tiempo que tarda en cambiar entre estados, en este caso a HIGH unsigned long tiempo = pulseIn(PinEcho, HIGH); // Obtenemos la distancia en cm, hay que convertir el tiempo en segudos ya que está en microsegundos // por eso se multiplica por 0.000001 distancia = (tiempo * 0.000001 * VelocidadSonido / 2.0) + Ajuste; Serial.print(distancia); Serial.print("cm"); // Mostramos la distancia medida y una alerta si está próximo if(distancia<5) { Serial.print(" ALERTA - PARADA DE EMERGENCIA !!!!!!"); } else if(distancia<10) { Serial.print(" ALERTA - IMPACTO!"); } else if(distancia<20) { Serial.print(" AVISO - PROXIMIDAD!"); } Serial.println(); delay(400); } // Método que inicia la secuencia del Trigger para comenzar a medir void iniciarTrigger() { // Ponemos el Trigger en estado bajo y esperamos 2 ms digitalWrite(PinTrig, LOW); delayMicroseconds(2); // Ponemos el pin Trigger a estado alto y esperamos 10 ms digitalWrite(PinTrig, HIGH); delayMicroseconds(10); // Comenzamos poniendo el pin Trigger en estado bajo digitalWrite(PinTrig, LOW); }
Este script está basado en el publicado en https://programarfacil.com/tutoriales/fragmentos/sensor-de-ultrasonidos-con-arduino, y al que le hemos incluido unas condiciones para alertar por proximidad y un valor adicional de ajuste, que nos permite corregir las mediciones con el punto de referencia que deseemos en nuestro proyecto.
Con este script realizamos algunas pruebas y comprobamos que los sensores funcionan perfectamente y están disponibles para su uso.
En Amazon podemos encontrar las distintas versiones del Arduino original como de compatibles de otras que incorporan numerosos accesorios como el mencionado HC-SR04: