This is an old revision of the document!
PlantPal
Introducere
PlantPal este un sistem inteligent de monitorizare a conditiilor de mediu pentru plante de apartament, construit pe platforma Arduino Uno. Dispozitivul masoara in timp real patru parametri esentiali pentru sanatatea unei plante - temperatura aerului, umiditatea aerului, umiditatea solului si nivelul de lumina ambientala - si ofera feedback multi-canal utilizatorului prin trei modalitati complementare: afisaj LCD, indicator vizual LED RGB si alerta sonora prin buzzer.
Ce face proiectul:
Citeste continuu valorile de la trei senzori care masoara patru parametri (DHT22 pentru temperatura si umiditate aer, senzor capacitiv de sol, fotorezistor LDR)
Compara valorile masurate cu praguri optime configurabile
Afiseaza starea curenta pe un LCD 1602 prin interfata I2C
Semnalizeaza vizual starea plantei printr-un LED RGB (verde = optim, galben = atentie, rosu = critic)
Emite alerte sonore prin buzzer cand unul sau mai multi parametri ies din intervalul optim
Permite configurarea pragurilor si activarea functiei de snooze prin butoane fizice
Memoreaza istoricul ultimelor masuratori intr-un buffer circular si le afiseaza ciclic
Scopul proiectului:
Crearea unui dispozitiv autonom care reduce timpul de reactie al utilizatorului la conditii suboptime de mediu, prevenind astfel deteriorarea plantelor prin alerte proactive multi-canal.
Descriere generala
Sistemul este organizat in jurul microcontrollerului ATmega328P (Arduino Uno) care orchestreaza achizitia datelor de la senzori, evaluarea conditiilor si controlul interfetei de feedback.
Schema bloc
Module hardware
Modul de achizitie senzori: colecteaza date analogice (LDR, sol) prin ADC si date digitale (DHT22) printr-un protocol propriu peste GPIO
Modul de afisare: LCD 1602 conectat prin I2C pentru afisarea valorilor curente, alertelor si istoricului
Modul de feedback vizual/sonor: LED RGB controlat prin PWM (3 canale) si buzzer pasiv pentru semnalizare gradata
Modul de input utilizator: 2 butoane cu pull-up pentru configurarea pragurilor si snooze alerta, conectate pe pini cu intreruperi externe
Hardware Design
Lista de componente
| Componenta | Cantitate |
| Arduino Uno R3 (ATmega328P) | 1 |
| Senzor DHT22 (temp + umid aer) | 1 |
| Senzor capacitiv umiditate sol | 1 |
| Fotorezistor LDR 5528 | 1 |
| LCD 1602 cu interfata I2C | 1 |
| LED RGB catod comun | 1 |
| Buzzer pasiv | 1 |
| Buton push-button | 2 |
| Rezistenta 220 ohm | 3 |
| Rezistenta 10k ohm | 2 |
| Rezistenta 1k ohm | 1 |
Schema electrica
Software Design
Mediu de dezvoltare
Biblioteci si surse third-party
Wire.h - comunicatie I2C cu LCD-ul (standard Arduino)
LiquidCrystal_I2C by Frank de Brabander - control LCD 1602 prin I2C
DHT sensor library by Adafruit - citire DHT11 (protocol propriu 1-wire)
Adafruit Unified Sensor - dependinta a bibliotecii DHT
Restul codului (citire ADC bare-metal, control LED RGB, buzzer, butoane cu intreruperi, state machine, buffer circular istoric) este scris de la zero, cu acces direct la registre AVR acolo unde e relevant pentru exemplificarea conceptelor din laborator.
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
Concluzii
(Se vor adauga dupa finalizarea proiectului)
Bibliografie / Resurse