Automatisches Bewässerungssystem für Topfpflanzen: Unterschied zwischen den Versionen
Zeile 272: | Zeile 272: | ||
[[Datei:6Tage_Test.png|1200px|thumb|left|Absatz|Abb. 5: Validierung des Projekts]] | [[Datei:6Tage_Test.png|1200px|thumb|left|Absatz|Abb. 5: Validierung des Projekts]] | ||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | ||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | ||
== Zusammenfassung == | == Zusammenfassung == |
Version vom 3. Januar 2021, 15:40 Uhr
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
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.
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.
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
Für die Validierung des Projekts wurde ein 6-Tage-Test durchgeführt. Das Feuchtigkeitsdiagramm hierfür ist in Abbildung ... zu erkennen:
Zusammenfassung
Lessons Learned
Projektunterlagen
Projektplan
Projektdurchführung
YouTube Video
Weblinks
Literatur
→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)