Chisme 115 · La puerta de la cueva con la ESP32 Plus

Practica aquí antes de montarlo. Vas a entender cómo un servo se coloca en un ángulo, conectar servo, botón y dos LEDs, y programar una puerta: al pulsar el botón se abre 3 segundos y se vuelve a cerrar sola. Cada paso se desbloquea al completar el anterior. Todo ocurre en tu navegador.

Prototipo educativo: no es una puerta de seguridad.

1Cómo se coloca un servo en un ángulo

Un servo de 180° no gira sin parar: se coloca en el ángulo que le pides y se queda ahí. Para decírselo, la placa le manda un pulso eléctrico cada 20 ms, y el ancho del pulso es el ángulo: unos 0,5 ms son 0° y unos 2,5 ms son 180°. En ACECode el bloque «Servomotor… establecer ángulo» hace todo esto por ti.

0° → pulso de ms
0°90°180° periodo de 20 ms (el azul es el pulso)

Ahora tú: con la regla «0,5 ms = 0° y 2,5 ms = 180°», ¿qué ancho de pulso, en ms, hace falta para llevar el servo a 45°?

ms

2Conecta el servo, el botón y los LEDs

El servo tiene tres cables: naranja (la señal, que dice el ángulo), rojo (alimentación) y marrón (tierra). El botón y los dos LEDs son módulos de tres pines S, V y G. Hoy usamos: servo en el pin 25, botón en el 14, LED verde («abierta») en el 5 y LED rojo («cerrada») en el 13. Elige a dónde va cada cosa:

Truco: un servo pequeño se mueve con 3,3 V pero con menos fuerza. Si tiembla o la placa se reinicia, alimenta su cable rojo desde el pin 5V de la placa.

3Completa el programa de la puerta

En cada hueco elige el bloque correcto (con los nombres reales de ACECode). Después pulsa Subir y probar y usa el botón virtual: ¡abre la puerta!

Lee y predice

¿Qué pasaría si quitas «esperar 3 segundos»?El servo iría a 90° y volvería a 0° casi al instante, sin que le dé tiempo ni a abrirse del todo: un servo tarda unas décimas de segundo en llegar a su ángulo.
Pulsas el botón cuando la puerta ya está abierta. ¿Qué pasa?Nada: durante la espera de 3 s el programa está «dormido» y no mira el botón. Es una limitación de esta forma de programar (consultar el botón en cada vuelta).
¿Por qué el LED rojo se vuelve a encender en cada vuelta?Cada vuelta del «por siempre» empieza con la puerta cerrada: el rojo dice «cerrada» salvo que el botón cambie la situación.

Plan B: Arduino IDE

Placa ESP32 Dev Module, sin librerías: el sketch genera a mano los pulsos del servo. Si tu botón da BAJO al pulsar (en vez de ALTO), cambia HIGH por LOW en el if del botón.

const int SERVO = 25, BOTON = 14, LED_VERDE = 5, LED_ROJO = 13;

void mover(int angulo) {                    // lleva el servo a un ángulo (0-180)
  int us = map(angulo, 0, 180, 500, 2400);  // ángulo -> ancho de pulso en µs
  for (int i = 0; i < 30; i++) {            // 30 pulsos de ~20 ms = 0,6 s
    digitalWrite(SERVO, HIGH);
    delayMicroseconds(us);
    digitalWrite(SERVO, LOW);
    delay(20);
  }
}

void setup() {
  pinMode(SERVO, OUTPUT);
  pinMode(BOTON, INPUT);
  pinMode(LED_VERDE, OUTPUT);
  pinMode(LED_ROJO, OUTPUT);
  mover(0);                                 // puerta cerrada
}

void loop() {
  digitalWrite(LED_ROJO, HIGH);             // rojo = cerrada
  if (digitalRead(BOTON) == HIGH) {         // botón pulsado
    digitalWrite(LED_ROJO, LOW);
    digitalWrite(LED_VERDE, HIGH);          // verde = abierta
    mover(90);
    delay(3000);
    mover(0);
    digitalWrite(LED_VERDE, LOW);
  }
  delay(50);
}