Alarma inteligente de Humos


Gracias al sw de Cayenne es posible construir equipos muy avanzados sin necesidad de programar nada con un aspecto gratamente muy profesional. Ademas, si sopesamos la gran potencia de calculo de la Raspberrry Pi, junto sus grandes posibilidades de expansión y conectividad ,obtenemos una gran combinación de hardware y software, las cual sin duda nos va a permitir realizar proyectos realmente interesantes .

Sabemos la gravedad que puede suponer un incendio, por lo que es sumamente importante disponer de medidas en los edificios de detección eficaces para protegerlos contra la acción del fuego.

 

En este post  vamos a intentar abordar el grave problema de los incendios desde una perspectiva completamente diferente usando para ello una Raspberry pi 2, un hardware especifico consistente en un DS18B20 , un detector de  gas y un buzzer  junto con  la plataforma  Cayenne.

Tradicionalmente los detectores de incendios difieren en función de los principio de activación siendo los mas habituales los de Tipo Óptico basado en células fotoeléctricas ,las cuales, al oscurecerse por el humo o iluminarse por reflexión de luz en las partículas del humo, disparando una sirena o alarma.Asimismo existen detectores de calor

La solución que se propone se basa en detectores ter micos al ser los mas precisos ,al que se ha añadido para aumentar la fiabilidad y mejorar la flexibilidad un doble sensor permitiendo de esta manera poder modificar los parámetros de disparo con un enorme facilidad como vamos a ver aparte de poder transmitir la información en múltiples formatos y formas hasta nunca vistas.

COMPONENTES NECESARIOS

Para montar la solución propuesta necesitamos los siguientes elementos:

  • Zumbador de 5V (cuesta menos de 1€ en Amazon)
  • DS18B20  (unos 3€)
  • Resistencia de 4k7 1/4 w
  • Sensor de Co2 basado en MQ4 (cuesta menos de 2€ en Amazon)
  • Raspberry Pi 2 o superior
  • Fuente 5V /1A para la Rasberry Pi

Otros

  • Cable de red
  • Caja de plástico para contener el conjunto
  • Cable de cinta ( se puede reusar un cable de cinta procedente de un interfaz ide de disco)

La solución propuesta se basa en usar una Raspberry Pi y un pequeño hardware de control que conectaremos a los puertos de la GPIO,pero, antes de empezar con el hardware adicional, deberemos ,si aun no lo ha creado todavía , generar una imagen de Raspbian para proporcionar un sistema operativo a la Raspberry Pi.Raspbian trae pre-instalado software muy diverso para la educación, programación y uso general, contando además con Python, Scratch, Sonic Pi y Java

Para instalar Raspbian se puede instalar con NOOBS o descargando la imagen del SO desde la url oficial. y copiando a la SD con el Win32DiskImager desde la página del proyecto en SourceForge

Prueba de acceso y creacion de cuenta

Creada la imagen del SO, ahora debemos insertar la micro-SD recién creada en su Raspberry Pi en el adaptador de micro-sd que tiene en un lateral . También deberá conectar un monitor por el conector hdmi, un teclado y ratón en los conectores USB, un cable ethernet al router y finalmente conectar la alimentación de 5V DC para comprobar que la Raspberry Pi arranca con la nueva imagen

Para comenzar la configuración de su Raspberry, lo primero es crear una cuenta gratuita en el portal cayenne-mydevices.com que servirá tanto para entrar en la consola web como para validarnos en la aplicación móvil. Para ello, vaya a la siguiente url http://www.cayenne-mydevices.com/ e introduzca lo siguintes datos:

  • Nombre,
  • Dirección de correo elctronica
  • Una clave de acceso que utilizara para validarse.

NOTA: las credenciales que escriba en este apartado le servirán tanto para acceder via web como por vía de la aplicación móvil

Instalación del agente

Una vez registrado , solamente tenemos que elegir la plataforma para avanzar en el asistente. Obviamente seleccionamos en nuestro caso Raspberry Pi pues no se distingue entre ninguna de las versiones ( ya que en todo caso en todas deben tener instalado Raspbian).

Para avanzar en el asistente deberemos tener instalado Raspbian en nuestra Raspberry Pi que instalamos en pasos anteriores .

Concluido el asistente , lo siguiente es instalar la aplicación móvil , que esta disponible tanto para IOS como Android. En caso de Android este es el enlace para su descarga en Google Play.

Es muy interesante destacar que desde la aplicación para el smartphone se puede automáticamente localizar e instalar el software myDevices Cayenne en su Raspberry Pi, para lo cual ambos ( smarphone y Raspberry Pi ) han de estar conectados a la misma red,por ejemplo la Raspberry Pi al router con un cable ethernet y su smartphone a la wifi de su hogar ( no funcionara si esta conectada por 3G o 4G) .

Una vez instalada la app , cuando hayamos introducido nuestras credenciales , si está la Raspberry en la misma red y no tiene instalado el agente, se instalara éste automáticamente .

Hay otra opción de instalar myDevices Cayenne en su Raspberry Pi, usando el Terminal en su Pi o bien por SSH.Tan sólo hay que ejecutar los dos siguientes comandos :

NOTA:la instalación del agente en su Raspberry Pi por comando, no es necesaria .Solo se cita aquí en caso de problemas en el despliegue automático desde la aplicacion movil.

Instalación del sensor temperatura

Para poder hacer de nuestra Raspberry Pi un detector eficaz de incendios necesitamos añadir sensores que nos permitan medir variables físicas del exterior, para en consecuencia actuar posteriormente

En primer lugar se ha optado por utilizar el sensor DS18B20 creado por Dallas Semiconductor  . Se trata de un termómetro digital, con una precisión que varía según el modelo pero que en todo caso es un componente muy usado en muchos proyectos de registro de datos y control de temperatura.Existen tres modelos, el DS1820, el DS18S20 y el DS18B20 pero sus principales diferencias se observan en la exactitud de lectura, en la temperatura, y el tiempo de conversión que se le debe dar al sensor para que realice esta acción.El DS1820, tiene, además del número de serie y de la interfaz de un conductor, un circuito medidor de temperatura y dos registros que pueden emplearse como alarmas de máxima y de mínima temperatura.

CONEXIÓN DEL DS18B20

El DS18B20 envía  al bus I2C la información de la temperatura exterior en grados C con precisión 9-12 bits, -55C a 125C (+/- 0.5C).a.

Para aprovechar las ventajas de la detección automática de Cayenne de sensores 1-wire, conectaremos este al puerto 4 GPIO (PIN 7) dado que el DS1820 transmite vía protocolo serie 1-Wire

Asimismo es importante conectar una resistencia de 4k7 de pull-up en la línea de datos ( es decir entre los pines 2 y 3 del DS18B20) .

La alimentación del sensor la tomaremos desde cualquiera de las dos conexiones de +5V de nuestra Raspberry (pines 2 o 4 ) y la conexión de masa por comodidad podemos tomarla del pin 9 de las Raspberry

¡Listo! Encienda su Raspeberry Pi y Cayenne automáticamente detectará el sensor DS18B20 y añadirá este a su panel de control

NOTA : Es importante reseñar que los dispositivos 1-Wire se identifican mediante un número (ID) único, razón por la que podríamos conectar varios en cascada, viajando la señal de todos ellos por la misma línea de datos necesitando una única resistencia de pull up para todo el montaje conectándose todos ellos en paralelo (respetando los pines obviamente). El software se encargará de “interrogar” al sensor/dispositivo adecuado.

Instalación de sensor de Co2

Para complementar nuestro detector se ha añadido un detector de gases basado en el circuito MQ4 .Este detector se puede montar un circuito con el sensor , o bien se puede adquirir con el sensor y el modulo de disparo con un led ya soldado, lo cual por su bajo coste  (menos de 2€ en Amazon  )es la opción más recomendada. Estos módulos permiten Dual-modo de señal de salida, es decir cuentan con dos salidas diferenciadas:

  • Salida analógica
  • Salida con sensibilidad de nivel TTL (la salida es a nivel alto si se detecta GLP, el gas, el alcohol, el hidrógeno y mas)

Estos módulos son de rápida a respuesta y recuperación ,cuentan con una buena estabilidad y larga vida siendo ideales para la detección de fugas de gas en casa o fabrica .Son ademas muy versátiles , pudiendo usarse para múltiples fines ,detectando con facilidad lo siguientes gases:

  • Gas combustible como el GLP
  • Butano
  • Metano
  • Alcohol
  • Propano
  • Hidrogeno
  • Humo
  • etc.

Algunas de las características del módulo:

  • Voltaje de funcionamiento: 5V DC
  • Rango de Detección: 300 a 10000 ppm
  • Salida TTL señal valida es baja
  • Tamaño: 32X22X27mm

CONEXIONES

Para conectar el  detector de gases a nuestra Raspberry Pi, optaremos por usar el puerto GPIO18 ( pin12) que conectaremos a la salida digital 2 del sensor ( marcado como OUT).

La alimentación del sensor la tomaremos desde cualquiera de las dos conexiones de +5V de nuestra Raspberry (pines 2 o 4 ) conectándo al pin 4 del sensor (marcado como +5v) y la conexión de masa por comodidad podemos tomarla del pin 9 de las Raspberry conectando este al pin1 del detector ( marcado como GND)

Respecto a Cayenne deberemos configurarlo como una entrada genérica como vamos a ver mas adelante.

PRUEBA DEL SENSOR

Para hacer una prueba rápida de que nuestro sensor es funcional :simplemente apuntar a unos cm del sensor con un bote de desodorante (no importa la marca), justo con un sólo disparo hacia el cuerpo del sensor. En ese momento debería encenderse el pequeño led que integra el sensor durante unos minutos para luego apagarse marcando de esta forma que realmente ha detectado el gas .

Ademas simultáneamente si podemos medir con un polímetro, veremos que el pin Out pasa a nivel alto , es decir pasa de 0V a unos 5V , volviendo a cero en cuanto se haya diluido el gas

 

Zumbador y montaje final

Ya tenemos los dos sensores, así que aunque podemos intereactuar ante variaciones de las lecturas de los sensores enviando correos o enviando SMS’s (como vamos a ver en el siguiente paso),es muy interesante añadir también un aviso auditivo que podemos activar cuando decidamos.

Para los avisos acústicos, lo mas sencillo es usar un simple zumbador de 5Vque podemos conectar directamente a nuestra Raspberry Pi sin ningún circuito auxiliar.

La conexión del positivo del zumbador normalmente de color rojo , lo haremos al GPIO 17 ( pin 11 ) de nuestra Raspberry y la conexión de masa por comodidad podemos tomarla del pin 9 de las Raspberry conectando este al pin de masa del buzzer ( de color negro)

 

 

Respecto a Cayenne deberemos configurarlo como un actuador genérico como vamos a ver mas adelante en el siguiente paso.

En cuanto a las conexiones dado las poquísimas conexiones de los dos sensores y el zumbador, lo mas sencillo ,a mi juicio, es usar un cable de cinta de 20+20 , que por ejemplo puede obtener de un viejo cable IDE de los usados para conectar antiguos discos duros cortándolo en la longitud que interese y conectando los cables a los sensores y al zumbador (observe que es muy importante respetar el orden de los pines del cable siendo el rojo el pin 1 y cuenta correlativamente).

El siguiente resumen indica todas las conexiones realizadas:

CABLE DE CINTA –> UTILIZACIÓN

  • pin9 (Gnd) –> pin1 DS1820,pin1 MQ4,
  • pin 7 (GPIO4)–> pin 2 DS1820 , resistencia 4k7
  • pin1 (+5V) –>pin 3 DS1820, resistencia 4k7, pin4 MQ4,cable rojo buzzer
  • pin 12(GPIO18)–> pin2 MQ4
  • pin11(GPIO17) –> cable negro buzzer

 

 

 

Configuración Cayenne

 Montado el circuito y nuestra Rasberry corriendo con Rasbian y el agente Cayenne ,únicamente nos queda configurar el sensor de gas y el buzzzer así como las condiciones o eventos que harán que disparen los avisos

Del sensor DS1820 no hablamos precisamente porque al estar conectado al bus one wire , el agente Cayenne lo detectara automáticamente presentándolo directamente sobre el escritorio sin necesidad de ningún acción más.

CONFIGURACION SENSOR GAS

Dado que no existe un sensor de estas características en la consola de Cayenne, lo mas sencillo es configurarlo como entrada genérico del tipo Digital Input y subtipo SigitalSensor.

Si ha seguido el circuito propuesto, los valores propuestos que debería configurar son los siguientes

  • Widget Name: Digital Input
  • Widget: Graph
  • Numero de decimals:0

En el apartado «Device Settings» pondremos:

  • Select GPIO: Integrated GPIO
  • Select Channel: Channel 18
  • Invert logic :check activado

Obviamente añadiremos estos valores y pulsaremos sobre el boton «save» para hacer efectiva esta configuración

CONFIGURACION ZUMBADOR
Dado que no existe un zumbador como tal en la consola de cayenne, lo mas sencillo es configurarlo como salida genérico del tipo RelaySwitch . Si ha seguido el circuito propuesto, los valores propuestos que debería configurar son los siguientes

  • Widget Name: Buzzer
  • Choose Widget: Button
  • Choose Icon: Light
  • Number de decimals:0

En el apartado «Device Settings» pondremos:

  • Select GPIO: Integrated GPIO
  • Select Channel: Channel 17
  • Invert logic :check deactivado

Obviamente añadiremos estos valores y pulsaremos sobre el boton «save» para hacer efectiva esta configuración

TRIGGERS
Si ha seguido todos los pasos anteriores tendremos en la consola de Cayenne nuestra placa Rasberry Pi con la información en tiempo real de la temperatura o detección de gas e incluso un botón que nos permite activar o desactivar a voluntad el zumbador .

Ademas por si fuera poco gracias a la aplicación móvil , también podemos ver en esta en tiempo real lo que están captando los sensores que hemos instalado y por supuesto activar o desactivar si lo deseamos el zumbador..

Pero aunque el resultado es espectacular todavía nos queda una característica para que el dispositivo sea inteligente : el pode interaccionar ante los eventos de una forma lógica,lo cual lo haremos a través de lo triggers , los cuales nos permitirán desencadenar acciones ante cambios en las variables medidas por los sensores.

A la hora de definir triggers en Cayenne podemos hacerlo tantodesencadenado acciones como pueden ser enviar corres de notificaciones o envio de SMS’s a los destinatarios acordados o bien actuar sobre las salidas.

Para definir un disparador en myTriggers,pulsaremos «New Trigger» y nos presentara dos partes:

  • IF ; aqui arrastraemos el desecadenante, lo cual necesariamene siempre sera la lectura de un sensor ( en uestro caso el termometro o el detector de gas)
  • THEN: aqui definiremos lo que queremos que se ejecute cuando se cumpla la condición del IF. Como comentábamos se pueden actuar por dos vías : se puede activar /desactivar nuestra actuador ( el buzzer) o también enviar correos o SMS’s

Como ejemplo se pueden definir lo siguientes triggers:

  • IF DS1820 <42º THEN RELE(channel17) =OFF
  • IF Channel18=ON THEN RELE(channel17) =ON
  • IF Channel18=ON THEN Send e-mail to…
  • IF DS2820>90º THEN Send e-mail to..
  • etc

Es obvio que las posibilidades son infinitas ( y las mejoras de este proyecto también), pero desde luego un circuito así es indudable la gran utilidad que puede tener.¿Se anima a replicarlo?

 

 

Más información aqui

Envio de correos con ESP8226


El Módulo ESP8266 WiFi es un SOC autónomo con pila de protocolos TCP / IP integrada que puede dar acceso a cualquier micro-controlador a su red WiFi.  Este modulo  no se limita a poder dar conectividad WIFI a  un Arduino ,pues el ESP8266 es capaz de alojar una aplicación  que incluso puede enviar notificaciones  de correo

Cada módulo ESP8266 viene preprogramado con un firmware de conjunto de comandos AT, lo que significa que simplemente puede conectarlo a su dispositivo Arduino y obtener casi la capacidad Wi-Fi que ofrece Wi-Shield.

Aunque dar conectividad esta muy bien, lo relevante  es que este módulo cuenta con  capacidad de almacenamiento y procesamiento a bordo lo suficientemente potente para permitir  integrarse con los sensores y otros dispositivos específicos a través de sus GPIO con un desarrollo mínimo inicial y una carga mínima durante el tiempo de ejecución.

 

 

Vamos a ver  pues  cómo es posible  enviar correos electrónicos desde cualquier módulo de wifi de ESP8266 usando el servidor de Gmail.

El circuito se basa en base de Arduino para el chip de WiFi ESP8266  pero  haciendo que un microcontrolador sea independiente de él (sin necesidad de comandos y dispositivos maestros)  de modo que se pueden conectar sensores directamente  a este  y obtener notificaciones por correo electrónico  ante cambios  o cuando lo estimemos conveniente) .

Antes de comenzar necesitaremos los siguintes componentes: 

  1.  ESP8266 (puede usar culaquier versión ,por ejemplo ESP8266-07).
  2.  USB UART Board(por ejemplo  FT232RL FTDI Serials Adapter Module. No es necesario este adaptador si la tarjeta ESP8266  ya tiene puerto usb pues es este puerto el que necesitamos para programar el puerto.
  3. Algunos cables de puente.
  4. Router WIFI .

 

Asimismo también necesitaremos el siguiente Software:

  1. Software de Arduino
  2. Núcleo de Arduino para el chip de WiFi ESP8266
  3. Sketch con código de proyecto y de la prueba (ESP8266_Gmail_Sender.zip) ESP8266_Gmail_Sender.zip.

 

Paso 1: Configuración de cuentas de Gmail

Vamos a utilizar SMTP para enviar mensajes por lo que mediante la autenticación de SMTP deberemos proporcionar la cuenta de correo electrónico y la contraseña actualizada

Como por defecto Google utiliza métodos de verificación más complejos , necesitamos cambiar esta  configuración, si es que vamos  a usar una cuenta de gmail para enviar las notificaciones.

En caso pues de usar gmail para enviar notificaciones, tendremos que ir a la configuración de la cuenta de Google y activar «Permitir aplicaciones menos seguras:SI» en la parte inferior de la página, lo cual  significa que las  aplicaciones sólo necesitan su email y contraseña cuando inicie sesión en su cuenta de gmail.

Obviamente si le preocupa la seguridad, use al menos  otra cuenta  diferente de su cuenta habitual.

 

contrasenas

Paso 2: Código de ejemplo

El autor escribió  un pequeño ejemplo que envía un mensaje de prueba para comprobar si todo funciona ( ESP8266_Gmail_Sender.zip.) por los que cuando todo el software descargado e instalado descomprima el fichero ,busque y abra ESP8266_Gmail_Sender.ino   y se debería abrir el IDE de arduino

A continuación algunos detalles de dicho código:

  • Debe establecer su nombre de punto de acceso Wi-Fi (SSID) y su contraseña. Debe ser como esta:
const char* ssid = "MyWiFi";
const char* password = "12345678";
  • En el hallazgo de la función setup() tenemos el condicional que envia el correo  al destinatario especificado (< [email protected]> )  ,quecomo es lógico deberá modificar .Como vemos el primer parámetro de la función de Enviar es email destinatario, segundo texto del mensaje.
if(gsender->Subject(subject)->Send("[email protected]", "Setup test"))

La función asunto es opcional :se pueden enviar los mensajes sin asunto o con este 

gsender->Send(to, message);
  • Ahora Abra  el fichero  Gsender.h  Necesitamos Base64   para codificar la  dirección de correo electrónico y contraseña de la cuenta de gmail que se utilizará para enviar mensajes de correo electrónico.  Usted puede utilizar base64encode.org para la codificación, el resultado debe ser algo como:
const char* EMAILBASE64_LOGIN = "Y29zbWkxMTExMUBnbWFpbC5jb20=";
const char* EMAILBASE64_PASSWORD = "TGFzZGFzZDEyMzI=";
  • Campo de ajuste define  la cuenta de correo que quiere que aparezca como remitente
const char* FROM = "[email protected]";
Finalmente  en las siguientes lineas  puede ver el ejemplo completo:
#include <ESP8266WiFi.h>
#include "Gsender.h"

#pragma region Globals
const char* ssid = ""; // WIFI network name
const char* password = ""; // WIFI network password
uint8_t connection_state = 0; // Connected to WIFI or not
uint16_t reconnect_interval = 10000; // If not connected wait time to try again
#pragma endregion Globals

uint8_t WiFiConnect(const char* nSSID = nullptr, const char* nPassword = nullptr)
{
 static uint16_t attempt = 0;
 Serial.print("Connecting to ");
 if(nSSID) {
 WiFi.begin(nSSID, nPassword); 
 Serial.println(nSSID);
 } else {
 WiFi.begin(ssid, password);
 Serial.println(ssid);
 }

 uint8_t i = 0;
 while(WiFi.status()!= WL_CONNECTED && i++ < 50)
 {
 delay(200);
 Serial.print(".");
 }
 ++attempt;
 Serial.println("");
 if(i == 51) {
 Serial.print("Connection: TIMEOUT on attempt: ");
 Serial.println(attempt);
 if(attempt % 2 == 0)
 Serial.println("Check if access point available or SSID and Password\r\n");
 return false;
 }
 Serial.println("Connection: ESTABLISHED");
 Serial.print("Got IP address: ");
 Serial.println(WiFi.localIP());
 return true;
}

void Awaits()
{
 uint32_t ts = millis();
 while(!connection_state)
 {
 delay(50);
 if(millis() > (ts + reconnect_interval) && !connection_state){
 connection_state = WiFiConnect();
 ts = millis();
 }
 }
}

void setup()
{
 Serial.begin(115200);
 connection_state = WiFiConnect();
 if(!connection_state) // if not connected to WIFI
 Awaits(); // constantly trying to connect

 Gsender *gsender = Gsender::Instance(); // Getting pointer to class instance
 String subject = "Subject is optional!";
 if(gsender->Subject(subject)->Send("[email protected]", "Setup test")) {
 Serial.println("Message send.");
 } else {
 Serial.print("Error sending message: ");
 Serial.println(gsender->getError());
 }
}

void loop(){}

Paso 3: Carga de código y pruebas

;

Una vez personalizado el código anterior  debemos  Guardar los cambios.

Para enviar el código a su placa no olvide establecer su placa exacta  en el menú de herramientas del iDE de Arduino

Una vez subido el  sketch a la placa de ESP8266 ,abra el monitor serie y desde ahí podrá  ver los  mensajes de registro similares a la pantalla anterior.

Si ha llegado hasta aquí ya tiene la base : solo tiene que conectar el sensor que necesite( por ejemplo uno magnético)  a la placa y modificar el código anterior para que este responda ante un determinado estado del sensor (por ejemplo puerta abierta) enviando el correo electrónico correspondiente

Fuente aqui