El sensor ultrasónico HC-SR04 emite pulsos de sonido a 40 kHz y mide el tiempo que tarda el eco en regresar. Con una simple fórmula, conviertes ese tiempo en distancia con precisión de ±3 mm. Rango: 2 cm a 400 cm.
Pines del HC-SR04
| Pin | Función | Conectar a |
|---|---|---|
| VCC | Alimentación | 5V Arduino |
| GND | Tierra | GND Arduino |
| TRIG | Disparo del pulso | Pin 9 (digital) |
| ECHO | Señal de retorno | Pin 10 (con divisor si ES32) |
Importante con ESP32: el pin ECHO devuelve 5V — usa un divisor de voltaje (R1=10kΩ, R2=20kΩ) para bajar a 3.3V.
Código Arduino
const int TRIG = 9;
const int ECHO = 10;
void setup() {
Serial.begin(9600);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
}
void loop() {
// Enviar pulso de 10 µs
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
// Leer tiempo del eco
long duracion = pulseIn(ECHO, HIGH);
// Distancia = tiempo * velocidad_sonido / 2
// Velocidad del sonido a 20°C: 343 m/s = 0.0343 cm/µs
float distancia = duracion * 0.0343 / 2.0;
Serial.print("Distancia: ");
Serial.print(distancia, 1);
Serial.println(" cm");
delay(500);
}
Proyectos con HC-SR04
- Sensor de estacionamiento: LED rojo/amarillo/verde según distancia al muro
- Nivel de agua en tanque: medir desde arriba cuánto líquido queda
- Seguridad perimetral: alarma si alguien cruza una distancia umbral
- Robot evita obstáculos: detener o girar cuando hay objeto a menos de 20 cm
Limitaciones a Considerar
El HC-SR04 no funciona bien con superficies muy inclinadas (el eco no regresa al sensor), materiales absorbentes de sonido como espuma, ni objetos muy pequeños (<2 cm de ancho). Para esos casos, considera un sensor láser de tiempo de vuelo (VL53L0X).