Descripción
El sensor ultrasónico HC-SR04 es una excelente opción como sensor de distancia para proyectos escolares y de hobby. Su relación de costo – beneficio lo hace óptimo para un gran abanico de aplicaciones.
El uso de este módulo es bastante sencillo debido a que se toda la electrónica de control, transmisión y recepción se encuentra contenida en su circuito impreso. El usuario solamente debe enviar un pulso de disparo y medir en tiempo alto del pulso de respuesta. Este procedimiento puede realizarse fácilmente con los pines digitales de cualquier microcontrolador.
El HC-SR04 es compatible con la mayoría de los microcontroladores del mercado, incluyendo el Arduino Uno, Arduino Mega y otras tarjetas compatibles que funcionen con 5 volts. También se puede usar de forma muy sencilla con otros microcontroladores como los de la familia PIC de Microchip.
Existen librerías dentro del ecosistema de Arduino para este módulo que hacen que la parte del software quede resuelta de manera muy sencilla.
Características y especificaciones
- Modelo: HC-SR04
- Marca: Genérico (sensores)
- Tipo de sensor: proximidad, distancia, presencia
- Principio de funcionamiento: ultrasonido
- Voltaje de alimentación: 5 VDC
- Corriente típica en operación: 15 mA
- Rango de medición: 2 cm a 400 cm
- Precisión: ± 3 mm
- Frecuencia del pulso ultrasónico: 40 KHz
- Angulo de medición: 15º
- Conector: Header macho estándar 0.1 pulgadas
- Interfaz: 4 conexiones
- Vcc
- Trigger
- Echo
- Gnd
- Tiempo en alto para señal de disparo: 10uS
- Rango de tiempo de señal de eco: 100 uS a 25000 uS
- Tiempo entre medidas: 20 mS
- Peso: 0.008 kg
- Dimensiones
- Largo: 4.5 cm
- Ancho: 2.6 cm
- Alto: 2 cm
¿Qué es el sensor ultrasónico HC-SR04?
El sensor ultrasónico HC-SR04 es un módulo electrónico que incorpora un par de transductores de ultrasonido que se utilizan de manera conjunta para determinar la distancia entre el sensor (módulo) y un objeto. Uno de los transductores actúa como emisor de ultrasonido, mientras que el otro recibe el eco o rebote de la señal original.
Quizá la característica más destacada del HC-SR04 es que puede ser adquirido por una baja suma de dinero y esto mismo lo ha hecho un accesorio para Arduino muy popular debido a su excelente relación de costo / beneficio. Es común encontrarlo en muchos kits para principiantes de Arduino y la documentación en internet de este sensor es bastante abundante.
¿Cómo funciona el sensor ultrasónico HC-SR04?
El proceso que utiliza el sensor ultrasónico HC-SR04 para determinar la distancia a la que se encuentra un objeto es el siguiente:
- Emite una ráfaga de ultrasonido a través del transductor transmisor (T).
- El sonido viaja por el aire hasta encontrar un objeto. Parte de la onda sonora rebota en el objeto y viaja de vuelta al módulo.
- El transductor receptor (R) detecta el sonido reflejado.
El tiempo entre la transmisión y la recepción de la señal ultrasónica puede ser entonces medido y utilizado para calcular la distancia. Esto es posible debido a que conocemos la velocidad a la que viaja el sonido en el aire, que es de 343.2 m/s.
Comunicación con el microcontrolador
El procedimiento de medición es realizado por un microcontrolador que interactúa con el HC-SR04 mediante dos pines digitales y funciona de la siguiente forma:
- El pin TRIGGER recibe un pulso de habilitación de parte del microcontrolador, mediante el cual se le indica al módulo que comience a realizar la medición de distancia. Este pulso debe durar 10 microsegundos.
- En el pin ECHO el sensor devuelve al microcontrolador un puso cuyo ancho es proporcional al tiempo que tarda el sonido en viajar del transductor al obstáculo y luego de vuelta al módulo.
Mediante una sencilla formula puede estimarse entonces la distancia entre el sensor y el obstáculo si se conoce el tiempo de viaje del sonido así como la velocidad de propagación del sonido:
- Para obtener la distancia en centímetros hay que dividir el tiempo en micro segundos entre 58
- Para obtener la distancia en pulgadas será entre 148.
Pinout o distribución de pines
La distribución de los pines del HC-SR04 es la siguiente:
De cualquier forma, recomendamos revisar siempre la serigrafía del PCB cuando estemos realizando conexiones para evitar errores.
Datasheet HC-SR04 sensor ultrasónico de distancia
El documento “oficial” donde se describe la funcionalidad del sensor ultrasónico HC-SR04 es su hoja de datos o datasheet. Podemos descargar dicho documento en el siguiente enlace.
Tutorial sensor ultrasónico HC-SR04 con Arduino
En esa sección explicaremos cómo utilizar un sensor ultrasónico HC-SR04 con Arduino para la medición de distancia y detección de obstáculos. Se incluyen datos sobre el funcionamiento, la conexión y programación (código) del sensor bajo la plataforma Arduino.
¿Cómo conectar el sensor HC-SR04 con Arduino?
La conexión del sensor con Arduino es muy sencilla. Podemos realizarla utilizando un protoboard, o directamente con alambres. Para lograr que el sensor funcione, son necesarias 4 señales:
- VCC – Alimentación de 5 volts
- GND – Tierra o común del circuito
- TRIG – Señal de disparo
- ECHO – Señal de eco
La siguiente imagen muestra como queda conectado el sensor utilizando solamente cables:
Cabe aclarar que nosotros hemos utilizado los pines 11 y 12, pero vale cualquier otra combinación de pines. No hay mucho más que decir, ya que es bastante fácil de conectar, solamente tener cuidado con la polaridad y posición de las señales.
Prácticas y código de ejemplo
Para esta experiencia requerimos los siguientes materiales, los cuales puedes adquirir en nuestra tienda virtual:
- Arduino UNO (también funciona con otras tarjetas de la gama Arduino)
- HC-SR04 sensor ultrasónico de distancia
- Cables dupont para conexiones
- Protoboard (opcional)
En todos los ejemplos hemos comentado el código bastante para que sea fácil de entender.
Programa básico para sensor ultrasónico
A continuación realizaremos la programación básica con el sensor sin utilizar librerías y mostraremos el resultado de la medición en el monitor serial.
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 68 69 70 71 72 73 74 75 76 77 78 79 | /** Geek Factory - "Dale vuelo a tus proyectos" Tienda de electrónica, Arduino, Raspberry Pi, IoT www.geekfactory.mx GEEK FACTORY INVIERTE TIEMPO Y RECURSOS EN DESARROLLAR ESTOS EJEMPLOS Y TUTORIALES. SI ENCUENTRAS ÚTIL ESTE CÓDIGO, CONSIDERA REALIZAR UNA COMPRA CON NOSOTROS. EJEMPLO SENSOR ULTRASONICO HC-SR04 1 Descripción: Realiza la medición de distancia con un sensor ultrasónico HC-SR04. El resultado se muestra en el monitor serial. Este ejemplo NO utiliza librerías especiales para el sensor, solamente se utiliza la función "pulseIn" incluida en el IDE de Arduino para medir la longitud del pulso de eco que devuelve el sensor ultrasónico. */ // declaración de variables para pines // aquí indicamos a donde se conectan las señales del sensor const int pinecho = 11; const int pintrigger = 12; // variables para calculos unsigned long tiempo, distancia; /** Función setup: se ejecuta una vez cuando encendemos el arduino */ void setup() { // preparar la comunicación serial Serial.begin(115200); // configurar los pines utilizados por el sensor pinMode(pinecho, INPUT); pinMode(pintrigger, OUTPUT); // mostrar mensaje inicial Serial.println(F("----------------------------------------------------")); Serial.println(F("EJEMPLO SENSOR ULTRASONICO CON ARDUINO SIN LIBRERIA ")); Serial.println(F(" https://www.geekfactory.mx ")); Serial.println(F("----------------------------------------------------")); } /** Función loop: se ejecuta continuamente mientras el arduino permanece encendido */ void loop() { // asegurarnos que el pin trigger se encuentra en estado bajo digitalWrite(pintrigger, LOW); delayMicroseconds(2); // comenzamos pulso alto, debe durar 10 uS // luego regresamos a estado bajo digitalWrite(pintrigger, HIGH); delayMicroseconds(10); digitalWrite(pintrigger, LOW); // medimos el tiempo en estado alto del pin "echo" // el tiempo en estado alto es proporcional a la distancia medida tiempo = pulseIn(pinecho, HIGH); // LA VELOCIDAD DEL SONIDO ES DE 340 M/S O 29 MICROSEGUNDOS POR CENTIMETRO // DIVIDIMOS EL TIEMPO DEL PULSO ENTRE 58, TIEMPO QUE TARDA RECORRER IDA Y // VUELTA UN CENTIMETRO LA ONDA SONORA distancia = tiempo / 58; // imprimir la distancia medida al monitor serial Serial.print(F("Distancia: ")); Serial.print(distancia); Serial.println(F(" cm")); // esperar un segundo antes de realizar otra medición delay(1000); } |
Código con librería para sensor ultrasónico
Al utilizar una librería para programar el sensor HC-SR04, podemos ahorrar algunos pasos y el código queda más compacto. Por ejemplo, el siguiente programa utiliza la librería NewPing la cual deberemos tener instalada en nuestro IDE.
En este programa el resultado de la medición debería ser un poco más estable, debido a que la librería calcula un promedio de varias mediciones antes de devolver el resultado a nuestro programa.
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 68 69 | /** Geek Factory - "Dale vuelo a tus proyectos" Tienda de electrónica, Arduino, Raspberry Pi, IoT www.geekfactory.mx GEEK FACTORY INVIERTE TIEMPO Y RECURSOS EN DESARROLLAR ESTOS EJEMPLOS Y TUTORIALES. SI ENCUENTRAS ÚTIL ESTE CÓDIGO, CONSIDERA REALIZAR UNA COMPRA CON NOSOTROS. EJEMPLO SENSOR ULTRASÓNICO HC-SR04 2 Descripción: Realiza la medición de distancia con un sensor ultrasónico HC-SR04. El resultado se muestra en el monitor serial. Este ejemplo utiliza la libería NewPing, que deberá estar instalada en nuestro IDE para que se pueda compilar de formma satisfactoria. */ // incluir la librería en nuestro programa #include <NewPing.h> // declaración de variables para pines // aquí indicamos a donde se conectan las señales del sensor const int pinecho = 11; const int pintrigger = 12; // variables para calculos unsigned long tiempo, distancia; // declaramos un objeto de la clase NewPing llamado sonar // debemos indicarle los pines que se utilizaran para las señales NewPing sonar(pintrigger, pinecho); /** Función setup: se ejecuta una vez cuando encendemos el arduino */ void setup() { // preparar la comunicación serial Serial.begin(115200); // mostrar mensaje inicial Serial.println(F("----------------------------------------------------")); Serial.println(F(" EJEMPLO SENSOR ULTRASONICO CON LIBRERIA NEWPING ")); Serial.println(F(" https://www.geekfactory.mx ")); Serial.println(F("----------------------------------------------------")); } /** Función loop: se ejecuta continuamente mientras el arduino permanece encendido */ void loop() { // medir el tiempo que tarda en viajar el sonido y almacenarlo en una variable // esta medición se realiza con la librería NewPing a través del objeto sonar tiempo = sonar.ping_median(); // calcular la distancia utilizando la constante proporcionada en la librería distancia = tiempo / US_ROUNDTRIP_CM; // imprimir la distancia medida al monitor serial Serial.print(F("Distancia: ")); Serial.print(distancia); Serial.println(F(" cm")); // esperar un segundo antes de realizar otra medición delay(1000); } |
Valoraciones
No hay valoraciones aún.