Plant Care System

Introducere

Prezentarea pe scurt a proiectului vostru:

  • ce face
  • care este scopul lui
  • care a fost ideea de la care aţi pornit
  • de ce credeţi că este util pentru alţii şi pentru voi

Acest proiect propune realizarea unui sistem automat de udare și monitorizare a plantelor, având ca scop principal menținerea unui nivel optim de umiditate a solului fără intervenție umană directă. Sistemul este construit în jurul unei plăcute de dezvoltare Arduino Uno și integrează senzori care monitorizează umiditatea solului, condițiile de mediu (temperatura și umiditatea aerului), precum și nivelul apei din rezervor.

Dispozitivul include un afișaj LCD 16×2 cu interfață I2C, care oferă informații în timp real despre parametrii înregistrați. La finalizarea unui ciclu de udare, un difuzor emite un semnal sonor de notificare, iar în cazul în care nivelul apei din rezervor scade sub o valoare critică, se activează un LED de avertizare.

Nevoia pentru un astfel de sistem apare în gospodăriile moderne, în care locatarii au un stil de viață activ și un program încărcat, dar sunt interesati de calitatea mediului in care traiesc și vor sa integreze natura în viața lor. Acest sistem oferă o soluție practică, eficientă și accesibilă pentru îngrijirea plantelor de interior automatizând întreg procesul și reducând riscul ca plantele să sufere din lipsa îngrijirii

Proiectul este util pentru orice pasionat de tehnologie și natură, constituind un punct de plecare solid pentru dezvoltarea de aplicații variate, de la monitorizarea mediului, până la automatizarea completă a unor sere de dimensiuni mici.

Descriere generală

O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.

Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html

Sistemul propus este conceput pentru a automatiza procesul de udare a plantelor și pentru a monitoriza parametrii de mediu esențiali, asigurând astfel o îngrijire optimă a plantelor de interior sau din sere mici. Acesta utilizează o placă de dezvoltare Arduino Uno ca unitate centrală de control și integrează mai mulți senzori și actuatori pentru a realiza funcționalitățile dorite.

Funcționalități principale

Monitorizarea umidității solului: Prin intermediul unui senzor de umiditate, sistemul detectează nivelul de umiditate al solului și decide dacă este necesară udarea.

Măsurarea temperaturii și umidității aerului: Un senzor de mediu BME280 colectează date despre temperatura și umiditatea ambientală, oferind informații utile pentru îngrijirea plantelor.

Detecția nivelului apei din rezervor: Un senzor ultrasonic (HC-SR04) măsoară distanța până la suprafața apei din rezervor.

Afișarea informațiilor: Un afișaj LCD 16×2 cu interfață I2C prezintă în timp real datele colectate de senzori, precum umiditatea solului, temperatura, umiditatea aerului.

Udarea automată a plantelor: Atunci când umiditatea solului scade sub un prag prestabilit, sistemul activează o pompă de apă prin intermediul unui modul releu, asigurând udarea plantei.

Notificări sonore și vizuale: După finalizarea unui ciclu de udare, un difuzor piezoelectric emite un semnal sonor, iar un LED se aprinde pentru a avertiza utilizatorul în cazul unui nivel scăzut al apei din rezervor.

Hardware Design

Aici puneţi tot ce ţine de hardware design:

Arduino Uno R4 WiFi

Caracteristici:

• Microcontroler Renesas RA4M1 (Arm® Cortex®-M4, 48 MHz)

• Coprocesor ESP32-S3 pentru conectivitate Wi-Fi® și Bluetooth®

• 14 pini digitali I/O (dintre care 6 PWM)

• 6 intrări analogice

• Conector USB-C

• Matrice LED 12×8 integrată

• Conector Qwiic I2C

Functie: Unitatea centrală de control care gestionează senzorii și actuatoarele.

Pin 1 Pin 2
SCL SCL (BME280)
SDA SDA (BME280)
13 IN (releu)
12 I/O modul buzzer
~9 Trig (senzor ultrasonic)
8 Echo (senzor ultrasonic)
7 LED
A0 SIG (senzor umiditate)
A4 SDA (LCD)
A5 SCL (LCD)
Modul Buzzer pasiv

• Food voltage: 3.3-5VDC

• Dimensions mm: 33 x 13

Functie: Emite semnale auditive cand un ciclu de udare s-a incheiat

Pin 1 Pin 2
GND GND
I/O 12
VCC VCC
LCD 16x2 Display Module (I2C)

• Tensiunea de intrare: 4.5 V până la 5.5 V

• Curent de alimentare: 1,5 mA

• Tensiunea de funcționare pentru LCD: 5 V

• Lumina de iluminare din spate: 120 mA

• Intervalul de tensiune înainte de iluminare: 4.1 V până la 4.3 V

• Display: 16 2 lines

• Adresa I2C: 0x27 sau 0x3F

Functie : Afisare informatiile masurate in timp real despre mediu si mesaje informative

Pin 1 Pin 2
GND GND
VCC VCC
SDA A4
SCL A5
LED

• Pin length: >15 mm

• Diameter: 3 mm

• Forward voltage: 1.8 - 2.5 V

• Forward current: 5 mA - 18 mA

Functie: Avertizare cand nivelul apei este scazut

Breadboard

• Type: Solderless prototyping board

• Size: 830 tie-points

Resistor

• Common Value: 330Ω

• Power Rating: 0.25W (1/4W)

• Tolerance: ±5%

Function: Current limiting for components like LEDs

Jumper Wires

• Types: Male-to-male, male-to-female, female-to-female

• Lengths: Typically 10–30 cm

Functie: stabilire conexiuni intre componente

Relay Module 5V

• Sarcina maxima: AC 250V/10A, DC 30V/10A

• Trigger current: 5mA

• Tip: High Level

• Tensiune de operare: 5V

• Led indicare stare

Functie: controleaza pompa de apa

Pin 1 Pin 2
COM + (battery pack)
NO - (battery pack)
VCC VCC
GND GND
IN 13
Soil Humidity Sensor

• Type: Analog capacitive

• Operating Voltage: 3.3–5V DC

• Output: Analog voltage corresponding to soil moisture level

• Function: Monitors soil moisture to determine watering needs

Pin 1 Pin 2
GND GND
VCC VCC
SIG A0
330Ω Resistor

• Value: 330 ohms

• Power Rating: 0.25W (1/4W)

• Tolerance: ±5%

Function: limiteaza curentul pentru a proteja LED-ul

Water Pump

• Tensiune de operare: 3V - 5V DC

• Consum curent: 100-200mA

• Debit: 1,2-1,6 L / min

• Adancime recomandata: 0.3 - 0.8 metri

• Diametrul exterior al duzei: 7.5mm

• Diametrul interior al duzei: 4.7mm

• Diametru total: ~33mm

• Lungime: ~45mm

• Material: plastic

Functie: udarea automata a plantei

Pin 1 Pin 2
+ NO (releu)
- - (battery pack)
Ultrasonic Sensor HC-SR04

• Power supply voltage: 5 VDC

• Static current consumption: less than 2 mA

• Sensor beam angle: less than 15°

• Detection range: 2 cm to 450 cm

• Resolution: 0.3 cm

Pin 1 Pin 2
VCC VCC
TRIG ~9
ECHO 8
GND GND

Functie: mesoara nivelul apei din rezervor

Battery

• Type: AA

• Voltage: 1,5V

Functie: alimentare pompa

Bosch Sensortec ME280

• Dimensiune de 5 mm x 2.5 mm x 0.93 mm cu capac metalic LGA

• Interfata digitala I2C (pana la 3.4 MHz) si SPI (3 si 4 fire, pana la 10 MHz)

• Interval tensiune alimentare VDD principala: 1.71 V - 3.6 V

• Interval tensiune interfata VDDIO: 1.2 V - 3.6 V • Consum curent 1.8 uA @ 1 Hz umiditate si temperatura: 2.8 uA @ 1 Hz presiune si temperatura; 3.6 uA @ 1 Hz umiditate, presiune si temperatura; 0.1 uA in modul sleep

• Interval de operare d -40…+85 C, 0…100 % umiditate relativa, 300…1100 hPa..

Functie: Ofera masuratori asupra temparaturii si umiditatii aerului

Pin 1 Pin 2
SCL SCL
GND GND
SDA SDA
VCC VCC
Suport baterii 4 x R6 Patrat

• baterii AA de litiu

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • librării şi surse 3rd-party (e.g. Procyon AVRlib)
  • algoritmi şi structuri pe care plănuiţi să le implementaţi
  • (etapa 3) surse şi funcţii implementate

Mediul de dezvotare este ArduinoIDE.

Bibliotecilor folosite

Wire.h – Necesară pentru comunicarea I2C între Arduino și dispozitive precum BME280 și LCD.

Adafruit_BME280.h – Biblioteca oferă o interfață simplă și robustă pentru a accesa senzorul BME280.

LiquidCrystal_I2C.h – Permite controlul afișajului LCD 16×2 prin protocolul I2C, reducând numărul de pini utilizați și complexitatea conexiunilor.

Aceste biblioteci sunt mature, bine documentate și oferă suport pentru funcționalitățile esențiale ale componentelor folosite.

Concepte din labordatoare

Laborator 3 - Timere, PWM: Timerul este implementat prin variabila `counter` și funcția `delay()`, permițând verificarea periodică a senzorilor. PWM este utilizat pentru a genera semnale sonore cu frecvențe variabile prin funcția `tone()`

Laborator 4 - ADC: Senzorul de umiditate a solului furnizează un semnal analogic, care este convertit în valoare digitală folosind funcția `analogRead(A0)`.

Laborator 6 - I2C: Protocolul este utilizat pentru comunicarea cu senzorul BME280 și afișajul LCD 16×2

Elementul de noutate

Utilizarea unui difuzor pentru oferirea de feedback sonor utilizatorului.

Detectarea nivelului apei din rezervor prin senzorul ultrasonic.

Scheletului proiectului

Fișierul main.cpp reprezintă aplicația principală:

setup() – Inițializează senzori, LCD, buzzer, LED, UART, releu etc.

loop() – Verifică periodic datele de la senzori și acționează în consecință (udare, notificări).

void loop() {
  //Check temperature, humidity, and soil humidity once a minute.
  if(counter == 1) {
    checkBME280();
    checkWater();
    checkMoisture();
  } else {
    checkWater();
  }
  delay(10000); //10sec = 10000
  counter++;
  if(counter >= 6) {
    counter = 0;
  }
}

checkMoisture() – decide dacă este necesară udarea. Se contorizeaza 5 masuratori sub valoarea minima inainte de a declansa udarea efectiva. In felul asta asiguram timpul necesar pentru absorbirea uniforma a apei in sol

//moisture sensor
void checkMoisture() {
  //Measure soil humidity
  int moisture = analogRead(A0);
  Serial.print("Moisture Sensor Value:");
  Serial.println(moisture);
  lcd.setCursor(0,  1);
  lcd.print("Moisture: " + String(moisture) + "   ");
  if (moisture  <= 300) {
    water_count++;
    //Serial.println(water_count);
    if(water_count == 5){//To wait for the water  to go through the pot.
      watering();
      water_count = 0;
    }
  }
}

checkWater() – determină nivelul apei din rezervor.

//Ultrasonic Sensor
void  checkWater(){
  //Check the water level in the bucket.
  digitalWrite(TRIG,LOW);
  delayMicroseconds(1);
  digitalWrite(TRIG,HIGH);
  delayMicroseconds(11);
  digitalWrite(TRIG,LOW);
  duration_us = pulseIn(ECHO,HIGH);
  if (duration_us > 0)  {
    distance = 0.017 * duration_us; 
    Serial.print(distance);
    Serial.println("  cm");
    if(distance > 8.4) {
      digitalWrite(LED, HIGH);
    } else {
      digitalWrite(LED, LOW);
    }
  }
}

checkBME280() – citește temperatura, umiditatea și presiunea aerului.

//BME280
void checkBME280(){
  // Get data from BME280 sensor
  float t = bme.readTemperature();       //  C
  float h = bme.readHumidity();          // %
  float p = bme.readPressure()  / 100.0F; // hPa
  Serial.print("Temperature:");
  Serial.println(t);
  Serial.print("Humidity:");
  Serial.println(h);
  Serial.print("Pressure:");
  Serial.println(p);
  Serial.println();
  lcd.setCursor(0, 0);
  lcd.print(String(t)+"C  ");
  lcd.print(String(h)+"%    ");
}

watering() – controlează udarea efectivă.

//Watering
void watering(){
  Serial.write("watering");
  digitalWrite(relay, HIGH);
  delay(2000);
  digitalWrite(relay, LOW);
  delay(8000);
  completeWatering(); 
}

completeWatering() și playMelody() – afiseaza un mesaj concomitent cu melodia si dupa determina noua valoare a umiditatii.

//Music
void completeWatering() {
  // Clear LCD and show message
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("   Thank  you!   ");
  lcd.setCursor(0, 1);
  lcd.print("   (^ O ^)/     ");
  delay(1000); // Allow LCD to complete before sound starts
  playMelody();
  // After melody, update sensor readings
  lcd.clear();
  checkBME280();
  int moisture = analogRead(A0);
  lcd.setCursor(0, 1);
  lcd.print("Moisture: " + String(moisture));
}
void playMelody() {
  tone(PIN, DO, BEAT); delay(BEAT);
  tone(PIN, RE, BEAT); delay(BEAT);
  tone(PIN, MI, 1200); delay(BEAT);
  delay(BEAT * 3);
  tone(PIN, RE, BEAT); delay(BEAT);
  tone(PIN, DO, BEAT); delay(BEAT);
  delay(BEAT);
  tone(PIN, DO, BEAT); delay(BEAT);
  tone(PIN, RE, BEAT); delay(BEAT);
  tone(PIN, MI, BEAT); delay(BEAT);
  tone(PIN, RE, BEAT); delay(BEAT);
  tone(PIN, DO, BEAT); delay(BEAT);
  tone(PIN, RE, 1200); delay(BEAT);
  delay(4400);
}
Validarea funcționării

Afișarea valorilor pe LCD confirmă funcționarea corectă a comunicației I2C.

Serial Monitor oferă loguri în timp real.

LED-ul și buzzer-ul oferă feedback fizic.

Funcții de test (test_pump, test_ultrasonic, test_buzzer) permit testare individuală a componentelor.

Distanța de 8.6 cm a fost determinata prin masurarea distatei de la nivelul minim al apei care asigura functinarea pompei si pozitia senzorului ultrasonic.

A fost nevoie sa conectez o rezistenta pe legatura catre ground a releului pentru a garanta ca pinul este initializat cu starea LOW(releul functinoeaza cu comanda HIGH). Chiar daca in cod setez valoare pinului la LOW, pana la aceasta initializare, valoare este nedefinita, timp in care pompa este pornita accidental.

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Proiectul implementat a condus la obținerea următoarelor rezultate:

Monitorizarea condițiilor de mediu: senzorul BME280 a transmis constant valori precise pentru temperatură, umiditate relativă și presiune atmosferică, afișate în timp real pe ecranul LCD.

Detecția automată a nivelului apei: senzorul ultrasonic HC-SR04 a permis măsurarea distanței până la suprafața apei din rezervor, iar LED-ul de avertizare s-a activat în momentul în care nivelul a scăzut sub o valoare prestabilită.

Irigare automată în funcție de umiditatea solului: senzorul de umiditate a solului a monitorizat valorile analogice și a declanșat automat pornirea pompei de apă prin intermediul modulului releu, evitând udarea excesivă printr-un mecanism de contorizare (5 citiri consecutive).

Feedback vizual și sonor: la finalul udării, utilizatorul a fost notificat atât vizual prin mesaj pe LCD, cât și sonor printr-o melodie redată cu ajutorul unui buzzer piezoelectric.

Funcționare stabilă și interactivă: sistemul a funcționat fără blocaje, valorile afișate au fost coerente, iar controlul releului s-a dovedit fiabil după optimizarea logicii de inițializare.

https://youtube.com/shorts/lR0l8U7UWNU

Concluzii

Proiectul propus oferă o soluție practică și eficientă pentru monitorizarea și udarea automată a plantelor, eliminând necesitatea intervenției zilnice a utilizatorului. Integrarea senzorilor și a componentelor de afișare și control a demonstrat că un sistem autonom poate gestiona corespunzător parametri esențiali precum umiditatea solului, temperatura și nivelul apei.

Proiectul este ușor de reprodus, adaptabil și scalabil. Deși gândit inițial pentru plante de apartament, arhitectura modulară a sistemului permite extinderea sa pentru aplicații mai complexe în viitor, inclusiv integrarea în aplicații de tip IoT.

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

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.

arhiva_andrei_iacob.zip

https://github.com/R3dP4ndaXD/Plant-Care-System

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/62-lcd-1602-cu-interfata-i2c-si-backlight-galben-verde.html?search_query=lcd+&results=215

Export to PDF

pm/prj2025/avaduva/andrei.iacob1009.txt · Last modified: 2025/05/29 15:32 by andrei.iacob1009
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