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.

Montaste el sensor, subiste el programa y el monitor serie muestra 0 cm, luego 1190 cm, luego 0 otra vez. Es el problema más común cuando alguien intenta medir distancia con Arduino por primera vez, y casi nunca es culpa del sensor: suele ser un cable, un tiempo de espera mal puesto o una superficie que no devuelve el eco.
En esta guía armamos el circuito con el módulo HC-SR04, explicamos cómo funciona la medición y repasamos los errores que vemos cada mes en los talleres del hacklab.
Qué necesitas para medir distancia con Arduino
- Un Arduino Uno, Nano o compatible.
- Un módulo ultrasónico HC-SR04. Cuesta entre 1,50 y 3 euros en tiendas de electrónica.
- Cuatro cables macho a hembra o una protoboard y cables macho a macho.
- Un cable USB y el entorno de Arduino instalado.
- Opcional: una regla o cinta métrica para calibrar.
Si nunca has usado una protoboard, revisa antes nuestra guía de cómo usar una protoboard paso a paso sin errores. Te ahorrará la mitad de los fallos de este montaje.
Cómo funciona el HC-SR04
El módulo tiene dos cilindros: uno emite un pulso de ultrasonido a 40 kHz y el otro escucha el eco. El funcionamiento es sencillo:
- El Arduino pone el pin Trig en alto durante 10 microsegundos.
- El módulo envía ocho pulsos de ultrasonido.
- El pin Echo se queda en alto el tiempo que tarda el sonido en ir y volver.
- El Arduino mide ese tiempo y calcula la distancia.
El sonido viaja a unos 343 metros por segundo a 20 grados, es decir, 0,0343 centímetros por microsegundo. Como el pulso recorre el camino dos veces, la fórmula es: distancia en cm = tiempo en microsegundos por 0,0343 dividido entre 2. En la práctica muchos usan dividir el tiempo entre 58, que da casi el mismo resultado.
El rango útil va de 2 cm a unos 400 cm, con una precisión cercana a 3 mm en condiciones buenas. Por debajo de 2 cm el sensor no distingue el eco del pulso que acaba de enviar.
Conexión paso a paso
| Pin del HC-SR04 | Pin del Arduino |
|---|---|
| VCC | 5V |
| Trig | Pin digital 9 |
| Echo | Pin digital 10 |
| GND | GND |
El HC-SR04 clásico necesita 5 voltios. Si usas una placa de 3,3 V como un ESP32, busca la versión HC-SR04P, que funciona entre 3 y 5,5 V, o pon un divisor de tensión en el pin Echo con una resistencia de 1 kΩ y otra de 2 kΩ. Para calcular resistencias sin dudas, nuestra guía sobre cómo calcular la resistencia para un LED explica la ley de Ohm con ejemplos reales.
El programa explicado línea a línea
El programa tiene cuatro partes. No hace falta ninguna librería.
- Configuración: en setup declara el pin 9 como salida con pinMode(9, OUTPUT), el pin 10 como entrada con pinMode(10, INPUT) e inicia el puerto serie con Serial.begin(9600).
- Disparo: en loop pon el pin 9 en bajo, espera 2 microsegundos con delayMicroseconds(2), ponlo en alto, espera 10 microsegundos y vuelve a ponerlo en bajo.
- Lectura: guarda el resultado de pulseIn(10, HIGH, 30000) en una variable de tipo long. El tercer número es el tiempo máximo de espera en microsegundos. Con 30000 el programa no se queda bloqueado si no hay eco.
- Cálculo y salida: divide el tiempo entre 58 para obtener centímetros, imprímelo con Serial.println y espera 60 milisegundos antes de la siguiente medida.
Esos 60 milisegundos importan. Si disparas el sensor más rápido, el eco de la medida anterior puede llegar tarde y confundir la nueva lectura.
Errores comunes y cómo arreglarlos
Siempre marca 0
Casi siempre es un cable suelto en Echo o los pines Trig y Echo intercambiados. Revisa la continuidad con un multímetro; si no sabes cómo, tenemos una guía para usar un multímetro por primera vez. Si pulseIn devuelve 0, también puede ser que el objeto esté fuera de rango y se haya agotado el tiempo de espera.
Lecturas que saltan sin motivo
Las superficies blandas como cortinas, ropa o espuma absorben el ultrasonido. Los objetos en ángulo de más de 15 grados desvían el eco. Prueba con una caja de cartón plana delante del sensor para confirmar que el circuito funciona.
Distancias un poco largas o cortas
La velocidad del sonido cambia con la temperatura, unos 0,6 metros por segundo por cada grado. A 35 grados en verano, la diferencia en un metro es de casi un centímetro. Si necesitas precisión, añade un sensor de temperatura y corrige la velocidad en el cálculo.
Por qué no siempre conviene promediar diez lecturas
En muchos foros se recomienda tomar diez lecturas y hacer la media para eliminar el ruido. No estamos de acuerdo como regla general. Si una de las diez lecturas es un 0 o un valor absurdo de 1190 cm, la media se estropea por completo. Además, diez lecturas a 60 ms cada una son 600 ms, demasiado lento para un robot que esquiva obstáculos.
Es mejor tomar cinco lecturas, ordenarlas y quedarse con la del medio, la mediana. Descarta los valores extremos automáticamente y solo tarda 300 ms. Para un medidor de nivel de un depósito, donde la velocidad no importa, puedes subir a siete u once lecturas con el mismo método.
Calibrar el sensor en cinco minutos
Antes de usar el sensor en un proyecto, comprueba sus lecturas con una cinta métrica. Coloca una caja plana a 10, 50, 100 y 200 cm y anota lo que muestra el monitor serie en cada punto. Si todas las lecturas se desvían en la misma proporción, por ejemplo un 2 por ciento de más, ajusta el divisor 58 hasta que coincidan. Si solo falla la lectura más lejana, el problema es el eco débil, no el cálculo, y conviene limitar el uso a distancias más cortas.
Ideas de proyectos con el sensor
- Un sensor de aparcamiento para el garaje con un LED verde, amarillo y rojo.
- Un medidor de nivel de agua para un depósito, montado en la tapa.
- Un robot que gira al detectar una pared a menos de 20 cm.
- Un contador de personas que pasan por una puerta.
Preguntas frecuentes
¿Qué distancia máxima mide el sensor HC-SR04?
El fabricante indica hasta 400 cm, pero en la práctica las lecturas fiables llegan a unos 250 o 300 cm con objetos planos y duros. Más lejos, el eco es débil y aparecen valores erráticos. La distancia mínima útil es de unos 2 cm.
¿Se puede usar el HC-SR04 con 3,3 voltios?
El modelo clásico necesita 5 V para funcionar bien. Existe una versión llamada HC-SR04P que acepta de 3 a 5,5 V. Si usas el clásico con una placa de 3,3 V, pon un divisor de tensión en el pin Echo para proteger la placa.
¿Por qué el sensor ultrasónico da lecturas de 0?
Un 0 suele indicar que el Arduino no recibió eco antes del tiempo de espera. Las causas más comunes son un cable suelto, los pines Trig y Echo cambiados o un objeto fuera de rango o que absorbe el sonido. Revisa las conexiones y prueba con una superficie plana.
More in Electrónica
Electrónica
Cómo usar un módulo relé con Arduino sin riesgos
Quieres que tu Arduino encienda una lámpara, una bomba de agua o un ventilador, pero el pin digital solo entrega 5 V y unos 20...
Electrónica
Cómo usar una protoboard paso a paso sin errores
Montas tu primer circuito en la placa, conectas el USB del Arduino y el LED no se enciende, o peor, el regulador se calienta.
Electrónica
Cómo calcular la resistencia para un LED sin quemarlo
Conectas un LED rojo directamente a una pila de 9 voltios, se enciende con un brillo precioso durante medio segundo y luego...