Componentes · 3 min de lectura

Sensor de distancia HC-SR04: medir distancias por ultrasonidos con Arduino

¿Cómo funciona el sensor ultrasónico HC-SR04 y cómo se conecta a Arduino? Pines TRIG y ECHO, la fórmula de la distancia, conexión con ESP32 y Pico y consejos para medir con más precisión.

El HC-SR04 es un sensor barato y muy común que mide la distancia a un objeto mediante sonido. Funciona como los murciélagos para orientarse: emite un sonido de alta frecuencia que no oímos y mide cuánto tarda en volver el eco. Es la base de los sensores de aparcamiento, los robots que esquivan obstáculos, los medidores de nivel de depósitos y los medidores de altura.

HC-SR04
HC-SR04: dos cápsulas ultrasónicas, una emisora y otra receptora, y 4 pines (VCC, TRIG, ECHO, GND).

¿Cómo funciona el HC-SR04?

  1. El Arduino envía un pulso de 10 microsegundos al pin TRIG.
  2. El sensor emite 8 pulsos de sonido a 40 kHz.
  3. El sonido rebota en el objeto y vuelve; mientras tanto el pin ECHO permanece en HIGH.
  4. El Arduino mide cuánto tiempo está ECHO en HIGH y calcula la distancia.

El sonido viaja por el aire a unos 343 m/s, así que recorre un centímetro en unos 29 microsegundos. El tiempo medido incluye la ida y la vuelta, por lo que se divide entre dos: distancia (cm) = tiempo (µs) × 0,0343 / 2, o simplemente tiempo / 58.

Características técnicas

CaracterísticaValor
Alimentación5 V, unos 15 mA
Rango de medida2–400 cm
ResoluciónUnos 3 mm
Ángulo de medidaUnos 15°
PinesVCC, TRIG, ECHO, GND

Medir distancias con Arduino

Conecta VCC a 5V, GND a GND, TRIG al pin 9 y ECHO al pin 10. El código de abajo muestra la distancia en el monitor serie e indica aparte cuando no hay objeto o está demasiado lejos.

const int TRIG_PIN = 9;    // tetik / trigger
const int ECHO_PIN = 10;   // yankı / echo

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);      // 10 µs darbe / 10 µs pulse
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  long duration = pulseIn(ECHO_PIN, HIGH, 30000); // en fazla 30 ms bekle / wait max 30 ms
  if (duration == 0) {
    Serial.println("Menzil dışı / out of range");
  } else {
    float cm = duration * 0.0343 / 2;   // gidiş-dönüş / round trip
    Serial.print(cm);
    Serial.println(" cm");
  }
  delay(100);                          // ölçümler arası / between readings
}
El tiempo límite de 30 000 µs que se pasa a pulseIn equivale a unos 5 metros. Sin él, el código puede esperar hasta 1 segundo cuando no hay ningún objeto.

Uso con ESP32 y Raspberry Pi Pico

El pin ECHO del HC-SR04 da 5 V, mientras que los pines de la ESP32 y la Pico son de 3,3 V. No conectes ECHO directamente: monta un divisor de tensión con resistencias de 1 kΩ y 2 kΩ o usa la versión HC-SR04P, que funciona a 3,3 V.

Consejos para medir con precisión

  • Superficies blandas e inclinadas: la tela, la espuma y las superficies en ángulo no reflejan bien el sonido; pueden perderse lecturas.
  • Haz la media: usar la mediana de 3–5 lecturas elimina los saltos repentinos.
  • Efecto de la temperatura: la velocidad del sonido cambia unos 0,6 m/s por cada 1 °C; para trabajos precisos, corrígela con un sensor de temperatura.
  • Varios sensores: los sensores que se disparan a la vez oyen los ecos de los otros; dispáralos uno tras otro.
  • Intervalo entre medidas: deja al menos 60 ms entre lecturas para que se apague el eco anterior.

Para combinar el sensor con un zumbador y hacer un sensor de aparcamiento, lee ¿Qué es un zumbador?, y para conocer otros sensores, la Guía de sensores para Arduino.

Preguntas frecuentes

¿Hasta qué distancia mide el HC-SR04?

En teoría hasta 4 metros. En la práctica se obtienen resultados fiables hasta 2–3 metros sobre una superficie plana y dura.

¿Por qué mi HC-SR04 marca siempre 0 o un valor enorme?

Puede que TRIG y ECHO estén intercambiados, que el objeto esté fuera de rango o que el sensor apunte a una superficie que no refleja el sonido. Revisa el cableado y usa un tiempo límite en pulseIn.

¿Puede el HC-SR04 medir el nivel del agua?

Sí, montado en la tapa del depósito mirando hacia abajo mide la distancia a la superficie del agua. En ambientes húmedos necesita protección; el JSN-SR04T, resistente al agua, es mejor opción.

¿Qué otros sensores de distancia hay para Arduino?

Para distancias cortas y detección de líneas se usa el TCRT5000 infrarrojo, y para precisión milimétrica el láser VL53L0X. El HC-SR04 es el más común por su equilibrio entre precio y alcance.

Ver todos los proyectos
HC-SR04 Medición de distancia (pantalla en serie)
#27Principiante

HC-SR04 Medición de distancia (pantalla en serie)

Sensor ultrasónico HC-SR04 para medir distancias y mostrar el resultado en cm en el monitor serie. Enseña el principio del cálculo de distancias con ondas sonoras.

4.6(44)
64
Sensor de aparcamiento con HC-SR04
#28Intermedio
Premium

Sensor de aparcamiento con HC-SR04

Proyecto de sensor de aparcamiento con sensor HC-SR04 que aumenta la frecuencia del pitido del zumbador a medida que se acerca el objeto y avisa con un LED. Enseña lógica de retroalimentación proporci

4.8(64)
83
Medición de distancias mediante pantalla LCD
#31Avanzado
Premium

Medición de distancias mediante pantalla LCD

El proyecto que muestra el valor leído del sensor de distancia HC-SR04 en cm en tiempo real en la pantalla LCD 2x16. Combina los datos del sensor y la pantalla LCD.

4.5(44)
57
Proyecto de medición de la altura
#33Intermedio
Premium

Proyecto de medición de la altura

El proyecto realiza la medición de altura mediante calibración con sensor HC-SR04 y pantalla LCD I2C. Ofrece una aplicación práctica gestionando los pasos de calibración y medición con dos botones.

4.5(25)
33
Robot para evitar obstáculos
#81Avanzado
Premium

Robot para evitar obstáculos

¿Qué le parece construir un vehículo inteligente que encuentre su propio camino? El Robot Evitador de Obstáculos explora constantemente su entorno gracias al sensor ultrasónico que lleva delante. Cuan

5.0(38)
49
ESP32 HC-SR04 Medidor de distancia por ultrasonidos
#116Intermedio
Premium

ESP32 HC-SR04 Medidor de distancia por ultrasonidos

El sensor ultrasónico HC-SR04 calcula la distancia midiendo el tiempo de vuelo (Time of Flight) de la onda sonora que emite al chocar contra un objeto y rebotar. En este proyecto, enviaremos un pulso de 10 microsegundos al pin TRIG del ESP32 y leeremos el tiempo de eco procedente del pin ECHO mediante `pulseIn()`. Imprimiremos la distancia calculada en centímetros en el monitor serie. Dado que el HC-SR04 funciona a 5 V, es obligatorio utilizar un **divisor de tensión** en el pin ECHO; de lo cont

4.9(27)
43
Contador de rak'ahs para la oración con ESP32 (HC-SR04 + OLED SSD1306 + 2 botones)
#136Avanzado
Premium

Contador de rak'ahs para la oración con ESP32 (HC-SR04 + OLED SSD1306 + 2 botones)

¿A veces te olvidas de en qué raka'at estás mientras rezas? Este proyecto consiste en crear un contador de raka'ats que se coloca junto al tapete de oración y que cuenta las prosternaciones cuando acercas la mano. El sensor de distancia ultrasónico HC-SR04 detecta la proximidad de la mano, la pantalla OLED SSD1306 muestra el número de rakats y, mediante dos botones, puedes seleccionar 2, 3 o 4 rakats y poner el contador a cero. Cuenta con una máquina de estados inteligente que evita activaciones

4.8(11)
14
Sensor de aparcamiento ESP32 (HC-SR04 + barra de 5 LED + zumbador + OLED)
#142Avanzado
Premium

Sensor de aparcamiento ESP32 (HC-SR04 + barra de 5 LED + zumbador + OLED)

¡La versión ESP32 del sensor de aparcamiento para coches! Medimos la distancia al objeto que hay delante mediante el sensor ultrasónico HC-SR04. A medida que la distancia disminuye, la barra de 5 LED se va llenando (verde → amarillo → rojo) y la frecuencia de los pitidos del zumbador se acorta. Cuando se acerca demasiado (menos de 10 cm), suena una alarma continua y se encienden todos los LED. En la pantalla OLED SSD1306 se muestra, en letra grande, el valor actual en centímetros, un mensaje de

0.0(0)

Aprende cómo el HC-SR04 mide distancias con sonido, cómo conectarlo a Arduino, la fórmula de la distancia y cómo estabilizar las lecturas.