Sistem de alertare în caz de incendiu [608226]

Sistem de alertare în caz de incendiu

Absolvent: [anonimizat], 2020

Nitu Bogdan, AIA, An 3, Gr. 2
2
Cuprins

1. Introducere ………………………….. ………………………….. ………………………….. ………………………….. ……….. 4
2. Componente notabile ………………………….. ………………………….. ………………………….. ……………………… 4
1. NodeMCU ESP8266 ………………………….. ………………………….. ………………………….. ……………………… 4
2. Shield Logare Date pentru Arduino ………………………….. ………………………….. ………………………….. .. 5
3. LCD 1602 cu Interfața I2C si Backlight Galben -Verde ………………………….. ………………………….. ……. 5
4. Buzzer Activ SFM -20B (3 – 24 V) ………………………….. ………………………….. ………………………….. …….. 5
5. Modul cu 3 LED -uri (Roșu, Galben, Verde) ………………………….. ………………………….. ………………….. 6
6. Modul Senzor Gaz MQ -2 ………………………….. ………………………….. ………………………….. ………………. 6
7. Sursa de alimentare pentru Breadboard ………………………….. ………………………….. …………………….. 6
3. Schemă electrică ………………………….. ………………………….. ………………………….. ………………………….. … 7
4. Codul de funcționare ………………………….. ………………………….. ………………………….. ………………………. 7
1. Software folosit ………………………….. ………………………….. ………………………….. ………………………….. . 7
2. Explicarea codului ………………………….. ………………………….. ………………………….. ……………………….. 8
1. Importarea de librarii necesare pentru funcționarea codului ………………………….. …………………. 8
2. Declararea de variabile folosite ………………………….. ………………………….. ………………………….. …. 8
3. Declararea obiectelor folosite ………………………….. ………………………….. ………………………….. ……. 9
4. Funcția de inițializare Card SD ………………………….. ………………………….. ………………………….. …… 9
5. Funcția de scriere pe Card SD ………………………….. ………………………….. ………………………….. ……. 9
6. Funcția de trimitere email ………………………….. ………………………….. ………………………….. ………. 11
7. Funcția de verificare a răspunsurilor primite de la serverul de email ………………………….. …….. 12
8. Funcția de trimitere a datelor in cloud ………………………….. ………………………….. ………………….. 13
9. Funcția de actualizare a datei si orei de pe internet ………………………….. ………………………….. … 14
10. Funcția de inițializare a WiFi -ului ………………………….. ………………………….. ………………………. 15
11. Funcția de inițializare a pinilor de ieșire ………………………….. ………………………….. …………….. 15
12. Funcția de inițializare a modulului MQ2 ………………………….. ………………………….. …………….. 15
13. Funcția de inițializare ecran LCD ………………………….. ………………………….. ……………………….. 16
14. Funcția de inițializare comunicare Serial ………………………….. ………………………….. ……………. 16
15. Funcție afișare mesaj status normal pe ecran LCD ………………………….. ………………………….. . 16
16. Funcție afișare mesaj alarma pe ecran LCD ………………………….. ………………………….. ………… 17
17. Funcție activare alarma ………………………….. ………………………….. ………………………….. ……….. 17

Nitu Bogdan, AIA, An 3, Gr. 2
3
18. Funcție încheiere alarma ………………………….. ………………………….. ………………………….. ……… 17
19. Funcție returnare tipuri de data ………………………….. ………………………….. ……………………….. 18
20. Funcție returnare tipuri de ora ………………………….. ………………………….. …………………………. 18
21. Funcția setup ce rulează prima pornire a placii de dezvoltare ………………………….. …………… 18
22. Funcția loop ce rulează pe tot timpul funcționarii placii de dezvoltare ………………………….. . 19
3. Modul de funcționare ………………………….. ………………………….. ………………………….. ……………………. 20
4. Închiriere ………………………….. ………………………….. ………………………….. ………………………….. …………. 21

Nitu Bogdan, AIA, An 3, Gr. 2
4
1. Introducere

Dispozitivul va detecta fum și surplusul de gaze cu ajutorul unui senzor de gaz MQ -2 și va trimite o
alerta pe mail, totodată stocând un istoric de date a ultimelor 20 de minute într -un card SD situat în
shield -ul de date. Alerta, pe lângă cea electronică trimisă pe mail, constă în afișarea unui mesaj pe
ecranul LCD “Smoke Detected” și valoarea actuală detectată, de asemenea un semnal audio dat de
buzzer și vizual de LED -uri.
2. Componente notabile

1. NodeMCU ESP8266

Modulul ESP8266 oferă o soluție completa si autonoma de rețea Wi-Fi, permițându -i sa găzduiască
aplicația sau sa descarce toate funcțiile de rețea Wi-Fi de la un alt procesor de aplicații . ESP8266 dispune
de capacitați puternice de procesare si stocare la bord care ii permit sa fie integrat cu senzorii si alte
dispozitive specifice aplicației prin GPIO -urile sale, cu o dezvoltare minima in fata si o încărcare minima
in timpul funcționarii . Gradul ridicat de integrare pe cip permite circuite externe minime, iar întreaga
soluție , inclusiv modulul frontal, este proiectata sa ocupe zona minima de PCB.
Caracteristici tehnice:
• Voltaj: 3.3V.
• Wi-Fi Direct (P2P), soft -AP.
• Consum curent: 10uA ~ 170mA.
• Memorie flash atașabilă : maxi m 16MB
(normal 512K).
• Protocolul TCP / IP integrat.
• Procesor: Tensilica L106 pe 32 de biți.
• Viteza procesorului: 80 ~ 160MHz.
• RAM: 32K + 80K.
• GPIO: 17 (multiplexate cu alte funcții ).
• Analogic la digital: 1 intrare cu rezoluție
de 1024 pas.
• Putere de ieșire + 19,5 dBm in modul
802.11b
• Suport 802.11: b / g / n.
• Conexiuni maximale concurente TCP:
5

Nitu Bogdan, AIA, An 3, Gr. 2
5
2. Shield Logare Date pentru Arduino

Shield -ul acesta oferă o metoda rapida de
adaugă stocare oricărui proiect cu Arduino , acesta
având si un cip, cu stocarea orei reale.
Caracteristici tehnice:
• Interfață pentru card SD, funcționează cu
carduri FAT16 sau FAT32. Level shifter -ul de
3.3V protejează cardul SD
• Modul de timp (RTC -real time clock),
păstrează ora/data chiar dacă Arduino -ul este
deconectat. Ar e baterie încorporată.
• Regulator 3.3V pentru tensiune constantă, dar
și pentru a porni carduri SD care au nevoie de
multă putere pentru a funcționa
3. LCD 1602 cu Interfața I2C si Backlight Galben -Verde

Acest ecran LCD de 16 x 2, cu iluminare de culoare
galben-verde, a fost special conceput pentru aplicații cu
putere redusă. Este perfect pentru aplicațiile handheld,
deoarece tensiunea standard de operare este de 5 V. Acest
LCD 1602 este compatibil cu controlerul de afișare HD44780.
Specificații:
• Tensiunea d e intrare: 4.5 V până la 5.5 V
• Curent de alimentare: 1,5 mA
• Tensiunea de funcționare pentru LCD: 5 V
• Lumina de iluminare din spate: 120 mA
• Intervalul de tensiune înainte de iluminare: 4.1
V până la 4.3 V
4. Buzzer Activ SFM -20B (3 – 24 V)

Buzzer piezoelectr ic, pentru alarmarea sonora.
Specificații:
• Tensiune de intrare: 3V pana la 24V
• Curent de alimentare: 10mA
• Frecventa: 3900±500Hz

Nitu Bogdan, AIA, An 3, Gr. 2
6
5. Modul cu 3 LED -uri (Roșu, Galben, Verde)

Modul cu 3 leduri Roșu, Galben, Verde pentru
montarea ușoara, folosit pentru alarmarea vizuala.
Specificații:
• Tensiune de intrare: 3V pana la 5V
• Curent de alimentare: 20mA / led
6. Modul Senzor Gaz MQ -2

Modulul este folosit pentru a detecta scurgerile
de gaze în încăperi mici sau mari și reprezintă o
metodă de precauție pentru incendii sau pentru
intoxicații. Senzorul are o sensibilitate ridicată și
principalele gaze pe care le vizează sunt GPL -ul,
izobutan, propan, metan, alcool, hidrogen și fum.
Senzorul dispune de un comparator, astfel că puteți
citi date analogice în timp re al sau puteți afla dacă
concentrația de gaz a depășit o anumita limită.
Specificații:
• Tensiune de intrare: 5V
• Curent de alimentare: 150mA
• Rezistență heater: 33R
• Temperatură de lucru: -20oC – 50oC
• Output digital sau analogic
7. Sursa de alimentare pentru Breadboard

Acesta compacta sursa de alimentare 3.3 -5V va poate
face proiectul mai ușor si nu va fi nevoie sa folosiți alte surse
de alimentare voluminoase. Modulul vine cu o dioda de serie,
protecție împotriva inversării polarității . Modulul are doua
canale si poate suporta 7V pana la 12V prin mufa Jack si poate
produce 3.3V si + 5V pe fiecare canal separat. Este un produs
ce trebuie inclus in experimentele dumneavoastră si poate fi
folosit cu ușurința pe un Breadboard .
Specificații:
• Intrare porturi: 6. 5V – 12V DC
• Ieșiri : 3.3V – 5.5V DC

Nitu Bogdan, AIA, An 3, Gr. 2
7
• Blocarea comutatorului On / Off
3. Schemă electrică

4. Codul de funcționare

1. Software folosit

Mediul de dezvoltare integrată Arduino este o aplicație multiplă de platformă care este scrisă în
funcții de la C și C ++. Este folosit pentru a scrie și încărca programe pe placi compatibile Arduino, dar și,
cu ajutorul unor nuclee de la terți, alte panouri de dezvoltare a furnizorilor.
Programele scrise folosind Arduino Software (IDE) se numesc schițe. Aceste schițe sunt scrise î n
editorul de text și sunt salvate cu extensia de fișier .ino. Editorul are funcții pentru tăierea / lipirea și
pentru căutarea / înlocuirea textului. Zona de mesaje oferă feedback în timp ce salvați și exportați și
afișează, de asemenea, erori. Consola af ișează ieșirea de text de către Arduino Software (IDE), inclusiv
mesaje complete de eroare și alte informații. Colțul din dreapta jos al ferestrei afișează placa configurată
și portul serial. Butoanele barei de instrumente vă permit să verificați și să înc ărcați programe, să creați,
să deschideți și să salvați schițe și să deschideți monitorul serial.

Nitu Bogdan, AIA, An 3, Gr. 2
8
2. Explicarea codului

1. Importarea de librarii necesare pentru funcționarea codului

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MQ2.h>
#include <RtcDS3231.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <SD.h>

2. Declararea de variabile folosite

//Declare variables
boolean alreadyRun = false;
boolean SD_Failure = false;
int MQ2_Pin = A0;
int Green_LED = D4;
int Yellow_LED = D3;
int Red_LED = D0;
int Buzzer = D8;
int SD_Card = 9;
int senzitivitate = 10;
const char *ssid = "Wireless UPC";
const char *password = " REPLACE ";
const long utcOffsetInSeconds = 10800; //UTC+3 | UTC=0 | UTC+1 =3600
String apiKey = "ZJX6MEY4QYYSJ3IK";
const char* server = "api.thingspeak.com";
char mail_Server[] = "mail.bitus.ro"; // The SMTP Server
const char* user_Base64 = "YWxlcnRzQGJpdHVzLnJv"; // https://www.base64encode.org/
const char* user_Password_bas e64 = " REPLACE”
const char* from_Email_1 = "MAIL From: alerts@bitus.ro";
const char* to_Email_1 = "RCPT TO: alerts@bitus.ro";
const char* from_Email_2 = "To: alerts@bitus.ro";
const char* to_Email_2 = "From: alerts@bitus.ro";
char* boot_Failure = "";

Nitu Bogdan, AIA, An 3, Gr. 2
9
3. Declararea obiectelor folosite

//Delcare Object for WiFi
WiFiClient espClient;
WiFiClient dataClient;

//Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);

//Declare Object for RTC3231
RtcDS3231<TwoWire> rtc Object(Wire);

//Declare object for WiFiUDP
WiFiUDP ntpUDP;

//Declare NTPClient
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);

//Declare File
File myFile;
File myFile2;
int data;

//Set the MQ2 data pin
MQ2 mq2(MQ2_Pin);

4. Funcția de inițializare Card SD

void setupSD()
{
//Initializing SD card
if (!SD.begin(SD_Card)) {
Serial.println("Initialization failed!");
strcat(boot_Failure, "SD_Card_Initialization, ");
SD_Failure = true;
}
}

5. Funcția de scriere pe Card SD

void writeToSD(float lpg, float co, float smoke)
{
String full_Path = "/" + date("Year") + "/" + date("Month") + "/" + date("Day") + ".txt";

Nitu Bogdan, AIA, An 3, Gr. 2
10
String full_Path2 = "/" + date("Year") + "/" + date("Month") + "/" + date("Day") + "Last20min" +
".txt";
if (SD.exists("/" + date("Year")))
{
if (SD.exists("/" + date("Year") + "/" + date("Month")))
{
if (SD.exists(full_Path))
{
myFile = SD.open(full_Path, FILE_READ);

String file_Date = myFile.readStringUntil(' ');

myFile.close();

if (date("").toInt() – file_Date.toInt() >= 1260)
{
Serial.println("Making the 20 minute file!");
SD.remove(full_Path2);
myFile = SD.open(full_Path, FILE_READ);
myFile2 = SD.open(full_Path2, FILE_WRITE);

while (myFile.available()) {
myFile2.write(myFile.read());
}

myFile.close();
myFile2.close();
SD.remove(full_Path);
Serial.println("File removed, it pased the 20 minute mark! | " + date("") + " | " + file_Date);
}

myFile = SD.open(full_Path, FILE_WRITE);
if (myFile) {
myFile.print(date(""));
myFile.print(" | ");
myFile.print(time("HMS"));
myFile.print(" -> ");
myFile.print("LPG: " + String(lpg));
myFile.print(" CO: " + String(co));
myFile.println(" Smoke: " + String(smoke));
myFile.close();
} else {
Serial.println("Failed to write in file: " + full_Path);
}
} else {
myFile = SD.open(full_Path, FILE_WRITE);
myFile.close();
Serial.println("Creating file at " + full_Path);

Nitu Bogdan, AIA, An 3, Gr. 2
11
}
} else SD.mkdir("/" + date("Year") + "/" + date("Month"));
} else SD.mkdir("/" + date("Year"));
}

6. Funcția de trimitere email

byte sendEmail(float lpg, float co, float smoke, char* alarm_Status)
{
if (espClient.connect(mail_Server, 25) == 1)
Serial.println(F("connected"));
else
{
Serial.println(F("connection failed"));
strcat(boot_Failure, "Mail_Connection, ");
return 0;
}
if (!emailResp())
return 0;

Serial.println(F ("Sending EHLO"));
espClient.println("EHLO www.example.com");
if (!emailResp())
return 0;

Serial.println(F("Sending auth login"));
espClient.println("AUTH LOGIN");
if (!emailResp())
return 0;

Serial.println(F("Sending User"));

espClient.println(user_Base64);
if (!emailResp())
return 0;

Serial.println(F("Sending Password"));

espClient.println(user_Password_base64);
if (!emailResp())
return 0;

Serial.println(F("Sending F rom"));

espClient.println(F(from_Email_1));
if (!emailResp())

Nitu Bogdan, AIA, An 3, Gr. 2
12
return 0;

Serial.println(F("Sending To"));
espClient.println(F(to_Email_1));
if (!emailResp())
return 0;

Serial.println(F("Sending DATA"));
espClient.println(F("DATA"));
if (!emailResp())
return 0;
Serial.println(F("Sending email"));

espClient.println(F(from_Email_2));
espClient.println(F(to_Email_2));
espClient.println(F("Subject: SMOKE DE TECTION ALERT \r\n"));
espClient.print("The alarm status is: ");
espClient.println(alarm_Status);
espClient.print("LPG: ");
espClient.println(lpg);
espClient.print("CO: ");
espClient.println(co);
espClient.print("SMOKE: ");
espClient.print(s moke);
espClient.println(" PPM");

espClient.println(F("."));
if (!emailResp())
return 0;

Serial.println(F("Sending QUIT"));
espClient.println(F("QUIT"));
if (!emailResp())
return 0;

espClient.stop();
Serial.println(F("disconnected"));
return 1;
}

7. Funcția de verificare a răspunsurilor primite de la serverul de email

byte emailResp()
{
byte responseCode;
byte readByte;

Nitu Bogdan, AIA, An 3, Gr. 2
13
int loopCount = 0;

while (!espClient.available())
{
delay(1);
loopCount++;
if (loopCount > 20000)
{
espClient.stop();
Serial.println(F(" \r\nTimeout"));
strcat(boot_Failure, "Email_Timeout, ");
return 0;
}
}
responseCode = espClient.peek();
while (espClient.available())
{
readByte = espClient.read();
Serial.write(readByte);
}

if (responseCode >= '4')
{
return 0;
}
return 1;
}

8. Funcția de trimitere a datelor in cloud

void send_Data(float lpg, float co, float smoke)
{
if (WiFi.status() == WL_CONNECTED)
{
if (dataClient.connect(server, 80))
{
String postStr = apiKey;
postStr += "&field1=";
postStr += String(smoke);
postStr += "&field2=";
postStr += String(co);
post Str += "&field3=";
postStr += String(lpg);
postStr += " \r\n\r\n";

dataClient.print("POST /update HTTP/1.1 \n");

Nitu Bogdan, AIA, An 3, Gr. 2
14
dataClient.print("Host: api.thingspeak.com \n");
dataClient.print("Connection: close \n");
dataClient.print("X -THINGSPEAKAPIKEY: " + apiKey + " \n");
dataClient.print("Content -Type: application/x -www -form -urlencoded \n");
dataClient.print("Content -Length: ");
dataClient.print(postStr.length());
dataClient.print(" \n\n");
dataClient.print (postStr);
}
dataClient.stop();
}
}

9. Funcția de actualizare a datei si ore i de pe internet

void update_Date()
{
if (WiFi.status() == WL_CONNECTED)
{
rtcObject.Begin(); //Starts I2C
timeClient.begin(); //Starts NTPClient
timeClient.update(); //Updates date from NTP
delay (2000);
unsigned long epochTime = timeClient.getEpochTime();
struct tm *ptm = gmtime ((time_t *)&epochTime);

RtcDateTime currentTime = Rtc DateTime(int(ptm ->tm_year + 1900), int(ptm ->tm_mon + 1),
int(ptm ->tm_mday), int(timeClient.getHours()), int(timeClient.getMinutes()),
int(timeClient.getSeconds())); //define date and time object
rtcObject.SetDateTime(currentTime); //configure the RTC w ith object

if (!rtcObject.IsDateTimeValid())
{
if (rtcObject.LastError() != 0)
{
Serial.print("RTC communications error = ");
Serial.println(rtcObject.LastError());
strcat(boot_Failure, "RTC_Communications, ");
} else {
Serial.println("RTC lost confidence in the DateTime!");
strcat(boot_Failure, ",RTC_Confidence ");
}
}
}
}

Nitu Bogdan, AIA, An 3, Gr. 2
15
10. Funcția de inițializare a WiFi -ului

void setup_WiF i()
{
WiFi.begin(ssid, password);

while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
if (WiFi.status() != WL_CONNECTED)
{
Serial.print("WiFi Initialization Error!");
strcat(boot_Failure, "WiFi_Initialization, ");
}
}

11. Funcția de inițializare a pinilor de ieșire

void setup_Outputs()
{
//Green LED
pinMode(Green_LED, OUTPUT);
//Yellow LED
pinMode(Yellow_LED, OUTPUT);
//RED LED
pinMode(Red_LED, OUTPUT);
//BUZZER
pinMode(Buzzer, OUTPUT);
}

12. Funcția de inițializare a modulului MQ2

void setup_MQ2()
{
Serial.println("Wating 10s for MQ2 to heat up!");
//Wait for MQ2 to heat up
delay(10000);
mq2.begin();
}

Nitu Bogdan, AIA, An 3, Gr. 2
16
13. Funcția de inițializare ecran LCD

void setup_LCD()
{
//Initialize the lcd
lcd.init();
//Print start message to the LCD.
lcd.backlight();
lcd.setCursor(4, 0);
lcd.print("Arduino");
lcd.setCursor(1, 1);
lcd.print("Smoke Detector");
}

14. Funcția de inițializare comunicare Serial

void setup_Serial()
{
//Serial Monitor Baud
Serial.begin(9600);
}

15. Funcție afișare mesaj status normal pe ecran LCD

void debugScreen(float lpg, float co, float smoke)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LPG:");
lcd.print(lpg);
lcd.print(" CO:");
lcd.print(co);
lcd.setCursor(0, 1);
lcd.print("SMOKE:");
lcd.print(smoke);
lcd.print(" PPM");
delay(1000);
}

Nitu Bogdan, AIA, An 3, Gr. 2
17
16. Funcție afișare mesaj alarma pe ecran LCD

//Alarm Message Setup
void alarm_message(float smoke)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ALARM ");
lcd.print("SMOKE:");
lcd.print(smoke);
lcd.print (" PPM");
lcd.setCursor(1, 1);
lcd.print("SMOKE DETECTED!");
if (alreadyRun == false)
{
alreadyRun = true;
}
}

17. Funcție activare alarma

void start_Alarm(float smoke)
{
alarm_message(smoke);
digitalWrite(Red_LED, HIGH);
digitalWrite(Yellow_LED, HIGH);
digitalWrite(Buzzer, HIGH);
delay(500);
digitalWrite(Red_LED, LOW);
digitalWrite(Yellow_LED, LOW);
digitalWrite(Buzzer, LOW);
delay(500);
}

18. Funcție încheiere alarma

void endAlarm()
{
alreadyRun = false;
lcd.clear();
digitalWrite(Red_LED, LOW);
if (strcmp(boot_Failure, ""))
digitalWrite(Yellow_LED, HIGH);
digitalWrite(Buzzer, LOW);

Nitu Bogdan, AIA, An 3, Gr. 2
18
}

19. Funcție returnare tipuri de data

String date(String date_type)
{
//Get the time from the RTC
RtcDateTime currentTime = rtcObject.GetDateTime();
//Declare a string as an array of chars
char str[20];
if (date_type == "Day")return String(currentTime.Day());
else if (date_type == "Month")return String(currentTim e.Month() < 10 ? "0" +
String(currentTime.Month()) : String(currentTime.Month()));
else if (date_type == "Year")return String(currentTime.Year());
else if (date_type == "DMY")return date("Day") + "." + date("Month") + "." + date("Year");
else return String(currentTime.Epoch32Time());
}

20. Funcție returnare tipuri de ora

String time(String time_type)
{
//Get the time from the RTC
RtcDateTime currentTime = rtcObject.GetDateTime();
//Declare a string as an array of chars
char str[20];
if (time_type == "Hour")return String(currentTime.Hour() < 10 ? "0" + String(currentTime.Hour()) :
String(currentTime.Hour()));
else if (time_type == "Minute")return String(currentTime.Minute() < 10 ? "0" +
String(currentTime.Minute()) : String(currentTime.Minute()));
else if (time_type == "Second")return String(currentTime.Second() < 10 ? "0" +
String(currentTime.Second()) : String(currentTime.Second()));
else if (time_type == "HMS")return t ime("Hour") + ":" + time("Minute") + ":" + time("Second");
else return time("Hour") + ":" + time("Minute") + ":" + time("Second");
}

21. Funcția setup ce rulează prima pornire a placii de dezvoltare

void setup() {
setup_Serial();
Serial.println("Setup Serial");
setup_Outputs();
Serial.println("Setup Outputs");

Nitu Bogdan, AIA, An 3, Gr. 2
19
digitalWrite(Yellow_LED, HIGH);
setup_WiFi();
Serial.println("Setup WiFi");
update_Date();
Serial.println("Setup Date");
setup_LCD();
Serial.println("Setu p LCD");
setupSD();
Serial.println("Setup SD");
setup_MQ2();
Serial.println("Setup MQ2");
lcd.clear();
if (strcmp(boot_Failure, ""))
{
strcat(boot_Failure, " has failed the startup!");
sendEmail(0, 0, 0, boot_Failure);
} else {
digitalWrite(Yellow_LED, LOW);
}
digitalWrite(Green_LED, HIGH);
Serial.println(boot_Failure);
}

22. Funcția loop ce rulează pe tot timpul funcționarii placii de dezvoltare

void loop() {
float lpg = mq2.readLPG();
float co = mq2.readCO();
float smoke = mq2.readSmoke();

send_Data(lpg, co, smoke);
if(SD_Failure == false)
writeToSD(lpg, co, smoke);

if (lpg >= senzitivitate || co >= senzitivitate || smoke >= senzitivitate)
{
if (alreadyRun == false)sendEmail(lpg, co, smoke, "ACTIVE!");
start_Alarm(smoke);
} else {
debugScreen(lpg, co, smoke);
if (alreadyRun == true)
{
endAlarm();
if (strcmp(boot_Failure, ""))
sendEmail(lpg, co, smoke, boot_Failure);
else sendEmail(lpg, co, smoke, "NORMAL");

Nitu Bogdan, AIA, An 3, Gr. 2
20
}
}
}

3. Modul de funcționare

La pornirea sistemului afișează un mesaj de întimpinare
(Fig. 1). Totodată acesta verifica daca toate componentele sunt
detectate, in cazul in care întimpină o problema, acesta va
trimite un email pe adresa setata (Fig. 2), si va aprinde ledul
portocaliu (Fig. 3 ) ce va
semnala ca acesta
rulează in mod de
avarie.
După ce termina de pornit
sistemul afișează un mesaj cu
datele prim ite de la senzor (Fig. 4 ).
Sistemul verifica in mod constant
daca exista fum prin senzorul MQ2.
Odată ce primește semnal adică
detectează fum , acesta :
1. Trimite mesaj de notificare pe
email cu mesaj de incepe alarmă (Fig.
5) si sfârșit de alarma (Fig. 6 ).
2. Incepe sa producă semnale sonore .
3. Incepe sa semnalizeze vizual prin aprinde rea si stingerea
becurilor (Fig. 7).

Fig. 1 Mesa j de întâmpinare
Fig. 2 Email cu mesajul de eroare
Fig. 3 Sistemul in stare de avarie
Fig. 4 Mesaj cu datele primite de la senzor
Fig. 5 Alertare alarma activa Fig. 6 Semnalizarea vizuala in timpul
alarmei
Fig. 7 Alertare alarma parametrii
normali

Nitu Bogdan, AIA, An 3, Gr. 2
21
Totodată sistemul :
1. Trimite datele către cloud, ce pot
fi accesat e ulterior (Fig. 8 )
2. Salvează pe cardul SD ultimele 20
de minute de evenimente

4. Închiriere

In concluzie, sistemul acesta de alarmare bifează utilitatea oricărui sistem clasic, dar cu câteva
avanta je notabile.
Unul ar fi alarmarea prin SMS, pentru a fi la zi cu ce se întâmpla in casa ta, acesta te alarmează
oriunde ar fi, ca se petrece un incident.
Al doilea, datele sunt salvate in cloud dar si in locație , pentru a putea fi analizate , oricând este
nevoie.

Fig. 8 Datele din Cloud
Fig. 9 Datele pe ult imele 20 de minute

Similar Posts