This shows you the differences between two versions of the page.
|
pm:prj2026:andrei.batasev:daniel.malanca [2026/05/13 09:16] daniel.malanca |
pm:prj2026:andrei.batasev:daniel.malanca [2026/05/24 13:44] (current) daniel.malanca |
||
|---|---|---|---|
| Line 13: | Line 13: | ||
| {{ https://ocw.cs.pub.ro/courses/_media/pm/prj2026/andrei.batasev/daniel.malanca_block_diagram.png?800 }} | {{ https://ocw.cs.pub.ro/courses/_media/pm/prj2026/andrei.batasev/daniel.malanca_block_diagram.png?800 }} | ||
| - | Proiectul functioneaza pe baza unui microcontroler ESP32 care actioneaza ca unitate centrala, care colecteaza date de la senzori si actioneaza diversi actuatori. | + | 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:** 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. | ||
| Line 28: | Line 28: | ||
| * **LED RGB:** Indicator de stare comandat prin semnale PWM. Semnaleaza starea generala prin diverse culori si pulsatii. | * **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_electric.png?1200}} | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2026/andrei.batasev/daniel.malanca_electric.png?1200}} | ||
| + | |||
| + | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2026/andrei.batasev/daniel.malanca_hardware.jpg?800}} | ||
| ^ Qty ^ Price (RON) ^ Item ^ Link ^ | ^ Qty ^ Price (RON) ^ Item ^ Link ^ | ||
| Line 46: | Line 56: | ||
| | | 124.00 | | | | | 124.00 | | | ||
| - | Pentru calibrarea senzorilor voi efectua urmatoarele: | + | ^ 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 | | ||
| - | * **DHT11** - Voi compara rezultatele obtinute de acesta cu cele ale unui termometru digital, si voi constata incadrarea in parametrii normali de eroare. | ||
| - | |||
| - | * **Fotorezistor** - Voi folosi senzorul de luminozitate al telefonului ca benchmark, si voi determina formula si parametrii care aduc valoarea de tensiune la o valoare de intensitate care corespunde celei de benchmark. | ||
| ===== 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:** | ||
| - | Firmware-ul va fi dezvoltat in limbajul C, folosind framework-ul oficial ESP-IDF prin PlatformIO. Acest mediu ofera un control avansat si precis asupra resurselor hardware ale microcontrolerului ESP32. | ||
| - | Arhitectura server-side va fi bazata pe un singur docker-compose folosind containere preexistente pentru a asigurara o configuratie simpla, intuitiva si modulara. | + | ==== 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. | ||
| + | |||
| + | 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℃) | ||
| + | |||
| + | ==== 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. | ||
| + | |||
| + | 1. Calculul Rezistentei LDR | ||
| + | Rezistenta curenta a senzorului (''R_ldr'') se calculeaza din valoare bruta ADC astfel: | ||
| + | |||
| + | ''R_ldr = R_fixed * ((4095 / ADC_Raw) - 1)'' | ||
| + | |||
| + | 2. Calculul Iluminarii (Lux) | ||
| + | |||
| + | Relatia dintre rezistenta LDR si nivelul de lumina este log-liniara. Formula standard pentru conversie este: | ||
| + | |||
| + | ''Lux = 10 * (R10 / R_ldr) ^ (1 / Gamma)'' | ||
| + | |||
| + | 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-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 ===== | ===== Rezultate Obtinute ===== | ||
| - | ===== Concluzii ===== | + | <html><a href="https://drive.google.com/file/d/1AF1xj1J54qJoGAdxvQm7j4wwsGwPy_x1/view">Link</a></html> Video Demo |
| - | ===== Download ===== | + | 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. |
| - | ===== Jurnal ===== | + | ===== 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 ===== | ||
| - | Link catre repository - <html><a href="https://github.com/Daniel729/eth">GitHub</a></html> | + | <html><a href="https://cdn.sparkfun.com/datasheets/Sensors/LightImaging/SEN-09088.pdf">Datasheet LDR GL5528</a></html> |
| + | |||
| + | <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> | ||