Autor: Epure Rareş - Ştefan
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).
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.
Nr. Crt. | Componente |
---|---|
1. | Arduino UNO R3 (ATmega328p) |
2. | Senzor digital de temperatura si umiditate AM2320 |
3. | Senzor de gaz MQ135 |
4. | Senzor de presiune BMP 180 |
5. | Modul LCD Nokia 5110 |
6. | Fire tata - tata si fire mama - tata |
7. | Butoane |
Mediul de dezvoltare pentru implementarea proiectului este Arduino IDE, iar librariile si sursele third-party sunt: Nokia 5110 Library, Adafriut GFX Library, Adafruit AM2320 Library, MQ 135 Library, BMP 180 Library.
Din punct de vedere al implementarii software, proiectul se imparte in 3 module:
Logica definita in Arduino IDE este urmatoarea:
Logica client-server:
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.
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.
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