Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Industrietechnik

Automatische Pflanzenbewässerung: Schaltungsdesign, Code & Projektreport

Automatische Pflanzenbewässerung – Voller Quellcode, Schaltung & Projektreport – PDF-Download

Einführung

Tägliche Bewässerungsarbeiten sind die wichtigste kulturtechnische Praxis und die arbeitsintensivste Aufgabe. Egal ob zu heiß, kalt, trocken oder nass – die Wassermenge, die die Pflanzen erreicht, muss kontrolliert werden. Ein automatisches Pflanzenbewässerungssystem, das Pflanzen bedarfsgerecht wässert, ist daher effektiv. Ein zentraler Aspekt: „Wann und wie viel wässern“. Um manuelle Arbeit zu reduzieren, wird ein solches System eingesetzt. Es überwacht kontinuierlich die Bodenfeuchte, entscheidet, ob und wie viel Wasser benötigt wird. Das Projekt gliedert sich in Teilsysteme: Stromversorgung, Relais, Magnetventil, Arduino GSM-Shield, Bodenfeuchtesensor, LCD.

Automatische Pflanzenbewässerung: Schaltungsdesign, Code & Projektreport

Das System ist so konzipiert und programmiert, dass der Bodenfeuchtesensor zu einem bestimmten Zeitpunkt die Feuchte misst. Ist der Wert unter einem vordefinierten Schwellenwert (je nach Pflanzenbedarf), wird Wasser zugeführt, bis der Schwellenwert erreicht ist.

Das System meldet seinen Status und sendet Erinnerungen per SMS (Bewässerung, Wassertank nachfüllen) über das Arduino GSM-Shield.

Projektziel

Im Zeitalter fortschrittlicher Technologie sollte der Lebensstil smart, einfach und bequem sein. Automatisierte Systeme reduzieren tägliche Aufgaben. Die automatische Pflanzenbewässerung hilft Millionen Menschen, besonders bei Abwesenheit. Das System misst Bodenfeuchte, vergleicht mit Schwellenwert, steuert Magnetventil über Arduino. Zusätzlich überwachen Temperatur- und Feuchtesensoren die Umgebungsbedingungen. Das GSM-Shield sendet Statusmeldungen und empfängt SMS.

Automatische Pflanzenbewässerung: Schaltungsdesign, Code & Projektreport

Systemhintergrund

Pflanzen sind für die Menschheit essenziell (Sauerstoffproduktion). Automatische Bewässerungssysteme verbreiten sich durch IoT und vernetzte Objekte rasant – im privaten wie industriellen Bereich. Hauptvorteile: Effizienz und einfache Bedienung.

Pflanzenliebhaber können ihre Pflanzen auch bei Abwesenheit betreuen – durch zuverlässige Sensortechnik.

Es gibt verschiedene Arten von Zimmerpflanzen-Bewässerungssystemen, je nach Automatisierungsgrad.

Im finalen PDF-Report (kostenloser Download am Ende) werden folgende Abschnitte detailliert beschrieben:

Verwandtes Projekt: Was sind ATMega-Mikrocontroller & wie macht man ein LED-Projekt damit?

Produkt- & Komponentenspezifikationen

Anforderungs-IDSRS-GSM-001
TitelGSM-Modul
BeschreibungSystem beinhaltet GSM-Modul, sendet Alarm-SMS an Empfänger, empfängt SMS vom Benutzer.
Version1.0
Anforderungs-IDSRS-Mikrocontroller-001
TitelATmega328p
BeschreibungSystem beinhaltet Mikrocontroller (Arduino Uno). Liest Sensorwerte, steuert Gesamtsystem.
Version1.0
Anforderungs-IDSRS-TempFeuchte-001
TitelDHT11
BeschreibungSystem beinhaltet Temperatur- & Feuchtesensor, misst Umgebungswerte, sendet an Mikrocontroller.
Version1.0
Anforderungs-IDSRS-Feuchte-001
TitelGrove Bodenfeuchtesensor
BeschreibungSystem beinhaltet Bodenfeuchtesensor, misst Bodenfeuchte, sendet an Mikrocontroller.
Version1.0
Anforderungs-IDSRS-LCD-001
TitelHitachi 16×2 LCD
BeschreibungSystem beinhaltet LCD-Schnittstelle für Benutzer, zeigt Sensorwerte an.
Version1.0

Verwandter Beitrag: Arduino-Programmierung: Was ist Arduino und wie programmiert man es?

Arduino-basiertes automatisiertes Pflanzenbewässerungssystem

Blockdiagramm der automatischen Pflanzenbewässerung

Automatische Pflanzenbewässerung: Schaltungsdesign, Code & Projektreport

Schaltplan der automatischen Pflanzenbewässerung & Bewässerungssystem

Zwei funktionale Komponenten: Feuchtesensor und Motor/Wasserpumpe. Feuchtesensor misst Bodenfeuchte, Motor/Pumpe versorgt Pflanzen.

Bild anklicken zum Vergrößern
Automatische Pflanzenbewässerung: Schaltungsdesign, Code & Projektreport

Der Schaltplan beschreibt das Systemverhalten. Arduino Uno steuert Motor über H-Brücke (Drehrichtung). Feuchtesensor misst Bodenfeuchte, sendet Signal an Arduino, dieser öffnet Servomotor bei Bedarf. Motor/Pumpe versorgt Pflanzen bis gewünschter Feuchtewert erreicht.
Automatische Pflanzenbewässerung: Schaltungsdesign, Code & Projektreport

Im Prototyp misst Feuchtesensor Feuchte, sendet Signal an Arduino, dieser öffnet Wasserpumpe über H-Brücke und bewässert die Pflanze. Realisiert mit Arduino IDE.

Verwandtes Projekt: Ampelsteuerung mit IC 4017 & 555 Timer

Projektdesign

Dieser Abschnitt behandelt Software- und Hardwaredesign, Systemkomponenten und Begründung der Auswahl. Das Blockdiagramm zeigt das konzeptionelle Modell.

Automatische Pflanzenbewässerung: Schaltungsdesign, Code & Projektreport

Funktionalität des Blockdiagramms:

Weitere Komponentendetails im PDF (unten).

Verwandtes Projekt: Was ist Raspberry Pi? Projekte mit Raspberry Pi

Hardwaredesign

Sensorschaltung

Schema der Sensorschaltung. Alle Sensoren an Arduino Analogpins A0–A3. Pin A0 für Temperatur/Feuchte, A1–A3 für Feuchtesensoren. Gemeinsame 5V-Versorgung und Masse.
Automatische Pflanzenbewässerung: Schaltungsdesign, Code & Projektreport

LCD-Schaltung

Schema des LCD. Digitalpins 8–13 für LCD. Pin 1 & 3: Versorgung & Masse, Pin 2: Kontrast (Potentiometer). Wichtig: Arduino-Digitalpins und LCD-Datenpins in korrekter Reihenfolge verbinden, sonst Müllanzeige.
Automatische Pflanzenbewässerung: Schaltungsdesign, Code & Projektreport

Magnetventil-Schaltung

Schaltplan der Magnetventil-Schaltung. Digitalpins 4–7 für Magnetventile. Relais, Transistoren, Widerstände, LEDs statt Magnetventile (CadStar hat kein Magnetventil-Symbol). Relais nutzen 5V, 5V auch an NO-Kanal der Relais (LEDs arbeiten mit 5V + 220Ω Vorwiderstand).

Bei Spannung an Transistorbasis: Transistor schaltet durch → Relaisspule magnetisiert → Relais schaltet auf NC-Kanal → LED an. Spannung fällt ab → Transistor sperrt → Relaisspule entmagnetisiert → Relais schaltet zurück auf NO → LED aus.
Automatische Pflanzenbewässerung: Schaltungsdesign, Code & Projektreport

Nach Fertigstellung aller Schematics: Aufbau auf Streifenrasterplatine (Veroboard). Wichtig: Layout vorher auf Planungsbogen entwerfen (Prinzipien: Vcc/GND-Leitungen oben rechts markieren, IC-Pin-Trennungen kennzeichnen, Bauteile flach verlegen, IC-Pins nummerieren, Kupferbahnen horizontal).

Verwandtes Projekt: Vollautomatische Wasserstandssteuerung mit SRF04

Softwaredesign

Nach Hardwarefertigstellung: Test mit Software. Implementierung detailliert für jede Automatisierungstechnologie. Enthält Arduino-Code (Upload auf Arduino).

Zuerst: Magnetventil-Schaltung testen (Flussdiagramm im Software-Flow-Abschnitt). Einfaches Programm: LED blinkt jede Sekunde. Digitalpins 4–7 definiert, Initialisierung in void setup(), Blinken in void loop().

Dann: Sensorwerte auslesen & auf LCD anzeigen (Flussdiagramm im Software-Flow). In void loop() Sensoren auslesen, Berechnungen, LCD-Ausgabe.

Verwandtes Basisprojekt: Automatische Straßenlaternensteuerung mit LDR & BC547

Dann: GSM-Modul-Software hochladen. Modem-Test (Initialisierung, Bibliotheken, IMEI, Funktionstest). Netzwerkverbindungstest (GSM-Initialisierung, unterstützte Netze).

Nach GSM-Test: Kommunikation mit Empfänger (SMS senden/empfangen). Zwei Arduino-Programme: SMS senden & SMS empfangen.

Schließlich: Alle Softwaremodule zusammenführen → finales funktionierendes System. Verschiedene Algorithmen (siehe Software-Flow). Abbildung zeigt finale Software: Messung, SMS senden/empfangen, Wiederholung.

Hinweis: Alle Softwarecodes im Anhang (unten).

HINWEIS: Modem-Test- & Netzwerktest-Ausgaben nicht im Report enthalten (Report nach Hardwareabgabe erstellt).

Verwandtes Projekt: Elektrische & Elektronik-Basics in LabVIEW

Projektbau & Softwaretest

Nach erfolgreichem Hard- & Softwaredesign: Bau & Test. Details zu Implementierung, Test, Fehlerbehebung im vollständigen PDF-Report (Schritt-für-Schritt).

Softwaretest

Softwaretestphase ist wichtig. Ziel: Softwarefehler finden, Validierung & Verifikation gegen technische Anforderungen. Verschiedene Ansätze: Software Requirements Specification (SRS) dokumentiert erwartetes Systemverhalten.

Verwandtes Projekt: Klatschschalter mit 555 Timer

Anforderungs-IDSRS-Sensor-010
TitelSensor
BeschreibungSensoren nehmen Messwerte auf, senden an Mikrocontroller.
VersionV 1.0
Anforderungs-IDSRS-Daten-020
TitelDatenanzeige
BeschreibungBenutzer fordert Messwerte an → Anzeige zeigt Temperatur, Feuchte, Feuchtemesswerte.
VersionV1.0
Anforderungs-IDSRS-Mikrocontroller-030
TitelMikrocontroller
BeschreibungMikrocontroller als „Gehirn“ verwaltet alles im System.
VersionV1.0
Anforderungs-IDSRS-Latch-040
TitelLatch
BeschreibungLatch erweitert Digitalpins des Mikrocontrollers.
VersionV1.0
Anforderungs-IDSRS-GSM-050
TitelGSM
BeschreibungSystem sendet SMS-Alert an Empfänger auf Mikrocontroller-Befehl.
VersionV1.0

Nach SRS-Erstellung: Statische Testphase (Dokumentenreview). Verifikation der Anforderungen. Vier Verifikationsmethoden:

  1. Inspektion (I): Sichtprüfung
  2. Analyse (A): Analytische Nachweise
  3. Demonstration (D): Betriebseigenschaften ohne quantitative Messung
  4. Test (T): Quantitative Messung

Für jede SRS-Anforderung wird Verifikationsmethode (I, A, D, T) definiert.

Verifikation:

Anforderungs-IDAnforderungstitelMethode
REQ-010Prüfen, ob Sensoren Messwerte liefernI
REQ-020Prüfen, ob Daten auf Bildschirm angezeigt werdenD
REQ-030Prüfen, ob Mikrocontroller ordnungsgemäß arbeitet (100% Ergebnis)D
REQ-040Prüfen, ob Latch-Schaltung 3 Eingänge nimmt, 8 Ausgänge liefertA
REQ-050Prüfen, ob SMS per GSM gesendet & empfangen wirdD

Ergebnisse

Alle Tests mit zufriedenstellendem Ergebnis. Keine besonderen Dokumentationsergebnisse. System arbeitet mit Feuchte- & DHT11-Sensor (Temperatur/Feuchte), Messwerte hängen von aktueller Raumtemperatur/Feuchte und Pflanzenfeuchte ab. Gesamtfunktionalität gut.

Verwandter Beitrag: Arduino PWM-Programmierung & Funktionen

Finaler & vollständiger Softwarecode für automatische Pflanzenbewässerung & Bewässerungssysteme

Hinweis: Weitere Codes im PDF (Testcode Magnetventil, Sensortest, GSM-Modem-Test, GSM-Netzwerktest, GSM-SMS-senden, GSM-SMS-empfangen).

Finaler Auto-Bewässerung Pflanzen Projektcode

#include <dht.h>
#define dht_dpin A0
dht DHT;
//———————–
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
//———————————-
int plantPotMoisture[3] = {A1, A2, A3};
//———————
#include <GSM.h>
#define PINNUMBER ""
GSM gsmAccess;
GSM_SMS sms;
char remoteNumber[] = "0899506304";
String moistureMessage = "Moisture is Low on sensor: ";
String SMS_Alert = "Sending SMS!";
String humidityMsg = "Humidity is High. Open All Solenoids";
String tempMsg = "Temperature is too HIGH!..Open ALl Solenoids ";
String messageBuffer = "";
char senderNumber[20];
String stringOne = "Opens1";
String stringTwo = "Opens2";
String stringThree = "Opens3";
String stringFour = "OpenAll";
//—————
#define solenoidData 5
#define solenoidClockster 4
#define solenoidLatch 6
//—————
const int master = 0;
const int slave1 = 1;
const int slave2 = 2;
const int slave3 = 3;
boolean takeReadings = true;
int serialSolenoidOutput = 0;

void setup() {
  pinMode(solenoidData, OUTPUT);
  pinMode(solenoidClockster, OUTPUT);
  pinMode(solenoidLatch, OUTPUT);
  digitalWrite(solenoidLatch, HIGH);
  digitalWrite(solenoidLatch, LOW);
  shiftOut(solenoidData, solenoidClockster, MSBFIRST, 0);
  digitalWrite(solenoidLatch, HIGH);
  //————————-
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Wait Until");
  lcd.setCursor(0, 1);
  lcd.print("GSM Initialized!");
  boolean notConnected = true;
  while (notConnected) {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY) notConnected = false;
    else {
      Serial.println("Not connected");
      delay(1000);
    }
  }
}

void loop() {
  if (takeReadings) {
    moistureSensor();
    TempAndHumidity();
    if (DHT.humidity > 50 || DHT.temperature > 25 && takeReadings) {
      takeReadings = false;
      if (DHT.humidity > 50) {
        sendSMS(humidityMsg);
      } else if (DHT.temperature > 25) {
        sendSMS(tempMsg);
      }
      while (!takeReadings) recieveSMS();
    }
    if (plantPotMoisture[0] > 30 || plantPotMoisture[1] > 30 || plantPotMoisture[2] > 30 && takeReadings) {
      takeReadings = false;
      if (plantPotMoisture[0] > 30) {
        sendSMS(moistureMessage + "1");
      } else if (plantPotMoisture[1] > 30) {
        sendSMS(moistureMessage + "2");
      } else {
        sendSMS(moistureMessage + "3");
      }
      while (!takeReadings) recieveSMS();
    }
  }
}

void moistureSensor() {
  for (int i = 0; i < 3; i++) {
    lcd.clear();
    plantPotMoisture[i] = analogRead(i);
    plantPotMoisture[i] = map(plantPotMoisture[i], 550, 0, 0, 100);
    Serial.print("Moisture" + i);
    lcd.print("Moisture" + i);
    Serial.print(plantPotMoisture[i]);
    lcd.print(plantPotMoisture[i]);
    Serial.println("%");
    lcd.print("%");
    delay(1000);
  }
}

void TempAndHumidity() {
  DHT.read11(dht_dpin);
  lcd.setCursor(0, 0);
  lcd.print("Humidity=");
  Serial.print("Current humidity = ");
  Serial.print(DHT.humidity);
  lcd.print(DHT.humidity);
  lcd.print("%");
  Serial.print("%");
  Serial.print("temperature = ");
  Serial.print(DHT.temperature);
  Serial.println("C");
  lcd.setCursor(0, 1);
  lcd.print("temp=");
  lcd.print(DHT.temperature);
  lcd.print("C ");
  delay(1000);
  lcd.clear();
}

void sendSMS(String messageToSend) {
  Serial.print("Sending a message to mobile number: ");
  Serial.println(remoteNumber);
  Serial.println("SENDING");
  lcd.print(SMS_Alert);
  Serial.println();
  Serial.println("Message:");
  Serial.println(messageToSend);
  sms.beginSMS(remoteNumber);
  sms.print(messageToSend);
  sms.endSMS();
  Serial.println("\nCOMPLETE!\n");
  lcd.clear();
  lcd.print("Completed!!!");
}

void recieveSMS() {
  char c;
  if (sms.available()) {
    lcd.clear();
    lcd.print("Message received from:");
    delay(800);
    lcd.clear();
    sms.remoteNumber(senderNumber, 20);
    lcd.print(senderNumber);
    while (c = sms.read()) {
      Serial.println(c);
      messageBuffer += c;
    }
    Serial.println(messageBuffer);
    if (messageBuffer == stringOne) {
      toggleSolenoid1();
      takeReadings = true;
    } else if (messageBuffer == stringTwo) {
      toggleSolenoid2();
      takeReadings = true;
    } else if (messageBuffer == stringThree) {
      toggleSolenoid3();
      takeReadings = true;
    } else if (messageBuffer == stringFour) {
      toggleAll();
      takeReadings = true;
    } else {
      takeReadings = true;
    }
    messageBuffer = "";
    Serial.println("\nEND OF MESSAGE");
    sms.flush();
    Serial.println("MESSAGE DELETED");
  }
  delay(1000);
}

void toggleSolenoid1() {
  solenoidWrite(master, HIGH);
  delay(1000);
  solenoidWrite(slave1, HIGH);
  delay(1000);
  solenoidWrite(slave1, LOW);
  delay(1000);
  solenoidWrite(master, LOW);
  delay(1000);
}

void toggleSolenoid2() {
  solenoidWrite(master, HIGH);
  delay(1000);
  solenoidWrite(slave2, HIGH);
  delay(1000);
  solenoidWrite(slave2, LOW);
  delay(1000);
  solenoidWrite(master, LOW);
  delay(1000);
}

void toggleSolenoid3() {
  solenoidWrite(master, HIGH);
  delay(1000);
  solenoidWrite(slave3, HIGH);
  delay(1000);
  solenoidWrite(slave3, LOW);
  delay(1000);
  solenoidWrite(master, LOW);
  delay(1000);
}

void toggleAll() {
  solenoidWrite(master, HIGH);
  delay(1000);
  solenoidWrite(slave1, HIGH);
  delay(1000);
  solenoidWrite(slave2, HIGH);
  delay(1000);
  solenoidWrite(slave3, HIGH);
  delay(1000);
  solenoidWrite(slave1, LOW);
  delay(1000);
  solenoidWrite(slave2, LOW);
  delay(1000);
  solenoidWrite(slave3, LOW);
  delay(1000);
  solenoidWrite(master, LOW);
  delay(1000);
}

void solenoidWrite(int pin, bool state) {
  if (pin >= 0 && pin < 8) {
    if (state) serialSolenoidOutput |= (1 << pin);
    else serialSolenoidOutput &= ~(1 << pin);
  }
  digitalWrite(solenoidLatch, LOW);
  shiftOut(solenoidData, solenoidClockster, MSBFIRST, serialSolenoidOutput);
  digitalWrite(solenoidLatch, HIGH);
}

Vollständiger Projektreport Automatische Pflanzenbewässerung (PDF) Kostenloser Download

Verwandter Beitrag: PCB-Design Schritt für Schritt & bildlich

Über den Autor

-Department of Engineering, School of Informatics & Engineering, Institute of Technology, Blanchardstown, Dublin 15

Industrietechnik

  1. Häufige Ausfallmodi in bewährten elektrischen Systemen
  2. PIR-Sensor gesteuertes automatisches Türöffnungssystem: Schaltung, Funktionsweise & Anwendungen
  3. SERENA: Eigenes Arduino Mega 2560 Alarmsystem mit TFT-LCD-Touchscreen
  4. Automatische Pflanzenbewässerung mit Arduino – Sorgenfrei in den Urlaub
  5. Smart-Home Pflanzenbewässerungssystem mit Arduino Nano
  6. Intelligentes Arduino-gesteuertes automatisches Bewässerungssystem
  7. Erfolgreiche Steuerungssystem-Migration: Expertenstrategien für einen nahtlosen Übergang
  8. Die häufigsten Elektro-Code-Verstöße, die Sie für Ihre Sicherheit vermeiden müssen
  9. Automatikgetriebe: Umfassender Leitfaden zu Aufbau, Typen & Funktion
  10. Automatische Zentralschmieranlagen: Funktionsweise, Typen & Nutzen