Módulos de sensor ultrasónico HC-SR04

Esta guía completa es tu recurso integral para explorar todo lo que necesitas saber sobre el HC-SR04. Empezaremos desde lo más básico, entendiendo su principio de funcionamiento fundamental, clave para descubrir todo su potencial. Después, abordaremos aspectos importantes como sus especificaciones clave, cómo conectarlo con microcontroladores populares e incluso profundizaremos en escenarios de uso avanzados. Al finalizar esta guía, estarás bien preparado para aprovechar al máximo el potencial del HC-SR04 en tus propios proyectos.

¿Qué es el módulo sensor ultrasónico HC-SR04?

El módulo sensor ultrasónico HC-SR04 es un dispositivo excepcional y muy versátil que se ha consolidado en el amplio panorama de los proyectos electrónicos. Su principal atractivo reside en su rentabilidad, una característica que lo hace accesible a una amplia gama de usuarios, desde aficionados con presupuesto ajustado hasta profesionales que buscan una solución asequible para sus proyectos.

Front and back view of HC SR04 Ultrasonic Sensor Module
Front and back view of HC - SR04 Ultrasonic Sensor Module

Especificaciones técnicas

Comprender las especificaciones técnicas del módulo sensor ultrasónico HC-SR04 es crucial para la implementación de cualquier proyecto. A continuación, se muestra la tabla de especificaciones técnicas:

Operating Voltage
+5V DC (4.5V to 5.5V)
Operating Current
~15mA (Standby: ~2mA)
Range
2cm to 400cm (0.8" to 13ft)
Accuracy
±3mm (Best case, varies with environment)
Resolution
0.3cm (1mm theoretically possible with calibration)
Angle of Detection
~15° cone angle
Trigger Input Signal
10μs HIGH pulse to initiate ranging
Echo Output Signal
Pulse width proportional to distance: 1μs = 0.017cm (based on sound speed 340m/s)
Maximum Frequency
40kHz ultrasonic frequency
Measurement Cycle
≥60ms (to avoid interference between measurements)
Operating Temperature
-15°C to +60°C (5°F to 140°F)
Dimensions
45mm × 20mm × 15mm (sensor module)
Weight
~5g (module only)

Explicación:

  1. RangoEl HC-SR04 tiene un rango operativo de 2 a 400 cm (0,8 a 157 pulgadas). Este rango relativamente amplio lo hace adecuado para diversas aplicaciones. Por ejemplo, en un proyecto de robótica a pequeña escala donde el robot necesita desplazarse por una habitación, el rango de 2 a 400 cm puede detectar eficazmente muebles o paredes cercanas. En una aplicación industrial a mayor escala, puede utilizarse para medir la distancia entre componentes de maquinaria dentro de este rango. Sin embargo, es importante tener en cuenta que la precisión puede variar ligeramente en los extremos de este rango.
  1. ResoluciónCon una resolución de 0,3 cm, la HC-SR04 proporciona mediciones de distancia bastante precisas. Este nivel de precisión es suficiente para la mayoría de las aplicaciones de aficionados y muchas aplicaciones industriales. En un proyecto de impresión 3D donde el sensor se utiliza para detectar la distancia a la cama de impresión para la nivelación automática, la resolución de 0,3 cm garantiza que el cabezal de impresión esté a la altura correcta sobre la cama, lo que resulta en impresiones de alta calidad.
  1. Fuente de alimentaciónFunciona con una fuente de alimentación de 5 V CC. Durante su funcionamiento, consume una corriente de 15 mA, lo que representa un consumo energético relativamente bajo. En modo de espera, el consumo de corriente es incluso menor, inferior a 2 mA. Esto lo convierte en una opción energéticamente eficiente para proyectos alimentados por batería. Por ejemplo, en un nodo sensor IoT alimentado por batería que utiliza el HC-SR04 para la detección de distancia, el bajo consumo de energía garantiza una larga duración de la batería.
  1. Ángulo de operaciónEl ángulo de funcionamiento del HC-SR04 es inferior a 15°. Esto significa que el sensor tiene un campo de visión relativamente estrecho. Es más eficaz al detectar obstáculos que se encuentran justo enfrente. En un sistema de seguridad para hogares inteligentes donde el sensor se utiliza para detectar intrusos que se acercan a una puerta, el ángulo de funcionamiento estrecho permite una detección precisa de objetos que se dirigen directamente hacia el sensor, lo que reduce las falsas alarmas causadas por objetos en la zona periférica.
  1. InterfazEl módulo cuenta con una interfaz de 4 pines, que incluye pines VCC, GND, Trig y Echo. Este diseño de interfaz simple facilita la conexión a diversos microcontroladores y otros componentes electrónicos.

Explicación de la distribución de pines

Pin 1
Label
VCC
Function
Power Supply (Positive)
Voltage
5V DC
Connection
Arduino: 5V
Raspberry Pi: 5V (Common ground with module)
Pin 2
Label
Trig (Trigger)
Function
Trigger Input
▶ 10μs High Pulse to Start Measurement
▶ Low Level to Reset
Connection
Arduino: Any Digital Pin (e.g., D2)
Raspberry Pi: Any GPIO (e.g., GPIO17)
Pin 3
Label
Echo
Function
Echo Output
▶ High Duration = Round-Trip Time of Ultrasonic Waves
▶ Max High Time: 38ms (Timeout for No Obstacle)
Connection
Arduino: Any Digital Pin (e.g., D3)
Raspberry Pi: GPIO with **Voltage Divider** (5V→3.3V)
⚠️ Direct 5V Echo to Raspberry Pi may damage GPIO! Use 1kΩ + 2kΩ voltage divider.
Pin 4
Label
GND
Function
Power Ground (Common Ground)
Connection
Arduino/GND
Raspberry Pi/GND

Explicación:

El pin VCC alimenta el módulo. Conectarlo a una fuente de alimentación estable de 5 V, preferiblemente desde la salida de 5 V del microcontrolador, garantiza su correcto funcionamiento. Una fuente de alimentación estable es crucial para obtener lecturas precisas. Si la fuente de alimentación es inestable, puede generar mediciones de distancia inconsistentes. Por ejemplo, si se producen picos o caídas de tensión en la fuente de alimentación del HC-SR04, el sensor podría emitir pulsos ultrasónicos incorrectos o malinterpretar los ecos recibidos, lo que resultaría en cálculos de distancia inexactos.
El pin GND proporciona la conexión a tierra necesaria. Completa el circuito eléctrico y ayuda a mantener una tensión de referencia estable para el módulo. Sin una conexión a tierra adecuada, el módulo podría no funcionar o producir resultados erráticos. En un proyecto basado en Arduino, el pin GND del HC-SR04 suele conectarse al pin GND de la placa Arduino para garantizar una referencia a tierra común.
El pin Trig es donde empieza la magia. Cuando se envía un pulso de alto nivel de 10 μs a este pin, se activa el transmisor ultrasónico para que envíe la ráfaga de 8 pulsos de ondas ultrasónicas de 40 kHz. En un proyecto de Raspberry Pi basado en Python, se puede usar la biblioteca GPIO (Entrada/Salida de Propósito General) para generar este pulso de alto nivel de 10 μs. Este sencillo mecanismo de entrada digital facilita el control del proceso de medición de distancia.

The Echo pin is the key to obtaining the distance information. Once the ultrasonic waves are sent out, the Echo pin goes high. It remains high until the reflected waves are received by the ultrasonic receiver. The duration for which the Echo pin is high is directly proportional to the time it takes for the ultrasonic waves to travel to the obstacle and back. By measuring this time duration, we can calculate the distance to the obstacle using the formula Distance ( cm ) = Time ( μs ) × 0.0343 2 . In a C++-based Arduino project, you can use the pulseIn() function to measure the duration of the high-level pulse on the Echo pin.

Componentes principales y principio de funcionamiento

Componentes clave

Para comprender completamente el funcionamiento del módulo sensor ultrasónico HC-SR04, es fundamental familiarizarse primero con sus componentes principales. Cada pieza desempeña un papel distinto y crucial en el funcionamiento general del módulo.

  1. Transmisor ultrasónicoEste es el componente responsable del paso inicial del proceso de medición de distancias. Emite ondas ultrasónicas a una frecuencia de 40 kHz. Estas ondas de alta frecuencia son inaudibles para el oído humano, pero son clave para el funcionamiento de los sensores. Al activarse, el transmisor envía estas ondas al entorno. Imagínese un potente altavoz que emite ondas sonoras a una frecuencia muy superior a la que podemos oír. En una aplicación robótica, por ejemplo, el transmisor ultrasónico de un robot enviaría estas ondas de 40 kHz en la dirección en la que se mueve el robot, preparándose para detectar cualquier obstáculo en su camino.
  1. Receptor ultrasónicoComo su nombre indica, la función de los receptores ultrasónicos es captar las ondas ultrasónicas reflejadas por cualquier obstáculo en el rango de alcance de los sensores. Una vez que el transmisor emite las ondas, estas viajan por el aire hasta impactar un objeto. Las ondas rebotan, y el receptor se encarga de captarlas. Es como un micrófono de alta sensibilidad capaz de detectar los ecos más tenues de las ondas ultrasónicas. En un sistema de domótica donde se utiliza el HC-SR04 para detectar la presencia de una persona en una habitación, el receptor captaría las ondas que rebotan en el cuerpo de la persona.
  1. Circuito de controlEste es el cerebro detrás de la operación. El circuito de control gestiona toda la secuencia de procesamiento de señales. Coordina las acciones del transmisor y el receptor. Al recibir una señal de activación, ordena al transmisor que emita las ondas ultrasónicas. A continuación, monitoriza cuidadosamente el receptor para detectar las ondas reflejadas entrantes. Una vez recibidas las ondas, el circuito de control calcula el tiempo que tardan en llegar al obstáculo y regresar. Con base en este tiempo y en la velocidad conocida del sonido en el aire, calcula la distancia al obstáculo. En un entorno industrial, el circuito de control de un HC-SR04 utilizado en maquinaria automatizada gestionaría con precisión estas operaciones para garantizar mediciones de distancia precisas y el correcto funcionamiento de la maquinaria.

Cómo funciona

Ahora que conocemos los componentes clave, veamos paso a paso cómo el HC – SR04 mide realmente la distancia.

Señal de disparo: 

El proceso comienza con una señal de disparo. Al aplicar un pulso alto de 10 μs al pin Trig (Disparador) del módulo HC-SR04, es como si se le diera al sensor una orden de inicio. Este pulso eléctrico, corto pero significativo, inicia toda la secuencia de medición de distancia. Por ejemplo, en un proyecto basado en Arduino, se usaría una simple línea de código para enviar este pulso alto de 10 μs al pin Trig del HC-SR04, indicándole que comience el proceso de medición.

Propagación de ondas: 

Una vez activado, el transmisor ultrasónico entra en acción. El módulo emite una ráfaga de 8 pulsos ultrasónicos a una frecuencia de 40 kHz. Estos pulsos son como una serie de «balas sónicas» invisibles que se disparan al entorno. Tras enviar estos pulsos, el módulo entra en un estado de espera, esperando pacientemente a que las ondas impacten contra un obstáculo y reboten. En un escenario real, si se utilizara el HC-SR04 para medir la distancia a una pared en una habitación, los 8 pulsos viajarían hacia la pared, extendiéndose en forma de cono con un ángulo relativamente estrecho de unos 15 grados.

Detección de eco: 

El pin Echo es clave para detectar las ondas reflejadas. En cuanto se envían las ondas ultrasónicas, el pin Echo se activa. Así, el sensor indica que ha iniciado el proceso de medición. Luego, espera a que regresen las ondas reflejadas. Cuando el receptor ultrasónico las capta, el pin Echo se desactiva. El tiempo que el pin Echo permanece activo es igual al tiempo de ida y vuelta de las ondas ultrasónicas. En un proyecto Raspberry Pi, se usaría una función para medir el tiempo que el pin Echo permanece activo, lo cual es crucial para calcular la distancia.

Cálculo de distancia:

Distance Calculation: The final step is to calculate the distance to the obstacle. The formula for calculating the distance in centimeters is Distance (cm) = Time ((μs)) × 0.0343 2 . The factor 0.0343 comes from the speed of sound in air, which is approximately 343 m/s. Since the waves travel to the obstacle and back (a round-trip), we divide the total distance traveled by 2 to get the one-way distance to the obstacle. For example, if the time measured for the Echo pin to be high is 2000μs, then the distance would be calculated as 2000 × 0.0343 2 = 34.3 cm. This calculation is the same whether you're using the HC-SR04 in a simple hobbyist project or a complex industrial application.

Interfaz con microcontroladores populares

Guía de configuración de Arduino

Diagrama de cableado

Conectar el módulo sensor ultrasónico HC-SR04 a un Arduino es un proceso sencillo. Aquí te explicamos cómo:

  • VCCConecte el pin VCC del HC-SR04 al pin de 5 V del Arduino. Esto proporciona la alimentación necesaria al módulo sensor. Una fuente de alimentación estable de 5 V del Arduino garantiza el funcionamiento óptimo del sensor.
  • TierraEl pin GND (tierra) del HC-SR04 debe conectarse al pin GND del Arduino. Esto establece una referencia de tierra común para el sensor y el Arduino, lo cual es crucial para una comunicación eléctrica adecuada.
  • TrigonometríaConecte el pin Trig (Disparador) del HC-SR04 al pin digital 2 del Arduino. Este es el pin donde Arduino enviará el pulso de alto nivel de 10 μs para activar la medición de distancia en el HC-SR04.
  • EcoEl pin de eco del HC-SR04 está conectado al pin digital 3 del Arduino. El Arduino leerá el pulso de alta duración en este pin para calcular la distancia al obstáculo.
A continuación se muestra un diagrama de cableado simple para ilustrar las conexiones:
				
					       HC - SR04         Arduino
         VCC ------------ 5V
         GND ------------ GND
         Trig ------------ Digital Pin 2
         Echo ------------ Digital Pin 3
				
			

Ejemplo de código

A continuación se muestra un ejemplo de código Arduino básico para ayudarlo a comenzar a medir la distancia utilizando el HC – SR04:
				
					const int trigPin = 2;
const int echoPin = 3;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  float distance = duration * 0.0343 / 2;

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}
				
			
En la función de configuración, primero inicializamos la comunicación serial a una velocidad de 9600 baudios, lo que nos permite ver las lecturas de distancia en el Monitor Serial de Arduino. Luego, configuramos el pin trig como salida y el pin echo como entrada.
En la función de bucle, comenzamos configurando el trigPin en BAJO durante 2 microsegundos para asegurar un arranque limpio. Luego, lo configuramos en ALTO durante 10 microsegundos para activar el transmisor ultrasónico en el HC – SR04. Después, volvemos a configurar el trigPin en BAJO.
La función pulseIn se utiliza para medir la duración del pulso de alto nivel en el echoPin. Esta duración representa el tiempo que tardan las ondas ultrasónicas en viajar hasta el obstáculo y regresar. Calculamos la distancia mediante la fórmula: distancia = duración * 0,0343 / 2, donde 0,0343 es la velocidad del sonido en cm/μs y dividimos entre 2, ya que las ondas viajan hasta el obstáculo y regresan.
Finalmente, imprimimos la distancia calculada en el Monitor Serial y agregamos un retraso de 500 milisegundos antes de la próxima medición.

In the setup function, we first initialize the serial communication at a baud rate of 9600, which allows us to view the distance readings in the Arduino Serial Monitor. Then, we set the trigPin as an output pin and the echoPin as an input pin.

In the loop function, we start by setting the trigPin to LOW for 2 microseconds to ensure a clean start. Then, we set it HIGH for 10 microseconds to trigger the ultrasonic transmitter in the HC-SR04. After that, we set the trigPin back to LOW.

The pulseIn() function is then used to measure the duration of the high-level pulse on the echoPin. This duration represents the time it took for the ultrasonic waves to travel to the obstacle and back. We then calculate the distance using the formula distance = duration * 0.0343 / 2, where 0.0343 is the speed of sound in cm/μs and we divide by 2 because the waves travel to the obstacle and back.

Finally, we print the calculated distance to the Serial Monitor and add a 500-millisecond delay before the next measurement.

Consejos

  1. Medición precisa de alta duración:

When using the pulseIn() function, it's important to note that it measures the duration of a pulse. In the case of the HC-SR04, this is the time the Echo pin is high. To ensure accurate measurements, make sure there are no other electrical interferences that could affect the pulse duration. Also, be aware that if the obstacle is too far away, the pulse may time out. You can set a timeout value in the pulseIn() function to handle such cases gracefully. For example, long duration = pulseIn(echoPin, HIGH, 20000); where 20000 is the timeout value in microseconds.

  1. Cómo evitar fuentes de ruido:

Las ondas ultrasónicas pueden verse afectadas por fuentes de ruido intenso. Al colocar el HC-SR04 en su proyecto, evite zonas con ruidos intensos, como cerca de altavoces o en entornos industriales muy ruidosos. El ruido puede interferir con las ondas ultrasónicas emitidas por el sensor, lo que puede provocar mediciones de distancia imprecisas. Si debe utilizar el sensor en una zona ruidosa, considere utilizar materiales o carcasas que absorban el sonido para protegerlo del ruido.

Integración con Raspberry Pi

Precaución con el voltaje

Una de las consideraciones clave al integrar el HC-SR04 con una Raspberry Pi es el nivel de voltaje. Los pines GPIO (Entrada/Salida de Propósito General) de una Raspberry Pi solo admiten un voltaje máximo de 3,3 V. Sin embargo, el HC-SR04 funciona a 5 V, y su pin Echo puede generar una señal de 5 V. Conectar una señal de 5 V directamente a un pin GPIO de una Raspberry Pi puede dañarla.

To solve this issue, you can use a voltage divider circuit. A simple voltage divider using a 1kΩ and a 2kΩ resistor can be used to convert the 5V output from the Echo pin of the HC-SR04 to a 3.3V-compatible signal for the Raspberry Pi. The formula for calculating the output voltage V out of a voltage divider is V out = V in × R 2 R 1 + R 2 , where V in is the input voltage (5V in this case), R 1 is the first resistor (1kΩ), and R 2 is the second resistor (2kΩ). Plugging in the values, we get V out = 5 × 2000 1000 + 2000 3.33 V , which is within the safe range for the Raspberry Pi GPIO pin.

Alambrado

  • VCCConecte el pin VCC del HC-SR04 al pin de 5 V de la Raspberry Pi. Esto activa el módulo sensor del HC-SR04.

  • Tierra:El pin GND del HC – SR04 debe conectarse al pin GND de la Raspberry Pi para establecer una conexión a tierra común.
  • TrigonometríaConecte el pin Trig del HC-SR04 al GPIO 17 de la Raspberry Pi. La Raspberry Pi usará este pin para enviar el pulso de disparo de alto nivel de 10 μs al HC-SR04.
  • EcoEl pin Echo del HC-SR04, tras pasar por el circuito divisor de tensión (resistencias de 1 kΩ y 2 kΩ), se conecta al GPIO 27 de la Raspberry Pi. La Raspberry Pi leerá el pulso de alta duración en este pin para calcular la distancia.
El cableado se puede resumir de la siguiente manera:
				
					       HC - SR04         Raspberry Pi
         VCC ------------ 5V
         GND ------------ GND
         Trig ------------ GPIO 17
         Echo (through voltage divider) ------------ GPIO 27
				
			

Código Python

Aquí hay un ejemplo de código Python que utiliza la biblioteca RPi.GPIO para interconectar el HC – SR04 con una Raspberry Pi:
				
					import RPi.GPIO as GPIO
import time

# Set the GPIO mode
GPIO.setmode(GPIO.BCM)

# Define the pins
TRIG = 17
ECHO = 27

# Set up the pins
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)

def measure_distance():
    # Send a 10μs high - level pulse to trigger the sensor
    GPIO.output(TRIG, True)
    time.sleep(0.00001)
    GPIO.output(TRIG, False)

    # Wait for the echo to start
    while GPIO.input(ECHO)==0:
        pulse_start = time.time()

    # Wait for the echo to end
    while GPIO.input(ECHO)==1:
        pulse_end = time.time()

    pulse_duration = pulse_end - pulse_start
    distance = pulse_duration * 17150  # Speed of sound in cm/s divided by 2
    distance = round(distance, 2)

    return distance

try:
    while True:
        dist = measure_distance()
        print(f"Distance: {dist} cm")
        time.sleep(1)

except KeyboardInterrupt:
    print("Measurement stopped by User")
    GPIO.cleanup()

				
			

In this code, we first import the necessary libraries, RPi.GPIO for controlling the GPIO pins on the Raspberry Pi and time for adding delays. We then set the GPIO mode to BCM (Broadcom SOC channel numbering). We define the TRIG and ECHO pins and set up the TRIG pin as an output and the ECHO pin as an input.

The measure_distance function is where the magic happens. It sends a 10μs high - level pulse to the TRIG pin to trigger the HC - SR04. Then, it waits for the ECHO pin to go high (indicating the start of the echo) and records the start time. It then waits for the ECHO pin to go low (indicating the end of the echo) and records the end time. The time difference between the start and end times is used to calculate the distance. The distance is calculated by multiplying the pulse duration by the speed of sound in cm/s (34300 cm/s) and dividing by 2 (since the sound travels to the obstacle and back).

In the try block, we continuously measure the distance and print it to the console every second. If the user presses Ctrl + C (KeyboardInterrupt), the program cleans up the GPIO pins and exits gracefully.

Configuración del ESP32

Asignación de pines

El ESP32 es un potente microcontrolador con múltiples pines GPIO (Entrada/Salida de Propósito General). Al conectar el HC-SR04 a un ESP32, puede usar los 5 V del pin VOUT del ESP32 para alimentar el HC-SR04. Los pines Trig y Echo pueden conectarse a cualquier pin GPIO disponible. Por ejemplo, puede conectar el pin Trig al GPIO 14 y el pin Echo al GPIO 15. Sin embargo, asegúrese de elegir pines que no estén siendo utilizados por otros componentes de su proyecto.

Código IDE de Arduino

El código para usar el HC-SR04 con un ESP32 en el IDE de Arduino es bastante similar al de Arduino. A continuación, un ejemplo:
				
					const int trigPin = 14;
const int echoPin = 15;

void setup() {
  Serial.begin(115200);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  float distance = duration * 0.0343 / 2;

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}

				
			

In the setup function, we initialize the serial communication at a baud rate of 115200. We then set the trigPin as an output pin and the echoPin as an input pin.

In the loop function, the process of triggering the HC - SR04 and measuring the distance is the same as in the Arduino code. We send a 10μs high - level pulse to the trigPin to trigger the sensor, measure the duration of the high - level pulse on the echoPin using pulseIn , and calculate the distance.

Sin embargo, al usar el ESP32 en el IDE de Arduino, asegúrese de seleccionar la placa ESP32 correcta en el IDE. Además, si planea integrar el ESP32 con funciones del IoT (Internet de las Cosas), como wifi o Bluetooth, deberá gestionar la inicialización de estas funciones en su código. Por ejemplo, si desea enviar datos de distancia por wifi, deberá agregar código para conectarse a una red wifi y configurar un servidor o cliente para enviar los datos.

Ideas de proyectos creativos con HC-SR04

Robot que evita obstáculos

El robot esquiva-obstáculos es una aplicación fascinante y práctica del módulo sensor ultrasónico HC-SR04. Su función principal es desplazarse por su entorno de forma segura detectando obstáculos en su camino. Esto se logra mediante el uso de múltiples sensores HC-SR04 estratégicamente ubicados en el robot.

Los sensores están configurados para detectar obstáculos desde diferentes direcciones. Por ejemplo, se coloca un conjunto de sensores en la parte frontal del robot para detectar cualquier obstáculo que se encuentre directamente en su trayectoria. Además, se colocan sensores a los lados del robot para detectar obstáculos que puedan acercarse por los lados. Cuando se detecta un obstáculo, el sistema de control del robot, que suele basarse en un microcontrolador como Arduino, calcula la distancia al obstáculo utilizando los datos de los sensores HC-SR04.

Con base en esta información de distancia, el sistema de control determina la acción adecuada para evitar el obstáculo. Esto suele implicar dirigir los motores de forma que cambie la dirección del robot. Por ejemplo, si se detecta un obstáculo en el lado izquierdo del robot, el sistema de control puede indicar al motor izquierdo que reduzca la velocidad o invierta la marcha, mientras que el motor derecho continúa funcionando a velocidad normal. Esto hace que el robot gire a la derecha, alejándose del obstáculo.

Para construir este proyecto, necesitará varios componentes clave. Un Arduino es el cerebro del sistema. Procesa los datos recibidos de los sensores HC-SR04 y envía comandos a los motores. Los motores son necesarios para accionar las ruedas del robot, lo que le permite moverse. Un controlador de motor, como el L298N, es esencial para controlar los motores. El L298N puede manejar los requisitos de corriente relativamente altos de los motores y permite que Arduino controle la velocidad y la dirección de los motores eficazmente. Y, por supuesto, se necesitan varios sensores HC-SR04 para la detección frontal y lateral. Al combinar estos componentes y escribir el código adecuado para controlarlos, puede crear un robot esquiva-obstáculos completamente funcional.

Papelera inteligente

El bote de basura inteligente es un excelente ejemplo de cómo el módulo de sensor ultrasónico HC-SR04 puede utilizarse para mejorar la funcionalidad de objetos cotidianos. En esta aplicación, el bote de basura inteligente está diseñado con una función de apertura automática de la tapa. Esta función se activa cuando una persona se acerca al bote de basura.

El sensor HC-SR04 está montado en el cubo de basura para detectar la distancia a cualquier objeto que se encuentre frente a él. Cuando alguien se acerca al cubo, el sensor mide la distancia entre este y la persona. Si la distancia medida es inferior a un umbral preestablecido (por ejemplo, 20 cm), indica que una persona está lo suficientemente cerca del cubo de basura como para usar el cubo. En ese momento, el sensor envía una señal a un servomotor.

El servomotor está conectado a la tapa del cubo de basura y se encarga de abrirlo y cerrarlo. Al recibir la señal del sensor HC-SR04, el servomotor gira para abrir la tapa. Este funcionamiento manos libres no solo es cómodo para el usuario, sino que también ayuda a mantener el cubo de basura limpio e higiénico, ya que no es necesario tocar la tapa directamente.

Al escribir el código para este proyecto, establecer el umbral de distancia es crucial. Debe calibrar cuidadosamente este valor según los requisitos específicos de su contenedor inteligente. Si el umbral es demasiado alto, la tapa podría abrirse innecesariamente cuando alguien aún se encuentre a cierta distancia del contenedor. Por otro lado, si es demasiado bajo, la tapa podría no abrirse a tiempo cuando el usuario se acerque. Un umbral de distancia bien calibrado garantiza el funcionamiento óptimo del contenedor inteligente.

Monitor de nivel de agua

El monitor de nivel de agua es una aplicación práctica del módulo sensor ultrasónico HC-SR04, especialmente en situaciones donde es necesario controlar el nivel de agua en un tanque. Esto puede ocurrir en un tanque doméstico de almacenamiento de agua, un tanque industrial o incluso un acuario.

El sensor HC-SR04 se instala sobre el tanque de agua. Emite ondas ultrasónicas hacia la superficie del agua. Estas ondas viajan por el aire y rebotan al impactar la superficie. El sensor mide el tiempo que tardan las ondas en llegar a la superficie y regresar. Utilizando la velocidad del sonido en el aire, se puede calcular la distancia desde el sensor hasta la superficie del agua.

En muchos casos, el monitor de nivel de agua está integrado con un sistema IoT (Internet de las Cosas). Por ejemplo, puede conectarse a una aplicación Blynk. Los datos calculados del nivel de agua se envían a la aplicación, lo que permite a los usuarios monitorizarlo a distancia. Esto resulta especialmente útil en aplicaciones industriales donde la monitorización en tiempo real de los niveles de agua es crucial para el correcto funcionamiento de los procesos.

Un aspecto importante a considerar al instalar un monitor de nivel de agua es la calibración. Dado que el sensor se instala a cierta altura sobre la base del tanque, esta altura debe tenerse en cuenta al calcular la distancia. Por ejemplo, si el sensor se instala a 50 cm sobre la base del tanque y la distancia calculada entre el sensor y la superficie del agua es de 30 cm, el nivel real del agua en el tanque es de 20 cm. Calibrando con precisión la altura del sensor y realizando los cálculos necesarios, se garantiza que el monitor de nivel de agua proporcione lecturas precisas y fiables.

Solución de problemas comunes

Lecturas inconsistentes

Uno de los problemas más comunes que encuentran los usuarios con el módulo sensor ultrasónico HC-SR04 son las lecturas inconsistentes. Esto puede ser bastante frustrante, especialmente cuando se depende de mediciones de distancia precisas para el proyecto.

Causa: Reflexiones de múltiples trayectorias o potencia inestable

Las reflexiones multitrayecto se producen cuando las ondas ultrasónicas emitidas por el sensor rebotan en múltiples superficies antes de llegar al receptor. Esto puede ocurrir en entornos complejos con muchos objetos o en áreas con grandes superficies reflectantes. Por ejemplo, en una habitación con muchos muebles y espejos, las ondas ultrasónicas pueden rebotar en los muebles, las paredes y los espejos antes de ser detectadas por el receptor. Esto dificulta que el sensor calcule con precisión la distancia al objeto objetivo, lo que resulta en lecturas inconsistentes.

La inestabilidad de la alimentación es otro factor. Si la alimentación del HC-SR04 no es estable, el sensor puede funcionar mal. Las fluctuaciones de voltaje pueden afectar el correcto funcionamiento del transmisor y el receptor ultrasónico, lo que provoca mediciones de distancia erráticas. Por ejemplo, si se utiliza una batería baja o un adaptador de corriente con mala regulación de voltaje, es posible que el sensor no reciba una alimentación constante de 5 V, lo que puede afectar su rendimiento.

Solución: agregue una carcasa protectora para el sensor y use una fuente de alimentación regulada de 5 V

Añadir una carcasa protectora alrededor del sensor puede ayudar a reducir el impacto de las reflexiones multitrayectoria. La carcasa puede diseñarse para dirigir las ondas ultrasónicas de forma más focalizada, reduciendo así el riesgo de que reboten en superficies no deseadas. Una carcasa sencilla de cartón o plástico con una abertura estrecha en la parte frontal puede ser eficaz en este sentido.

El uso de una fuente de alimentación regulada de 5 V es crucial para un funcionamiento estable. Una fuente de alimentación con regulación de voltaje integrada, como un adaptador de pared de alta calidad o un módulo de alimentación con regulación de voltaje, garantiza que el HC-SR04 reciba una tensión constante de 5 V. Esto ayuda a eliminar cualquier problema causado por fluctuaciones de voltaje y mejora la precisión y consistencia de las lecturas de los sensores.

Sin señal de salida

Otro problema común es cuando el HC-SR04 no produce una señal de salida. Esto puede indicar diversos problemas, y es importante comprobar sistemáticamente cada posibilidad para que el sensor vuelva a funcionar.
Verificar: verificar el cableado (especialmente VCC/GND), el divisor de voltaje para Raspberry Pi y la lógica del código para la sincronización del disparador/eco
En primer lugar, verifique cuidadosamente el cableado. Asegúrese de que los pines VCC y GND estén correctamente conectados a la fuente de alimentación y a tierra, respectivamente. Una conexión floja o incorrecta puede impedir que el sensor se encienda correctamente o causar cortocircuitos que interrumpan el funcionamiento normal del módulo. En muchos casos, una simple inspección visual y la reconexión de los cables pueden solucionar el problema.

Si usa el HC-SR04 con una Raspberry Pi, no olvide revisar el circuito divisor de voltaje. Como se mencionó anteriormente, los pines GPIO de la Raspberry Pi solo admiten 3.3 V, y se suele usar un divisor de voltaje para convertir la salida de 5 V del pin Echo del HC-SR04 a una señal compatible con 3.3 V. Si los componentes del divisor de voltaje (generalmente resistencias) están dañados o mal conectados, la Raspberry Pi puede no recibir la señal de salida.

La lógica del código para la sincronización del disparo/eco también es un aspecto crítico que debe verificarse. Asegúrese de que el código envíe la señal de disparo correcta (un pulso de alto nivel de 10 μs) al pin Trig y de que mida correctamente la duración del pulso de alto nivel en el pin Echo. Un código incorrecto puede impedir que el sensor se dispare o provocar que el microcontrolador malinterprete la señal de eco, lo que resulta en una salida nula o cálculos de distancia incorrectos. Por ejemplo, si los tiempos de retardo del código están mal configurados, se puede interrumpir la secuencia correcta de disparo del sensor y lectura del eco.

Errores fuera de rango

Los errores de fuera de rango pueden ocurrir cuando el objeto detectado está demasiado cerca o demasiado lejos del sensor HC-SR04. Esto puede causar problemas en el proyecto, especialmente si el código no está preparado para manejar estas situaciones.
Solución: Implemente un tiempo de espera (por ejemplo, 38 ms para que no haya eco) y gestione los valores 0 o ∞ con elegancia en el código.
Implementar un tiempo de espera en el código es útil para gestionar casos en los que el objeto está demasiado lejos como para que el sensor detecte un eco en un tiempo razonable. Por ejemplo, si no se recibe eco en 38 ms, es una buena indicación de que el objeto está fuera del alcance del sensor. En el código, se puede configurar un temporizador que se inicia al enviar la señal de disparo y se detiene al recibir un eco. Si el temporizador alcanza el tiempo de espera sin recibir un eco, se puede asumir que el objeto está fuera del alcance y tomar las medidas pertinentes, como mostrar un mensaje de error o establecer un valor de distancia predeterminado.

También es importante gestionar correctamente los valores 0 o ∞ (infinito) en el código. Un valor de distancia de 0 puede indicar que el sensor está demasiado cerca de un objeto, más cerca de su rango mínimo detectable. En tales casos, conviene establecer un umbral de distancia mínima en el código y ajustar el valor según corresponda. De igual forma, si el código calcula un valor de distancia extremadamente grande (cercano al infinito), es probable que indique un error, como un problema con la detección del eco o cálculos incorrectos. El código debería poder gestionar estos casos correctamente, por ejemplo, registrando un mensaje de error o intentando volver a medir la distancia.

HC-SR04 vs. otros sensores de distancia

vs. sensores infrarrojos

Table 1: HC-SR04 (Ultrasonic) vs Infrared Sensors

HC-SR04

Range: 2cm–400cm (Abstract 1, 6)

Accuracy: ±3mm (ideal conditions, Abstract 1)

Voltage: 5V (fixed, Abstract 1)

Pros: No light interference, longer range (Abstract 5)

Cons: Reduced near-range accuracy, ultrasonic noise sensitivity (Abstract 1)

Infrared

Range: Typically <100cm (Abstract 1, 5)

Accuracy: ±5mm–1cm (affected by color/material, Abstract 5)

Voltage: 3.3V–5V (flexible, Abstract 5)

Pros: Small size, low cost (Abstract 1)

Cons: Ambient light/color interference (Abstract 5)

La tabla 1 destaca la compensación entre la detección robusta de largo alcance (2 cm–400 cm) del HC-SR04 y el tamaño compacto/bajo costo de los sensores infrarrojos, destacando la inmunidad del HC-SR04 a la interferencia de la luz frente a la vulnerabilidad de los infrarrojos a la luz ambiental y al color del material.

vs. sensores láser

Table 2: HC-SR04 vs Laser/ToF (VL53L0X)

HC-SR04

Range: 2cm–400cm (Abstract 1, 4)

Accuracy: ±3mm (Abstract 4)

Update Rate: 60ms (Abstract 4)

Cost: ~$2–3 (Abstract 1)

Weakness: 15° cone angle, environmental noise (Abstract 1)

Laser/ToF (VL53L0X)

Range: 5cm–200cm (Abstract 1, 3)

Accuracy: ±1mm–3mm (Abstract 3)

Update Rate: 20ms (faster, Abstract 4)

Cost: ~$10–15 (Abstract 1)

Strength: 5° narrow beam, interference-resistant (Abstract 3)

La Tabla 2 compara la relación costo-beneficio (2-3 dólares) y el amplio alcance (400 cm) del HC-SR04 con la precisión superior (±1 mm) y la velocidad (tasa de actualización de 20 ms) de los sensores láser/ToF, ideales para aplicaciones que requieren alta precisión en entornos controlados.

vs. EE. UU. - Módulo 100

Table 3: HC-SR04 vs US-100 (Ultrasonic)

HC-SR04

Range: 2cm–400cm (Abstract 2, 6)

Accuracy: ±3mm (nominal, Abstract 2)

Voltage: 5V only (Abstract 6)

Feature: GPIO-only, no temperature compensation (Abstract 3)

Issue: Random values beyond 400cm (Abstract 6)

US-100

Range: 2cm–450cm (Abstract 2, 3)

Accuracy: ±2mm (better in tests, Abstract 3)

Voltage: 3.3V–5V (Abstract 3)

Feature: Temperature compensation (UART mode), error codes (Abstract 6)

Downside: Higher cost ($5–8), UART setup required (Abstract 3)

La tabla 3 muestra el alcance mejorado del US-100 (450 cm), la mejor precisión (±2 mm) y la compatibilidad de 3,3 V/5 V frente a la simplicidad del HC-SR04 (solo GPIO), destacando la función de compensación de temperatura del US-100 para uso industrial a un coste mayor (5–8 dólares).

Técnicas avanzadas y optimizaciones

Calibración multisensor

Para aplicaciones más complejas, especialmente en escenarios donde una vista de 360° es esencial, el uso de múltiples sensores HC-SR04 puede ser revolucionario. En una aplicación robótica, por ejemplo, tener múltiples sensores HC-SR04 estratégicamente ubicados alrededor del cuerpo del robot le permite detectar obstáculos desde todas las direcciones, proporcionando una vista completa de su entorno.

Sin embargo, al utilizar varios sensores, la interferencia cruzada puede convertirse en un problema importante. La interferencia cruzada se produce cuando las ondas ultrasónicas emitidas por un sensor interfieren con el funcionamiento de otro. Esto puede generar lecturas inexactas, ya que los sensores pueden malinterpretar las ondas interferentes como ecos de obstáculos reales.

Para mitigar la interferencia por diafonía, se pueden emplear varias técnicas. Una de ellas es la multiplexación temporal de los sensores. Esto implica activarlos uno a uno, con intervalos de tiempo suficientes entre cada activación. Por ejemplo, si tiene cuatro sensores HC-SR04 en un robot, puede activar el sensor 1, esperar a que complete su ciclo de medición, luego activar el sensor 2, y así sucesivamente. De esta manera, se garantiza que las ondas ultrasónicas de un sensor no se superpongan con las de otro, lo que reduce el riesgo de diafonía.

Otra técnica consiste en utilizar materiales de blindaje. Colocar una barrera física, como una lámina fina de metal o un material absorbente de sonido, entre los sensores puede ayudar a impedir que las ondas ultrasónicas de un sensor lleguen a otro. Esto puede ser especialmente útil cuando los sensores están ubicados muy cerca unos de otros.

La calibración también es crucial al utilizar varios sensores. Cada sensor puede tener características ligeramente diferentes, como la sensibilidad o el ángulo del haz. Al calibrar los sensores, se pueden tener en cuenta estas diferencias y garantizar la coherencia de los datos de todos ellos. Esto puede implicar medir la distancia a un objeto conocido con cada sensor y ajustar las lecturas en función de las diferencias.

Filtrado de ruido

En algunos entornos, las lecturas del HC-SR04 pueden ser inestables, con pequeñas fluctuaciones en la distancia medida, causadas por diversos factores, como ruido eléctrico, pequeñas corrientes de aire o interferencias de otros dispositivos electrónicos cercanos. Para solucionar este problema, se pueden aplicar técnicas de filtrado de ruido.

Un método común es el filtro de media móvil. Este filtro funciona calculando el promedio de una serie de lecturas de distancia consecutivas. Por ejemplo, en lugar de usar una sola lectura de distancia, se pueden tomar las últimas cinco lecturas y calcular su promedio. Esto suaviza las lecturas inestables, ya que las pequeñas fluctuaciones tienden a cancelarse entre sí al promediarse. En Python, la implementación de un filtro de media móvil simple para las lecturas de distancia HC-SR04 podría verse así:
				
					distance_readings = []
num_readings = 5

def moving_average_filter(new_distance):
    distance_readings.append(new_distance)
    if len(distance_readings) > num_readings:
        distance_readings.pop(0)
    return sum(distance_readings) / len(distance_readings)

				
			

Otro método de filtrado eficaz es el filtro de mediana. Este filtro reemplaza cada lectura de distancia con el valor de la mediana de un conjunto de lecturas consecutivas. La mediana es menos sensible a los valores extremos o atípicos que la media. Por ejemplo, si tiene un conjunto de 5 lecturas de distancia[20, 22, 18, 50, 21]El valor de la mediana es 21. Al usar el filtro de mediana, el valor atípico de 50 no afectaría significativamente el resultado filtrado. En Arduino, la implementación de un filtro de mediana podría ser la siguiente:

				
					const int numReadings = 5;
int readings[numReadings];
int readIndex = 0;
int total = 0;
int averageDistance = 0;

void addReading(int newReading) {
  total = total - readings[readIndex];
  readings[readIndex] = newReading;
  total = total + readings[readIndex];
  readIndex = readIndex + 1;
  if (readIndex >= numReadings) {
    readIndex = 0;
  }
}

int getMedian() {
  int sortedReadings[numReadings];
  for (int i = 0; i < numReadings; i++) {
    sortedReadings[i] = readings[i];
  }
  for (int i = 0; i < numReadings - 1; i++) {
    for (int j = i + 1; j < numReadings; j++) {
      if (sortedReadings[i] > sortedReadings[j]) {
        int temp = sortedReadings[i];
        sortedReadings[i] = sortedReadings[j];
        sortedReadings[j] = temp;
      }
    }
  }
  return sortedReadings[numReadings / 2];
}

				
			

Modos de trabajo personalizados

Algunas de las versiones más recientes del módulo sensor ultrasónico HC-SR04 ofrecen mayor flexibilidad mediante modos de trabajo personalizados. Estos modos se pueden configurar mediante la configuración de resistencias, lo que permite diferentes protocolos de comunicación y características operativas.
Uno de estos modos es el GPIO (Entrada/Salida de Propósito General), el modo estándar para la mayoría de las aplicaciones básicas. En este modo, el módulo funciona como se describe en las secciones anteriores, con los pines Trig y Echo utilizados para activar la medición de distancia y recibir la señal de eco, respectivamente.

Sin embargo, también hay modos UART (Receptor/Transmisor Asíncrono Universal) e I₂C (Circuito Interintegrado) disponibles en ciertas versiones del HC-SR04. En modo UART, el módulo puede comunicarse con un microcontrolador mediante comunicación serie. Esto puede ser útil en aplicaciones donde se prefiere un protocolo de comunicación serie más estandarizado, como en algunos sistemas de control industrial o al integrarse con dispositivos con interfaces UART integradas.

El modo I2C, por otro lado, permite la comunicación a través de un bus I2C. Esto resulta beneficioso en configuraciones multidispositivo donde varios sensores o componentes necesitan comunicarse con un solo microcontrolador. El bus I2C permite un uso más eficiente de los pines del microcontrolador, ya que varios dispositivos pueden compartir el mismo bus de dos hilos (SDA – Línea de Datos Serie y SCL – Línea de Reloj Serie).

Para configurar el módulo para estos modos personalizados, consulte la documentación del módulo para determinar los valores de resistencia adecuados. Por ejemplo, para habilitar el modo UART, podría necesitar conectar una resistencia específica entre dos pines del módulo. Una vez configuradas correctamente las resistencias, el módulo puede programarse para comunicarse en el modo deseado. Esto puede implicar escribir código diferente en el microcontrolador para gestionar los protocolos de comunicación UART o I²C. Por ejemplo, en un proyecto Raspberry Pi con el HC-SR04 configurado con I²C, se usaría la biblioteca smbus de Python para comunicarse con el sensor a través del bus I²C.

Conclusión

El módulo sensor ultrasónico HC-SR04 sigue siendo un elemento básico en proyectos electrónicos gracias a su precio asequible, facilidad de uso y versatilidad. Al dominar su principio de funcionamiento, interactuar con microcontroladores populares y explorar aplicaciones creativas, podrá aprovechar al máximo su potencial para todo, desde la medición básica de distancias hasta sistemas complejos de IoT. ¿Tiene preguntas o ideas para proyectos? ¡Compártalas con nosotros a través del formulario! 🛠️

Compartir en:

Scroll al inicio

Cotización