Differences

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

Link to this comparison view

pm:prj2021:apredescu:smart_air_quality_device [2021/06/04 00:43]
rares_stefan.epure [Software design]
pm:prj2021:apredescu:smart_air_quality_device [2021/06/04 14:28] (current)
rares_stefan.epure [Download]
Line 2: Line 2:
  ​**Autor**:​ [[rares_stefan.epure@stud.acs.upb.ro | Epure Rareş - Ştefan]]  ​**Autor**:​ [[rares_stefan.epure@stud.acs.upb.ro | Epure Rareş - Ştefan]]
 ===== Introducere ===== ===== Introducere =====
- ​Dispozitiv conceput pentru a măsura calitatea aerului în funcție de anumiți parametrii. Acești parametrii sunt temperatura,​ umiditatea, presiunea, precum și masurarea CO2 din aer, iar ca unitate de masura se va folosi ppm (parti per milion). ​+ ​Dispozitiv conceput pentru a măsura calitatea aerului în funcție de anumiți parametrii. Acești parametrii sunt temperatura,​ umiditatea, presiunea, precum și masurarea CO2 din aer, iar ca unitate de masura ​pentru cantitatea de CO2 se va folosi ppm (parti per milion). ​
 ===== Descriere generală ===== ===== Descriere generală =====
  
   
-Datele vor fi colectate de senzori, iar apoi prin intermediul plăcuţei Arduino acestea vor fi prelucrate şi trimise prin intermediul SPI-ului către modulul LCD, care le va afişa. Modulul LCD va avea un modul de baza de unde se poate selecta o pagina cu lista de date si o lista cu setari. Setarile tin de afisare (contrast si luminozitate). Pe partea de senzori exista 3 intrari in meniu de unde se poate selecta timpul datelor ​necesar+Datele vor fi colectate de senzori, iar apoi prin intermediul plăcuţei Arduino acestea vor fi prelucrate şi trimise prin intermediul SPI-ului către modulul LCD, care le va afişa. Modulul LCD va avea un modul de baza de unde se poate selecta o pagina cu lista de date si o lista cu setari. Setarile tin de afisare (contrast si luminozitate). Pe partea de senzori exista 3 intrari in meniu de unde se poate selecta timpul datelor ​necesare
-Pe langa afisarea datelor pe LCD exista si un client scris in Python care citeste datele de pe seriala si le trimite catre server prin intermediul unui REST-API. Datele sunt convertite in client si trimise pe server de unde pot fi accesate prin intermediul cererilor ​get pe anumite rute (e.g. prin accesare caii /pressure se va afisa o lista cu presiuni). Datele care sunt afisate pe ecran vor fi afisate stocate si pe server.+Pe langa afisarea datelor pe LCD exista si un client scris in Python care citeste datele de pe seriala si le trimite catre server prin intermediul unui REST-API. Datele sunt convertite in client si trimise pe server de unde pot fi accesate prin intermediul cererilor ​GET pe anumite rute (e.g. prin accesare caii /pressure se va afisa o lista cu presiuni). Datele care sunt afisate pe ecran vor fi afisate stocate si pe server.
 ====Schema bloc==== ====Schema bloc====
  
-{{336cc_epure_rares_schema_bloc.png | Schema bloc}}+{{epure_rares_schema_bloc_pm.jpg | Schema bloc}}
  
  
Line 36: Line 36:
  
 Logica definita in Arduino IDE este urmatoarea: Logica definita in Arduino IDE este urmatoarea:
-  * datele sunt colectate de la toti senzorii prin interfectele ​specifice fiecaruia+  * datele sunt colectate de la toti senzorii prin interfetele ​specifice fiecaruia
   * aceste date sunt afisate pe LCD   * aceste date sunt afisate pe LCD
   * Modulul LCD are o interfata grafica, ce se bazeaza pe un meniu. Exista un meniu pentru setari si un meniu din care se aleg anumite date. Pentru selectarea datelor si pentru navigarea prin meniu se folosesc 3 butoane (un buton pentru a parcurge lista de optiuni a unui meniu, altul prin care se selecteaza o intrare in meniu, iar cel de-al treilea are functionalitate de back).   * Modulul LCD are o interfata grafica, ce se bazeaza pe un meniu. Exista un meniu pentru setari si un meniu din care se aleg anumite date. Pentru selectarea datelor si pentru navigarea prin meniu se folosesc 3 butoane (un buton pentru a parcurge lista de optiuni a unui meniu, altul prin care se selecteaza o intrare in meniu, iar cel de-al treilea are functionalitate de back).
Line 43: Line 43:
 Logica client-server:​ Logica client-server:​
   * Clientul preia datele de pe interfata seriala, prelucreaza datele si le transmite catre server printr-o cerere de tip POST.   * Clientul preia datele de pe interfata seriala, prelucreaza datele si le transmite catre server printr-o cerere de tip POST.
-  * Serverul este implementat in Python pe framework-ul Flask. Primeste datele prin cererea de tip POST si le stocheaza in niste liste. Pe langa aceasta functionalitate. Aceste ​date pot fi achizitionate prin cereri de tip GET pe anumite cai.+  * Serverul este implementat in Python pe framework-ul Flask. Primeste datele prin cererea de tip POST si le stocheaza in liste. Pe langa aceasta functionalitate, aceste ​date pot fi achizitionate prin cereri de tip GET pe anumite cai ("/​pressure",​ "/​temperature",​ "/​gas",​ "/​humidity"​). 
 + 
 +Fluxul de dezvoltare a constat intai in testarea componentelor hardware, apoi s-a scris codul, pentru achizitionarea datelor, aferent fiecarui senzor. Dupa ce toate componentele au fost testate si implementate separat, s-a trecut la grupare acestor functionalitati si testarea intregului sistem. Implementarea server-client a fost realizata ulterior, dupa ce functionalitatea de achizitonare de date a fost realizata cu succes
  
 ===== Rezultate obţinute ===== ===== Rezultate obţinute =====
Line 57: Line 59:
 {{pm:​prj2021:​apredescu:​data_set_values_epure_rares_pm.jpg?​300 | }} {{pm:​prj2021:​apredescu:​data_set_values_epure_rares_pm.jpg?​300 | }}
 ===== Concluzii ===== ===== Concluzii =====
 +Proiectul mi-a oferti oportunitatea de a intelege mai bine partea de low level si de a programa un microcontroller. Pe langa partea de software, a fost interesanta conceperea partii hardware, prin creerea unui circuit simplu si prin legarea mai multor componente intre ele. Partea din cadrul proiectului care a necesitat mai multa munca a fost afisarea meniu-ului pe modului LCD, deoarece am incercat sa am mai multe pagini ale meniu-ului (o pagina de start, o pagina de setari si una de afisare a datelor). O alta parte interesanta a fost aceea ca experimentat faptul ca senzorii au anumite intarzieri, ceea ce poate produce anumite erori. Am intalnit o astfel de eroare la senzorul de gaz, deoarece clientul nu putea citi date de pe interfata seriala. Dupa introducerea unei mici intarzieri prin functia delay, am putut colectat datele de la acest senzor cu ajutorul client-ului implementat in Python.
 ===== Download =====  ===== Download ===== 
 +Arhiva contine urmatoarea structura de fisiere:
 +
 +  .
 +  |- resurse
 +    |- meniu
 +      |- meniu.ino (fisierul sursa care realizeaza achizitionarea si afisarea datelor pe ecran)
 +    |- server-client
 +      |- server.py
 +      |- client.py
 +
 +
 +{{pm:​prj2021:​apredescu:​resurse_epure_rares.zip| resurse.zip}}
 +
 +[[https://​youtu.be/​o67sraBXQh4 | Demo]]
 ===== Jurnal ===== ===== Jurnal =====
  
Line 75: Line 92:
  
 [[https://​www.olimex.com/​Products/​Components/​Sensors/​Gas/​SNS-MQ135/​resources/​SNS-MQ135.pdf | MQ135 Datasheet]] [[https://​www.olimex.com/​Products/​Components/​Sensors/​Gas/​SNS-MQ135/​resources/​SNS-MQ135.pdf | MQ135 Datasheet]]
 +
 +[[ https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​apredescu/​smart_air_quality_device?​do=export_pdf| Pagina in format PDF]]
pm/prj2021/apredescu/smart_air_quality_device.1622756624.txt.gz · Last modified: 2021/06/04 00:43 by rares_stefan.epure
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