This is an old revision of the document!
Proiectul constă în realizarea unui sistem embedded pentru monitorizarea umidității solului unei plante. Sistemul măsoară nivelul de umiditate folosind un senzor higrometru capacitiv, afișează valoarea măsurată și statusul plantei pe un display LCD 16×2, iar atunci când umiditatea scade sub un prag prestabilit, avertizează utilizatorul prin aprinderea unui LED roșu și pornirea unui buzzer activ.
Scopul proiectului este de a ajuta utilizatorul să știe când planta are nevoie de apă și de a urmări evoluția umidității solului în timp. Pentru acest lucru, sistemul salvează măsurătorile pe un card microSD, împreună cu data și ora obținute de la un modul RTC DS3231. De asemenea, valorile măsurate și statisticile calculate pot fi transmise prin Bluetooth către un telefon sau laptop, folosind un modul HC-05.
Care este ideea de la care am pornit și de ce este util? Ei bine, eu toată viața mea, am avut 3 ghivece cu plante: primul eram in gimnaziu, era o floare, a ținut 1 lună, al doilea eram în liceu și am avut un cactus (m-a ținut 3 luni) și acum am unul de o lună și cred că e timpul să accept decesul. Mereu uit să ud plantele și știu sigur că este o problemă pentru multe persoane. Statisticile transmise prin bluetooth mă pot ajuta să-mi dau seama în fazele neoportune ale plantei dacă e din cauza udatului excesiv sau udatului prea rar sau non existent.
Sistemul este construit în jurul unei plăci Arduino UNO R3. Senzorul de umiditate este introdus în sol și transmite către Arduino o valoare analogică proporțională cu nivelul de umiditate. Arduino citește această valoare prin pinul analogic A0, o transformă într-un procent și o compară cu un prag prestabilit. Dacă umiditatea este sub pragul stabilit, sistemul consideră că planta trebuie udată. În acest caz, LED-ul roșu se aprinde, buzzerul activ pornește, iar pe LCD este afișat un mesaj de avertizare. Dacă umiditatea este suficientă, LED-ul și buzzerul rămân oprite, iar LCD-ul afișează statusul normal al plantei. Modulul RTC DS3231 este folosit pentru a atașa fiecărei măsurători data și ora exactă. Modulul microSD este folosit pentru salvarea datelor într-un fișier .csv. Modulul Bluetooth HC-05 permite transmiterea valorilor curente și a statisticilor către un dispozitiv extern. Butonul Start/Stop permite utilizatorului să pornească sau să oprească monitorizarea logică a sistemului fără a opri alimentarea fizică a plăcii.
| Modul Hardware | Descriere Tehnică | Interacțiune / Protocol |
|---|---|---|
| Arduino UNO R3 compatibil | Unitatea centrală de procesare. Gestionează logica sistemului, calculele și comunicarea cu perifericele. | Master-ul sistemului; controlează senzorul, LCD-ul, LED-ul, buzzerul, RTC-ul, microSD-ul și Bluetooth-ul. |
| Senzor higrometru capacitiv | Măsoară umiditatea solului printr-un semnal analogic variabil. | Analog / ADC: AOUT → A0. |
| LCD 16×2 cu I2C | Afișează umiditatea curentă și statusul plantei. | I2C: SDA → A4, SCL → A5. |
| RTC DS3231 | Oferă data și ora reală pentru fiecare măsurătoare. | I2C: SDA → A4, SCL → A5. |
| Modul microSD | Salvează datele într-un fișier CSV. | SPI: CS → D10, MOSI → D11, MISO → D12, SCK → D13. |
| HC-05 Bluetooth | Transmite valorile și statisticile către telefon/laptop. | UART / SoftwareSerial: TXD → D5, RXD → D6. |
| LED roșu | Avertizare vizuală pentru sol uscat. | GPIO digital: D7. |
| Buzzer activ | Avertizare sonoră pentru sol uscat. | GPIO digital: D8. |
| Buton Start/Stop | Pornește/oprește monitorizarea logică. | Intrare digitală: D2 cu INPUT_PULLUP. |
Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html
Firmware-ul proiectului va fi dezvoltat în:
Codul va fi scris în C/C++ pentru Arduino.
| Librărie | Rol |
|---|---|
| Wire.h | Comunicare I2C |
| LiquidCrystal_I2C.h | Control LCD 16×2 cu I2C |
| RTClib.h | Citirea datei și orei de la DS3231 |
| SPI.h | Comunicare SPI pentru modulul microSD |
| SD.h | Scriere și citire fișiere pe cardul microSD |
| SoftwareSerial.h | Comunicare serială cu modulul Bluetooth HC-05 |
La pornirea sistemului:
În bucla principală:
if (umiditate < pragUmiditate) { status = "USCAT"; digitalWrite(ledPin, HIGH); digitalWrite(buzzerPin, HIGH); } else { status = "OK"; digitalWrite(ledPin, LOW); digitalWrite(buzzerPin, LOW); }
Pentru calculul statisticilor se pot folosi variabile simple:
int umiditateCurenta; int umiditateMinima = 100; int umiditateMaxima = 0; long sumaUmiditate = 0; unsigned long numarMasuratori = 0; int primaMasurare; int ultimaMasurare; int masurareAnterioara; int masuratoriSolUscat = 0;
Statisticile calculate:
sumaUmiditate += umiditateCurenta; numarMasuratori++; int media = sumaUmiditate / numarMasuratori; if (umiditateCurenta < umiditateMinima) { umiditateMinima = umiditateCurenta; } if (umiditateCurenta > umiditateMaxima) { umiditateMaxima = umiditateCurenta; }
dacă umiditatea curentă este cu peste 2 puncte mai mare decât valoarea anterioară:
tendință = CREȘTERE
dacă umiditatea curentă este cu peste 2 puncte mai mică decât valoarea anterioară:
tendință = SCĂDERE
altfel:
tendință = STABILĂ
Datele salvate pe cardul microSD pot avea următorul format:
data,ora,umiditate,status,media,minim,maxim,tendinta 2026-05-08,16:30:00,42,OK,48,35,72,SCADERE 2026-05-08,16:35:00,39,OK,47,35,72,SCADERE 2026-05-08,16:40:00,28,USCAT,45,28,72,SCADERE
Prin modulul HC-05 se poate transmite un mesaj de forma:
[16:40:00] Umiditate: 28% Status: UDATI PLANTA Media: 45% Minim: 28% Maxim: 72% Tendinta: SCADERE LED: ON Buzzer: ON
void initHardware(); int citesteUmiditateADC(); int convertesteInProcent(int valoareADC); void actualizeazaLCD(int umiditate, String status); void controleazaAvertizari(int umiditate); void actualizeazaStatistici(int umiditate); String calculeazaTendinta(int umiditateCurenta, int umiditateAnterioara); void salveazaPeSD(DateTime timp, int umiditate, String status); void trimiteBluetooth(DateTime timp, int umiditate, String status); void verificaButon();
În urma realizării proiectului, se urmărește obținerea unui sistem funcțional care:
Exemplu de afișare pe LCD când planta are umiditate suficientă:
Umiditate: 42% Status: OK
Exemplu de afișare pe LCD când planta trebuie udată:
Umiditate: 28% Status: UDATI
Exemplu de linie salvată pe cardul microSD:
2026-05-08,16:40:00,28,USCAT,45,28,72,SCADERE
Exemplu de mesaj transmis prin Bluetooth:
Ora: 16:40:00 | Umiditate: 28% | Status: UDATI PLANTA | Media: 45%
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.