Cómo usar el sensor ultrasónico HC-SR04 con Arduino
Conectaste el módulo, cargaste un ejemplo copiado de un foro y el monitor serie solo muestra ceros, o peor, números que saltan de 12 a 340 centímetros sin que nada se mueva.

Conectaste el módulo, cargaste un ejemplo copiado de un foro y el monitor serie solo muestra ceros, o peor, números que saltan de 12 a 340 centímetros sin que nada se mueva. Es el tropiezo más común con el sensor ultrasónico HC-SR04 con Arduino, y casi nunca es culpa del módulo. Suele ser un cable mal puesto, un cálculo con la velocidad del sonido equivocada o una superficie que devuelve mal el eco.
En esta guía armamos el circuito paso a paso, explicamos cómo funciona la medición y vemos cómo obtener lecturas estables de 2 a 400 centímetros con un Arduino Uno o Nano.
Cómo funciona el sensor ultrasónico HC-SR04
El HC-SR04 tiene dos cilindros metálicos: uno emite y otro escucha. Cuando le pides una medición, el emisor lanza una ráfaga de ocho pulsos a 40 kHz, una frecuencia que no oímos. El sonido rebota en el objeto que tengas delante y vuelve al receptor. El módulo te entrega un pulso cuya duración es exactamente el tiempo de ida y vuelta.
Con ese tiempo calculas la distancia. El sonido viaja a unos 343 metros por segundo a 20 °C, lo que equivale a 0,0343 centímetros por microsegundo. Como el pulso cubre ida y vuelta, divides entre dos:
distancia en cm = duración en microsegundos × 0,0343 / 2
Una forma rápida de recordarlo: divide la duración entre 58 y tendrás centímetros. Un eco de 1160 microsegundos son 20 centímetros.
Datos clave del módulo
| Característica | Valor |
|---|---|
| Alimentación | 5 V, unos 15 mA |
| Rango útil | 2 a 400 cm (fiable hasta unos 250 cm) |
| Ángulo de detección | Unos 15 grados |
| Resolución práctica | Alrededor de 0,3 cm |
| Precio habitual | Entre 1 y 3 dólares |
Materiales y conexión
- Arduino Uno, Nano o compatible
- Módulo HC-SR04 (o el HC-SR04P si trabajas a 3,3 V)
- Protoboard y cuatro cables macho a macho
- Cable USB para cargar el programa
El módulo tiene cuatro pines y se conecta así:
- VCC al pin 5V del Arduino.
- GND a cualquier GND.
- Trig al pin digital 9.
- Echo al pin digital 10.
Si es la primera vez que usas una placa de pruebas, revisa nuestra guía para usar una protoboard paso a paso sin errores, porque un cable en la fila equivocada es la causa número uno de los ceros en pantalla.
Ojo con las placas de 3,3 V como el ESP32 o algunos Arduino nuevos. El pin Echo devuelve 5 V y puede dañar la entrada. En esos casos usa un divisor de tensión con una resistencia de 1 kΩ y otra de 2 kΩ, o compra la versión HC-SR04P, que funciona entre 3 y 5,5 V.
El programa paso a paso
No necesitas ninguna biblioteca. El programa tiene cuatro partes y cabe en menos de 25 líneas.
1. Configuración
En setup() declara el pin 9 como salida con pinMode(9, OUTPUT), el pin 10 como entrada con pinMode(10, INPUT) y abre el monitor serie con Serial.begin(9600).
2. Disparar la medición
Dentro de loop(), pon Trig en bajo durante 2 microsegundos para limpiar la señal, luego en alto durante 10 microsegundos y de nuevo en bajo. Usa digitalWrite junto con delayMicroseconds(2) y delayMicroseconds(10). Ese pulso de 10 microsegundos es la orden de disparo.
3. Leer el eco
Mide la duración con pulseIn(10, HIGH, 30000). El tercer número es un tiempo límite de 30 milisegundos. Sin él, si no hay eco, el programa se queda esperando hasta un segundo entero y parece congelado. Con 30000 microsegundos cubres unos 5 metros, más que el alcance real del sensor.
4. Calcular y mostrar
Divide la duración entre 58 para obtener centímetros. Si pulseIn devuelve 0, significa que no hubo eco dentro del tiempo límite: muestra "fuera de rango" en lugar de un 0 que confunde. Termina con un delay(60); el fabricante recomienda al menos 60 milisegundos entre mediciones para que los ecos viejos no se mezclen con los nuevos.
Cómo conseguir lecturas estables
Con el circuito básico ya mides, pero en un proyecto real las lecturas bailan. Estas son las correcciones que más ayudan:
- Usa la mediana de cinco lecturas. Toma cinco medidas seguidas, ordénalas y quédate con la del medio. Elimina los saltos sueltos mucho mejor que un promedio.
- Corrige por temperatura. La velocidad del sonido cambia unos 0,6 metros por segundo por cada grado. A 35 °C en un taller sin aire acondicionado el error ronda el 2,5 %. Si ya tienes un termómetro con Arduino y sensor DS18B20, usa su lectura en la fórmula: velocidad = 331,3 + 0,606 × temperatura.
- Cuida el objetivo. Superficies duras y planas devuelven bien el eco. Tela, espuma, ropa y objetos en ángulo lo absorben o lo desvían.
- Alimentación limpia. Si compartes los 5 V con un servo o un motor, pon un condensador de 100 µF entre VCC y GND del sensor.
La biblioteca NewPing no siempre hace falta
En muchos tutoriales verás que lo primero es instalar la biblioteca NewPing. Funciona bien y es útil si controlas varios sensores a la vez o necesitas mediciones por temporizador sin bloquear el programa.
Para un primer proyecto, mi consejo es no usarla. Escribir el disparo y la lectura a mano te obliga a entender el pulso de 10 microsegundos, el eco y el tiempo límite. Cuando algo falle, y en electrónica algo siempre falla, sabrás si el problema está en el cable, en el cálculo o en el objeto. Con la biblioteca, todo eso queda escondido detrás de una función. Una vez que domines la versión manual, cambiar a NewPing te llevará cinco minutos.
Ideas de proyectos para empezar
- Un sensor de aparcamiento para el garaje con tres LED: verde a más de 100 cm, amarillo entre 40 y 100 cm, rojo por debajo de 40 cm.
- Un medidor del nivel de agua en un depósito, montando el sensor en la tapa y apuntando hacia abajo.
- Un robot que gira cuando detecta una pared a menos de 20 cm.
Para el semáforo de aparcamiento te servirá nuestra guía para calcular la resistencia para un LED sin quemarlo.
Preguntas frecuentes
¿Por qué mi HC-SR04 siempre marca 0?
Casi siempre es un problema de conexión: Trig y Echo invertidos, un GND suelto o un pin distinto al del programa. También ocurre si el objeto está a menos de 2 cm o a más de 4 metros. Revisa el cableado con un multímetro antes de cambiar el módulo.
¿Qué distancia mide el sensor ultrasónico HC-SR04?
El fabricante indica de 2 a 400 cm. En la práctica, las lecturas son fiables hasta unos 250 cm con objetos grandes y planos. Más allá, el eco se debilita y aparecen saltos.
¿Se puede usar el HC-SR04 con 3,3 V?
El modelo original necesita 5 V para funcionar bien. Si tu placa trabaja a 3,3 V, alimenta el sensor con 5 V y baja la señal de Echo con un divisor de tensión. La alternativa más sencilla es el HC-SR04P, que acepta de 3 a 5,5 V.
More in Electrónica
Electrónica
Cómo usar una pantalla LCD I2C con Arduino paso a paso
Conectas la pantalla, subes el código, la retroiluminación se enciende y no aparece ni una letra.
Electrónica
Cómo usar un servomotor con Arduino sin que tiemble
Conectas el servomotor con Arduino, subes el ejemplo de barrido y el servo tiembla, zumba o, peor, la placa se reinicia cada...
Electrónica
Cómo medir distancia con Arduino y el sensor HC-SR04
Montaste el sensor, subiste el programa y el monitor serie muestra 0 cm, luego 1190 cm, luego 0 otra vez.