Differences

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

Link to this comparison view

pm:prj2021:avaduva:room-monitor [2021/04/28 19:21]
dumitru.stratone
pm:prj2021:avaduva:room-monitor [2021/06/04 20:05] (current)
dumitru.stratone
Line 1: Line 1:
 ====== Room Monitor ====== ====== 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ă =====
 +{{ :​pm:​prj2021:​avaduva:​schema_bloc_room_monitor.png?​800 |}}
 +
 +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 ===
 +   - [[https://​cleste.ro/​senzor-pir-hc-sr501.html|Sensor PIR]]
 +   - [[https://​cleste.ro/​modul-microfon-sensibilitate-inalta.html| Modul microfon]]
 +   - [[https://​cleste.ro/​modul-buzzer-pasiv.html| Buzzer]]
 +   - [[https://​cleste.ro/​led-rgb-5mm-4pini.html| Led catod comun]]
 +   - [[https://​cleste.ro/​modul-senzor-lumina-intensitate-luminoasa.html| Modul intensitate luminoasa]]
 +   - [[https://​cleste.ro/​senzor-detec-ie-metan-gaze-naturale-mq-5.html| Modul detectare gaz]]
 +   - [[https://​cleste.ro/​modul-senzor-detector-gaz-mq-135.html| Modul detectare calitate aer]]
 +   - [[https://​cleste.ro/​senzor-umiditate-si-temperatura-dht22.html| Senzor umiditate si temperatura]]
 +   - [[https://​cleste.ro/​modul-lcd-1602-albastru-cu-butoane.html| Shield lcd]]
 +   - Fire tata-tata, mama-tata, breadboard, rezistente.
 +
 +===== Software Design =====
 +
 +Codul arduino a fost dezvoltat in [[https://​www.arduino.cc/​en/​software| 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:​
 +     - [[https://​www.arduino.cc/​en/​Reference/​LiquidCrystal|Arduino LiquidCrystal Library]]
 +     - [[https://​www.arduino.cc/​reference/​en/​libraries/​dht-sensor-library/​|Arduino DHT Sensor Library]]
 +
 +Pentru "​consumerul"​ de seriala, am folosit urmatorele biblioteci python:
 +     - [[https://​pyserial.readthedocs.io/​en/​latest/​pyserial.html|Python serial]]
 +     - [[https://​docs.python.org/​3/​library/​datetime.html|Python datetime]]
 +     - [[https://​docs.python.org/​3/​library/​calendar.html|Python calendar]]
 +
 +==== Structuri de date ====
 +
 +Structura principala este numita room state si are urmatoare definitie:
 +
 +<​code>​
 +typedef struct roomstate {
 +  float temperature,​ humidity, heatIndex;
 +  int airQuality;
 +  int airQualityPercentage;​
 +  int lightIntensity;​
 +  int gasValue;
 +  int motion;
 +  int sound;
 +} RoomState;
 +</​code>​
 +
 +Aici este tinuta starea camerei, la un moment dat.
 +
 +==== Functii implementate ====
 +
 +Functiile principale sunt urmatoarele:​
 +<​code>​
 +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.
 +</​code>​
 +
 +Pe raspberry pi , daemon-ul care comunica cu seriala este pornit la boot (am modificat fisierul /​etc/​rc.local)
 +
 +Codul python are urmatoarea structura:
 +
 +<​code>​
 +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.
 +</​code>​
 +
 +===== Rezultate obtinute =====
 +
 +{{:​pm:​prj2021:​avaduva:​poza1_room_monitor.jpeg?​300|}}{{:​pm:​prj2021:​avaduva:​poza2_room_monitor.jpeg?​180|}}
 +{{:​pm:​prj2021:​avaduva:​poza3_room_monitor.jpeg?​180|}}
 +
 +===== 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 =====
 +{{:​pm:​prj2021:​avaduva:​proiect_pm_room_monitor.zip| Arhiva proiectului}}
 +
 +===== Bibliografie =====
 +    *[[https://​pyserial.readthedocs.io/​en/​latest/​pyserial.html|Python serial]]
 +    *[[https://​www.arduino.cc/​en/​Reference/​softwareSerial|Arduino serial]]
 +    *[[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|ATmega328P Datasheet]]
 +
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
pm/prj2021/avaduva/room-monitor.1619626914.txt.gz · Last modified: 2021/04/28 19:21 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