Sistema integral para el monitoreo y la seguridad del hogar

en: ProtecoTeam

Dificultad:

Intermedio

Plataforma:

Arduino

Favoritos:

favorite5

reportReportar

Descripción:

Incluye un control de incendios, un sistema de alarma de bajo costo y un control de iluminación para el ahorro de la energía eléctrica en el hogar. En conjunto, dichas características, conforman un proyecto para beneficiar a las personas y al ambiente.

Licencia: Sin Licencia


Tags:

#CPMX7
#Home
#Arduino
#IoT

Paso 1:

Conseguir los siguientes materiales:

  • -Placa Arduino UNO
    • Controlador encargado de monitorear las variables del ambiente y en base a ello tomar decisiones.
  • -Cable para conectar la placa Arduino a la PC.
    -Jumpers o cable para protoboard.
  • -Protoboard
  • -Leds
    -Resistencias
    -Zumbador
    -Fotoresistencia
    • Dispositivo electrónico capaz de detectar la iluminación.
  • -Sensor de Movimiento PIR
  • -Sensor de Temperatura y Humedad DHT11
    -Modulo Bluetooth HC06
  • -Modulo de Relevadores 5v
    • Dispositivo electrónico que permite manipular focos y otros electrónicos del hogar que trabajen a 127[v]

Paso 2:

Control de incendios

Para este módulo se utilizó el sensor DHT11, el cual devuelve en el monitor serial la temperatura y la humedad que tome por lectura, con estas dos variables trabajamos de la siguiente manera:

  • - Se mostró, por medio de un dispositivo móvil ambas variables con el objetivo de que cualquier usuario que cuente con un dispositivo que tenga tecnología bluetooth pueda conectarse al circuito para poder estar detectando valores de temperatura y humedad.
  • - Se desarrolló una aplicación para poder estar registrando la temperatura y humedad cuando el sensor DHT11 registre una temperatura mayor a 55°C, en este punto la aplicación desarrollada con el lenguaje de programación Python, envía un correo electrónico con la finalidad de informar al usuario de que la temperatura ha rebasado el intervalo propuesto.
  • - En cuanto al circuito fijo, con el mismo sensor (DHT11) se incluyó un buzzer con la finalidad de informar de manera local cuando la temperatura sea demasiado alta. Cuando esto ocurra se enviará un correo de notificación al usuario

Diagrama de conexión con Fritzing


  • Diagrama de conexión en Fritzing
  • Conexion física

Código:

                                    
                                            /************BIBLIOTECAS NECESARIAS********/
#include <DHT.h>  //Necesaria para usar el sensor de temperatura
#include <SoftwareSerial.h> //Necesaria para crear las conexiones bluetooth

/************VARIABLES GLOBALES********/
int DHT11pin=2;   
int tempMax=25; //Esta es la temperatura maxima, si se rebasa hay un incendio
int BUZER_Al_pin=8; //zumbador para la alarma 
DHT dht(DHT11pin,DHT11); // Creamos un objeto que representa al sensor
//Se crea una conexion que usara el celular con bluetooth, se le indica los pines TX y RX
SoftwareSerial mySerial(10,11);  


/************ CONFIGURACIONES INICIALES********/
void setup()
{
  pinMode(BUZER_Al_pin, OUTPUT);
  dht.begin(); //Indicamos al sensor que comience a operar
  Serial.begin(9600); //Flujo de Comunicacion con python
  mySerial.begin(9600);//Flujo de comunicacion con dispositiovos bluetooth
}

/************  FUNCION PRINCIPAL********/

void loop()
{
   //CODIGO DE SENSOR DE HUMEDAD Y TEMPERATURA
   float h= dht.readHumidity();  //leemos la humedad
   float t= dht.readTemperature(); //leemos la temperatura
   //mandamos los datos al dispositivo bluetooth todo el tiempo
   //***NOTA**** Revisar el anexo de configuraciones bluetooth 
   mySerial.print("TEMPERATURA: ");  
   mySerial.println(t);
   mySerial.print("HUMEDAD: ");
   mySerial.println(h);
   //Si nos hemos excedido de temperatura ejecutamos acciones con python y el buzzer
   if(t>tempMax){
     digitalWrite(BUZER_Al_pin,HIGH);
     Serial.println('a');  //Este char va a ser interpretado por python   
   }
 
}
                                    
                                

Paso 3:

Control de iluminación para el ahorro de la energía eléctrica en el hogar.

Para este módulo se utilizó la fotoresistencia, mediante arduino se captura un valor de o a 1023 que indica el nivel de iluminación en la habitación. Si se detecta un nivel alto de iluminación significa que es de día y por lo tanto las luces deben permanecer apagadas (Leds).

Si se detecta un nivel bajo de iluminación significa que es de noche y por lo tanto la luces deben encenderse.

De esta forma nos aseguramos de que las luces estén encendidas solo cuando realmente se necesitan, el control de esto permite que se ahorre energía, beneficiando no solo el bolsillo del consumidor, sino también al ambiente.

Diagrama de conexión con Fritzing

Conexión Física


Código:

                                    
                                            /************VARIABLES GLOBALES********/
int LDRpin= 0;
int FOCOpin=12;

/************ CONFIGURACIONES INICIALES********/
void setup()
{
  pinMode(FOCOpin, OUTPUT);  //pin usado como salida para controlar un foco
}

/************  FUNCION PRINCIPAL********/

void loop()
{
//CODIGO DE ILUMINACION
  //Capturamos el valor de la iluminacion de 0 a 1023
   int valorLDR= analogRead(LDRpin);
   //Si el valor capturado es menor a 500 se enciende
   //Si no el foco se apaga
   digitalWrite(FOCOpin,valorLDR<500);
   
 
}
                                    
                                

Paso 4:

Sistema de alarma

Para este módulo se utilizó un sensor de movimiento PIR, este sensor se coloca en el techo de una casa y regresará un valor booleano, 1 cuando detecte movimiento y 0 en caso contrario.
El usuario debe activar su alarma antes de salir de casa y si el sensor detecta movimiento significará que un intruso ha entrado y automáticamente sonará una alarma y enviará un correo de notificación al usuario.

Diagrama de conexión con Fritzing


sensor PIR

Buzzer

Código:

                                    
                                            /************VARIABLES GLOBALES********/
int PIRpin= 3;
int BUZER_Al_pin=8;
boolean alarmaActiva= HIGH; //HIGH activo la alarma, LOW la desactiva

/************ CONFIGURACIONES INICIALES********/
void setup()
{
  pinMode(BUZER_Al_pin, OUTPUT); //zumbador para la alarma de intrusos
  pinMode(PIRpin, INPUT); //Pin para Sensor de movimiento
}

/************  FUNCION PRINCIPAL********/

void loop()
{
	//CODIGO DEL SENSOR PIR
  //Si la alarma esta activa 
  if(alarmaActiva){
    boolean valorPIR= digitalRead(PIRpin);
    //Si detecto alguien hago sonar el buzer 
    digitalWrite(BUZERpin, valorPIR);
    Serial.println(911); //mandamos un codigo de emergencia a python

  }
 
 
}
                                    
                                

Paso 6:

Código Completo

Código:

                                    
                                            /************BIBLIOTECAS NECESARIAS********/
#include <DHT.h>  //Necesaria para usar el sensor de temperatura
#include <SoftwareSerial.h> //Necesaria para crear las conexiones bluetooth

/************VARIABLES GLOBALES********/
int DHT11pin=2;   
int tempMax=25; //Esta es la temperatura maxima, si se rebasa hay un incendio
int BUZER_Al_pin=8; //zumbador para la alarma 
DHT dht(DHT11pin,DHT11); // Creamos un objeto que representa al sensor
//Se crea una conexion que usara el celular con bluetooth, se le indica los pines TX y RX
SoftwareSerial mySerial(10,11);  

int LDRpin= 0;
int FOCOpin=12;
int PIRpin= 3;
int BUZER_Al_pin=8;
boolean alarmaActiva= HIGH; //HIGH activo la alarma, LOW la desactiva


/************ CONFIGURACIONES INICIALES********/
void setup()
{
  pinMode(BUZER_Al_pin, OUTPUT);
  dht.begin(); //Indicamos al sensor que comience a operar
  Serial.begin(9600); //Flujo de Comunicacion con python
  mySerial.begin(9600);//Flujo de comunicacion con dispositiovos bluetooth
  pinMode(FOCOpin, OUTPUT);  //pin usado como salida para controlar un foco
  pinMode(BUZER_Al_pin, OUTPUT); //zumbador para la alarma de intrusos
  pinMode(PIRpin, INPUT); //Pin para Sensor de movimiento

}

/************  FUNCION PRINCIPAL********/

void loop()
{
   //CODIGO DE SENSOR DE HUMEDAD Y TEMPERATURA
   float h= dht.readHumidity();  //leemos la humedad
   float t= dht.readTemperature(); //leemos la temperatura
   //mandamos los datos al dispositivo bluetooth todo el tiempo
   //***NOTA**** Revisar el anexo de configuraciones bluetooth 
   mySerial.print("TEMPERATURA: ");  
   mySerial.println(t);
   mySerial.print("HUMEDAD: ");
   mySerial.println(h);
   //Si nos hemos excedido de temperatura ejecutamos acciones con python y el buzzer
   if(t>tempMax){
     digitalWrite(BUZER_Al_pin,HIGH);
     Serial.println('a');  //Este char va a ser interpretado por python   
   }

   //CODIGO DE ILUMINACION
  //Capturamos el valor de la iluminacion de 0 a 1023
   int valorLDR= analogRead(LDRpin);
   //Si el valor capturado es menor a 500 se enciende
   //Si no el foco se apaga
   digitalWrite(FOCOpin,valorLDR<500);
   

    //CODIGO DEL SENSOR PIR
  //Si la alarma esta activa 
  if(alarmaActiva){
    boolean valorPIR= digitalRead(PIRpin);
    //Si detecto alguien hago sonar el buzer 
    digitalWrite(BUZERpin, valorPIR);
    Serial.println(911); //mandamos un codigo de emergencia a python

  }
 
}
                                    
                                

Paso 7:

##############SCRIPT DE PYTHON PARA ENVIAR CORREOS#########

#!/usr/bin/env python

#-*- encoding: utf-8 -*-

#importamos el modulo para la comunicacion serial entre arduino y python

#importamostambien otro modulo que nos permite utilizar el protocolo smtp para el envío de correos

import serial

import smtplib

#declaramos variables que contienen nuestra información de la cuenta de gmail

usuario = "[email protected]"

contrasenia = "****" #aqui debes poner la contraseña de tu cuenta de gmail

destinatario = "[email protected]"

remitente = usuario

#declaracion de diccionarios para facilitar el envio del mail dependiendo del caso, si se activo la alarma por fuego o

#por la deteccion de un intruso

ASUNTO = {"fuego":"Peligro, hay fuego en casa","intruso":"Peligro,hay un intruso en casa"}

MENSAJE = {"fuego":"El sensor de temperatura ha detectado fuego","intruso":"El sensor de movimiento ha detectado un intruso"}

#creamos una funcion que se dedicara a mandar los correos

def mandarCorreo(asunto,mensaje):

#objeto de la clase SMTP, le pasamos como argumentos elservidor de correos y el puerto

#en este caso la cuenta del remitente del correo deberá pertenecer a gmail

smtpserver = smtplib.SMTP("smtp.gmail.com",587)

smtpserver.ehlo()

smtpserver.starttls()

smtpserver.ehlo()

smtpserver.login(usuario,contrasenia)

header = "To: "+destinatario+"\n"

header += "From: "+remitente+"\n"

header += "Subject: "+asunto+"\n"

msg = header+"\n"+mensaje+"\n\n"

smtpserver.sendmail(remitente,destinatario,msg)

smtpserver.close()

######parte principal del programa######

#creamos un objeto de la clase serial para establecer la comunicacion entre python y arduino

#como argumentos le pasamos el puerto en donde conectamos nuestro arduino fisicamene

#en linux es la ruta a dicho archivo, en windows deberá ser algo como COM3, etc.

#como segundo argumento establecemos el baudaje, que debera coincidir con el que pusimos en el codigo de arduino

puertoArduino = serial.Serial('/dev/ttyACM0',9600)

#ciclo infinito que se encargara de leer lo que nos envie nuestro arduino e imprimirlo en pantalla

while True:

#lo que recibimos en el puerto serial lo casteamos a un tipo de dato float y lo guardamos en la variable valor

valor = float(puertoArduino.readline())

print valor

#si la temperatura es mayor o igual a 50 celsius, entonces enviamos el correo y terminamos el programa

if valor>=50:

mandarCorreo(asunto["fuego"],mensaje["fuego"])

puertoArduino.close()

break

#si el valor es igual a 911, entonces se detecto un intruso por lo que mandamos el correo y terminamos el programa

if valor==911:

mandarCorreo(asunto["intruso"],mensaje["intruso"])

puertoArduino.close()

break


##################################################

si todo ha salido bien nos deberá llegar un correo como este cada que se active la alarma.

Código:

                                    
                                            ##############SCRIPT DE PYTHON PARA ENVIAR CORREOS#########

#!/usr/bin/env python

#-*- encoding: utf-8 -*-

#importamos el modulo para la comunicacion serial entre arduino y python

#importamostambien otro modulo que nos permite utilizar el protocolo smtp para el envío de correos

import serial

import smtplib

#declaramos variables que contienen nuestra información de la cuenta de gmail

usuario = "[email protected]"

contrasenia = "****" #aqui debes poner la contraseña de tu cuenta de gmail

destinatario = "[email protected]"

remitente = usuario

#declaracion de diccionarios para facilitar el envio del mail dependiendo del caso, si se activo la alarma por fuego o

#por la deteccion de un intruso

ASUNTO = {"fuego":"Peligro, hay fuego en casa","intruso":"Peligro,hay un intruso en casa"}

MENSAJE = {"fuego":"El sensor de temperatura ha detectado fuego","intruso":"El sensor de movimiento ha detectado un intruso"}

#creamos una funcion que se dedicara a mandar los correos

def mandarCorreo(asunto,mensaje):

#objeto de la clase SMTP, le pasamos como argumentos elservidor de correos y el puerto

#en este caso la cuenta del remitente del correo deberá pertenecer a gmail

smtpserver = smtplib.SMTP("smtp.gmail.com",587)

smtpserver.ehlo()

smtpserver.starttls()

smtpserver.ehlo()

smtpserver.login(usuario,contrasenia)

header = "To:	"+destinatario+"\n"

header += "From: "+remitente+"\n"

header += "Subject: "+asunto+"\n"

msg = header+"\n"+mensaje+"\n\n"

smtpserver.sendmail(remitente,destinatario,msg)

smtpserver.close()

######parte principal del programa######

#creamos un objeto de la clase serial para establecer la comunicacion entre python y arduino

#como argumentos le pasamos el puerto en donde conectamos nuestro arduino fisicamene

#en linux es la ruta a dicho archivo, en windows deberá ser algo como COM3, etc.

#como segundo argumento establecemos el baudaje, que debera coincidir con el que pusimos en el codigo de arduino

puertoArduino = serial.Serial('/dev/ttyACM0',9600)

#ciclo infinito que se encargara de leer lo que nos envie nuestro arduino e imprimirlo en pantalla

while True:

#lo que recibimos en el puerto serial lo casteamos a un tipo de dato float y lo guardamos en la variable valor

valor = float(puertoArduino.readline())

print valor

#si la temperatura es mayor o igual a 50 celsius, entonces enviamos el correo y terminamos el programa

if valor>=50:

mandarCorreo(asunto["fuego"],mensaje["fuego"])

puertoArduino.close()

break

#si el valor es igual a 911, entonces se detecto un intruso por lo que mandamos el correo y terminamos el programa

if valor==911:

mandarCorreo(asunto["intruso"],mensaje["intruso"])

puertoArduino.close()

break
                                    
                                

Paso 8:

LIBRERIAS ADICIONALES PARA TRABAJAR CON ARDUINO


DHT11.zip

Paso 9:

Diagrama de conexiones en Fritzing

Paso 10:

Video del funcionamiento terminado con pruebas

Link de descarga para visualizar el video: https://mega.nz/#F!Eg1hHbxQ!rT9EUuZGcyq3B0mNMYgBzw

se encuentra en la plataforma MEGA


Comentarios:

  • ViriCruz ViriCruz

    hola chicos, está muy interesante el proyecto, solo me hubiera gustado que hubieran puesto algunas imágenes para describir el proceso, como armaron el circuito. También si pudieran explicar la parte del código y ponerle comentarios (buenas prácticas de programación), para que sea más entendible y sea más fácil de seguir el tutorial :). Si pudieran subir un video de una demo , sería genial :D

    01/07/2016

  • sourient sourient

    Agradeço a oportunidade de aprendizado com este projeto. Abraços do amigo do Brasil.

    07/07/2016

mode_edit