Sensor Ultrasónico Arduino HC-SR04

$2,990

Mide distancias de 2cm a 4m con el Sensor Ultrasónico HC-SR04 para Arduino. Precisión de hasta 3mm y fácil conexión de 4 pines. ¡Ideal para tu próximo proyecto!

20 disponibles

Categoría:

Descripción

Sensor ultrasónico HC-SR04 con Arduino: cómo funciona, qué mide de verdad y qué no

¿Necesitas que tu robot detecte una pared antes de chocar o medir el nivel de un estanque sin sumergir nada?

El HC-SR04 es el sensor de distancia más usado en proyectos Arduino por una razón simple: cuesta menos de $2.300 CLP y entrega resultados útiles en minutos. Pero no mide con “precisión de 3 mm” como dicen algunas fichas, y conectarlo mal puede quemar el pin de tu microcontrolador.

A continuación te explicamos el principio físico real, el código que sí funciona, los errores que destruyen el módulo y cuándo es mejor cambiar a un sensor láser.

Cómo funciona el HC-SR04 (sin marketing)

El módulo tiene dos cilindros de aluminio: uno es un transmisor de ultrasonido y el otro un receptor. Cuando envías un pulso de 10 microsegundos al pin Trig, el sensor emite 8 pulsos de 40 kHz (inaudibles para humanos) y activa el pin Echo.

El pin Echo se mantiene en HIGH durante el tiempo que tarda la onda en ir y volver. Como la velocidad del sonido en el aire es de 343 m/s a 20 °C, la distancia se calcula así:

Fórmula: distancia (cm) = duración del pulso Echo (µs) × 0,0343 ÷ 2

O de forma simplificada: distancia (cm) = duración (µs) ÷ 58,3

El divisor por 2 es crucial: el pulso Echo mide el tiempo de ida y vuelta de la onda, no solo el trayecto hacia el objeto.

Especificaciones técnicas reales

Especificación Valor real Nota práctica
Voltaje 5V DC Alimentar con 3,3V reduce el rango y puede fallar el disparo.
Corriente <2 mA standby / ~15 mA activo Bajo consumo. Se alimenta directamente desde Arduino.
Frecuencia 40 kHz Inaudible para humanos. Puede molestar a perros y roedores.
Rango 2 cm – 400 cm (teórico) Práctico: 2-300 cm. Más allá de 3 m, el eco se pierde en ruido.
Ángulo de detección ~15° Cono de detección estrecho. No detecta objetos muy laterales.
Resolución ~3 mm (0,3 cm) Resolución del contador interno. No confundir con precisión.
Precisión real ±3 cm típico Depende de temperatura, ángulo de superficie y materiales.
Pines VCC, GND, Trig, Echo Trig = entrada. Echo = salida a 5V (¡cuidado con ESP32!).
Tiempo entre mediciones Mínimo 60 ms Menos de 60 ms causa ecos fantasma y lecturas erráticas.
⚠️ Dato que nadie te cuenta: el pin Echo del HC-SR04 devuelve una señal de 5V. Si conectas directamente a un ESP32, Raspberry Pi Pico o cualquier microcontrolador de 3,3V, estás forzando 5V en un pin tolerante a 3,3V. Con el tiempo quemas el GPIO. Usa un divisor de voltaje (resistencias 1kΩ + 2kΩ) o un level shifter.

Código Arduino funcional (con compensación de temperatura)

Este código funciona en Arduino Uno, Nano y Mega. Usa los pines 9 (Trig) y 10 (Echo), pero puedes cambiarlos según tu proyecto.

#define TRIG_PIN 9
#define ECHO_PIN 10

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

void loop() {
  // Enviar pulso de disparo de 10 µs
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // Leer duración del eco en microsegundos
  long duracion = pulseIn(ECHO_PIN, HIGH, 30000); // timeout 30 ms

  if (duracion == 0) {
    Serial.println("Fuera de rango");
  } else {
    float temperatura = 20.0; // °C. Ideal: leer de un DHT11/DHT22
    float vSonido = 331.3 + (0.606 * temperatura); // m/s
    float distancia = (duracion * vSonido) / 20000.0; // cm

    Serial.print("Distancia: ");
    Serial.print(distancia, 1);
    Serial.println(" cm");
  }

  delay(100); // mínimo recomendado: 60 ms entre lecturas
}

La compensación por temperatura es clave: a 0 °C el sonido viaja a 331 m/s, pero a 35 °C lo hace a 352 m/s. Esa diferencia de 21 m/s introduce un error de ~6 % en la distancia medida. En 2 metros, son 12 cm de error.

5 errores que arruinan tu proyecto con el HC-SR04

1. Conectar Echo directamente a ESP32 o Raspberry Pi. Como dijimos, Echo devuelve 5V. En un ESP32 de 3,3V usa un divisor de voltaje con resistencias de 1kΩ y 2kΩ, o un level shifter bidireccional.

2. Medir sin pausa entre lecturas. Si lees cada 20 ms, el eco de la medición anterior aún no se ha disipado y el sensor devuelve valores aleatorios. Respeta al menos 60 ms entre disparos.

3. Apuntar a superficies anguladas o absorbentes. El ultrasonido rebota mal sobre telas, espuma o paredes con ángulo mayor a 30°. El eco se dispersa y el sensor devuelve “fuera de rango”. Para esos materiales usa un sensor infrarrojo Sharp o láser VL53L0X.

4. Usar el sensor en exteriores con viento. El viento desvía las ondas ultrasónicas y genera lecturas erráticas. Para exteriores protege el sensor dentro de un tubo de PVC de 20 mm o usa un JSN-SR04T (versión waterproof con sonda separada).

5. No usar timeout en pulseIn(). Si no hay eco (objeto muy lejano o absorbente), pulseIn() espera 1 segundo por defecto y congela tu programa. Usa siempre pulseIn(ECHO_PIN, HIGH, 30000) para limitar a 30 ms (máximo ~5 m de alcance).

HC-SR04 vs alternativas: ¿cuál sensor de distancia elegir?

Sensor Tecnología Rango Precisión Precio CLP Cuándo usarlo
HC-SR04 Ultrasonido 40 kHz 2-400 cm ±3 cm $1.900 – $2.300 Proyectos económicos, obstáculos grandes, interiores.
JSN-SR04T Ultrasonido waterproof 20-600 cm ±3 cm $5.000 – $8.000 Tanques de agua, exteriores, sonda sumergible.
VL53L0X Láser ToF 2-200 cm ±1 cm $8.000 – $15.000 Precisión alta, superficies anguladas, I2C.
Sharp GP2Y0A21 Infrarrojo 10-80 cm ±2 cm $4.000 – $7.000 Corto alcance, superficies absorbentes, salida analógica.
💡 Conclusión práctica: si tu proyecto es un robot evasor de obstáculos o un medidor de nivel de tanque casero, el HC-SR04 es la opción correcta por precio y simplicidad. Si necesitas medir la distancia a una pared en ángulo o requieres precisión de centímetro en robótica avanzada, salta al VL53L0X.

Aplicaciones prácticas probadas en Chile

Medidor de nivel de estanque: coloca el sensor mirando hacia abajo sobre la superficie del agua. El agua refleja el ultrasonido casi perfectamente. Con compensación de temperatura y promedio de 5 lecturas, obtienes nivel con ±2 cm de error.

Aparcamiento asistido para vehículo: montado en la pared del garage a 1 m del piso, detecta cuando el parachoques está a 30 cm de la pared y activa una alarma sonora. El sensor ignora el movimiento de personas gracias a su cono estrecho de 15°.

Contador de personas (entrada/salida): dos HC-SR04 montados en puerta a 80 cm del suelo detectan dirección de paso según qué sensor se active primero. Funciona en locales comerciales con buena iluminación variable (a diferencia de sensores IR, el ultrasonido no se ve afectado por la luz solar).

También te puede interesar

Sensor Infrarrojo TCRT5000 |
Sensor de Sonido KY-038 |
Sensor DHT11 Temperatura y Humedad |
Arduino UNO R3 |
Guías técnicas Arduino

Preguntas frecuentes sobre el HC-SR04

¿El HC-SR04 funciona con 3,3V?

No de forma confiable. El módulo está diseñado para 5V. Alimentarlo con 3,3V reduce el rango y puede fallar el disparo del transductor. Si lo usas con ESP32, alimenta VCC con 5V y adapta el pin Echo con un divisor de voltaje.

¿Por qué mis lecturas saltan de 20 cm a 1200 cm sin razón?

Probablemente estás leyendo demasiado rápido (menos de 60 ms entre disparos) o el objeto está fuera del cono de 15°. También puede ser un eco fantasma de una medición anterior. Agrega delay(100) y verifica que el objeto esté perpendicular al sensor.

¿Puedo usar varios HC-SR04 al mismo tiempo?

Sí, pero no dispares todos simultáneamente. Los sensores pueden “escuchar” el eco de otro sensor (cross-talk). Dispara secuencialmente: sensor 1, espera 60 ms, sensor 2, espera 60 ms, etc. O usa un pin Trig común y pines Echo separados si están orientados en direcciones opuestas.

¿El sensor detecta vidrio o espejos?

El vidrio perpendicular refleja bien el ultrasonido. Pero si el vidrio está muy inclinado, la onda rebota hacia otro lado y el sensor devuelve “fuera de rango”. Los espejos con capa reflectante metálica funcionan igual que cualquier superficie dura lisa.

¿Cuánto consume en un proyecto con batería?

En standby consume menos de 2 mA. Durante la medición, unos 15 mA durante 1 ms cada 100 ms. En promedio, menos de 3 mA. Una batería 18650 de 2.600 mAh podría mantenerlo funcionando meses si solo mide cada minuto. Para uso continuo cada segundo, espera 2-3 semanas de autonomía.