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.
Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html
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.
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) |
• 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 |
• 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 |
• 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
• Type: Solderless prototyping board
• Size: 830 tie-points
• Common Value: 330Ω
• Power Rating: 0.25W (1/4W)
• Tolerance: ±5%
Function: Current limiting for components like LEDs
• Types: Male-to-male, male-to-female, female-to-female
• Lengths: Typically 10–30 cm
Functie: stabilire conexiuni intre componente
• 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 |
• 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 |
• Value: 330 ohms
• Power Rating: 0.25W (1/4W)
• Tolerance: ±5%
Function: limiteaza curentul pentru a proteja LED-ul
• 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) |
• 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
• Type: AA
• Voltage: 1,5V
Functie: alimentare pompa
• 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 |
Mediul de dezvotare este ArduinoIDE.
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.
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
Utilizarea unui difuzor pentru oferirea de feedback sonor utilizatorului.
Detectarea nivelului apei din rezervor prin senzorul ultrasonic.
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); }
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.
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.
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.
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.