This is an old revision of the document!
Detector de scurgeri de gaze si inundatii
Introducere
Acest proiect detecteaza scurgerile de gaze si inundatiile si trimite datele catre un server prin protocolul HTTP pentru a fi vizualizate de la distanta.
Am ales sa fac acest proiect deoarece eu plec din Bucuresti acasa aproximativ o data la 2 saptamani si de fiecare data ma gandesc peste weekend daca am lasat aragazul sau o baterie pornite. Cred ca ar fi util si pentru alti oameni uituci. :)
Descriere generală
Modulul Wifi ESP8266 se alimenteaza la iesirea de 3.3V a arduino-ului. Acesta are de asemenea si pin-urile Reset si CH_EN cnectate la 3.3V. Pin-ul TX a modulului este conectat la pin-ul RX al arduino-ului, iar pin-ul RX a modulului este conectat la pin-ul TX al arduino-ului pentru a asigura comunicarea.
Senzorul de gaze MQ-5 se alimenteaza cu 5V din arduino si are iesirea analog conectata la pin-ul A0 al arduino-ului.
Senzorul de ploaie se alimenteaza si el cu 5V din arduino si are iesirea analog conectata la pin-ul A1 al arduino-ului.
Atat modulul ESP8266 cat si senzorii au cate un pin GND si acestia sunt legati la GND-ul arduino-ului.
Hardware Design
Lista de piese:
Software Design
Setup
Algoritmul incepe prin configurarea initiala a microcontrolerului AVR si a modulului ESP8266 in functia setup(). In aceasta etapa, se realizeaza urmatoarele actiuni:
Se seteaza tipul pinilor pentru conectarea senzorilor de gaz si apa (input).
Se activeaza comunicarea seriala (USART) intre microcontroler si modulul ESP8266.
Se stabileste conexiunea la reteaua Wi-Fi folosind functia connectToWiFi().
Se asteapta o scurta perioada de timp pentru ca modulul ESP8266 sa se conecteze la retea.
Loop
Dupa configurarea initiala, algoritmul intra in bucla principala loop(), unde se realizeaza urmatoarele actiuni:
Se citesc valorile analogice de la senzorii de gaz si apa utilizand functia readAnalogValue().
Se analizeaza valorile citite pentru determinarea starii senzorului de gaz si a clasei de apa.
Pentru senzorul de gaz, daca valoarea citita este mai mare de 250, se considera ca exista gaz si se seteaza variabila gaz la 1. Altfel, se seteaza gaz la 0.
Pentru senzorul de apa, se realizeaza o serie de comparatii pentru a determina clasa apei in functie de valoarea citita (sunt 3 clase). Aceasta se atribuie variabilei current_class.
Se verifca daca s-au produs modificari in starea senzorului de gaz sau in clasa apei fata de masuratorile anterioare.
Daca s-au produs modificari, se seteaza variabila ok la 1 pentru a semnala ca trebuie trimise noi date catre server.
Daca s-a detectat o schimbare si trebuie trimise noi date, se apeleaza functia sendPostRequest() pentru a realiza o cerere POST catre serverul extern, transmitand valorile de gaz si apa.
Se asteapta o perioada de 5 secunde intre doua cereri consecutive.
Functii auxiliare
In algoritmul principal am definit cateva functii auxiliare care asigura functionalitatea sistemului:
connectToWiFi(): Aceasta functie realizeaza conectarea la reteaua Wi-Fi utilizand SSID-ul si parola specificate. Comunicarea se face prin comenzi AT trimise modulului ESP8266.
sendPostRequest(int gaz, int apa): Functia construieste o cerere POST formatata conform protocolului HTTP si o trimite catre serverul extern. Cererea contine valorile de gaz si apa si este transmisa prin comunicarea seriala cu modulul ESP8266.
readAnalogValue(int pin): Functia citeste valoarea analogica de la pinul specificat si o converteste intr-o valoare digitala folosind modulul ADC al microcontrolerului AVR.
Rezultate Obţinute
In urma realizarii proiectului am reusit sa am un modul de detectie care trimite datele citite de la senzori la un server remote si astfel ma pot bucura de weekenduri linistit.
Download
Bibliografie/Resurse