Room monitor confera utilizatorului detalii despre starea camerei in care se afla.
Aceste detalii includ:
In aceasta perioada, cand multi oameni lucreaza de acasa, conditiile din camera de lucru au devenit si mai importante pentru sanatate.
Initial, pentru 2 minute, se incalzesc senzorul de gaz si cel de calitate a aerului.
Apoi se face prima citire a senzorilor, iar datele sunt afisate pe lcd.
Pentru a economisi curent, lcd-ul se va inchide daca nu este detectata miscare in proximitate
Sensorul PIR si cel de gaz sunt consultati la fiecare secunda, data fiind importanta lor.
Ceilalti sensori sunt consultati la fiecare 5 minute, cand se face(optional) si flush pe seriala a datelor.
Codul arduino a fost dezvoltat in Arduino IDE
Pe langa codul pentru microcontroler, am scris si un mic script in python care preia datele de pe seriala si le scrie intr-un fisier.
Am folosit in dezvoltarea pe microcontroller urmatoarele biblioteci third-party:
Pentru “consumerul” de seriala, am folosit urmatorele biblioteci python:
Structura principala este numita room state si are urmatoare definitie:
typedef struct roomstate { float temperature, humidity, heatIndex; int airQuality; int airQualityPercentage; int lightIntensity; int gasValue; int motion; int sound; } RoomState;
Aici este tinuta starea camerei, la un moment dat.
Functiile principale sunt urmatoarele:
void initSensors(); // Aici, timp de 2 secunde, se incalzesc cei 2 sensori de aer. void flushRoomState(); // Aici structura de date principala este trimisa pe seriala. void handleSensors(); // Un wrapper peste un agregat de functii mai mici care citesc fiecare senzor in parte. void buzz(float seconds, int sign); // Functie pentru buzz. void handleLCDScreen(); // Functie care imi afiseaza starea la lcd. void printLCDDateTime(); // Functie care afiseaza pe lcd data si ora. void printLCDTemperature(); // Functie care afiseaza pe lcd informatii despre temperatura. void printLCDAirQuality(); // Functie care afiseaza pe lcd informatii despre calitatea aerului. void loop(); // Citim sensorii, daca s-au implinit 5 minute, atunci dam flush.
Pe raspberry pi , daemon-ul care comunica cu seriala este pornit la boot (am modificat fisierul /etc/rc.local)
Codul python are urmatoarea structura:
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1) // deschidem comunicarea f = open("./usb/data", "a") // deschidem si fisierul pentru stocare while True: if ser.in_waiting > 0: line = ser.readline().decode('utf-8').rstrip() if line == "getHour": // microcontrollerul cere ora if line == "getDate": // microcontrollerul cere data if line == "flush": // microcontrollerul doreste sa ne dea datele.
Mi-a facut placere sa implementez acest proiect, deoarece am construit ceva care va ramane, pe care il folosesc. O sa continui dezvoltarea, incercand sa il integrez cu aer conditionat si cu telefonul mobil.