
Chisme 145 del Lince: reed switch, la alarma de la puerta
Víctor Vílchez, el Lince de la Noche, entró en la cueva de Sierra Bermeja con la mirada de quien ha tenido una idea enorme.
—Alguien ha estado tocando mis cajas de sensores —dijo—. Necesito una alarma para la puerta. He pensado en una cámara con inteligencia artificial, un dron de vigilancia y…
—Víctor —lo interrumpió la Gata Montesa, sin levantar la cabeza del cable que mordisqueaba—. ¿La puerta se abre o se cierra?
—Se abre. Y se cierra.
—Pues solo necesitas saber eso: abierta o cerrada.
El Lince parpadeó.
—¿Y cómo se sabe sin cámara?
La Gata sacó de la caja un tubito de cristal con dos láminas dentro y un imán.
—Con esto. Un imán en la puerta, esto en el marco, y la placa solo tiene que fijarse en una cosa.
—Parece demasiado sencillo.
—Por eso suele funcionar —dijo ella—. Hoy vamos a hacer una alarma de verdad con un reed switch.
Introducción
En este chisme 145 vas a construir una alarma para una puerta con la ESP32 Plus de Acebott y el reed switch del kit de Keyestudio. Cuando la puerta se abre, el LED parpadea y el zumbador pita. Cuando se cierra, todo se calla.
Antes de montarlo, practica en el simulador del reed switch, que tiene modo demostración.
Es un prototipo educativo, no un sistema de seguridad real.
Qué necesitamos
- La ESP32 Plus de Acebott, programada con el Arduino IDE (placa «ESP32 Dev Module»).
- El módulo reed switch del kit de Keyestudio (pines −, + y S).
- Un módulo LED y un zumbador pasivo del kit.
- Un imán pequeño y cables Dupont.
Cómo funciona un reed switch
Un reed switch es un interruptor metálico dentro de un tubito de cristal. Tiene dos láminas muy finas que casi se tocan. Si acercas un imán, las láminas se atraen y se pegan: el circuito se cierra. Si alejas el imán, vuelven a separarse.
Lo importante es que el reed switch no necesita programa ni electrónica para hacer eso. Es un interruptor que se pulsa con un imán, sin tocarlo.
Por eso sirve para una puerta: el imán va en la puerta, el reed switch en el marco y entre los dos queda un pequeño hueco. Mientras la puerta está cerrada, el imán está cerca. Al abrirla, el imán se aleja y el reed switch se abre.
Si ya hiciste el Chisme 134 con el sensor Hall, recordarás que también detecta imanes. La diferencia es que el Hall no tiene contactos mecánicos y el reed switch sí, así que con los años se desgasta.
Conexión
Con el USB desenchufado. Cada módulo lleva un pin − (tierra), un + (alimentación) y una S (señal).
| Módulo | Pin − | Pin + | Pin S |
|---|---|---|---|
| Reed switch | GND | 3V3 | 13 |
| Módulo LED | GND | 3V3 | 5 |
| Zumbador pasivo | GND | 3V3 | 14 |
El reed switch va a 3,3 V y no a 5 V: la señal S llegaría a 5 V a un pin que solo admite 3,3 V. El LED va al pin 5, igual que en el Chisme 113.

El programa
Este es el programa completo. Enciende la placa con la puerta cerrada, es decir, con el imán pegado al reed switch.
// 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);
}
}
Fíjate en tres cosas:
- Calibración al arrancar. El programa no supone si el reed switch da 0 o 1 con la puerta cerrada: lo mide al encender. Así funciona con cualquier módulo.
- Dos contadores.
cambiosCrudoscuenta todos los cambios de la lectura yaperturassolo las aperturas confirmadas. La diferencia es el rebote. - Filtro de 30 ms. Un cambio solo vale si la lectura aguanta
ESTABLE_MSmilisegundos sin volver atrás.
Cómo probarlo
- Sube el programa con la puerta cerrada (imán pegado al reed switch) y abre el monitor serie a 115200.
- Aleja el imán: debe salir «PUERTA ABIERTA», el LED debe parpadear y el zumbador debe pitar.
- Acércalo de nuevo: se calla y sale cuánto tiempo estuvo abierta.
- Si no cambia nunca, cambia
INPUTporINPUT_PULLUPensetup(). - Si la alarma funciona al revés, reinicia la placa (botón EN) con el imán ya pegado.
Qué estamos midiendo realmente
El reed switch no mide una distancia: solo da abierto o cerrado. Es un sensor digital de todo o nada, y lo que detecta es un campo magnético lo bastante fuerte. La distancia a la que salta depende del imán, de su orientación y del propio reed switch.
La ficha del kit indica que detecta a unos 10 mm o menos. En el simulador usamos 10 mm para cerrar y 12 mm para abrir, porque en un interruptor real hay un pequeño margen entre una cosa y otra (histéresis). Mide el tuyo con una regla.
Otra trampa es el rebote. Al cerrarse o abrirse, el contacto mecánico vibra unos milisegundos y la lectura cambia varias veces seguidas. Por eso el programa cuenta los cambios crudos aparte y exige 30 ms de lectura estable.
Y una advertencia: una alarma con un reed switch se engaña con otro imán. Es un prototipo para aprender, no un sistema de seguridad.
Para el aula
- Predice: ¿a qué distancia saltará tu reed switch? Escribe una cifra y compruébala con una regla.
- Mide: repite 10 aperturas y apunta los cambios crudos de cada una. ¿Cuál es la media? ¿Hay alguna sin rebote?
- Cambia una variable: pon
ESTABLE_MSa 0 y cuenta las aperturas. ¿Qué cambia? - Orientación: gira el imán 90 grados. ¿Sigue saltando a la misma distancia?
- Otros imanes: prueba un imán de nevera, uno de altavoz y uno de bolso. ¿Cuál es más fuerte?
- Debate: ¿qué haría falta para que la alarma no se pudiera engañar con otro imán?
Retos
- Reto 1: haz que funcione y comprueba que el LED y el zumbador se apagan al cerrar.
- Reto 2: cambia el ritmo del pitido y la frecuencia del tono.
- Reto 3: añade el módulo del Chisme 138 para que la alarma solo suene si el PIR detecta a alguien.
- Reto 4: haz que la alarma siga sonando aunque se cierre la puerta, hasta que alguien pulse un botón.
- Reto 5: muestra el número de aperturas en la pantalla OLED del Chisme 128.
- Reto 6: abre el servo de la puerta de la cueva del Chisme 115 solo si se cierra bien el reed switch.
- Reto 7: guarda la hora de cada apertura con el reloj del Chisme 142.
- Reto 8: convierte el proyecto en una pequeña investigación: ¿cuántos milisegundos de rebote tiene tu reed switch?
Si quieres saber más sobre cómo funciona, tienes la entrada de reed switch en la Wikipedia (en inglés).
Qué hemos aprendido
Has montado una alarma con un reed switch, has visto que un imán puede ser un interruptor sin contacto y has comprobado que un contacto mecánico rebota. También has aprendido a calibrar al arrancar en lugar de suponer el valor de un sensor.
La Gata Montesa colocó el imán en la puerta y el reed switch en el marco.
—Pruébala —dijo.
El Lince abrió la puerta de golpe. El LED parpadeó, el zumbador pitó con ganas y el Lince dio un salto de medio metro.
—¡Funciona! —gritó, tapándose las orejas.
—Claro. Era muy sencillo —dijo la Gata—. Y ahora cierra la puerta, que me duele la cabeza.


