Nota: a veces verás “Blink IoT / blink.cloud” en videos, pero la plataforma popular para este tipo de proyectos es Blynk IoT (panel web blynk.cloud) y su app Blynk IoT.
Lo que vas a construir (y lo que no)
Vas a montar un sistema de alarma DIY básico que:
- Detecta movimiento con un PIR.
- Si está armado, activa un buzzer (alarma sonora local).
- Envía una notificación push al teléfono usando Blynk IoT (vía evento).
Esto es perfecto para pasillos, entradas, garaje u oficina.
Y ahora la parte irónicamente importante: no reemplaza un sistema profesional con redundancia, batería certificada, sensores perimetrales y monitoreo 24/7. Es como poner un perro guardián simpático: ayuda mucho, pero no es un banco suizo.
Materiales necesarios
Hardware
- 1× ESP32 (dev board compatible)
- 1× Sensor PIR (HC-SR501 o similar)
- 1× Buzzer (activo recomendado; pasivo si usarás PWM)
- Protoboard + jumpers
- Cable USB (según tu placa)
- Wi-Fi estable
Software
- Arduino IDE (o PlatformIO)
- App Blynk IoT (Android/iOS)
- Cuenta en Blynk Cloud (blynk.cloud)
Conexiones recomendadas (wiring)
Aquí conviene ir con calma: la mayoría de errores “misteriosos” son cables, pines mal elegidos o alimentación equivocada.
PIR → ESP32
- VCC → 3.3V (o 5V si tu módulo lo requiere; revisa serigrafía/datasheet del PIR)
- GND → GND
- OUT → GPIO 13 (puedes cambiarlo)
Buzzer → ESP32
- + → GPIO 25
- – → GND
Consejo de vida real: aleja el PIR de ventanas, corrientes de aire, aire acondicionado o radiadores. El PIR “ve” cambios térmicos, así que una cortina moviéndose con sol directo puede convertirse en tu peor enemigo… y tu mejor generador de notificaciones a las 3:17 AM.
Paso 1: Crear el proyecto en Blynk (Cloud + App)
La idea es que Blynk sea tu “central” en la nube: recibe el evento y dispara la notificación push.
- Entra a Blynk Cloud (blynk.cloud) y crea cuenta / inicia sesión.
- Crea un Template (ej.:
Home Security ESP32). - Dentro del template, crea un Event llamado:
motion_detected
y habilita Push notifications.
- Crea un Device desde el template.
- Copia las credenciales que usarás en el código (según tu flujo:
BLYNK_TEMPLATE_IDyBLYNK_AUTH_TOKEN).
UI mínima en la app (recomendada)
- Añade un Switch para armar/desarmar (Virtual Pin V1).
- (Opcional) Añade un LED widget o “Value display” para estado armado.
- (Opcional) Un “Notification log” o historial si tu plan lo permite.
Paso 2: Código base para ESP32 (Arduino) — con filtro y anti-spam
Este sketch incluye:
- Armado/Desarmado desde Blynk (V1)
- Filtro “movimiento estable” (~1s)
- Cooldown para evitar spam (ej.: 60s)
- Buzzer por 3s +
logEvent()para push
Si tu librería/plantilla de Blynk difiere, ajusta includes y credenciales a lo que te muestra Blynk Cloud al crear el dispositivo.
/***************************************************
* ESP32 + PIR + Buzzer + Blynk IoT (Push Event)
* - PIR: GPIO 13
* - Buzzer: GPIO 25
***************************************************/
#define BLYNK_TEMPLATE_ID "TU_TEMPLATE_ID"
#define BLYNK_TEMPLATE_NAME "Home Security ESP32"
char ssid[] = "TU_WIFI";
char pass[] = "TU_PASSWORD";
// ---- Pines ----
// ---- Lógica ----
bool armed = false;
unsigned long motionStart = 0;
const unsigned long stableDelayMs = 1000; // movimiento estable 1s
bool motionLatched = false;
unsigned long lastAlertMs = 0;
const unsigned long cooldownMs = 60000; // 60s sin volver a alertar
BLYNK_WRITE(V1) { // Switch virtual en la app (V1)
armed = param.asInt();
motionLatched = false;
motionStart = 0;
}
void buzzAlarm(unsigned long ms) {
}
void setup() {
Serial.begin(115200);
}
void loop() {
Blynk.run();
int pirState = digitalRead(PIR_PIN);
if (!armed) {
motionStart = 0;
motionLatched = false;
return;
}
// Armado:
if (pirState == HIGH) {
if (motionStart == 0) motionStart = millis();
const bool stable = (millis() - motionStart >= stableDelayMs);
const bool cooldownOk = (millis() - lastAlertMs >= cooldownMs);
if (!motionLatched && stable && cooldownOk) {
motionLatched = true;
lastAlertMs = millis();
// 1) Notificación push vía evento
Blynk.logEvent("motion_detected", "Movimiento detectado (PIR)");
// 2) Alarma sonora local
buzzAlarm(3000);
Serial.println("ALERTA: Movimiento detectado");
}
} else {
// Sin movimiento: resetea el latch para permitir futuras detecciones
motionStart = 0;
motionLatched = false;
}
}
Por qué este “filtro” importa
Un PIR puede dar picos breves. Exigir 1 segundo estable es como decirle: “no me cuentes chismes; tráeme hechos”.
Y el cooldown evita la avalancha de notificaciones cuando hay movimiento constante (o un gato con ambiciones).
Paso 3: Subir el sketch y probar sin volverte loco

- Conecta el ESP32 por USB.
- En Arduino IDE:
- Board: tu modelo de ESP32
- Port: el puerto correcto
- Sube el sketch.
- Si se queda en “Connecting…”, mantén presionado BOOT al iniciar carga (algunas placas lo requieren).
- Abre Serial Monitor a 115200 y observa:
- conexión Wi-Fi
- conexión a Blynk
- logs de alerta
Prueba en dos fases:
- Primero con el PIR quieto (sin falsos disparos).
- Luego muévete delante del sensor, espera el stableDelay y confirma:
- buzzer suena
- notificación llega
- cooldown evita repetición inmediata
Problemas típicos y soluciones rápidas
1) No llegan notificaciones push
- Revisa permisos de notificación de la app Blynk IoT en tu teléfono.
- Confirma que el Event existe y se llama exactamente
motion_detected. - Asegúrate de que el dispositivo aparece Online en Blynk Cloud.
- Verifica que tu cuenta/app esté en el mismo “workspace” o proyecto del dispositivo.
2) Se dispara todo el tiempo (falsas alarmas)
- Ajusta sensibilidad del PIR (si tiene potenciómetro).
- Cambia ubicación: lejos de sol directo, ventanas, corrientes de aire y fuentes de calor.
- Sube
stableDelayMsa 1500–2500ms. - Aumenta
cooldownMs(ej.: 120s) si el lugar tiene movimiento frecuente.
3) El buzzer suena bajo o extraño
- Usa buzzer activo (más simple: HIGH/LOW).
- Si es pasivo, idealmente usa PWM (y alimenta correctamente si requiere driver).
- Si el buzzer consume demasiado, usa un transistor (NPN + resistencia) para no castigar el GPIO.
4) “Connecting…” infinito a Blynk
- Revisa SSID/clave.
- Asegura Wi-Fi 2.4 GHz (muchos entornos IoT no usan 5 GHz).
- Verifica token/credenciales.
- Reinicia router si hay filtrado MAC o aislamiento de clientes.
Buenas prácticas (para que sea útil y “AdSense-friendly”)
- Privacidad y legalidad: instala sensores solo en espacios donde tengas permiso.
- Seguridad realista: úsalo como capa adicional, no como única defensa.
- Cifrado y cuentas: protege tu cuenta Blynk con contraseña fuerte y 2FA si está disponible.
- Red estable: IoT en la nube depende de tu Wi-Fi y del servicio. Para alarmas críticas, prioriza automatización local o redundancia.
PIR vs mmWave (tabla rápida para elegir mejor sensor)
Si quieres llevar este proyecto “de hobby a herramienta seria”, el sensor importa más de lo que parece.
| Característica | PIR (infrarrojo pasivo) | mmWave (radar) |
|---|---|---|
| Detecta | Cambios de calor/movimiento | Presencia y micro-movimientos |
| Falsos positivos | Moderados (sol/aire/calor) | Pueden existir (ajuste fino) |
| Detecta “estar quieto” | Mal | Muy bien |
| Configuración | Muy simple | Más compleja |
| Precio | Bajo | Medio/alto |
| Ideal para | Pasillos, entradas, exterior techado | Habitaciones, presencia continua, “ocupación real” |
Resumen humano: PIR es el martillo confiable; mmWave es el bisturí exigente.
Mejoras recomendadas (para versión “2.0”)
Si quieres que esto parezca un sistema de verdad (sin dejar de ser DIY), estas mejoras valen oro:
- Sirena + transistor/relé (más fuerte que buzzer).
- Batería/UPS (si se va la luz, la alarma no debería quedarse muda).
- Modo noche (armado automático en horario + desarmado al despertar).
- Registro de eventos (guardar timestamp en Google Sheets, MQTT o base local).
- Sensor de puerta/ventana (reed switch) para complementar PIR.
- Botón físico de pánico (GPIO con pull-up) para alarma manual.
Checklist final antes de colgarlo en la pared
- PIR alimentado correctamente (3.3V/5V según módulo)
- GND común para todo
- Applet/Evento creado con nombre exacto
- Switch V1 arma/desarma
- Filtro estable + cooldown activos
- Ubicación del PIR lejos de fuentes de calor/corrientes
- Notificaciones verificadas con pantalla bloqueada
FAQ
¿Puedo armar y desarmar desde el celular?
Sí. Con un switch virtual en Blynk (como V1 en el código).
¿Funciona sin internet?
- El buzzer puede seguir sonando (local).
- Las notificaciones push no, porque dependen de conexión a Blynk Cloud.
¿Qué tan preciso es el PIR?
Es bastante bueno para movimiento “claro”, pero puede fallar con:
- cambios de temperatura
- sol directo
- mascotas
- corrientes de aire
Por eso el filtro (movimiento estable) y el cooldown suelen ser la diferencia entre “útil” y “tortura”.
Conclusión: una alarma sencilla, pero con buenas decisiones
Este proyecto es una gran puerta de entrada (sí, lo dije) a la seguridad doméstica DIY: barato, rápido y sorprendentemente funcional si lo instalas bien. La clave no está solo en el código; está en dónde pones el PIR, cómo filtras y cómo evitas el spam.
Si quieres convertirlo en un “tutorial definitivo” todavía más potente, el siguiente salto lógico es: mmWave + registro de eventos + batería + sirena. Ahí ya no juegas a “casa inteligente”; empiezas a diseñarla.