Practica aquí antes de montarlo. Vas a entender cómo «ve con el oído» un sensor ultrasónico, conectarlo bien y programar un sonar: cuanto más cerca esté un objeto, más deprisa pita el zumbador. Cada paso se desbloquea al completar el anterior. Todo ocurre en tu navegador.
Prototipo educativo: no es un dispositivo de ayuda certificado.
1Cómo mide un sonar: el eco
El sensor ultrasónico emite un chasquido de sonido que no oímos (ultrasonido), espera a que rebote en un objeto y mide cuánto tarda en volver. El sonido viaja a unos 343 m/s, es decir, 0,0343 cm por microsegundo (µs).
Como el eco hace ida y vuelta, la distancia es: distancia = velocidad × tiempo ÷ 2.
Ahora tú: el sensor mide un eco de 1166 µs. ¿A qué distancia está el objeto, en cm?
2Conecta el sensor ultrasónico
El sensor HC-SR04 tiene cuatro patas: VCC (alimentación), Trig (la placa le manda el aviso «¡chasquea!»), Echo (el sensor devuelve el tiempo del eco) y GND (tierra). Hoy usamos los trios de los pines 18 y 19.
El zumbador va al pin 25 y el LED al pin 5, ya sabes conectarlos como en el Chisme 113.
3Completa el programa del sonar
En cada hueco elige el bloque correcto. Después pulsa Subir y probar y mueve la mano virtual: ¡escucha el sonar!

Así se ve en ACECode el bloque del sensor ultrasónico: «Sensor ultrasónico (cm) Pin Trig 18 Pin Echo 19».
Lee y predice
Un objeto está a 10 cm. ¿Cuánto tarda el eco?
10 cm × 2 ÷ 0,0343 cm/µs ≈ 583 µs. Menos de un milisegundo.¿Por qué se pone «distancia > 0» en la condición?
Si no hay eco, el sensor devuelve 0. Sin esa comprobación, un 0 parecería «algo pegado al sensor» y el zumbador sonaría sin parar.¿Por qué un jersey de lana se mide peor que una pared?
Los materiales blandos absorben parte del sonido y devuelven un eco más débil.Plan B: Arduino IDE
Placa ESP32 Dev Module. Este sketch hace lo mismo que los bloques:
const int TRIG = 18, ECHO = 19, LED = 5, ZUMBADOR = 25;
void setup() {
pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT);
pinMode(LED, OUTPUT); pinMode(ZUMBADOR, OUTPUT);
}
float medir() { // distancia en cm (0 = sin eco)
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long us = pulseIn(ECHO, HIGH, 30000); // ida y vuelta, en µs
return us * 0.0343 / 2;
}
void pitido() { // 1000 Hz durante 100 ms
for (int i = 0; i < 100; i++) {
digitalWrite(ZUMBADOR, HIGH); delayMicroseconds(500);
digitalWrite(ZUMBADOR, LOW); delayMicroseconds(500);
}
}
void loop() {
float d = medir();
if (d > 0 && d < 50) {
digitalWrite(LED, HIGH); pitido(); digitalWrite(LED, LOW);
delay(d * 10); // d/100 segundos
}
delay(50);
}