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 (Common ground with module)
▶ 10μs High Pulse to Start Measurement
▶ Low Level to Reset
Raspberry Pi: Any GPIO (e.g., GPIO17)
▶ High Duration = Round-Trip Time of Ultrasonic Waves
▶ Max High Time: 38ms (Timeout for No Obstacle)
Raspberry Pi: GPIO with **Voltage Divider** (5V→3.3V)
Raspberry Pi/GND
Explicación:
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 . 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
- 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:
Distance Calculation: The final step is to calculate the distance to the obstacle. The formula for calculating the distance in centimeters is . 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 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
- 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);
}
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
- 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.
- 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
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 of a voltage divider is , where is the input voltage (5V in this case), is the first resistor (1kΩ), and is the second resistor (2kΩ). Plugging in the values, we get , 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.
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()
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
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);
}
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.
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
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
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
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
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.




