Automatisches Bewässerungssystem für Topfpflanzen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Autoren: Marcel Lawniczak, Jonas Koppmeier
Betreuer: Prof. Göbel


→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)


Einleitung

Das Automatische Bewässerungssystem für Topfpflanzen wird als Feuchtigkeitsregelkreis realisiert und sorgt dafür, dass Topfpflanzen nicht mehr auf dem Trockenen sitzen. Das eingebaute Hygrometer erkennt den Feuchtestand des Bodens. Sobald die Feuchtigkeit unter einen definierten Wert absinkt, wird dies von einem Mikrocontroller erkannt und es wird ein Signal an die Wasserpumpe übermittelt. Die Wasserpumpe fördert eine definierte Menge an Wasser aus einem externen Wasserbehälter zur Topfpflanze. Die abgegebene Wassermenge kann manuell in 3 Stufen über Taster eingestellt werden. Größere Pflanzen haben größere Töpfe und benötige i.d.R. größere Wassermengen als kleinere Pflanzen. Über die Taster kann der Regelkreis an jede Topfpflanze angepasst werden. Damit stets die korrekten Mengen an Wasser durch die Wasserpumpe bereitgestellt wird, fließt das Wasser durch einen Durchflusssensor. Ein laufender Vergleich zwischen dem eingestellten Soll-Wert der Wassermenge und dem ermittelten Ist-Wert durch den Durchflusssensor stoppt die Wasserpumpe sobald der Soll-Wert erreicht ist. Da sich das Wasser im Boden langsam verteilt und damit die Feuchtigkeit im Boden nicht schlagartig steigt, wird eine neue Feuchtigkeitsmessung mit einer zeitlichen Verzögerung zum letzten Zeitpunkt der Wasserförderungen durchgeführt.

Anforderungen

  • Feuchtigkeitsregelkreis
  • Geeignete Topfpflanze
  • Stromversorgung über Batterie
  • Kapazitiver Feuchtigkeitssensor zur genauen Beobachtung des Feuchtigkeitsgrades
  • Arduino UNO R3 Mikrocontroller
  • Tasten zur Stufenauswahl der Wasserabgabemenge
  • Verschiedenfarbige LEDs zur Erkennung der eingestellten Wasserabgabemenge
  • Geschlossener, transparenter Wasserbehälter mit einer Kapazität von 1 Liter
  • Schläuche zur Wasserbeförderung mit 9mm-Durchmesser
  • Wasserpumpe mit einer maximalen Durchlaufgeschwindigkeit von einem Liter pro Minute
  • Durchflusssensor mit einer Genauigkeit auf einem Milliliter genau
  • Funktionsnachweis durch einen 3-Tage-Test mittels Beobachtung und Auswertung der in diesem Zeitraum gesammelten Daten

Funktionaler Systementwurf/Technischer Systementwurf



Abb. 1: Funktionaler Systementwurf
































Abb. 2: Programmablaufplan















































Abb. 3: Regelkreis des Bewässerungssystems





























Komponentenspezifikation


Die Komponentenspezifikation beinhaltet die Komponenten, welche einen direkten Signalfluss aufweisen. Widerstände und Transistoren zur Signaländerung werden hierbei nicht berücksichtigt und in der späteren Hardwareumsetzung aufgeführt.

Komponente: Eingänge: Ausgänge: ID: Aufgabe:
Arduino Uno R3 Spannungssignale der Messsensoren Steuerung der Pumpe und der Wassermengenanzeige 1.1 Messung der Bodenfeuchtigkeit mit genauer Abgabe einer festgelegten Wassermenge
Kapazitiver Feuchtesensor Spannungssignal vom Arduino Uno R3 Bodenfeuchtigkeitswert als analoges Spannungssignal 1.2 Messung der Bodenfeuchtigkeit in Prozent
6-12V Gleichstrom-Wasserpumpe Spannungssignal vom Arduino Uno R3 Wasserbeförderung 1.3 Beförderung der benötigten Menge an Wasser an die Topfpflanze
Durchflusssensor Spannungssignal vom Arduino Uno R3 Digitales Signal des Durchflusses 1.4 Für bestimmte Wassermengen werden Spannungsimpulse zur Umrechnung an den Mikrocontroller abgegeben
RGB LED Analoges Spannungssignal vom Arduino Uno R3 Lichtausgabe zur Wassermengenerkennung 1.5 Je nach ausgewählter Wassermenge wird ein anderer Farbton des Lichts ausgegeben
Taster Analoges Spannungssignal vom Arduino Uno R3 Wassermengenauswahl 1.5 Mittels drei Taster kann die gewünschte Wassermenge zur Versorgung der Pflanze ausgewählt werden

Umsetzung (Hardware / Software)


Hardware

Kommen wir in diesem Kapitel zunächst zu der Hardware- und Softwareumsetzung des Projekts, wobei wir vorab einen Blick auf die Hardwareausführung werfen werden. In der Abbildung 3 sind die bereits die einzelnen Komponenten der Komponentenspezifikation mit Beschriftung abgebildet, wobei das komplette System über den Arduino Uno R3 gesteuert wird. Die Sensoren zur Feuchtigkeits- und Durchflussermittlung wurden dabei einfach über die Spannungsausgänge und der Erdung verbunden (Feuchtigkeitssensor 3,3V / Durchflusssensor 5V). Zur Signalübertragung wurden hierbei für den Durchflusssensor der digitale Eingang 2 und für den kapazitiven Feuchtigkeitssensor der analoge Eingang A5 verwendet. Die einzelnen Komponenten der RGB LED, welche aus rotem, grünen und blauem Licht besteht, um das gesamte Farbspektrum anzeigen lassen zu können, werden über digitale Pins des Arduino angesteuert. Hierbei werden jeweils 220Ohm Widerstände vor die Pins geschaltet um die Ausgabespannung auszugleichen. Weitere Komponenten des Systems sind die Taster, welche über digitale Input-Pins ausgelesen werden. Hierfür werden die einzelnen Taster mit 220Ohm Widerständen in Reihe geschaltet und mit dem 5V Anschluss an der Widerstandsseite und dem Groundanschluss an der Tasterseite verbunden. Zwischen der Reihenschaltung werden nun die Input-Pins angebracht, um aufgrund des Spannungsteilers zu messen, auf welcher Seite die Spannung abfällt und damit auch, ob die Taster gedrückt sind oder nicht. Die letzte Komponente ist die Pumpe, welche jedoch aufgrund der Eigenschaften eine externe Stromversorgung benötigt. Diese wird im nächsten Unterkapitel behandelt.

Abb. 3: Anschlussplan des Bewässerungssystems

























Stromversorgung

Da es sich bei der Wasserpumpe um eine 6-12V Gleichstrom-Wasserpumpe handelt, wird diese über eine Externe Stromversorgung durch eine 9V-Batterie betrieben. Da diese jedoch nicht dauerhaft laufen soll, wurde hier noch ein elektronischer Schalter benötigt, welcher durch einen Mosfet IRLIZ 44N realisiert wurde. Dieser wurde bereits in Versuch 1 des Praktikums zu den Grundlagen der Elektrotechnik zur Operationsverstärkung verwendet. Eine andere Möglichkeit der Schaltung, wäre über ein Relais möglich gewesen. Zur Durchführung der Verstärkerschaltung mittels Mosfets werden neben dem Mosfet und der Pumpe noch zwei Widerstände mit den Werten 100 Kiloohm und 10 Ohm, sowie eine Zenerdiode verwendet. Die Widerstände werden benötigt um die richtige Gate-Spannung auf dem Mosfet zur Schaltung zu erzeugen. Die Zener-Diode dient dabei für die Pumpe als Freilaufdiode. Diese sorgt dafür, dass die von den Pumpenspulen induzierten Spannungen wieder abfließen können und die Pumpe damit genauer zu steuern ist.

Abb. 4: Verstärkerschaltung der Pumpe





















Die restlichen Komponenten werden über die Spannung des Arduino Uno R3 betrieben. Dieser nutzt für die Stromversorgung einen USB-Anschluss, kann jedoch auch über eine 9V-Batterie versorgt werden. Für den 7-Tage-Funktionalitätstest wird der USB-Anschluss verwendet, da nebenbei noch Daten zum Feuchtigkeitsverlauf in den verwendeten Laptop eingelesen werden müssen.


Software

Die folgende Software für das Projekt wurde über das Programm Arduino IDE entwickelt:


Definition der Pins und einzelnen Variablen

#define Taster1 3
#define Taster2 4
#define Taster3 5
#define Feuchte A5
#define Pumpe 13
#define LEDrot 10
#define LEDgruen 9
#define LEDblau 8
int Flow = 2; //Steckplatz für Flusssensor
unsigned int Wassermenge;
int Puls = 0;
double Milliliter;
double FeuchtePro;
int FeuchteAbz;
unsigned int oldButtonState;
unsigned long Zeit;
unsigned int d = 1;
int Pump;
unsigned long Zeitschritt;

Starten des Setups mit Zeitmessung und Festlegen von Output-Pins


void setup() {
Serial.begin(9600); 
pinMode(13,OUTPUT);               //Mosfet Gate als Output wählen, um Gate-Spannung zu erreichen
}

Starten des Loops mit Definition der Zeitvariable

void loop() {
  Zeit=millis();                  //Messung der Zeit
 if(Pumpe==LOW){                  //Definiton der geflossenen Milliliter
  Milliliter=0;
 }

Messung der Feuchtigkeit in Intervallen von 15 Minuten

 Zeitschritt = d*900000;          //Anzahl der Auslesungen am Feuchtesensor multipliziert mit dem Messintervall
if( Zeit > Zeitschritt){          //alle 15 Minuten messen
  d++;                            //Anzahl der Auslesungen am Feuchtesensor
  int FeuchteAn = analogRead(Feuchte);
FeuchteAbz = 597-FeuchteAn;       //nach Kalibrierung mit 597 als 0% und 249 als 100% Feuchtigkeit
  FeuchtePro = 0.28735 * FeuchteAbz;
  Serial.print("Zeit in ms: ");   //Ausgabe der Zeit- und Feuchtigkeitswerte
  Serial.println(Zeit);
  Serial.print("Feuchtigkeit in Prozent: ");
  Serial.println(FeuchtePro);

Falls der Feuchtigkeitswert unter der Feuchtegrenze liegt, wird die Pumpe eingeschaltet

  if(FeuchtePro < 60){            //60% untere Feuchtegrenze
  Pump = 1;
  }
}
if(Pump > 0.5){
  digitalWrite(Pumpe,HIGH);
}

Messung der durchgeflossenen Wassermenge nach einschalten der Pumpe mittels Durhflusssensor

if(Pump == 1){
boolean buttonState = digitalRead(Flow);
if ( buttonState != oldButtonState ) {
   // Wechsel erkannt
   oldButtonState = buttonState;
   delay(10); // Entprellen
   if (buttonState == HIGH) {  
      Puls++;                     //Erhöhung mit jedem Impuls
      Milliliter = Puls*1.4;      //Tatsächliche Wasserabgabe nach Kalibrierung des Durchflusssensors
      Serial.println(Milliliter);
   }
}
}

Bedingung zum Ausstellen der Pumpe: abgegebene Wassermenge ist größer als die eingestellte Wassermenge

  if(Milliliter > Wassermenge){   //Abbrechbedingung für die Pumpe
    digitalWrite(Pumpe,LOW);
    Puls=0;                       //Zurücksetzen der Werte
    Milliliter=0;
    Pump=0;
  }

Festlegen der Wasserabgabemengen mittels Tastendruck

  if(digitalRead(Taster1)==LOW){  //Festlegen der Wasserabgabemenge: Taster 1 = 300ml
    Wassermenge=300;
    Serial.print("Wassermenge = ");
    Serial.print(Wassermenge);
    Serial.println(" ml");
    delay(1000);
  }
  if(digitalRead(Taster2)==LOW){  //Festlegen der Wasserabgabemenge: Taster 2 = 200ml
    Wassermenge=200;
    Serial.print("Wassermenge = ");
    Serial.print(Wassermenge);
    Serial.println(" ml");
    delay(1000);
  }
  if(digitalRead(Taster3)==LOW){  //Festlegen der Wasserabgabemenge: Taster 3 = 100ml
    Wassermenge=100;
    Serial.print("Wassermenge = ");
    Serial.print(Wassermenge);
    Serial.println(" ml");
    delay(1000);
  }

Anzeige der eingestellten Wassermenge über unterschiedliche Farbtöne der RBG-LED

  if(Wassermenge==300){           //Setzen der RGB nach Wasserabgabemenge: 300ml = blau
    digitalWrite(LEDblau,HIGH);
    digitalWrite(LEDgruen,LOW);
    digitalWrite(LEDrot,LOW);
  }
  if(Wassermenge==200){           //Setzen der RGB nach Wasserabgabemenge: 200ml = grün
    digitalWrite(LEDblau,LOW);
    digitalWrite(LEDgruen,HIGH);
    digitalWrite(LEDrot,LOW);
  }
  if(Wassermenge==100){           //Setzen der RGB nach Wasserabgabemenge: 100ml = rot
    digitalWrite(LEDblau,LOW);
    digitalWrite(LEDgruen,LOW);
    digitalWrite(LEDrot,HIGH);
  }
}


Unter Betrachtung des Programmaufbaus "Messung der Feuchtigkeit" ist zu erkennen, dass das System nach 15 Minuten (900000 ms) eine Abfrage nach dem Feuchtigkeitswert durchführt. Der analoge Wert muss nun nach Kalibrierungsfaktoren umgerechnet werden. Diese wurden gewonnen, indem der kapazitive Feuchtigkeitssensor einerseits an der Luft mit 0% Feuchtigkeit (Analog als 249) und in Wasser eingetaucht mit 100% Feuchtigkeit (Analog als 597) vermessen wurde. Die analogen Werte können nun als obere und untere Grenze verwendet und mittels linearer Interpolation die Feuchtigkeitswerte abgeschätzt werden, wobei hier aus dem Datenblatt des Sensors ein ungefährer linearer Verlauf verifiziert werden musste. Anschließend wird der Feuchtewert mit dem festgelegten unterem Feuchtewert verglichen und bei Unterschreitung des festgelegten Wertes die Pumpe eingeschaltet. Der Durchflusssensor misst nun mittels Hall-Effekt die durchflossene Wassermenge und gibt anhand dessen Impulse an den Arduino wieder. Dieser ist jedoch sehr empfindlich unter Betrachtung der Ausrichtung, weswegen bei jeder Änderung der Position eine Neukalibrierung erforderlich ist. Wenn nun die vorab durch Tastendruck eingestellte Wassermenge erreicht wurde, schaltet sich die Pumpe ab. Nun wird die Feuchtigkeit nach 15 Minuten wieder gemessen, da die Erde die Feuchtigkeit nicht sofort aufnimmt. Zur besseren Erkennung der eingestellten Wassermenge wurde die RGB-LED verbaut, welche im Abschnitt "Anzeige der eingestellten Wassermenge über unterschiedliche Farbtöne der RBG-LED" bei den unterschiedlichen Wassermengen unterschiedliche Farbtöne annimmt. Durch die drei unterschiedlichen Wassermengen, kann der Wasserbedarf an unterschiedliche Pflanzengrößen angepasst werden.

Komponententest


Zum Testen des Systems wurden folgende Tests durchgeführt:

Test: ID: Eingänge: Erwartetes Ergebnis: Tatsächliches Ergebnis: Fazit:
Wassermenge einstellen (Taste 1) 1.1 Spannungssignal Geförderte Wassermenge: 300ml Tatsächlich geförderte Wassermenge: ca. 300ml Erwartetes und Tatsächliches Ergebnis stimmen überein
Wassermenge einstellen (Taste 2) 1.2 Spannungssignal Geförderte Wassermenge: 200ml Tatsächlich geförderte Wassermenge: ca. 200ml Erwartetes und Tatsächliches Ergebnis stimmen überein
Wassermenge einstellen (Taste 3) 1.3 Spannungssignal Geförderte Wassermenge: 100ml Tatsächlich geförderte Wassermenge: ca. 100ml Erwartetes und Tatsächliches Ergebnis stimmen überein
Farbton der RGB-LED (Taste 1) 2.1 Spannungssignal in RGB-LED Emittiertes Licht: Blau Emittiertes Licht: Blau Erwartetes und Tatsächliches Ergebnis stimmen überein
Farbton der RGB-LED (Taste 2) 2.2 Spannungssignal in RGB-LED Emittiertes Licht: Grün Emittiertes Licht: Grün Erwartetes und Tatsächliches Ergebnis stimmen überein
Farbton der RGB-LED (Taste 3) 2.3 Spannungssignal in RGB-LED Emittiertes Licht: Rot Emittiertes Licht: Rot Erwartetes und Tatsächliches Ergebnis stimmen überein
Messen der Wasserdurchflussmenge 3 Spannungssignal (Durchflusssensor an Arduino) Gemessene Wassermenge: 100ml Tatsächlich Wassermenge: ca. 100ml Erwartetes und Tatsächliches Ergebnis stimmen überein
Messen der Feuchtigkeit in Prozent 4 Spannungssignal (Durchflusssensor an Arduino) gemessen an Luft und in Wasser Luft: 0% ; in Wasser: 100% Luft: 0,29% ; in Wasser: 99,87% Erwartetes und Tatsächliches Ergebnis stimmen überein

Ergebnis

Zusammenfassung

Lessons Learned

Projektunterlagen

Projektplan


Abb. 3: Projektplan



























Projektdurchführung

YouTube Video

Weblinks

Literatur


→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)