iotdata, by Data Frontieriot
data
Programación por bloques

Sensor ultrasónico HC-SR04: cómo medir distancias con el robot

Cómo el HC-SR04 mide la distancia por el eco, el cálculo que convierte tiempo en centímetros, por qué el pin Echo necesita un divisor en el ESP32, qué perjudica la medición y cómo usar el sensor en el brazo robótico.

Ingeniería Data Frontier· Publicado el 22 de octubre de 2026

El HC-SR04 es el "ojo" más común de los robots de banco. No ve: grita y escucha. Emite un sonido por encima de lo que alcanza el oído humano, espera que vuelva el eco y mide cuánto tardó.

Cómo se hace la medición

El módulo tiene cuatro pines: VCC (5 V), GND, Trig y Echo. Una medición tiene tres tiempos:

  1. La placa pone el Trig en nivel alto durante al menos 10 µs.
  2. El módulo emite una ráfaga de ocho pulsos de 40 kHz y pone el Echo en nivel alto.
  3. Cuando vuelve el eco, el Echo baja. El tiempo que permaneció en alto es el tiempo de ida y vuelta del sonido.

Del tiempo a la distancia

El sonido viaja a unos 343 metros por segundo en el aire a 20 °C, o 0,0343 cm por microsegundo. Como el tiempo medido es de ida y vuelta, se divide por dos:

distancia (cm) = tiempo (µs) × 0,0343 ÷ 2

La hoja de datos resume el mismo cálculo como tiempo en µs dividido por 58. Un eco de 580 µs corresponde a un objeto a 10 cm.

La velocidad del sonido cambia con la temperatura, unos 0,6 m/s por grado. Para un robot de banco, la diferencia entre una sala a 20 °C y otra a 30 °C es de menos del 2 %: no vale la pena preocuparse.

Lo que promete la hoja de datos

  • Alcance de 2 cm a 400 cm.
  • Ángulo de medición de unos 15 grados: ve un cono estrecho hacia adelante.
  • Intervalo de al menos 60 ms entre una medición y la siguiente, para que el eco anterior no se confunda con el nuevo.

Lo que perjudica la medición

  • Superficie inclinada: el sonido rebota hacia un lado y el eco no vuelve. El sensor lee "nada" o una distancia mayor.
  • Material blando: la espuma, la tela y el peluche absorben el sonido.
  • Objeto delgado o pequeño: un lápiz de costado puede no devolver suficiente eco.
  • A menos de 2 cm: el eco vuelve antes de que el módulo esté listo para escuchar.

Por eso, en un robot, nunca confíe en una sola lectura. Un promedio de tres mediciones, o descartar los valores que saltan demasiado, hace que el comportamiento sea mucho más estable.

En el Arduino Nano

El Nano trabaja a 5 V, igual que el módulo: los cuatro cables van directo. Para medir el pulso, Arduino tiene la función pulseIn. Conviene pasarle un tiempo límite (por ejemplo, 30.000 µs, que corresponde a unos 5 metros): sin él, si el eco no vuelve, el programa se queda detenido esperando.

En el ESP32: el divisor en el Echo

El ESP32 trabaja a 3,3 V, y el Echo del HC-SR04 devuelve 5 V. Conectarlo directo pone en riesgo el pin. La solución es un divisor de tensión con dos resistencias:

  • Echo del módulo → resistencia de 1 kΩ → pin del ESP32.
  • Pin del ESP32 → resistencia de 2 kΩ → GND.

El pin recibe unos 3,3 V. El Trig puede ir directo: 3,3 V alcanza para que el módulo entienda la orden. Hay versiones del módulo que funcionan a 3,3 V; revise la marcación antes de prescindir del divisor.

En MicroPython, la función machine.time_pulse_us mide el pulso del Echo y devuelve un número negativo cuando se agota el tiempo límite.

En el brazo robótico

El sensor fijado al frente de la pinza permite dos comportamientos clásicos: pitar cuando algo se acerca y cerrar la pinza cuando el objeto está al alcance. En el IDE de bloques, la tarjeta "si la distancia es menor que" pide los pines Trig y Echo y el límite en centímetros. El código generado ya usa el tiempo límite e ignora las lecturas sin eco.