Table of Contents

Automatic Plant Watering System

Autor: Belibova Daniela

Grupa: 333CD

Îndrumător: Ionuț Oțelea

Introducere

Descriere generală

Componente:

  1. Senzor de Umiditate a Solului: Măsoară nivelul de umiditate din sol.
  2. Pompă de Apă: Folosită pentru a furniza apă plantelor.
  3. Modul Releu: Controlează pornirea/oprirea pompei de apă, acționat de Arduino.
  4. Speaker Piezo: Emite un semnal sonor pentru a anunța că udarea este completă.
  5. Senzor Ultrasonic: Măsoară distanța până la nivelul apei din găleată.
  6. LED Rosu: Se aprinde dacă nivelul apei din găleată este < 2 cm
  7. Arduino UNO: Controlerul central al sistemului, procesează datele de la senzori și controlează acțiunile componentelor.
  8. LCD (16×2): Afișază temperatura, umiditatea în cameră și starea umiditatea solului.
  9. Senzor BME280: Măsoară temperatura și umiditatea din încăpere.

Interacțiunea componentelor:

  1. Măsurarea și Controlul Umidității Solului:
    • Senzorul de umiditate a solului măsoară constant umiditatea solului și trimite aceste date către Arduino.
    • Când nivelul de umiditate scade sub un prag predefinit, Arduino activează pompa de apă prin intermediul modulului releu pentru a uda planta.
    • Speaker-ul piezo emite un semnal sonor pentru a anunța că udarea este completă.
  2. Monitorizarea Nivelului de Apă din Găleată:
    • Senzorul ultrasonic măsoară constant distanța până la nivelul apei din găleată și trimite aceste date către Arduino.
    • Când nivelul apei scade sub o anumită valoare (aproximativ 2 cm), Arduino aprinde LED-ul albastru pentru a avertiza că găleata este aproape goală.
  3. Afișarea Datelor pe Ecran LCD:
    • Arduino colectează datele de la senzorul BME280 și de la senzorul de umiditate al solului.
    • Aceste date sunt apoi afișate pe ecranul LCD pentru a furniza utilizatorului informații despre condițiile de mediu în care se află planta.

Arduino acționează ca centru de control, procesând datele de la senzori și luând decizii în funcție de acestea. Prin intermediul interacțiunii între componente, sistemul oferă o soluție automată și inteligentă pentru udarea și monitorizarea plantelor, asigurându-le un mediu de creștere adecvat și reducând intervenția umană necesară pentru îngrijirea lor.

Hardware Design

Lista de piese

  1. Arduino UNO
  2. Modul Releu 5V
  3. HC-SR04 Ultrasonic Sensor
  4. Breadboard
  5. BMP280 Barometric Pressure Sensor Module
  6. LCD 16×2
  7. Piezo Buzzer
  8. Red Led
  9. Resistor
  10. Modul Convertor nivel logic I2C bidirectional 8 Biti TXS0108E
  11. Modul cu senzor umiditate sol
  12. Water Pump
  13. Battery 9V

Schema Hardware

Schema Electrica

Software Design

Descrierea codului aplicaţiei (firmware)

Mediu de dezvoltare Codul aplicației este dezvoltat folosind platforma Arduino IDE, care oferă un mediu integrat pentru scrierea, compilarea și încărcarea codului pe microcontrolerele Arduino. Platforma Arduino IDE este bine adaptată pentru dezvoltarea rapidă a prototipurilor și simplifică procesul de programare prin furnizarea unei biblioteci extinse și a unui mediu de dezvoltare ușor de utilizat.

Hardware utilizat Proiectul folosește o placă Arduino Uno, care este bine potrivită pentru acest tip de aplicație datorită numărului suficient de pini de intrare/ieșire digitală și analogică, precum și datorită suportului larg din partea comunității și a documentației extinse disponibile.

Librării şi surse 3rd-party Codul folosește următoarele librării externe:

Algoritmi şi structuri implementate

Descriere pe scurt a fiecărei funcții

 void checkBMP280() {
  float temperature = bmp.readTemperature();
  float pressure = bmp.readPressure() / 100.0F;
 
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" °C");
 
  Serial.print("Pressure: ");
  Serial.print(pressure);
  Serial.println(" hPa");
 
  lcd.setCursor(0, 0);
  lcd.print(temperature);
  lcd.print("C ");
  lcd.print(pressure);
  lcd.print("hPa");
} 
 void checkWater() {
  digitalWrite(Trig, LOW);
  delayMicroseconds(1);
  digitalWrite(Trig, HIGH);
  delayMicroseconds(11);
  digitalWrite(Trig, LOW);
  Duration = pulseIn(Echo, HIGH);
 
  if (Duration > 0) {
    Distance = (Duration / 2.0);
    Distance = Distance*340*100/1000000;
 
    Serial.print("Distance: ");
    Serial.print(Distance);
    Serial.println(" cm");
 
     if (Distance > 4) {
      digitalWrite(led, HIGH);
    } else {
      digitalWrite(led, LOW);
    }
  }
} 
 void checkMoisture() {
  int moisture = analogRead(A0);
 
  if(moisture <= 300) {
    water_count++;
    if(water_count == 3) {
      watering();
      water_count = 0;
    }
  }
 
  Serial.print("Moisture Sensor Value: ");
  Serial.println(moisture);
 
  lcd.setCursor(0, 1);
  lcd.print("Moisture: ");
  lcd.print(moisture);
  lcd.print("   ");
} 
 void watering() {
  digitalWrite(relay, LOW);
  delay(3000);
  digitalWrite(relay, HIGH);
  delay(1000);
  completeWatering();
 
  counter++;
} 
 void completeWatering() {
  lcd.setCursor(0, 0);
  lcd.print("  Thank You!  ");
  lcd.setCursor(0, 1);
  lcd.print("  (^0^)/  ");
 
  tone(PIN, DO, BEAT); // C
  delay(BEAT);
  tone(PIN, RE, BEAT); // D
  delay(BEAT);
  tone(PIN, MI, 1200); // E
  delay(BEAT);
  delay(BEAT);
  delay(BEAT);
  tone(PIN, RE, BEAT); // D
  delay(BEAT);
  tone(PIN, DO, BEAT); // C
  delay(BEAT);
  delay(BEAT);
  tone(PIN, DO, BEAT); // C
  delay(BEAT);
  tone(PIN, RE, BEAT); // D
  delay(BEAT);
  tone(PIN, MI, BEAT); // E
  delay(BEAT);
  tone(PIN, RE, BEAT); // D
  delay(BEAT);
  tone(PIN, DO, BEAT); // C
  delay(BEAT);
  tone(PIN, RE, 1200); // D
  delay(BEAT);
  delay(BEAT);
  delay(4400);
 
  lcd.setCursor(0, 0);
  lcd.print("                  ");
  lcd.setCursor(0, 1);
  lcd.print("                  ");
 
  int moisture = analogRead(A0);
  lcd.setCursor(0, 1);
  lcd.print("Moisture: ");
  lcd.print(moisture);
 
} 

Explicarea calibrării elementelor de senzoristică Calibrarea senzorilor a fost realizată prin compararea citirilor senzorilor cu măsurători de referință și ajustarea codului pentru a corecta orice abateri. De exemplu, senzorul de umiditate a solului a fost calibrat prin măsurători în diferite condiții de umiditate (uscat, moderat, umed) și ajustarea pragului de declanșare a pompei de apă.

Optimizări realizate Optimizările au fost realizate prin ajustarea frecvenței de citire a senzorilor pentru a reduce consumul de energie și a preveni supraîncălzirea componentelor. De asemenea, logica de control a fost optimizată pentru a asigura răspunsuri rapide și eficiente la schimbările de condiții detectate de senzori.

Rezultate Obţinute

Sistemul automat de udare a plantelor funcționează exact cum am planificat. La fiecare secundă, verifică umiditatea solului, presiunea și temperatura aerului și afișează valorile pe LCD. Udă planta când solul este prea uscat și pornește buzzerul după udare. LED-ul se aprinde când nivelul apei este scăzut și se stinge când apa este completată. Toate aspectele funcționează conform așteptărilor, demonstrând eficiența și utilitatea sistemului.

Concluzii

Sistemul automat de udare a plantelor pe care l-am realizat este extrem de util pentru întreținerea eficientă a plantelor, asigurându-le necesarul de apă fără a necesita intervenție constantă.

Mi-a plăcut foarte mult să lucrez la acest proiect, deoarece eu personal aș folosi un astfel de sistem pentru plantele mele. Proiectul mi-a oferit ocazia să înțeleg mult mai bine conceptele învățate la laboratoare si cursuri. În plus, a fost o experiență distractivă și interesantă.

O posibilă îmbunătățire pentru viitor ar fi integrarea unei baterii solare pentru alimentarea sistemului, ceea ce ar face dispozitivul complet autonom și prietenos cu mediul. De asemenea s-ar putea opta pentru un senzor de umiditate a solului mai bun, pentru că uneori din cauza temperaturii apei sau altor factori nu indică umiditatea corectă, și astfel planta ar putea fi udată pentru prea multe ori.

Download

Jurnal

Bibliografie/Resurse

Resurse Hardware

Resurse Software

Export to PDF