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.