Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:abasoc:airqualitymonitor [2021/06/02 19:29]
diana_elena.popescu [Software Design]
pm:prj2021:abasoc:airqualitymonitor [2021/06/03 11:33] (current)
diana_elena.popescu [Concluzii]
Line 17: Line 17:
 Mi-am dorit sa realizez un modul complet de monitorizare a calității aerului nu doar din punct de  Mi-am dorit sa realizez un modul complet de monitorizare a calității aerului nu doar din punct de 
 vedere al componenței chimice, cât și din perspectiva siguranței persoanelor din mediul respectiv. Astfel ​ vedere al componenței chimice, cât și din perspectiva siguranței persoanelor din mediul respectiv. Astfel ​
-datele colectate pot fi accesate ​remonte, printr-o interfață prietenoasă,​ dar si local. Modulul are integrat un sistem de avertizare sonoră in cazul in care unul dintre senzori detectează depășirea limitei normale.+datele colectate pot fi accesate ​remote, printr-o interfață prietenoasă,​ dar si local. Modulul are integrat un sistem de avertizare sonoră in cazul in care unul dintre senzori detectează depășirea limitei normale.
 ====== Descriere generală ====== ====== Descriere generală ======
 Sistemul creat este împărțit ideatic în mai multe componente: senzori și citirea datelor, ​ Sistemul creat este împărțit ideatic în mai multe componente: senzori și citirea datelor, ​
Line 26: Line 26:
  
 ====== Hardware Design ====== ====== Hardware Design ======
-{{ :​pm:​prj2021:​abasoc:​schema-1.png?​200 |}}\\+{{ :​pm:​prj2021:​abasoc:​schema-1.png?​550 |}}\\
 ^Componentă ​  ​^Număr ​  ^ ^Componentă ​  ​^Număr ​  ^
 |Arduino Uno   ​|1 ​      | |Arduino Uno   ​|1 ​      |
Line 53: Line 53:
 4*. Desi in datasheet este specificat timpul de preheat ca fiind 3 min, valorile obtinute incep sa se apropie de adevar si sa se stabilizeze abia dupa ~1h.\\ 4*. Desi in datasheet este specificat timpul de preheat ca fiind 3 min, valorile obtinute incep sa se apropie de adevar si sa se stabilizeze abia dupa ~1h.\\
  
-Verificare: Am expirat deasupra senzorului ​app. 1 minut si valorile au crescut vizibil. In 5 minute acesta isi revine.\\ +Verificare: Am expirat deasupra senzorului ​aproximativ ​1 minut si valorile au crescut vizibil. In 5 minute acesta isi revine.\\ 
-Am decis deci, sa folosesc ​interfata ​Seriala pentru a face citiri pentru acest proiect. ​+Am decis deci, sa folosesc ​Interfata ​Seriala pentru a face citiri pentru acest proiect. ​
 \\ Acest senzor costa ~20 dolari si se poate achizitiona de pe https://​www.aliexpress.com.\\ \\ Acest senzor costa ~20 dolari si se poate achizitiona de pe https://​www.aliexpress.com.\\
 Datasheet-ul se poate gasi [[https://​www.winsen-sensor.com/​d/​files/​MH-Z14A.pdf|aici]]. \\ Datasheet-ul se poate gasi [[https://​www.winsen-sensor.com/​d/​files/​MH-Z14A.pdf|aici]]. \\
Line 83: Line 83:
 Datasheet-ul se poate gasi [[https://​www.olimex.com/​Products/​Components/​Sensors/​Gas/​SNS-MQ135/​resources/​SNS-MQ135.pdf|aici]]. \\ Datasheet-ul se poate gasi [[https://​www.olimex.com/​Products/​Components/​Sensors/​Gas/​SNS-MQ135/​resources/​SNS-MQ135.pdf|aici]]. \\
 ====== Software Design ====== ====== Software Design ======
- 
- 
  
 Pentru cod, am folosit ca mediu de dezvoltare Arduino IDE.\\ Pentru cod, am folosit ca mediu de dezvoltare Arduino IDE.\\
Line 96: Line 94:
 | |SPI.h ​      | | |SPI.h ​      |
  
-  ​-  ​**Senzori si citirea datelor**+  ​*   **Senzori si citirea datelor**
 Pregătirea înainte de citire a datelor: Senzorii MQ au nevoie de preheating înainte de citirea datelor, dar și de Pregătirea înainte de citire a datelor: Senzorii MQ au nevoie de preheating înainte de citirea datelor, dar și de
 calibrare. Aceasta a constat în aplicarea unor tensiuni de 1,4V si 5 V pe pinii analogici ai senzorilor pentru intervale de 1 min, respectiv 90 de secunde înainte de realizarea citirii datelor. Senzorul MH-Z14A sta la preheat 1h. Acesta nu necesită calibrare. calibrare. Aceasta a constat în aplicarea unor tensiuni de 1,4V si 5 V pe pinii analogici ai senzorilor pentru intervale de 1 min, respectiv 90 de secunde înainte de realizarea citirii datelor. Senzorul MH-Z14A sta la preheat 1h. Acesta nu necesită calibrare.
 +
 +  val135 = analogRead(pinMQ135);​
 +  val7 = analogRead(pinMQ7);​
 +  val5 = analogRead(pinMQ5);​
 +  MHZ14A = readPPMSerial();​ \\ folosim seriala pt citirea datelor
 +\\
 +  *  **Conexiunea plăcuță ArduinoUno și NodeMCU și transmiterea datelor**
 +Conexiunea a fost realizată prin Software Serial, conectând pinul RX, respectiv TX al plăcuței ArduinoUno la pinul
 +TX, respectiv RX al NodeMCU-ului.
 +Pentru a evita scrieri si citiri succesive asincrone, predispuse la întârzieri,​ datele au fost trimise sub forma unui
 +JSON. Integritatea structurii este verificată la NodeMcu. Dacă este corupta/​invalidă,​ se așteaptă următoarea
 +structură.
 +\\ //​ArduinoUno//​
 +  StaticJsonBuffer<​5000>​ jsonBuffer;
 +  JsonObject&​ root = jsonBuffer.createObject();​
 +  root["​val 135"] = val135;
 +  root["​val 7"] = val7;
 +  root["​val 5"] = val5;
 +  root["​MH-Z14A"​] = CO2;
 +  if (Serial.available() > 0) {
 +    root.printTo(Serial);​
 +  }
 +\\ //NodeMCU//
 +  if (Serial.available() > 0) {
 +      StaticJsonBuffer<​5000>​ jsonBuffer;
 +      JsonObject&​ root = jsonBuffer.parseObject(Serial);​
 +      if (root == JsonObject::​invalid()){
 +        JsonObject&​ root = jsonBuffer.parseObject(Serial);​
 +        return;
 +      }
 +\\
 +  *   ​**Conexiunea NodeMCU - Server**
 +NodeMCU a fost conectat la WiFi-ul personal. Din setările routerului am aflat range-ul DHCP-ului și am atribuit
 +plăcuței un IP înafara acestuia. IP-ului modulului i-am alocat un port care a fost deschis ulterior folosind funcția
 +„Port Forwarding” a router-ului. Am achiziționat un abonament la DynDNS pentru a face posibilă accesarea IP-ului
 +public printr-un domeniu ușor de memorat. Pentru a avea o reprezentare vizuală la nivelul modulului, am integrat
 +un LED care se aprinde de fiecare dată când este realizat un request din partea serverului.
 +
 +{{ :​pm:​prj2021:​abasoc:​chestie_2.jpeg?​800 |}}
 +
 +  *   ​**Obținerea și prelucrarea datelor**
 +Aplicația ce prelucrează datele a fost scrisă în limbajul Python, utilizând framework-ul Kivy și modulul Selenium.
 +Există două părți principale: \\
 +
 +  * __Preluarea datelor de la server:__ \\
 +presupune conectarea la serverul unde sunt stocate datele, folosind Chrome
 +WebDriver rulat în modul headless. Datele sunt parsate, cu ajutorul unui regex, apoi valorile sunt
 +atașate unui fișier CSV, pentru a menține un log în cazul în care apar probleme în cadrul funcționării părții
 +de interpretare a datelor, acestea putând fi ușor fiind interpretate ulterior. Această măsură de siguranță
 +permite și citirea unor date deja primite de la server, pentru eventuale verificări ulterioare.
 +
 +  * __Analiza datelor de la server:__ \\ 
 +presupune o interfață grafică cu utilizatorul,​ în care sunt prezentate datele din fișierul CSV / date real time, dacă preluarea datelor de la server este activată. Datele sunt dispuse într-un mod ce permite utilizatorului să observe valorile atât pe un grafic, cât și procentual, pe un progress bar ce se modifică constant în funcție de ultima intrare primită. Procentele sunt afișate în funcție de anumite valori standard (măsurate în funcție de rezistența senzorului sau PPM). În cazul în care se detectează o valoare foarte mare la unul din senzori, acest lucru i se aduce la cunoștință utilizatorului printr-un semnal sonor relevant, ce va rămâne pornit până când senzorul va măsura din nou o valoare normală. Verificarea
 +corectitudinii acestui lucru se face prin apropierea, unei brichete, de exemplu și observarea creșterii rapide a senzorului ce măsoară CO2. în acest caz, se va afișa pe ecran și un mesaj concludent.
 +{{ :​pm:​prj2021:​abasoc:​ok.png?​400 |ok}} \\
 +{{ :​pm:​prj2021:​abasoc:​not_ok.png?​400 |not ok}}
 ====== Concluzii ====== ====== Concluzii ======
 În concluzie, lucrarea a prezentat o modalitate de a lua date de la senzori aflați la distanță prin În concluzie, lucrarea a prezentat o modalitate de a lua date de la senzori aflați la distanță prin
 folosirea unei plăcuțe ArduinoUno, care transmite datele la un server local. Astfel, un utilizator poate folosirea unei plăcuțe ArduinoUno, care transmite datele la un server local. Astfel, un utilizator poate
 vedea în timp real care este concentrația de CO2 și CO, precum și detecția de fum din apropierea vedea în timp real care este concentrația de CO2 și CO, precum și detecția de fum din apropierea
-senzorului. Aceste date ajută persoana aflată la distanță să verifice ​că este totul sigur în locul unde sunt+senzorului. Aceste date ajută persoana aflată la distanță să verifice ​daca totul este in regula ​în spatiul in care se afla
 montați senzorii. Prin folosirea de senzori care măsoară diferite componente din aer și a unor plăcuțe de montați senzorii. Prin folosirea de senzori care măsoară diferite componente din aer și a unor plăcuțe de
 dezvoltare am reușit să realizăm o implementare eficientă la un cost minim, care va putea fi extinsă pe dezvoltare am reușit să realizăm o implementare eficientă la un cost minim, care va putea fi extinsă pe
 viitor prin folosirea de alți senzori. viitor prin folosirea de alți senzori.
 +{{  :​pm:​prj2021:​abasoc:​chestie.jpg?​550 ​ |proiect final}}
  
 <​note>​Multumiri si credite lui Radu Nichita, cu care am colaborat in realizarea acestui proiect. El s-a ocupat de partea de prelucrare a datelor, realizand scriptul de Python. </​note>​ <​note>​Multumiri si credite lui Radu Nichita, cu care am colaborat in realizarea acestui proiect. El s-a ocupat de partea de prelucrare a datelor, realizand scriptul de Python. </​note>​
 +<note tip>​Proiectul in functiune se poate vedea [[https://​youtu.be/​FGr5q82ws5I|aici]] \\
 +Iar proiectul format pdf se poate descarca de
 +[[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​abasoc/​airqualitymonitor?​do=export_pdf|aici]]</​note>​
 ====== Bibliografie ====== ====== Bibliografie ======
 https://​electrogrup.ro/​monitorizarea-calitatii-aerului/​ \\ https://​electrogrup.ro/​monitorizarea-calitatii-aerului/​ \\
Line 117: Line 174:
  
 Proiectul integral se poate gasi aici:\\ Proiectul integral se poate gasi aici:\\
-https://​github.com/​RaduNichita/SCSS2020--Monitoring-Air-Quality+https://​github.com/​daianaelena17/PM_Project
  
pm/prj2021/abasoc/airqualitymonitor.1622651351.txt.gz · Last modified: 2021/06/02 19:29 by diana_elena.popescu
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