Differences

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

Link to this comparison view

pm:prj2026:florin.stancu:bogdan.panaitiu [2026/05/08 19:08]
bogdan.panaitiu
pm:prj2026:florin.stancu:bogdan.panaitiu [2026/05/24 12:47] (current)
bogdan.panaitiu
Line 24: Line 24:
 ==== Schema bloc ==== ==== Schema bloc ====
  
 +{{:​pm:​prj2026:​florin.stancu:​schemabloc_plantpal.png?​400|Schema bloc PlantPal}}
  
 ==== Module hardware ==== ==== Module hardware ====
Line 48: Line 49:
 | Rezistenta 10k ohm                  | 2         | | Rezistenta 10k ohm                  | 2         |
 | Rezistenta 1k ohm                   | 1         | | Rezistenta 1k ohm                   | 1         |
-| Breadboard 830 puncte ​              | 1         | 
-| Fire jumper M-M, M-F (set)          | 1         | 
  
  
 ==== Schema electrica ==== ==== Schema electrica ====
  
-//(va fi adaugata la etapa urmatoare)//​+{{:​pm:​prj2026:​florin.stancu:​schema_electrica_plantpal.png?​600|Schema bloc PlantPal}}
  
 ===== Software Design ===== ===== Software Design =====
Line 60: Line 59:
 ==== Mediu de dezvoltare ==== ==== Mediu de dezvoltare ====
  
-  * **IDE:** Arduino IDE+  * **IDE:** Arduino IDE 2.x 
 +  * **Limbaj:** C/C++ (cu acces direct la registre AVR pentru ADC)
   * **Toolchain:​** avr-gcc (inclus in Arduino IDE)   * **Toolchain:​** avr-gcc (inclus in Arduino IDE)
   * **Versionare:​** Git + GitHub   * **Versionare:​** Git + GitHub
Line 66: Line 66:
 ==== Biblioteci si surse third-party ==== ==== Biblioteci si surse third-party ====
  
-  * **Wire.h** - comunicatie I2C cu LCD-ul +  * **Wire.h** - comunicatie I2C cu LCD-ul ​(standard Arduino) 
-  * **LiquidCrystal_I2C.h** - control LCD 1602 prin I2C (initial; ulterior planificam o implementare bare-metal pentru punctaj suplimentar+  * **LiquidCrystal_I2C** ​by Frank de Brabander ​- control LCD 1602 prin I2C 
-  * Restul codului (citire DHT22, ADC, control LED RGB, buzzer, butoane, state machine) va fi scris de la zero, cu acces direct la registre acolo unde e relevant.+  * **DHT sensor library** by Adafruit - citire DHT11 (protocol propriu 1-wire
 +  * **Adafruit Unified Sensor** - dependinta a bibliotecii DHT
  
-==== Surse si functii ​(etapa 3====+Restul codului ​(citire ADC bare-metal, control LED RGB, buzzer, butoane cu intreruperi,​ state machine, buffer circular istoriceste scris de la zero, cu acces direct la registre AVR acolo unde e relevant pentru exemplificarea conceptelor din laborator.
  
-//Vor fi documentate ​in etapa de implementare.//+==== Structura codului ==== 
 + 
 +Codul este organizat modular in 7 fisiere pentru claritate si separarea responsabilitatilor:​ 
 + 
 +  * **PlantPal.ino** - fisier principal cu setup() si loop() 
 +  * **config.h** - constante, pini, calibrari senzori, timing 
 +  * **sensors.h** - citire senzori (ADC bare-metal pentru sol si LDR, DHT11 prin biblioteca) 
 +  * **display.h** - control LCD cu 5 pagini (main, sol/lumina, status, istoric, editare) 
 +  * **alerts.h** - control LED RGB si buzzer ​in functie ​de status 
 +  * **input.h** - butoane cu intreruperi hardware (INT1) si polling 
 +  * **state.h** - state machine, evaluare praguri, buffer circular istoric 
 + 
 +==== Functionalitati implementate ==== 
 + 
 +  * **Citire senzori non-blocking** la fiecare 2 secunde, folosind millis() pentru timing 
 +  * **Acces direct la registre ADC** (ADMUX, ADCSRA) pentru citire ~10us per canal, comparativ cu ~200us folosind analogRead() 
 +  * **Evaluare status pe 3 nivele** (OK Atentie ​Critic) cu praguri configurabile si buffer de toleranta 
 +  * **State machine** pentru ciclul SAMPLE -> EVALUATE -> HISTORY -> DISPLAY -> ALERT 
 +  * **5 pagini LCD** navigabile prin buton: principala, sol/lumina, status, istoric, editare praguri 
 +  * **Buffer circular** pentru ultimele 10 citiri, afisat ciclic in pagina istoric 
 +  * **Caractere LCD custom** (icoane pentru temperatura,​ umiditate, lumina, alerta) 
 +  * **Alerte multi-canal coordonate** - LED RGB cu severitate gradata si buzzer cu frecvente diferite 
 +  * **Snooze alerta** 30 secunde cu indicator vizual galben palpitant 
 +  * **Detectie apasare scurta vs lunga** pe butoane (prag 800ms) cu debouncing software 
 +  * **Mod editare praguri** runtime - utilizatorul poate ajusta din butoane pragurile pentru T max, T min, umiditate aer, sol si lumina 
 +  * **Profilare cod** - timpul de executie al rutinei de citire senzori este masurat cu micros() si afisat pe Serial 
 + 
 +==== Algoritmi cheie ==== 
 + 
 +  * **Citire ADC bare-metal** - configurarea manuala a registrelor ADMUX si ADCSRA pentru control complet asupra prescaler-ului si referintei de tensiune, urmata de pornirea conversiei prin setarea bitului ADSC si asteptarea finalizarii prin polling. Asta inlocuieste functia analogRead() din biblioteca standard cu o varianta de 3-5 ori mai rapida. 
 +  * **Buffer circular istoric** - structura de date cu auto-suprascriere care pastreaza ultimele N citiri fara alocare dinamica de memorie. Index-ul "​head"​ avanseaza modulo dimensiunea buffer-ului,​ iar cele mai vechi date sunt suprascrise automat cand se depaseste capacitatea. 
 +  * **Detectie apasare scurta/​lunga in ISR** - rutina de intrerupere masoara timpul intre frontul descendent (apasare) si cel ascendent (eliberare) folosind millis(), apoi compara durata cu pragul LONG_PRESS_MS pentru a decide tipul evenimentului. Debouncing-ul software se face prin ignorarea schimbarilor mai rapide de 50ms. 
 +  * **Evaluare status multi-parametru** - functia parcurge toti senzorii, numara cati parametri sunt in zona de atentie si cati in zona critica, apoi decide statusul global pe baza prioritatii (un singur critic transforma statusul global in critic). 
 +  * **Alerte cu severitate gradata** - LED-ul RGB foloseste PWM pentru tranzitii intre culori (verde stabil -> galben stabil -> rosu pulsator cu intensitate modulata), iar buzzer-ul are frecvente si intervale diferite in functie de severitate (1kHz la 3s pentru atentie, 2kHz la 1s pentru critic).
  
 ===== Rezultate Obtinute ===== ===== Rezultate Obtinute =====
  
-//(Se vor adauga la finalul implementarii)//​+{{:​pm:​prj2026:​florin.stancu:​bogdan_panaitiu_ansamblu.jpeg?​400|Schema bloc PlantPal}}
  
 ===== Concluzii ===== ===== Concluzii =====
  
-//(Se vor adauga dupa finalizarea proiectului)//+Proiectul PlantPal a demonstrat ca un sistem util si functional poate fi construit cu componente accesibile si cunostinte acumulate in primele luni de la cursul de PM. Pe parcurs am invatat ca dezvoltarea unui proiect embedded nu inseamna doar scris cod, ci si planificarea atenta a conexiunilor hardware, calibrarea senzorilor, gestionarea timing-ului non-blocking si testarea incrementala a fiecarei componente in parte. 
 + 
 +==== Ce a mers bine ==== 
 + 
 +  * **Testarea incrementala** a fost cea mai utila decizie - in loc sa cablez tot odata si sa incerc sa pornesc proiectul intreg, am conectat si testat cate o componenta pe rand, ceea ce a redus semnificativ timpul de debug. 
 +  * **Simularea in Tinkercad inainte de montaj fizic** a ajutat sa identific cum trebuie conectate componentele si sa testez logica de baza inainte sa cumpar piesele. 
 +  * **Modulele cu electronica integrata** ​(KY-016 pentru LED RGB, senzor capacitiv sol, modul DHT11au simplificat mult cablajul fata de varianta cu componente brute. 
 +  * **State machine non-blocking** cu millis() functioneaza fluent si permite executia simultana a mai multor task-uri (citire senzori, refresh display, alerte, butoane). 
 + 
 +==== Dificultati intampinate ==== 
 + 
 +  * **Initializarea LCD-ului** se bloca pana am adaugat manual Wire.begin() si Wire.setClock(100000) inainte de lcd.begin(),​ problema specifica versiunii bibliotecii folosite. 
 +  * **Tipul LED-ului RGB** (anod vs catod comun) a fost confundat initial - am rezolvat prin testarea ambelor logici si folosirea unui define LED_ANODE_COMMON pentru a face cod-ul reutilizabil. 
 +  * **Calibrarea senzorului capacitiv de sol** - valorile difera fata de senzorul rezistiv din Tinkercad (in real, valoare mica = umed, in Tinkercad invers). 
 + 
 +==== Reflectie personala ==== 
 + 
 +A fost prima oara cand am construit un proiect embedded de la zero, plecand de la o idee si ajungand la un produs functional. Cea mai valoroasa lectie a fost importanta documentarii si planificarii inainte de a incepe sa lipesc fire pe breadboard. De asemenea, am inteles practic diferenta intre cod care "merge in simulare"​ si cod care "merge pe hardware real" - sunt suficiente diferente subtile (adresa I2C, tipul LED-ului, calibrarea senzorilor) ca sa te blocheze daca nu testezi pe fiecare etapa.
  
 ===== Bibliografie / Resurse ===== ===== Bibliografie / Resurse =====
  
-//(Se vor adauga dupa finalizarea proiectului)//​+==== Datasheet-uri ====
  
-----+  * [[https://​docs.arduino.cc/​resources/​datasheets/​A000066-datasheet.pdf|Arduino Uno R3 Datasheet]] 
 +  * [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|ATmega328P Datasheet]] 
 +  * [[https://​components101.com/​sites/​default/​files/​component_datasheet/​DHT11-Temperature-Sensor.pdf|DHT11 Datasheet]] 
 +  * [[https://​www.alldatasheet.com/​datasheet-pdf/​pdf/​22683/​STMICROELECTRONICS/​LM393.html|LM393 Datasheet (utilizat ca referinta)]]
  
-**Repository GitHub:*//(va fi adaugat link)//+==== Documentatie biblioteci ==== 
 + 
 +  ​[[https://​github.com/​johnrickman/​LiquidCrystal_I2C|LiquidCrystal_I2C library]] 
 +  ​[[https://​github.com/​adafruit/​DHT-sensor-library|Adafruit DHT sensor library]] 
 +  ​[[https://​www.arduino.cc/​reference/​en/​language/functions/communication/wire/|Arduino Wire library reference]] 
 + 
 +----
  
-**Demo video:** //(va fi adaugat link YouTube la finalul proiectului)//+**Repository GitHub:** [[https://github.com/rici029/PlantPal]]
pm/prj2026/florin.stancu/bogdan.panaitiu.1778256507.txt.gz · Last modified: 2026/05/08 19:08 by bogdan.panaitiu
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