Practica aquí antes de tocar la placa. Vas a montar una alarma: un imán en la puerta y un reed switch en el marco. Conectarás los cables a la ESP32 Plus, probarás qué distancia hace saltar el reed, completarás el programa y comprobarás qué es el rebote. Cada paso se desbloquea al completar el anterior.
Prototipo educativo, no un sistema de seguridad. Este simulador supone que el módulo da 1 con el imán cerca; en tu módulo puede ser al revés, y el programa está hecho para funcionar en los dos casos.
La puerta y el monitor serie
1Conecta los cables
Cada módulo tiene tres pines: − (tierra), + (alimentación) y S (señal). Los del LED y del zumbador llevan también − a GND y + a 3V3. Elige a dónde va cada cable. El reed, a 3,3 V: la señal S no puede llegar a 5 V a la ESP32.
2Qué es un reed switch
Un reed switch son dos láminas metálicas dentro de un tubo de cristal. Un imán cerca las atrae y cierra el circuito. Es un interruptor mecánico, pasivo, que no necesita programa para funcionar.
3Descubre a qué distancia salta
La placa ejecuta ahora el programa de prueba y escribe cada cambio de la lectura. Mueve el imán con la barra de arriba o con los botones: ciérralo y ábrelo al menos 4 veces y fíjate a qué distancia cambia el valor.
4Completa el programa
Este es el programa de la alarma. Completa las líneas importantes:
5Pruébalo y piensa como un científico
La alarma ya está en marcha y ha medido que la puerta estaba cerrada al arrancar. Marca «simular rebote del reed» y abre la puerta 3 veces (aleja el imán más de 12 mm y vuelve a cerrar). Compara las aperturas con los cambios crudos.
Lee y predice
El imán está a 11 mm y se aleja a 13 mm. ¿Cuántas aperturas cuenta el programa?
Una sola, aunque la lectura rebote al principio: el programa espera 30 ms estables antes de darla por buena.Cierras la puerta y la alarma sigue sonando. ¿Qué puede pasar?
Que la placa arrancó con la puerta abierta o que el imán queda a más de 10 mm del reed al cerrar.Programa de la alarma (Arduino IDE)
// Chisme 145 - La alarma de la puerta de la cueva (reed switch + ESP32 Plus de Acebott)
// Placa en Arduino IDE: ESP32 Dev Module. Monitor serie a 115200.
//
// Conexion (con el USB desenchufado):
// Reed switch : - -> GND + -> 3V3 S -> pin 13 (el iman va en la puerta, el reed en el marco)
// Modulo LED : S -> pin 5 (V y G a su sitio)
// Zumbador : S -> pin 14 (V y G a su sitio) <- zumbador PASIVO del kit
//
// IMPORTANTE: enciende la placa con la puerta CERRADA (iman pegado al reed).
// Asi el programa aprende que valor lee el reed con la puerta cerrada (calibracion).
const int PIN_REED = 13;
const int PIN_LED = 5;
const int PIN_ZUMBADOR = 14;
const unsigned long ESTABLE_MS = 30; // la lectura debe durar 30 ms para darla por buena (antirrebote)
int valorCerrada; // lo que lee el reed con la puerta cerrada (se mide al arrancar)
int estable; // ultimo valor ya confirmado
int anterior; // ultima lectura "cruda"
unsigned long tCambio = 0; // cuando cambio la lectura cruda por ultima vez
unsigned long tAbierta = 0; // cuando se abrio la puerta
int aperturas = 0; // veces que se ha abierto
long cambiosCrudos = 0; // todos los cambios de la lectura, incluidos los rebotes
void setup() {
Serial.begin(115200);
pinMode(PIN_REED, INPUT); // si el valor no cambia nunca, prueba INPUT_PULLUP
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_ZUMBADOR, OUTPUT);
delay(500);
valorCerrada = digitalRead(PIN_REED); // calibracion: la puerta esta cerrada ahora
estable = valorCerrada;
anterior = valorCerrada;
Serial.print("Alarma lista. Con la puerta cerrada el reed lee: ");
Serial.println(valorCerrada);
}
void loop() {
int v = digitalRead(PIN_REED);
// 1) Contamos TODOS los cambios de la lectura (los buenos y los rebotes)
if (v != anterior) {
cambiosCrudos++;
anterior = v;
tCambio = millis();
}
// 2) Damos un cambio por bueno solo si la lectura se mantiene ESTABLE_MS
if (v != estable && millis() - tCambio >= ESTABLE_MS) {
estable = v;
if (estable != valorCerrada) { // la puerta se acaba de abrir
aperturas++;
tAbierta = millis();
Serial.print("PUERTA ABIERTA. Aperturas: ");
Serial.println(aperturas);
} else { // la puerta se acaba de cerrar
Serial.print("Puerta cerrada. Estuvo abierta ");
Serial.print(millis() - tAbierta);
Serial.print(" ms. Cambios crudos hasta ahora: ");
Serial.println(cambiosCrudos);
}
}
// 3) Alarma mientras la puerta esta abierta: LED y zumbador a trompicones (200 ms)
if (estable != valorCerrada) {
bool encendido = (millis() / 200) % 2 == 0;
digitalWrite(PIN_LED, encendido);
if (encendido) tone(PIN_ZUMBADOR, 1000); // pitido de 1000 Hz (necesita nucleo ESP32 3.x)
else noTone(PIN_ZUMBADOR);
} else {
digitalWrite(PIN_LED, LOW);
noTone(PIN_ZUMBADOR);
}
}Placa ESP32 Plus de Acebott, programada con Arduino IDE (ESP32 Dev Module). Módulos reed switch, LED y zumbador pasivo del kit de Keyestudio.