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.

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:
Explicación:
- 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.
- 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.
- 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.
- Á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.
- 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
Raspberry Pi: 5V (masa común con el módulo)
▶ Pulso ALTO de 10 μs para iniciar la medición
▶ Nivel BAJO para reiniciar
Raspberry Pi: cualquier GPIO (p. ej., GPIO17)
▶ Duración del nivel ALTO = tiempo de ida y vuelta de las ondas ultrasónicas
▶ Tiempo ALTO máximo: 38 ms (tiempo de espera si no hay obstáculo)
Raspberry Pi: GPIO con divisor de tensión (5V→3,3V)
Raspberry Pi/GND
Explicación:
El pin Echo es la clave para obtener la información de distancia. Una vez que se emiten las ondas ultrasónicas, el pin Echo pasa a nivel alto. Permanece en nivel alto hasta que el receptor ultrasónico recibe las ondas reflejadas. La duración durante la cual el pin Echo está en nivel alto es directamente proporcional al tiempo que tardan las ondas ultrasónicas en viajar hasta el obstáculo y volver. Midiendo esta duración, podemos calcular la distancia al obstáculo mediante la fórmula . En un proyecto de Arduino basado en C++, puedes usar la función pulseIn() para medir la duración del pulso de nivel alto en el pin Echo.
Componentes principales y principio de funcionamiento
Componentes clave
- 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.
- 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.
- 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:
Cálculo de la distancia: El paso final es calcular la distancia al obstáculo. La fórmula para calcular la distancia en centímetros es . El factor 0,0343 proviene de la velocidad del sonido en el aire, que es de aproximadamente 343 m/s. Dado que las ondas viajan hasta el obstáculo y regresan (ida y vuelta), dividimos la distancia total recorrida entre 2 para obtener la distancia de ida hasta el obstáculo. Por ejemplo, si el tiempo medido durante el cual el pin Echo está en nivel alto es de 2000 μs, la distancia se calcularía como cm. Este cálculo es el mismo tanto si utilizas el HC-SR04 en un proyecto sencillo de aficionado como en una aplicación industrial compleja.
Interfaz con microcontroladores populares
Guía de configuración de Arduino
Diagrama de cableado
- 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.
HC - SR04 Arduino
VCC ------------ 5V
GND ------------ GND
Trig ------------ Digital Pin 2
Echo ------------ Digital Pin 3
Ejemplo de código
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 setup, primero inicializamos la comunicación serie a una velocidad de 9600 baudios, lo que nos permite ver las lecturas de distancia en el Monitor Serie de Arduino. Luego, configuramos trigPin como pin de salida y echoPin como pin de entrada.
En la función loop, comenzamos poniendo trigPin en nivel BAJO durante 2 microsegundos para asegurar un inicio limpio. Después, lo ponemos en nivel ALTO durante 10 microsegundos para activar el transmisor ultrasónico del HC-SR04. A continuación, volvemos a poner trigPin en nivel BAJO.
Luego se utiliza la función pulseIn() para medir la duración del pulso de nivel alto en echoPin. Esta duración representa el tiempo que tardaron las ondas ultrasónicas en viajar hasta el obstáculo y regresar. Después calculamos la distancia con la fórmula distance = duration * 0.0343 / 2, donde 0,0343 es la velocidad del sonido en cm/μs y dividimos entre 2 porque las ondas viajan hasta el obstáculo y regresan.
Finalmente, imprimimos la distancia calculada en el Monitor Serie y añadimos un retardo de 500 milisegundos antes de la siguiente medición.
Consejos
- Medición precisa de alta duración:
Al utilizar la función pulseIn(), es importante tener en cuenta que mide la duración de un pulso. En el caso del HC-SR04, es el tiempo que el pin Echo permanece en nivel alto. Para garantizar mediciones precisas, asegúrate de que no haya otras interferencias eléctricas que puedan afectar la duración del pulso. Además, ten en cuenta que, si el obstáculo está demasiado lejos, el pulso puede agotar el tiempo de espera. Puedes establecer un valor de tiempo de espera (timeout) en la función pulseIn() para gestionar estos casos de forma adecuada. Por ejemplo, long duration = pulseIn(echoPin, HIGH, 20000);, donde 20000 es el valor del tiempo de espera en microsegundos.
- 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
Para resolver este problema, puedes utilizar un circuito divisor de tensión. Se puede usar un divisor de tensión sencillo con una resistencia de 1 kΩ y otra de 2 kΩ para convertir la salida de 5 V del pin Echo del HC-SR04 en una señal compatible con los 3,3 V de la Raspberry Pi. La fórmula para calcular la tensión de salida de un divisor de tensión es , donde es la tensión de entrada (5 V en este caso), es la primera resistencia (1 kΩ) y es la segunda resistencia (2 kΩ). Sustituyendo los valores, obtenemos
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.
HC - SR04 Raspberry Pi
VCC ------------ 5V
GND ------------ GND
Trig ------------ GPIO 17
Echo (through voltage divider) ------------ GPIO 27
Código Python
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()
En este código, primero importamos las bibliotecas necesarias: RPi.GPIO, para controlar los pines GPIO de la Raspberry Pi, y time, para añadir retardos. Después configuramos el modo GPIO como BCM (numeración de canales del SoC de Broadcom). Definimos los pines TRIG y ECHO, y configuramos el pin TRIG como salida y el pin ECHO como entrada.
La función measure_distance es donde ocurre la magia. Envía un pulso de nivel alto de 10 μs al pin TRIG para activar el HC-SR04. Luego espera a que el pin ECHO pase a nivel alto (lo que indica el inicio del eco) y registra el tiempo de inicio. A continuación, espera a que el pin ECHO pase a nivel bajo (lo que indica el final del eco) y registra el tiempo de finalización. La diferencia entre el tiempo de inicio y el de finalización se utiliza para calcular la distancia. La distancia se calcula multiplicando la duración del pulso por la velocidad del sonido en cm/s (34 300 cm/s) y dividiendo entre 2 (ya que el sonido viaja hasta el obstáculo y regresa).
En el bloque try, medimos continuamente la distancia y la imprimimos en la consola cada segundo. Si el usuario presiona Ctrl + C (KeyboardInterrupt), el programa limpia los pines GPIO y termina de forma ordenada.
Configuración del ESP32
Asignación de pines
Código IDE de Arduino
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);
}
En la función setup, inicializamos la comunicación serie a una velocidad de 115 200 baudios. Luego configuramos trigPin como pin de salida y echoPin como pin de entrada.
En la función loop, el proceso de activar el HC-SR04 y medir la distancia es el mismo que en el código de Arduino. Enviamos un pulso de nivel alto de 10 μs a trigPin para activar el sensor, medimos la duración del pulso de nivel alto en echoPin mediante pulseIn y calculamos la distancia.
Ideas de proyectos creativos con HC-SR04
Robot que evita obstáculos
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 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 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
Causa: Reflexiones de múltiples trayectorias o potencia inestable
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
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
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
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
HC-SR04
Rango: 2 cm–400 cm (Resumen 1, 6)
Precisión: ±3 mm (condiciones ideales, Resumen 1)
Tensión: 5 V (fija, Resumen 1)
Ventajas: sin interferencia de la luz, mayor alcance (Resumen 5)
Desventajas: menor precisión a corta distancia, sensibilidad al ruido ultrasónico (Resumen 1)
Infrarrojo
Rango: normalmente <100 cm (Resumen 1, 5)
Precisión: ±5 mm–1 cm (afectada por el color/material, Resumen 5)
Tensión: 3,3 V–5 V (flexible, Resumen 5)
Ventajas: tamaño reducido, bajo costo (Resumen 1)
Desventajas: interferencia de la luz ambiental y del color (Resumen 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
HC-SR04
Rango: 2 cm–400 cm (Resumen 1, 4)
Precisión: ±3 mm (Resumen 4)
Frecuencia de actualización: 60 ms (Resumen 4)
Costo: ~2–3 USD (Resumen 1)
Punto débil: ángulo de cono de 15°, ruido ambiental (Resumen 1)
Láser/ToF (VL53L0X)
Rango: 5 cm–200 cm (Resumen 1, 3)
Precisión: ±1 mm–3 mm (Resumen 3)
Frecuencia de actualización: 20 ms (más rápida, Resumen 4)
Costo: ~10–15 USD (Resumen 1)
Punto fuerte: haz estrecho de 5°, resistente a interferencias (Resumen 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
HC-SR04
Rango: 2 cm–400 cm (Resumen 2, 6)
Precisión: ±3 mm (nominal, Resumen 2)
Tensión: solo 5 V (Resumen 6)
Característica: solo GPIO, sin compensación de temperatura (Resumen 3)
Problema: valores aleatorios más allá de 400 cm (Resumen 6)
US-100
Rango: 2 cm–450 cm (Resumen 2, 3)
Precisión: ±2 mm (mejor en las pruebas, Resumen 3)
Tensión: 3,3 V–5 V (Resumen 3)
Característica: compensación de temperatura (modo UART), códigos de error (Resumen 6)
Desventaja: mayor costo (5–8 USD), requiere configuración UART (Resumen 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
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
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
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.
Temporización, adaptación de nivel y errores del sensor HC-SR04
El HC-SR04 estima distancia por el tiempo de ida y vuelta de una ráfaga ultrasónica mediante distancia = tiempo de eco × velocidad del sonido / 2. Las variantes pueden diferir; compruebe alimentación y nivel de Echo y adapte una salida de 5 V antes de una entrada exclusiva de 3,3 V.
- Genere el disparo: aplique el ancho exigido por el módulo y mida el pulso Echo devuelto.
- Defina un tiempo límite: deje de esperar si no llega eco para evitar bloqueo del programa.
- Compense la velocidad: la temperatura modifica la conversión y el aire añade error.
- Respete la geometría: superficies blandas, inclinadas, estrechas o muy próximas desvían la señal.
- Evite interferencias: alterne varios sensores y descarte saltos imposibles con filtrado limitado.




