Detector de scurgeri de gaze si inundatii

  • Nume: Veliscu Robert-Valentin
  • Grupa: 341C4

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:

  • Arduino UNO
  • Modul ESP8266 Serial Port
  • Senzor detecție metan, gaze naturale MQ-5
  • Modul detectare picaturi

Software Design

Cod Arduino

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 4 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.

Cod Server

Server

  • Se importa modulele necesare, cum ar fi Express, Body Parser si WebSocket. Se configureaza adresa IP si portul serverului
  • Se configureaza middleware-ul Express pentru a permite analiza cererilor si raspunsurilor HTTP. De asemenea, se seteaza motorul de vizualizare EJS pentru a genera pagini HTML.
  • Odata ce se primeste o cerere GET pentru ruta de baza ”/”, se randeaza template-ul EJS “index.ejs”, care afiseaza valorile curente ale cheilor “gaz” si “apa”.
  • Atunci cand se primeste o cerere POST pentru ruta de baza ”/”, se actualizeaza valorile cheilor “gaz” si “apa” cu noile valori primite in corpul cererii POST. Apoi, se trimite o actualizare prin WebSocket catre toti clientii conectati.
  • Atunci cand un client se conecteaza prin WebSocket, acesta este adaugat la lista de clienti conectati. Se trimit clientului valorile curente ale cheilor “gaz” si “apa”. In momentul in care un client se deconecteaza, acesta este eliminat din lista de clienti.

Client

  • Se stabileste o conexiune WebSocket catre adresa IP si portul specificat.
  • Cand se primeste un mesaj WebSocket, acesta este parsat intr-un obiect JSON pentru a obtine valorile gazului si apei.
  • Utilizand un switch, se verifica valorile primite si se afiseaza mesaje corespunzatoare pentru fiecare valoare, insotite de schimbari ale imaginii de fundal si a culorii textului.
  • Elementele HTML cu id-urile “gaz” si “apa” sunt actualizate pentru a afisa valorile corespunzatoare.

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

pm/prj2023/drtranca/robert.veliscu.txt · Last modified: 2023/05/30 10:33 by robert.veliscu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0