Differences

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

Link to this comparison view

pm:prj2026:andrei.batasev:daniel.malanca [2026/05/05 09:21]
daniel.malanca
pm:prj2026:andrei.batasev:daniel.malanca [2026/05/24 13:44] (current)
daniel.malanca
Line 1: Line 1:
 ====== ETH - Enviromental Telemetry Hub ====== ====== ETH - Enviromental Telemetry Hub ======
 +
 ===== Introducere ===== ===== Introducere =====
  
-Proiectul ETH (Environmental Telemetry Hub) reprezinta un sistem IoT (Internet of Things) ​compact si inteligent ​pentru monitorizarea conditiilor de mediu dintr-o incapere+Proiectul ETH (Environmental Telemetry Hub) reprezinta un sistem IoT (Internet of Things) pentru monitorizarea conditiilor de mediu dintr-o incapere.
-  * **Ce face:** Sistemul colecteaza date in timp real despre temperatura,​ umiditatea aerului si nivelul de lumina ambientala, pe care le trimite atat la un dashboard online precum si pe un ecran local, declansand alarme vizuale si sonore cand parametrii ies din valorile optime. +
-  * **Care este scopul lui:** Scopul principal este mentinerea unui mediu de lucru sau de locuit sanatos si confortabil,​ sau mentinerea unui mediu pretentios (plante, echipamente electronice,​ muzee) in parametri optimi, informand utilizatorul cand trebuie sa ia masuri (ex. sa aeriseasca o camera, sa porneasca caldura sau sa aprinda lumina). +
-  * **Care a fost ideea de la care am pornit:** Am observat ca este usor sa ignori calitatea aerului atunci cand petreci mult timp lucrand in interior. Am dorit un dispozitiv autonom care sa imi atraga atentia "​fizic"​ (prin sunet si lumina) cand conditiile devin nepotrivite,​ fara sa trebuiasca sa deschid aplicatii externe pe telefon sau PC. +
-  * **De ce este util:** Este extrem de util atat pentru sanatatea personala cat si pentru protejarea echipamentelor sensibile la fluctuatii de temperatura/​umiditate sau chiar a plantelor care au nevoi particulare.+
  
-===== Descriere generală =====+Sistemul colecteaza date in timp real despre temperatura,​ umiditatea aerului si nivelul de lumina ambientala, pe care le trimite atat la un dashboard online precum si pe un ecran local, declansand alarme vizuale si sonore cand parametrii ies din valorile optime.
  
-Proiectul functioneaza pe baza unui microcontroler ESP32 care actioneaza ca unitate centrala. Acesta preia constant datele ​de la senzorii ​de mediu, ​le trimite la dashboardsi actioneaza actuatorii ​(rgbbuzzer & ecran).+Scopul principal este mentinerea ​unui mediu de lucru sau de locuit sanatos si confortabil,​ sau mentinerea unui mediu pretentios (planteechipamente electronicemuzee) in parametri optimi, informand utilizatorul cand trebuie sa ia masuri ​(ex. sa aeriseasca o camerasa porneasca caldura sau sa adjusteze lumina ambientala).
  
-Datele brute prelucrate de ESP32 sunt trimise printr-o retea Wi-Fi folosind protocolul MQTT catre o instanta de server aflata in cloudPe acest server sunt instalate aplicatii precum un broker Mosquitto (pentru receptia datelor), o baza de date (ex. InfluxDB) si o platforma ​de vizualizare (Grafana) care genereaza dashboard-ul online accesibil de pe orice dispozitiv.+===== Descriere generala ===== 
 + 
 +{{ https://ocw.cs.pub.ro/​courses/​_media/​pm/​prj2026/​andrei.batasev/​daniel.malanca_block_diagram.png?​800 }} 
 + 
 +Proiectul functioneaza pe baza unui microcontroller ESP32 care actioneaza ca unitate centrala, care colecteaza ​date de la senzori si actioneaza diversi actuatori.
  
 **Schema bloc a sistemului:​** **Schema bloc a sistemului:​**
-  * **Modul Central ​de Procesare:** Microcontroler ​ESP32.+  * **Modul Central:​** ​Microcontroller ​ESP32.
   * **Module de Intrare (Input):**   * **Module de Intrare (Input):**
     * **DHT11:** Modul digital care transmite catre ESP32 valorile masurate pentru temperatura mediului ambiant si umiditatea relativa.     * **DHT11:** Modul digital care transmite catre ESP32 valorile masurate pentru temperatura mediului ambiant si umiditatea relativa.
-    * **Fotorezistor (LDR):​** ​Formeaza ​un divizor de tensiune, ​oferind ​valoare analogica la pinii ADC ai ESP32-ului, ​direct proportionala cu intensitatea luminoasa. +    * **Fotorezistor (LDR):​** ​Folosit intr-un divizor de tensiune, ​ofera tensiune variabila citita de modulul ​ADC al ESP32-ului, ​care determina ​intensitatea luminoasa. 
-  * **Module de Iesire (Output ​/ Feedback):**+  * **Module de Iesire (Output):**
     * **Infrastructura Online:** Datele colectate sunt trimise catre un VPS aflat online, care permite vizualizarea istoricului acestora.     * **Infrastructura Online:** Datele colectate sunt trimise catre un VPS aflat online, care permite vizualizarea istoricului acestora.
 +      * **Broker MQTT** - Mosquitto - Colecteaza datele trimise de sistem.
 +      * **Baza de date** - InfluxDB v2 - Stocheaza datele colectate
 +      * **Dashboard** - Grafana - Permite afisarea datelor colectate
     * **Display OLED SSD1306:** Ecran ce primeste comenzi prin protocol I2C pentru a afisa parametrii exacti masurati si mici elemente de interfata.     * **Display OLED SSD1306:** Ecran ce primeste comenzi prin protocol I2C pentru a afisa parametrii exacti masurati si mici elemente de interfata.
-    * **LED RGB:** Indicator de stare comandat prin semnale PWM. Semnaleaza starea generala ​(ex. Verde pentru normal, Rosu pentru alerta).+    * **LED RGB:** Indicator de stare comandat prin semnale PWM. Semnaleaza starea generala ​prin diverse culori si pulsatii.
     * **Buzzer:** Un modul audio actionat de un pin digital pentru a emite semnale acustice de avertizare in caz de parametrii critici.     * **Buzzer:** Un modul audio actionat de un pin digital pentru a emite semnale acustice de avertizare in caz de parametrii critici.
 +
 +===== Elemente de originalitate si complexitate =====
 +
 +Desi monitorizarea ambientala este un concept comun, acest proiect se diferentiaza prin rigoarea implementarii tehnice:
 +
 +  * **Procesare avansata a semnalelor analogice:​** Pentru citirea luminozitatii,​ s-a implementat o filtrare a zgomotului prin medierea a 64 de esantioane intr-o fereastra de 20ms, urmata de un clipping la intervalul de liniaritate al ADC controller-ului de pe ESP32.
 +  * **Arhitectura software bazata pe RTOS:** Trecerea de la o bucla de executie secventiala la task-uri FreeRTOS asigura ca citirea senzorilor cu timing strict (DHT11) nu este blocata de latentele retelei (MQTT).
 +  * **Sistem hibrid de alertare:** Sistemul functioneaza independent;​ ofera alarme locale (Buzzer/​RGB) in timp real, concomitent cu persistenta datelor in infrastructura de Cloud containerizata (InfluxDB + Grafana).
  
 ===== Hardware Design ===== ===== Hardware Design =====
-{{ https://​ocw.cs.pub.ro/​courses/​_media/​pm/​prj2026/​andrei.batasev/​daniel.malanca_block_diagram.png?800 }} + 
-**Lista de piese componente:** +{{https://​ocw.cs.pub.ro/​courses/​_media/​pm/​prj2026/​andrei.batasev/​daniel.malanca_electric.png?1200}} 
-  ​* ​x Placa de dezvoltare ​ESP32 WROOM 32-D + 
-  ​* ​x Senzor ​de temperatura si umiditate ​DHT11 +{{https://​ocw.cs.pub.ro/​courses/​_media/​pm/​prj2026/​andrei.batasev/​daniel.malanca_hardware.jpg?​800}} 
-  ​* ​x Display OLED SSD1306 (I2C) + 
-  * Fotorezistor (LDR+^ Qty ^ Price (RON) ^ Item ^ Link ^ 
-  ​* ​1 x LED RGB (cu pini dedicati pentru ​R, G, B+| 60.35 | ESP32 WROOM 32D | [[https://​www.emag.ro/​modul-esp32-devkitc-v4-rqiurpn-esp32-wroom-32d-wifi-bluetooth-microusb-11-kfb-esp32-32d/​pd/​D9HL8L3BM/​|Link]] | 
-  1 x Buzzer ​(activ/pasiv+| 2.13 | Modul Led RGB | [[https://​www.bitmi.ro/​modul-led-rgb-3-culori-10401.html|Link]] | 
-  Rezistente (ex: 10k ohmi pentru divizorul de tensiune LDR, rezistente de limitare a curentului pentru ​LED-ul RGB) +| 1 | 2.99 | Buzzer Pasiv | [[https://​www.bitmi.ro/​module-electronice/​modul-buzzer-pasiv-ky-006-10678.html|Link]] | 
-  Fire de conexiune ​(Jumper wires M-M, M-F+| 1 | 18.98 | SSD1306 | [[https://​www.bitmi.ro/​electronica/​ecran-oled-0-96-cu-interfata-iic-i2c-10488.html|Link]] | 
-  1 x Breadboard pentru prototipare+| 1 | 6.99 | DHT11 | [[https://​www.bitmi.ro/​electronica/​modul-senzor-de-temperatura-si-umiditate-dht11-compatibil-arduino-10393.html|Link]] | 
 +1.49 | Fotorezistor (tip 5528| [[https://​www.optimusdigital.ro/​ro/​componente-electronice-altele/​1863-fotorezistor-tip-5528.html|Link]] | 
 +| 0.1 | Rezistor 10k | [[https://​www.optimusdigital.ro/​ro/​componente-electronice-rezistoare/​1088-rezistor-025w-100k.html|Link]] | 
 +| 1 | 13.99 | Breadboard 830 | [[https://​www.bitmi.ro/​electronica/​breadboard-830-puncte-mb-102-10500.html|Link]] | 
 +| 1 | 9.99 | Set Fire Dupont tata-tata 10cm | [[https://​www.bitmi.ro/​electronica/​set-de-65-fire-dupont-tata-tata-9-16-cm-10638.html|Link]] | 
 +| 1 | 6.99 | Set Fire Dupont tata-mama 20cm | [[https://​www.bitmi.ro/​electronica/​40-x-fire-dupont-tata-mama-20cm-10512.html|Link]] | 
 +| | 124.00 | | 
 + 
 +^ Componenta ^ Pin Componenta ^ Net Label ^ Pin ESP32 ^ Functie ^ 
 +| **Ecran OLED** | SDA | ''​I2C_SDA''​ | **IO21** | Date I2C | 
 +| **Ecran OLED** | SCL | ''​I2C_SCL''​ | **IO22** | Ceas I2C | 
 +| **Senzor DHT11** | DATA | ''​DHT_DATA''​ | **IO4** | Date digitale Temp/​Umiditate | 
 +| **LED RGB** | (Rosu| ''​LED_R''​ | **IO25** | Control PWM Rosu | 
 +**LED RGB** | G (Verde| ''​LED_G''​ | **IO26** | Control PWM Verde | 
 +| **LED RGB** | B (Albastru| ''​LED_B''​ | **IO27** | Control PWM Albastru | 
 +**Senzor LDR** | Midpoint | ''​LDR''​ | **IO34** | Intrare Analogica ​(ADC| 
 +**Buzzer** | S (Semnal) | ''​BUZZER''​ | **IO33** | Iesire PWM | 
  
 ===== Software Design ===== ===== Software Design =====
 +Firmware-ul va fi dezvoltat in limbajul C, folosind framework-ul oficial ESP-IDF prin PlatformIO, permitand utilizarea conceptelor low-level invatate la laboratoare. Pentru implementarea multitasking-ului (ecran, senzori, networking) este folosit FreeRTOS.
  
-**Mediul de dezvoltare:​** 
-Aplicatia (firmware-ul) va fi scrisa folosind mediul framework-ul Rust Embassy. 
  
-===== Rezultate Obţinute =====+==== DHT11 ==== 
 +Senzorul DHT11 este un senzor ieftin, consacrat in industrie si de incredere. Acesta foloseste un protocol proprietar single wire pentru transmisia datelor, motiv pentru care am folosit o biblioteca (dht.c) pentru citirea valorilor.
  
-<note tip> +Pentru calibrare am comparat ​rezultatele ​obtinute de acesta cu cele ale unui termometru digital, si am constatat ca se incadreaza in parametrii normali de eroare (umiditate ±5%, temperatura ±2℃)
-Care au fost rezultatele ​obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii =====+==== Senzor GL5528 ​==== 
 +Senzorul fotorezistiv este conectat la o sursa de 3.3V, avand o rezistenta fixa de 10k Ohmi conectata la masa (GND). Acest circuit formeaza un divizor de tensiune, iar nivelul de tensiune este masurat de convertorul analog-digital (ADC) al placii ESP32.
  
-===== Download =====+1. Calculul Rezistentei LDR 
 +Rezistenta curenta a senzorului (''​R_ldr''​) se calculeaza din valoare bruta ADC astfel:
  
-<note warning>​ +''​R_ldr = R_fixed * ((4095 / ADC_Raw) - 1)''​
-O arhivă ​(sau mai multe dacă este cazulcu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** ​(dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +2Calculul Iluminarii ​(Lux)
-</​note>​+
  
-===== Jurnal =====+Relatia dintre rezistenta LDR si nivelul de lumina este log-liniara. Formula standard pentru conversie este:
  
-<note tip+''​Lux = 10 * (R10 / R_ldr) ^ (1 / Gamma)''​ 
-Puteți avea și secțiune ​de jurnal în care să poată urmări asistentul ​de proiect progresul proiectului+ 
-</note>+Deoarece datasheet-ul ofera un interval destul de larg pentru valoare R10 (8k - 20k), am decis sa calibrez valoarea prin comparatie cu un senzor de referinta (al telefonului). Astfel am plasat cei doi senzori cat mai apropiat si paraleli, si am colectat date.  
 + 
 +In urma calibrarii am obtinut ca senzorul meu are o valoare R10 de 17k Ohm, iar Gamma este conform specificatiei de 0.7. 
 + 
 +Deoarece ADC-ul intern al controller-ului ESP32 se comporta neliniar la capete, am decis sa fac clip la valorile acestuia intr-un interval care sa excluda capetele (<100mV, ​>3100mV). 
 + 
 +Pentru anularea zgomotului implementat luarea mediei a 64 de esantioane luate la interval de 312 microsecunde (20ms in total), intr-sectiune critica ​de cod. 
 + 
 +==== Buzzer pasiv ==== 
 +Un buzzer pasiv este folosit pentru a semnala situatii ​de urgenta (temperatura,​ umiditate iesite din parametrii de siguranta) folosind un semnal PWM.  
 + 
 +==== Led RGB ==== 
 +Un LED RGB este folosit pentru ​ a semnala situatia curenta (parametrii optimi sau nu). 
 + 
 +==== Ecran OLED 0.96 SSD1306 ==== 
 +Ecranul OLED de 0.96 inch echipat cu controller-ul SSD1306 este un display ce permite afisarea culorilor albastru si galben pe un fundal negru, cu o rezolutie tipica de 128x64 pixeli.  
 + 
 +Comunicarea este realizata folosind biblioteca SSD1306 prin protocolul I2C. 
 + 
 +Ecranul este folosit pentru afisarea valorilor in timp real. 
 + 
 +==== Modul Wi-Fi ==== 
 +Modulul Wi-Fi prezent pe placa de dezvoltare ESP32 este folosit pentru a trimite datele inregistrate prin protocolul mqtt catre un broker Mosquitto, pentru a fi stocate si ulterior afisate de dashboard. 
 + 
 +Pentru implementarea protocolului MQTT este folosita biblioteca esp-mqtt. 
 + 
 + 
 +===== Dashboard ===== 
 +Arhitectura server-side este bazata pe un singur docker-compose folosind containere preexistente pentru a asigurara o configuratie simpla, intuitiva si modulara. 
 + 
 +===== Laboratoare Folosite ===== 
 + 
 +* Laboratorul 0 - GPIO + Laboratul 3 - Timere. PWM 
 +  - Gestionarea led-ului RGB si a buzzer-ului passiv folosind LEDC 
 + 
 +* Laboratorul 1 - UART 
 +  - UART este protocolul folosit pentru incarcarea codului pe placa, precum si pentru monitorizarea output-ului de debug emis de aceasta. 
 + 
 +* Laboratorul 2 - Intreruperi 
 +  - Am introdus un ISR pentru prelucrarea garantata a butonului de intrerupere a alarmei 
 + 
 +* Laboratorul 4 - ADC 
 +  - Valoarea rezistentei LDR este dedusa din tensiunea masurata de controller-ul ADC 
 + 
 +* Laboratorul 6 - I2C 
 +  - Ecranul OLED SSD1306 este controlat prin protocolul I2C 
 + 
 +===== Rezultate Obtinute ===== 
 + 
 +<​html>​<a href="​https:​//​drive.google.com/​file/​d/​1AF1xj1J54qJoGAdxvQm7j4wwsGwPy_x1/​view"​>Link</​a></​html>​ Video Demo 
 + 
 +Am reusit sa duc la capat proiectul, obtinand ceea ce mi-am propus la inceput: un sistem IoT care monitorizeaza un mediu si alerteaza cand sunt depasite constragerile acestuia. 
 + 
 +===== Concluzii ===== 
 + 
 +Pentru imbunatatirea proiectului exista urmatoarele posibilitati:​ 
 +  - Folosire unor senzori cu precizie si acuratete mai mare 
 +  - Folosirea unui PCB custom pentru minimizarea proiectului 
 +  - Optimizarea pentru Power Consumption,​ permitand functionarea pe durate lungi fara alimentare externa ​
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<note+<html><​a href="​https://​cdn.sparkfun.com/​datasheets/​Sensors/​LightImaging/​SEN-09088.pdf">​Datasheet LDR GL5528</​a></​html
-Listă cu documente, ​datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**+ 
-</note>+<​html><​a href="​https://​www.mouser.com/​datasheet/​2/​758/​DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf">​Datasheet DHT11</​a></​html>​ 
 + 
 +<​html><​a href="​https://​github.com/​Daniel729/​eth">​GitHub</​a></​html>​ 
 + 
 +<​html><​a href="​https://​mdaniel.me/​d/​adfhwpd/​eth-sensor-data?​orgId=1&​from=now-30m&​to=now&​timezone=browser">​Dashboard</​a>​</html>
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2026/andrei.batasev/daniel.malanca.1777962068.txt.gz · Last modified: 2026/05/05 09:21 by daniel.malanca
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