Room Monitor

Introducere

Room monitor confera utilizatorului detalii despre starea camerei in care se afla.

Aceste detalii includ:

  • temperatura si umiditatea din camera
  • calitatea aerului
  • intensitatea luminii
  • nivelul de zgomot
  • daca exista scurgeri de gaz sau nu

In aceasta perioada, cand multi oameni lucreaza de acasa, conditiile din camera de lucru au devenit si mai importante pentru sanatate.

Descriere generală

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.

Hardware Design

Lista componente

Software Design

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.

Biblioteci

Am folosit in dezvoltarea pe microcontroller urmatoarele biblioteci third-party:

Pentru “consumerul” de seriala, am folosit urmatorele biblioteci python:

Structuri de date

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.

Functii implementate

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.

Rezultate obtinute

Concluzii

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.

Download

Bibliografie

pm/prj2021/avaduva/room-monitor.txt · Last modified: 2021/06/04 20:05 by dumitru.stratone
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