Detecta intruso y envía notificación email+ESP8266

Detecta intruso y envía notificación email+ESP8266

  • Autor de la entrada:
  • Categoría de la entrada:Arduino
  • Comentarios de la entrada:Sin comentarios

Sistema de alarma que envía notificación vía wifi

En un anterior artículo se publicó el diseño de una alarma que realizaba llamadas a nuestro celular que alertaba la presencia de extraños que habían irrumpido la barrera de seguridad en nuestro domicilio, por lo tanto actuáramos de forma inmediata. Dicho sistema fue implementado con Arduino y el dispositivo SIM800L que emplea la tecnología GSM/GPRS, no es otra cosa más que la banda de comunicación para celulares desde 2G hasta 4G.

Dicho esto, explicaremos a continuación el funcionamiento de  un sistema de alarma que puede enviar un mensaje de alerta o notificación a nuestro email, para este efecto utilizará la red de internet WLAN o Wi-Fi de nuestro domicilio, que tiene un radio de cobertura de 10 a 100 mts aprox., es decir nuestro módulo o micro controlador ESP8266 (NodeMCU) puede estar instalado dentro de ese radio, claro está teniendo en consideración las especificación técnicas de su red.  Esto desde un punto de vista técnico resulta aceptable y económico. Recordarles que por el sólo hecho de usar internet solo puede enviar notificaciones por este medio mas no llamadas a celulares, valga la redundancia, sin embargo una combinación de ambas resultaría fantástico, entonces a empezar!.

Dispositivos que usaremos:

Un (01) microcontrolador nodeMCU (ESP8266) 
Un (01) sensor ultrasónico de distancia HC-SR04
Dos (02) diodos LED
Una (01) protoboard
Dos (02) resistencias 220 ohmios
Un Cable USB de celulares – alimentación 5Vcc
Un multímetro 
Cables conectores

 

Presentamos a continuación el diagrama de conexión del sistema de alarma elaborado en fritzing.

AlarmaHCSR04_ESP8266
Figura 1. Diagrama sistema de alarma NodeMCU y Sensor ultrasónico SC-SR04

Explicación y funcionamiento del sistema 

En el circuito de la Figura 1. el sensor ultrasónico HC-SR04 representa el elemento principal de entrada que activará el sistema de alarma, este sensor al detectar un cuerpo u obstáculo que atraviese su zona de proyección enviará información mediante un valor o magnitud (distancia). Al estar comprendido este valor dentro del umbral o parámetros requeridos encenderá automáticamente la baliza representado por el diodo LED que va conectado al terminal D1 o GPIO 5 que se encenderá en forma intermitente, asimismo el sistema enviará un mensaje de notificación al correo electrónico establecido, el cual podrá ser visto desde cualquier lugar ya que como reiteramos usa señal de internet (Wi-Fi).

Recibido el mensaje, el propietario podrá activar la alarma en este caso representado por un diodo LED conectado al terminal D2 o GPIO 4. El tiempo que demora en la transmisión del mensaje de notificación hasta nuestra recepción dura apenas 2 a 3 segundos dependiendo el ancho de banda de su internet.

Explicación del código

El código se escribe en el Interfaz de Desarrollo (IDE) de Arduino, estructurado en lenguaje de programación C++. primeramente importamos las librerías necesarias: para el dispositivo principal nodeMCU o ESP8266  #include <ESP8266WiFi.h>  y  para el aplicativo Blink #include <BlynkSimpleEsp8266.h>, este aplicativo App nos permite realizar la comunicación vía WIFI. 

Ahora definimos los valores de los pines que usaremos y que están representados por los terminales D1, D2, D5 y D6 o valores GPIO tal como se aprecia en la Figura 2. 

#define pinled D1       // GPIO 5
#define pinAlarma D2    // GPIO 4
#define pinTrig D5      // GPIO 14
#define pinEcho D6      // GPIO 12

 

Figura 2. Microcontrolador nodeMCU o ESP8266 de fabricación amica - extraído de https://components101.com

Continuando con el código establecemos el valor de una constante de la velocidad del sonido establecido en magnitudes de centímetros por cada segundo (cm/s)  const float velsonido = 0.0343; seguidamente establecemos tres variables del tipo cadena de caracteres o char sin establecer sus dimensiones, ya que es una manera de inicialización para casos especiales de array de caracteres: char auth[] = "clave autoken"; se asigna el valor token generado al crear un nuevo proyecto en el aplicativo blink, podrá copiarse o enviarse al correo electrónico. En este arreglo char ssid[] = "nombre red wifi"; , se asigna el nombre de la red Wi-Fi de su domicilio y finalmente  char pass[] = "clave wifi";  se asignará la contraseña de dicha red.

Ahora, establecemos la función setup para inicializar los dispositivos, se ejecuta por única vez.

void setup()
 {
   Serial.begin(9600);
   Blynk.begin(auth, ssid, pass);
   Blynk.email("micorreo@gmail.com","Asunto:", "Mensaje a enviar");
   pinMode(pinled, OUTPUT);
   pinMode(pinAlarma, OUTPUT);
   pinMode(pinTrig, OUTPUT); 
   pinMode(pinEcho, INPUT); 
 }

Seguidamente preparamos la función de activación del disparador de sonido o triguer del sensor ultrasónico SC-SR04. Para entender su funcionamiento de forma sencilla se entiende de esta forma, el acústico Triguer una vez preparado con activaTriguer()  emite constantemente ondas o ráfagas de sonido de 8 pulsos a 40 KHz, al detectar un obstáculo este rebota y es receptado por el acústico de Echo, el tiempo que demora en viajar dicha onda sonora nos permite calcular la distancia.

void activaTriguer()
  {  
  digitalWrite(pinTrig, LOW);
  delayMicroseconds(2);
  digitalWrite(pinTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(pinTrig, LOW); 
  }

Creamos la función que activará la alarma principal, para lo cual invocamos a la función de activación activaTriguer() del disparador de ondas de sonido  o triguer. La función pulseIn() lo que hace es básicamente calcular el periodo de tiempo que se mantiene el pulso en alto (HIGH) desde que la onda se dispara  hasta su receptación por el echo, valor que se almacenará en la variable tiempo, esta variable permitirá calcular la distancia entre el sensor ultrasónico y el obstáculo detectado,  si la distancia detectada es menor a 35 cm entonces encenderá en forma intermitente cada 300 milisegundos, asimismo mostrará por el monitor serial el mensaje de «Alarma activada» y simultáneamente enviará el mensaje de notificación al correo electrónico establecido.

void AlarmaESP()
 {
  activaTriguer();
  long unsigned tiempo = pulseIn(pinEcho, HIGH);
  float distancia = tiempo*velsonido/2;
  Serial.println(distancia);
  delay(300);
  if (distancia <= 35)
     { 
     digitalWrite(pinled, HIGH);
     delay(300);
     digitalWrite(pinled, LOW);
     delay(300);
     Serial.println("Alarma activada"); 
     Blynk.email("micorreo@gmail.com","Asunto:", "Mensaje a enviar");
     delay(200);
     }
 }

 

Finalmente declaramos la función principal que se ejecuta indefinidamente, para lo cual invoca a la función AlarmaEsp() y llama al método run del objeto Blynk, para que pueda ejecutarse en el aplicativo del celular del mismo nombre.

void loop()
{
 AlarmaESP(); 
 Blynk.run();
} 

Bien, espero haya sido de su agrado, no olviden compartirlo y dejar sus comentarios para para seguir agregando nuevos proyectos.

Deja una respuesta