This shows you the differences between two versions of the page.
|
pm:prj2026:andrei.batasev:daniel.malanca [2026/05/04 14:23] daniel.malanca created |
pm:prj2026:andrei.batasev:daniel.malanca [2026/05/24 13:44] (current) daniel.malanca |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Nume proiect ====== | + | ====== ETH - Enviromental Telemetry Hub ====== |
| ===== Introducere ===== | ===== Introducere ===== | ||
| - | <note tip> | + | Proiectul ETH (Environmental Telemetry Hub) reprezinta un sistem IoT (Internet of Things) pentru monitorizarea conditiilor de mediu dintr-o incapere. |
| - | Prezentarea pe scurt a proiectului vostru: | + | |
| - | * ce face | + | |
| - | * care este scopul lui | + | |
| - | * care a fost ideea de la care aţi pornit | + | |
| - | * de ce credeţi că este util pentru alţii şi pentru voi | + | |
| - | </note> | + | |
| - | ===== Descriere generală ===== | + | |
| - | <note tip> | + | 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. |
| - | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | |
| - | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | 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 adjusteze lumina ambientala). |
| - | </note> | + | |
| + | ===== 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:** | ||
| + | * **Modul Central:** Microcontroller ESP32. | ||
| + | * **Module de Intrare (Input):** | ||
| + | * **DHT11:** Modul digital care transmite catre ESP32 valorile masurate pentru temperatura mediului ambiant si umiditatea relativa. | ||
| + | * **Fotorezistor (LDR):** Folosit intr-un divizor de tensiune, ofera o tensiune variabila citita de modulul ADC al ESP32-ului, care determina intensitatea luminoasa. | ||
| + | * **Module de Iesire (Output):** | ||
| + | * **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. | ||
| + | * **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. | ||
| + | |||
| + | ===== 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 ===== | ||
| - | <note tip> | + | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2026/andrei.batasev/daniel.malanca_electric.png?1200}} |
| - | Aici puneţi tot ce ţine de hardware design: | + | |
| - | * listă de piese | + | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2026/andrei.batasev/daniel.malanca_hardware.jpg?800}} |
| - | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | |
| - | * diagrame de semnal | + | ^ Qty ^ Price (RON) ^ Item ^ Link ^ |
| - | * rezultatele simulării | + | | 1 | 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]] | |
| - | </note> | + | | 1 | 2.13 | Modul Led RGB | [[https://www.bitmi.ro/modul-led-rgb-3-culori-10401.html|Link]] | |
| + | | 1 | 2.99 | Buzzer Pasiv | [[https://www.bitmi.ro/module-electronice/modul-buzzer-pasiv-ky-006-10678.html|Link]] | | ||
| + | | 1 | 18.98 | SSD1306 | [[https://www.bitmi.ro/electronica/ecran-oled-0-96-cu-interfata-iic-i2c-10488.html|Link]] | | ||
| + | | 1 | 6.99 | DHT11 | [[https://www.bitmi.ro/electronica/modul-senzor-de-temperatura-si-umiditate-dht11-compatibil-arduino-10393.html|Link]] | | ||
| + | | 1 | 1.49 | Fotorezistor (tip 5528) | [[https://www.optimusdigital.ro/ro/componente-electronice-altele/1863-fotorezistor-tip-5528.html|Link]] | | ||
| + | | 1 | 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** | R (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. | ||
| - | <note tip> | + | ==== DHT11 ==== |
| - | Descrierea codului aplicaţiei (firmware): | + | 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. |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
| - | * (etapa 3) surse şi funcţii implementate | + | |
| - | </note> | + | |
| - | ===== Rezultate Obţinute ===== | + | 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℃) |
| - | <note tip> | + | ==== Senzor GL5528 ==== |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | 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. |
| - | </note> | + | |
| - | ===== Concluzii ===== | + | 1. Calculul Rezistentei LDR |
| + | Rezistenta curenta a senzorului (''R_ldr'') se calculeaza din valoare bruta ADC astfel: | ||
| - | ===== Download ===== | + | ''R_ldr = R_fixed * ((4095 / ADC_Raw) - 1)'' |
| - | <note warning> | + | 2. Calculul Iluminarii (Lux) |
| - | O arhivă (sau mai multe dacă este cazul) cu 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**. | + | Relatia dintre rezistenta LDR si nivelul de lumina este log-liniara. Formula standard pentru conversie este: |
| - | </note> | + | |
| - | ===== Jurnal ===== | + | ''Lux = 10 * (R10 / R_ldr) ^ (1 / Gamma)'' |
| - | <note tip> | + | 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. |
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
| - | </note> | + | 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-o 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> | ||