Chisme 114 · El sonar de Justicia Ciega con la ESP32 Plus

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.

Distancia real: 30 cm → el eco tarda µs

Ahora tú: el sensor mide un eco de 1166 µs. ¿A qué distancia está el objeto, en cm?

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.

HC-SR04 VCCTrigEchoGND placa VS pin 18S pin 19G

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!

Bloque Serial imprimir Sensor ultrasónico (cm) Pin Trig 18 Pin Echo 19 en ACECode

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);
}