SISTEMA DE ALARMA CONTRA INCENDIOS BASADO EN ARDUINO
ARDUINO BASED FIRE ALARM SYSTEM
LOPEZ SALINAS, JOAQUÍN ALESSANDRO
LOREDO PURIZAGA, ALEXANDER ALIPIO
QUILCA CASTAÑEDA, WENDY ESTEFANI
QUISPE ALHUAY, ANDY BRYAN
QUINTE SANCHEZ, FRANCISCO JAVIER
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
Facultad de Ingeniería de Sistemas e Informática
ABSTRACT: This project is aimed at Este proyecto buscar prescindir de la intervención
applicating a system based on Arduino, making use of 3 humana para la activación de la alarma en caso de un
different sensors, as a fire alarm system in person and siniestro. Además, realizando un monitoreo continuo
remotely. gracias a los diferentes sensores el habitante del edificio
The application of this project can help to avoid podrá tener conocimiento de las anomalías gracias a la
the consequences in the situations in which a fire can be placa NodeMcu que nos proporciona la conexión a
caused, allowing the client and the local fire station to Internet. De la misma manera, el departamento de
receive a warning if the system perceives sudden bomberos de la localidad recibirá un correo si es que la
changes in the environment. urgencia de incendio es inminente.
Key Word: Arduino, NodeMcu, LM35, YG1006, 2 FUNDAMENTACIÓN DEL
MQ-135, Alarm, Fire.
PROBLEMA
RESUMEN: Este proyecto se encuentra 2.1 Problema Principal
orientado a la aplicación de un sistema basado en
Arduino, haciendo uso de 3 sensores diferentes, como
Peligrosa intervención humana al momento de activar una
sistema de alarma contra incendios presencial y remota.
alarma contra incendios.
Con la aplicación de este proyecto se busca
prevenir los desastres causados por las diferentes
maneras en las que un incendio puede provocarse, 2.2 Problemas Secundarios
permitiendo que el cliente y la estación de bomberos local
reciban un aviso en caso el sistema perciba cambios a) Fallo en prevención.
bruscos en el ambiente. b) Inexistente monitoreo continuo del ambiente.
c) Demora en comunicarse con la estación de
Palabras clave: Arduino, NodeMcu, LM35, bomberos.
YG1006, MQ-135, Alarma, Incendio. d) Fallecimiento de un gran número de personas.
e) Pérdida de dinero, infraestructura, recursos.
1 INTRODUCCIÓN
2.3 Objetivo General del Proyecto
Los sistemas de alarma han representado una gran
ayuda en la materia de salvar vidas en ocurrencias de Evitar la intervención en lo que respecta a la alarma
desastres o siniestros. Los hay de varios tipos, siendo el contra incendios ya sea que este se encuentre presente
más común la alarma contra incendios, la cual se puede o no. Esto mediante la construcción de un sistema que
observar en gran número de edificios, ya sea en su forma facilitará y agilizará la comunicación con el propio
de palanca (activada manualmente), o de sensores que propietario y la estación de bomberos.
detecten humo o calor. El mayor problema con este tipo
de sistema es que, como se mencionó, debe ser activado 2.4 Objetivos Específicos del Proyecto
manualmente, de manera que se está arriesgando la vida
humana para poder alertar a los demás habitantes de la
a) Monitorear la información del ambiente mediante
infraestructura.
el uso de los 3 sensores.
b) Enviar mensajes de alerta al propietario si se
encuentran fluctuaciones en los niveles en el
ambiente.
c) Servir de alarma para los residentes que aun se
encuentran en la vivienda y ser capaz de
visualizar el estado del ambiente en una pantalla
LCD.
3 SENSORES
✓ Sensor MQ135
Descripción
Este sensor de control de calidad de aire es usado para
la detección de contaminación en el medio ambiente, por
lo general es implementado en circuitos de control como
alarmas en las casas, sitios donde se desea prevenir altos
niveles de contaminación a nivel aeróbico como industrias
que manejan compuestos químicos que pueden ser
nocivos también para la salud, especialmente en equipos
controladores de calidad de aire en edificios/oficinas.
✓ Sensor LM35
Este sensor se encarga de la detección de concentración
Descripción
de gas en diversos porcentajes, tal y como los son sus
El LM35 es un circuito electrónico sensor que puede
análogos MQ-3/4/5. La señal de salida que proporciona el
medir temperatura. Su salida es analógica, es decir, te
MQ-135 es dual, de carácter analógico y digital. Respecto
proporciona un voltaje proporcional a la temperatura. El
a la señal analógica proporcionada, esta viene a ser
sensor tiene un rango desde −55°C a 150°C. Su
directamente proporcional al incremento de voltaje. La
popularidad se debe a la facilidad con la que se puede
señal digital, esta presenta niveles TTL por lo que esta
medir la temperatura. Incluso no es necesario de un
señal puede ser procesada por un microcontrolador.
microprocesador o microcontrolador para medir la
temperatura. Dado que el sensor LM35 es analógico,
basta con medir con un multímetro, el voltaje a salida del Características:
sensor. • Voltaje de operación: 5V DC
• Corriente de operación: 150mA
Para convertir el voltaje a la temperatura, el LM35 • Potencia de consumo: 800mW
proporciona 10mV por cada grado centígrado. También • Tiempo de precalentemiento: 20 segundos
cabe señalar que ese sensor se puede usar sin offset, es • Resistencia de carga: Potenciómetro (Ajustable)
decir que, si medimos 20mV a la salida, estaremos
midiendo 2°C. • Detección de partes por millón: 10ppm~1000ppm
• Concentración detectable: Amoniaco, sulfuro,
Características: benceno, humo
• Resolución: 10mV por cada grado centígrado. • Concentración de oxígeno: 2%~21%
• Voltaje de alimentación. Por ejemplo, esté sensor se • Humedad de operación: <95%RH
puede alimentar desde 4Vdc hasta 20Vdc. • Temperatura de operación: -20°C~70°C
• Tipo de medición. Salida analógica.
• Numero de pines: 3 pines, GND, VCC y VSalida.
• No requiere calibración.
• Tiene una precisión de ±¼°C.
• Esta calibrado para medir °C.
• Consumo de corriente: 60 μA
• Empaquetados comunes:
o TO-CAN.
o TO-220.
o TO-92.
o SOIC8.
✓ Sensor Flama
Descripción
Detectar la actividad del fuego (flama) es muy importante
como una medida de seguridad; en algunos casos
necesitamos alertar si existe fuego (incendio) o en otros
casos, como en un sistema de calefacción por fuego, si la El Arduino Mega tiene 54 pines de entradas/salidas
llama está trabajando. digitales (14 de las cuales pueden ser utilizadas como
salidas PWM), 16 entradas análogas, 4 UARTs (puertos
Este módulo sensor de flama YG1006 nos permite serial por hardware), cristal oscilador de 16MHz, conexión
detectar la presencia de fuego, esto gracias al USB, jack de alimentación, conector ICSP y botón de
fototransitor NPN YG1006 que es sensible a la luz reset. Arduino Mega incorpora todo lo necesario para que
infrarroja (760-1100nm) y que en presencia de fuego se el microcontrolador trabaje; simplemente conéctalo a tu
polariza y permite el paso de corriente. La corriente pasa PC por medio de un cable USB o con una fuente de
por una resistencia y genera una caída de voltaje, este alimentación externa (9 hasta 12VDC). El Arduino Mega
voltaje es entregado en la salida analógica y sirve como es compatible con la mayoría de los shields diseñados
entrada del opamp comparador que entrega una salida para Arduino Duemilanove, diecimila o UNO.
digital. El nivel de sensibilidad es regulable mediante un
potenciómetro. Esta nueva versión de Arduino Mega 2560
adicionalmente a todas las características de su sucesor
El sensor de flama es utilizado en sistemas de detección utiliza un microcontrolador ATMega8U2 en vez del
de incendios, robots de batalla (warbots) y sistemas de circuito integrado FTDI. Esto permite mayores
calefacción a gas. velocidades de transmisión por su puerto USB y no
requiere drivers para Linux o MAC (archivo inf es
Características: necesario para Windows) además ahora cuenta con la
• Voltaje de Operación: 3.3V - 5V DC capacidad de ser reconocido por el PC como un teclado,
mouse, joystick, etc.
• Rango de detección: 60°
• Temperatura de trabajo: -25°C hasta 85°C Características:
• Longitud de onda detectable: 760 - 1100 nm • Microcontrolador ATmega2560.
• Opamp LM393 en modo comparador en placa • Voltaje de entrada de – 7-12V.
• Potenciómetro para regular sensibilidad • 54 pines digitales de Entrada/Salida (14 de ellos son
• 1 Salida digital salidas PWM).
• 1 Salida analógica • 16 entradas análogas.
• Dimensiones: 40*14mm • 256k de memoria flash.
• Velocidad del reloj de 16Mhz.
4 PLACAS
✓ ARDUINO MEGA 2560 R3
✓ NODEMCU V3
Descripción
Arduino Mega es una tarjeta de desarrollo open-source Descripción
construida con un microcontrolador modelo Atmega2560 NodeMCU es una pequeña placa Wifi lista para usar en
que posee pines de entradas y salidas (E/S), analógicas cualquier proyecto IoT. Está montada alrededor del ya
y digitales. Esta tarjeta es programada en un entorno de conocido ESP8266 y expone todos sus pines en los
desarrollo que implementa el lenguaje Processing/Wiring. laterales. Además, ofrece más ventajas como la
Arduino puede utilizarse en el desarrollo de objetos incorporación de un regulador de tensión integrado, así
interactivos autónomos o puede comunicarse a un PC a como un puerto USB de programación. Se puede
través del puerto serial (conversión con USB) utilizando programar con LUA o mediante el IDE de Arduino.
lenguajes como Flash, Processing, MaxMSP, etc. Las
posibilidades de realizar desarrollos basados en Arduino Dispone de una extensa comunidad y documentación que
tienen como límite la imaginación. te permitirán conectar tu proyecto al mundo exterior
mediante conexión Wifi.
Debido a que utiliza un conversor USB CH340, 6 CÓDIGO
normalmente el sistema operativo lo instala
automáticamente, aunque dependiendo de los casos,
puede que necesites instalar el driver específico. 6.1 Arduino MEGA
Características: include <LiquidCrystal.h>
• Procesador: ESP8266 @ 80MHz (3.3V) (ESP-12E)
#include <SoftwareSerial.h>
• 4MB de memoria FLASH (32 MBit)
• WiFi 802.11 b/g/n
• Regulador 3.3V integrado (500mA) //Para la comunicación con el NodeMcu
• Conversor USB-Serial CH340 SoftwareSerial BT1(19, 18);
• Función Auto-reset // Constructor de la librería de LCD 16x2
• 9 pines GPIO con I2C y SPI // Aquí se configuran los pines asignados a la
• 1 entrada analógica (1.0V max) pantalla del PCF8574
• 4 agujeros de montaje (3mm) LiquidCrystal lcd(8,11,5,4,7,6);
• Pulsador de RESET int brillo=9;
• Entrada alimentación externa VIN (20V max) // Selecciona el pin para el zumbador
int buzzer = 13;
int valorSensor = 0;
5 MODELO FRITZING void setup()
{
// Colocas de la velocidad del puerto serial
[Link](9600);
// Declarar buzzer como una SALIDA:
pinMode(buzzer, OUTPUT);
// Indicar a la librería que tenemos conectada
una pantalla de 16x2
[Link](16, 2);
// Mover el cursor a la primera posición de la
pantalla (0, 0)
[Link] ();
[Link]("En espera,alarma");
// Mover el cursor a la segunda línea (1) primera
columna
[Link] ( 0, 1 );
// Imprimir otra cadena en esta posición
[Link]("contra incendio");
// Esperar un segundo
delay(100);
}
void loop()
{
analogWrite(brillo,120);
int adc_MQ = analogRead(A0); //Leemos la salida
analógica del MQ
float voltaje = adc_MQ * (5.0 / 1023.0);
//Convertimos la lectura en un valor de voltaje
int val = analogRead(A1);
float mv = ( val/1024.0)*5000; //Calculamos los // activa el buzzer Humo
milivoltios de entrada else if (adc_MQ > 200){
float cel = (mv/10)-20; //celsius [Link] ();
float farh = (cel*9)/5 + 32; //fahrenheit [Link]("Alarma Detectada");
// Mover el cursor a la segunda línea (1) primera
valorSensor = analogRead(A2); columna
float voltaje1 = valorSensor * (5.0 / 1023.0); [Link] ( 0, 1 );
//Convertimos la lectura en un valor de voltaje // Imprimir otra cadena en esta posición
if (valorSensor < 500 && cel > 50 && adc_MQ > [Link]("Sensacion de Humo ");
200){ // Esperar un segundo
digitalWrite(buzzer, HIGH); delay(100);
delay(100); }else {
// Desactiva el buzzer // Imprimir el mensaje de espera
digitalWrite(buzzer, LOW); [Link]("En espera,alarma");
delay(50); // Mover el cursor a la segunda línea (1) primera
columna
[Link](" INCENDIO "); [Link] ( 0, 1 );
// Mover el cursor a la segunda línea (1) primera // Imprimir otra cadena en esta posición
columna [Link]("contra incendio ");
[Link] ( 0, 1 ); // Esperar un segundo
// Imprimir otra cadena en esta posición delay(100);
[Link](" INMINENTE "); }
// Esperar un segundo
delay(100); [Link](" Flama: ");
} [Link]( valorSensor);
// activa el buzzer llama
else if (valorSensor < 500){ [Link](" TEMPERATURA = ");
[Link] (); [Link](cel);
[Link]("Alarma Detectada"); [Link]("*C ");
// Mover el cursor a la segunda línea (1) primera [Link](", ");
columna [Link]( farh);
[Link] ( 0, 1 ); [Link](" *F ");
// Imprimir otra cadena en esta posición //[Link]();
[Link]("Peligro de Llama " );
// Esperar un segundo [Link]("HUMO :");
delay(100); [Link](adc_MQ);
} [Link](" voltaje:");
// activa el buzzer temperatura [Link](voltaje);
else if (cel > 70){
[Link] (); delay(100);
[Link]("Alarma Detectada"); }
// Mover el cursor a la segunda línea (1) primera
columna
[Link] ( 0, 1 ); 6.2 NodeMcu V3
// Imprimir otra cadena en esta posición
[Link]("Temperatura alta "); class Gsender
// Esperar un segundo {
delay(100); private:
} // Declaramos el puerto SMTP
const int SMTP_PORT = 465; }
// Colocamos el servidor SMTP ++attempt;
const char* SMTP_SERVER = [Link]("");
"[Link]"; if (i == 51) {
const char* EMAILBASE64_LOGIN = [Link]("Connection: TIMEOUT on attempt:
"ZWRpZmljaW8udHJhZGljaW9uZXMubWlyYWZsb3 ");
Jlc0BnbWFpbC5jb20="; [Link](attempt);
const char* EMAILBASE64_PASSWORD = if (attempt % 2 == 0)
"MTIzNDV0cmFkaWNpb25lcw=="; [Link]("Check if access point available or
// Correo desde el cual enviaremos la alerta SSID and Password\r\n");
const char* FROM = return false;
"[Link]@[Link]"; }
} [Link]("Connection: ESTABLISHED");
[Link]("Got IP address: ");
[Link]([Link]());
#include <ESP8266WiFi.h> return true;
#include <SoftwareSerial.h> }
#include "Gsender.h"
void Awaits()
#pragma region Globals {
// WIFI nombre uint32_t ts = millis();
const char* ssid = "ALSS"; while (!connection_state)
// WIFI contraseña {
const char* password = "sof01234"; delay(50);
// estado de la conexión if (millis() > (ts + reconnect_interval) &&
uint8_t connection_state = 0; !connection_state) {
// tiempo de volver a intentar connection_state = WiFiConnect();
uint16_t reconnect_interval = 10000; ts = millis();
#pragma endregion Globals }
}
uint8_t WiFiConnect(const char* nSSID = nullptr, }
const char* nPassword = nullptr)
{ void setup()
static uint16_t attempt = 0; {
[Link]("Connecting to "); [Link](115200);
if (nSSID) { connection_state = WiFiConnect();
[Link](nSSID, nPassword); if (!connection_state)
[Link](nSSID); Awaits();
} else { }
[Link](ssid, password);
[Link](ssid); void loop() {
}
if (adc_MQ > 200) {
uint8_t i = 0; Gsender *gsender = Gsender::Instance();
while ([Link]() != WL_CONNECTED && i++ < String subject = "ALARMA";
50) String msg = "El nivel detectado por el sensor de
{ humo es mayor a 200.";
delay(200); // El correo se envía sólo al propietario
[Link](".");
if (gsender->Subject(subject)- if (gsender->Subject(subject)-
>Send("rednaxela4523@[Link]", msg)) { >Send("rednaxela4523@[Link]", msg) &&
[Link](" - Mensaje Enviado "); gsender->Subject(subject)-
delay(120000); >Send("joaqin2796@[Link]", msg)) {
} else { [Link](" - Mensaje Enviado ");
[Link](" - Error "); delay(120000);
delay(3000); } else {
} [Link](" - Error ");
} delay(3000);
}
if (cel > 70) { }
Gsender *gsender = Gsender::Instance(); }
String subject = "ALARMA";
String msg = "El nivel detectado por el sensor de 7 IMÁGENES
temperatura es mayor a 70.";
// El correo se envía sólo al propietario
if (gsender->Subject(subject)-
>Send("rednaxela4523@[Link]", msg)) {
[Link](" - Mensaje Enviado ");
delay(120000);
} else {
[Link](" - Error ");
delay(3000);
}
}
if (valorSensor > 500) {
Gsender *gsender = Gsender::Instance();
String subject = "ALARMA";
String msg = "El nivel detectado por el sensor de
llama es menor a 500.";
// El correo se envía sólo al propietario
if (gsender->Subject(subject)-
>Send("rednaxela4523@[Link]", msg)) {
[Link](" - Mensaje Enviado ");
delay(120000);
} else {
[Link](" - Error ");
delay(3000);
}
}
if (valorSensor < 500 && cel > 50 && adc_MQ >
2000) {
Gsender *gsender = Gsender::Instance();
String subject = "ALARMA URGENCIA!";
String msg = "INCENDIO INMINENTE!";
// El correo se envía a ambos: el propietario y la
estación de bomberos
8 CONCLUSIONES
• Se pudo realizar la comunicación serial
entre ambas placas (Arduino MEGA y
NodeMcu), permitiendo la conexión a
Internet por medio de una red WiFi.
• Gracias a la conexión WiFi, pudimos
implementar en el sistema: la
mensajería por medio del uso de un
servidor SMTP; siendo capaces de
alertar al usuario y a la estación de
bomberos apenas se genere alguna
fluctuación en los datos recogidos por el
sistema.
• El uso de los tres sensores de manera
independiente o interconectada nos ha
permitido emitir diferentes tipos de alerta
las cuales corresponde a los diferentes
escenarios que se podrían encontrar en
caso de un potencial incendio.
9 RECOMENDACIONES
• No colocar el dispositivo cerca de lugares
donde la temperatura suela aumentar de
forma natural, así como donde suela
haber mucho humo (en el garaje o muy
cerca de la cocina).
• En caso de contar con problemas en su
conexión a Internet, hacer uso de la
alarma buzzer y la pantalla LCD, y
comunicarse con su estación de
bomberos local si muestran señales de
datos peligrosos.