viernes, 11 de agosto de 2017

Sistema de vigilancia para el hogar con Wemos

Introducción

Al irme de vacaciones dejé en casa a un vigilante fiel que no duerme, ni come, ni bebe, y además me avisa en cuanto detecta movimiento, una idea muy simple y a la vez fácil de realizar. Vamos allá.


Elementos de hardware


Wemos D1 R2
PIR HC-SR501
Fuente alimentacion 9v 1a
Cables Jumpers macho-hembra
Conexión a internet


Configurando PIR HC-SR501:

El PIR es un elemento muy sensible a los cambios de radiación infrarroja y en cuanto hay un ligero cambio de temperatura en el ambiente lo detecta. Esto incumbe a las personas, animales cualquier elemento que desprenda calor, y a la vez, se mueva.

En esta imagen tenemos un jumper la cual tiene dos posiciones, L y H, (parte inferior izquierda), en el caso de la imagen está en la posicion L, yo lo tengo en la posición H. La posición H es para la mayoría de los casos.
Tenemos también lo pines de conexión, los cuales se ven claramente, power es a 5v (puede operar entre 5 y 20 voltios), masa y el pin central que es el de señal.
Los dos potenciómetros que tenemos en la parte inferior, uno es para ajustar la sensibilidad y otro para ajustar el tiempo de retardo, o sea el tiempo que pasa desde que detecta hasta que envía la señal. Para ajustarlos hay que girar en el sentido de las agujas del reloj. En mi caso los dos los he dejado al mínimo.


Datasheet HC-SR501


Elementos de software


IDE de Arduino
App Telegram

Configurando IDE de Arduino:

El IDE de Arduino no trae de manera nativa las placas wemos esp8266, por tanto hay que instalar las librerías. Para ello vamos a:
archivo/preferencias/gestor de URLs Adicionales de Tarjetas ponemos:"http://arduino.esp8266.com/stable/package_esp8266com_index.json", sin las comillas, damos a los recuadros de la derecha y aceptar.
Nos vamos a herramientas/gestor de tarjetas, buscamos ESP8266  e instalamos el plugin. Nos instalará todas las placas basadas en el chip ESP8266.
Este tutorial plugin ESP8266 os ayudará.

Configurando Telegram:

A.- Nos descargamos la aplicación Telegram de mensajería en el dispositivo que sea, yo lo hice en el móvil.
B.- Abrimos Telegram y seguimos las instrucciones de instalación como cualquier otra aplicación de mensajería, es fácil.
C.- Una vez que está la aplicación operativa seguimos estos pasos:
            1.- Escribimos "BotFather", sin las comillas, y establecemos comunicación
            2.- Escribimos "/start", sin las comillas
            3.- Escribimos "/newbot" sin las comillas y nos pedirá el nombre publico y de usuario del bot, por ejemplo, escribimos Duino, y si lo acepta volvemos a escribir Duino_bot.
            4.- Si no dá por valido el nombre nos envía un código muuuuy largo que es el que vamos a usar en nuestro sketch (no perder el código).
            5.- Para entrar en nuestro bot, pulsamos en el enlace marcado de azul donde está el nombre de nuestro bot.
            6.- Aquí os dejo este tutorial, con ilustraciones para saber un poco más.

Esquema







Wemos 5v-pin 5v PIR
Wemos GND-GND PIR
Wemos Pin D2- Pin señal PIR (el pin central)

Fácil ehhh!!!😜

Código


//Librerías
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <TelegramBot.h>

//Definiciones
byte sensorPin = 4; // Pin para el sensor de movimiento
byte movimiento = 0; // Variable para activar alarma
byte sinmovimiento = 0; // Resetea el contador a 0 cuando no hay movimiento durante un tiempo
int repiteloop = false;
const char* BotToken = "111111111:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";// Código de Telegram se obtiene configurando el Bot
const char* ssid = "mired";
const char* password = "mipassword";
WiFiClientSecure client;
TelegramBot bot(BotToken, client);

void setup() {
  Serial.begin(9600);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop()
{

  message m = bot.getUpdates(); // A la espera de nuevos mensajes de Telegram

  // Si el mensaje es Alarmaon se activa la alarma, es sensible a mayúsculas
  if (m.text.equals("Alarmaon"))
  {

    Serial.println("Mensaje recibido se activa la alarma");
    bot.sendMessage(m.chat_id, "La Alarma está preparada y lista.");
    movimiento = 0;
    repiteloop = false;

    while (!repiteloop)
    {
      byte state = digitalRead(sensorPin);

      if (state == 1) {
        Serial.println("Se ha detectado movimiento!");
        delay(3000);
        movimiento++;
        Serial.println(movimiento);
      }
      else if (state == 0) {
        delay(3000);
        sinmovimiento++;
        Serial.println("Sin movimiento!");
      }

      // Se resetea el contador de movimientos si no hay movimiento continuo
      if (sinmovimiento == 10) {
        sinmovimiento = 0;
        movimiento = 0;
      }

      // Se activa la alarma y se envía el mensaje a Telegram

      if (movimiento == 1)
      {
        bot.sendMessage(m.chat_id, "Alarma Duino activada por movimiento!!"); //Mensaje de alerta Telegram  
      }
      
      movimiento = 0; // Variable de movimientos vuelve a cero
      message m = bot.getUpdates(); // Leer nuevos mensajes de Telegram
      if (m.text.equals("Alarmaoff"))
      {
        repiteloop = true;
        Serial.println("Mensaje recibido, se apaga la alarma.");
        bot.sendMessage(m.chat_id, "La Alarma está desactivada.");
      }
    }
  }

  else if (m.text.equals("Alarmaoff"))
  {
    Serial.println("Mensaje recibido, se apaga la alarma.");
    bot.sendMessage(m.chat_id, "La Alarma está desactivada.");
    repiteloop = false;
  }

} 


En la línea nº 7, definimos como pin de entrada de la señal del PIR el pin 4, en cambio en el esquema lo ponemos en el pin D2. Resulta que es correcto y para saber la correspondencia entre los pines de arduino y wemos tenemos este esquema:

En las lineas, 11, 12 y 13 cambiamos a nuestro código bot de Telegram (token), nombre de nuestra red y contraseña de nuestra red wifi respectivamente.

Instrucciones de funcionamiento

Desde nuestra aplicación Telegram accedemos a nuestro bot como un contacto más y sólo atiende a dos instrucciones:
-Alarmaon
-Alarmaoff
¡¡Importante!!: distingue entre mayúsculas y minúsculas

Nuestro bot nos devolverá:
-La Alarma está lista y preparada
-La Alarma está desactivada
respectivamente.

En el caso que la alarma está activada y nuestro vigilante Duino detecta movimiento, nuestro bot nos envía un mensaje que dice:
-Alarma Duino activada por movimiento

En el caso de que la alarma esté desactivada se encuentra a la espera de ser activada.

Notas

Este proyecto, además de la utilidad que tiene, podemos dar alas a nuestra imaginación y hacer lo que se nos ocurra, ya que el bot creado es una herramienta muy potente para poder comunicarnos con la máquina. Por ejemplo:
-hacer un sistema de vigilancia mas completo que al mismo tiempo nos envíe la foto de caco
-mandar ordenes a distancia para que nos encienda la luz, o el aire acondicionado
-enviar datos de sensores a distancias previa petición
-etc....


Enlaces

Sketch alarma movimiento
Libreria Telegram




No hay comentarios:

Publicar un comentario