This shows you the differences between two versions of the page.
pm:prj2021:abasoc:airqualitymonitor [2021/06/02 20:07] diana_elena.popescu [Software Design] |
pm:prj2021:abasoc:airqualitymonitor [2021/06/03 11:33] (current) diana_elena.popescu [Concluzii] |
||
---|---|---|---|
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 109: | Line 109: | ||
JSON. Integritatea structurii este verificată la NodeMcu. Dacă este corupta/invalidă, se așteaptă următoarea | JSON. Integritatea structurii este verificată la NodeMcu. Dacă este corupta/invalidă, se așteaptă următoarea | ||
structură. | structură. | ||
+ | \\ //ArduinoUno// | ||
StaticJsonBuffer<5000> jsonBuffer; | StaticJsonBuffer<5000> jsonBuffer; | ||
JsonObject& root = jsonBuffer.createObject(); | JsonObject& root = jsonBuffer.createObject(); | ||
Line 119: | Line 119: | ||
root.printTo(Serial); | 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** | * **Conexiunea NodeMCU - Server** | ||
Line 126: | Line 134: | ||
public printr-un domeniu ușor de memorat. Pentru a avea o reprezentare vizuală la nivelul modulului, am integrat | 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. | 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** | * **Obținerea și prelucrarea datelor** | ||
Line 133: | Line 143: | ||
* __Preluarea datelor de la server:__ \\ | * __Preluarea datelor de la server:__ \\ | ||
presupune conectarea la serverul unde sunt stocate datele, folosind Chrome | presupune conectarea la serverul unde sunt stocate datele, folosind Chrome | ||
- | WebDriver rulat în modul headless. Apoi, datele sunt parsate, cu ajutorul unui regex, iar apoi valorile sunt | + | 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 | 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ță | de interpretare a datelor, acestea putând fi ușor fiind interpretate ulterior. Această măsură de siguranță | ||
- | permite, practic, și citirea unor date deja primite de la server, pentru eventuale verificări ulterioare. | + | permite și citirea unor date deja primite de la server, pentru eventuale verificări ulterioare. |
* __Analiza datelor de la server:__ \\ | * __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 progrese 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 | + | 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. | 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 160: | 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 |