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

Schema bloc PlantPal

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

Schema bloc PlantPal

Software Design

Mediu de dezvoltare

  • IDE: Arduino IDE 2.x
  • Limbaj: C/C++ (cu acces direct la registre AVR pentru ADC)
  • Toolchain: avr-gcc (inclus in Arduino IDE)
  • Versionare: Git + GitHub

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

Schema bloc PlantPal

Concluzii

(Se vor adauga dupa finalizarea proiectului)

Bibliografie / Resurse

(Se vor adauga dupa finalizarea proiectului)


Repository GitHub: https://github.com/rici029/PlantPal

Demo video: (va fi adaugat link YouTube la finalul proiectului)

pm/prj2026/florin.stancu/bogdan.panaitiu.1779615813.txt.gz · Last modified: 2026/05/24 12:43 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