Regelung der Wasserzufuhr für Haus- und Nutzpflanzen
Autoren: Marvin Stute, Nils Betten
→ zurück zur Übersicht: WS2023: Angewandte Elektrotechnik (BSE)
Einleitung
Im Rahmen des Praktikums "Angewandte Elektrotechnik" im Studiengang "Business and Systems Engineering" ist dieses Projekt entstanden.
Im Rahmen dieses Projektes soll ein Gerät entworfen und realisiert werden, welche es ermöglicht, automatisch Haus- und/oder Nutzpflanzen zu wässern. Um diese verschiedenen Anforderungen abzudecken muss das System in verschiedenen Konfigurationen funktionieren und je nach gewählter Einstellung verschiedene Bewässerungsprofile für verschiedene Pflanzenarten und Einsatzzwecke nutzen können.
Das System soll ebenfalls in der Lage sein, stehendes Wasser, also Wasser was nicht mehr vom Substrat im Topf absorbiert werden kann da dies gesättigt ist, bei entsprechender Möglichkeit am Behälter abzulassen.
Zur Entwicklung wird das V-Modell eingesetzt um sicherzugehen, dass das System hinterher hinreichend getestet wurde und es zu keinen Unfällen oder überwässerten Pflanzen kommt.
Während bisherige Projekte wie beispielsweise Smarter_Kräutergarten sich auf die Versorgung von kleinen Kräuterpflanzen fokussiert haben, ist dieses Projekt auf größere Zimmerpflanzen ausgerichtet. Die Projekte sind zwar vergleichbar, die Anforderungen für diese Art von Pflanze jedoch grundsätzlich verschieden. Da Zimmerpflanzen in deutlich größeren Töpfen wachsen, kann sich bei zu häufigem Gießen Wasser anstauen, was zu einem Verschimmeln der Wurzeln führen kann. Deswegen muss die Feuchtigkeit an verschiedenen Stellen des Topfs gemessen werden und zusätzlich zur Versorgung mit Wasser muss das Ablassen von stehendem Wasser möglich sein. Somit wird ein Regler benötigt, der die Feuchtigkeit im Topf auf einem möglichst konstanten Level hält. Die Zimmerpflanzen haben außerdem einen deutlich höheren Wasserbedarf, sodass ein großer Wassertank notwendig ist.
Anforderungen
Anforderungen
ID | Inhalt | Ersteller | Datum | Geprüft von | Datum |
---|---|---|---|---|---|
1.0 | Die Feuchtigkeit im Blumentopf muss durch den Arduino, die Sensoren und die Aktuatoren auf einem konstanten, einstellbaren Level gehalten werden. Die Feuchtigkeit muss mit einer Genauigkeit von +/-15% eingehalten werden. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
2.0 | Um verschiedene Pflanzen versorgen zu können muss der Nutzer in der Lage sein, zwischen verschiedenen Bewässerungsmodi zu wählen. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
2.1 | Mindestens zwei verschiedene Bewässerungsprofile müssen im finalen Projekt implementiert sein, die Möglichkeit, sowohl Hard- als auch Software für mehr zu erweitern muss gegeben sein. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
3.0 | Zwei Feuchtigkeitssensoren messen unabhängig voneinander die Feuchtigkeit an zwei verschiedenen Positionen des Topfs. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
4.0 | Eine Pumpe wird zur Förderung des Wassers aus einem Reservoir zum Blumentopf eingesetzt. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
4.1 | Die Förderhöhe der verwendeten Pumpe muss mindestens 150cm betragen. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
5.0 | Falls am Behälter der Pflanze möglich kann ein motorisiertes Ventil verwendet werden, um überschüssiges Wasser in den Untertopf oder einen Abwasserbehälter abzuführen. Diese Funktion kann nur nicht absorbiertes Wasser ablassen. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
6.0 | Der Sollwert wird in der Software für die einzelnen Bewässerungsprogramme hinterlegt. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
6.1 | Der Sollwert wird mit dem/den (mittleren) Messwert(en) des/der Feuchtigkeitssensor(en) verglichen, um die Abweichung vom Sollwert zu ermitteln. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
6.2 | Bei erkanntem zu niedrigem Feuchtigkeitsgehalt im Substrat wird über einen Regler die Pumpe angesteuert, um den Feuchtigkeitsgehalt des Substrates anzuheben. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
6.3 | Bei Erkennung von stehendem Wasser wird gegebenenfalls über das motorisierte Ventil überschüssiges Wasser abgelassen. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
7.0 | Pumpe und Motor müssen als gemeinsam funktionierende Einheit als Strecke fungieren. | Marvin Stute | 04.10.2023 | Nils Betten | 04.10.2023 |
8.0 | Das System gibt einen Warnton aus, wenn der Füllstand des Tanks unter einen kritischen Wert fällt. | Nils Betten | 04.10.2023 | Marvin Stute | 04.10.2023 |
8.1 | Der Wert wird durch einen Füllstandssensor definiert, welcher unter einem gewissen Füllstand keinen Wasserkontakt mehr hat. | Nils Betten | 04.10.2023 | Marvin Stute | 04.10.2023 |
Bill of materials (BOM)
Anzahl | Komponente | Preis | Link | Bestelldatum |
---|---|---|---|---|
4 | Feuchtigkeitssensor | 1,31€ | Funduino | 09.11.2023 |
1 | Arduino Uno | 15,90€ | Funduino | bereits vorhanden |
2 | Wasserpumpe | 3,21€ | Funduino | 09.11.2023 |
2 | Wasserventil (Nicht final) | 6,18€ | Funduino | nicht lieferbar zu Bestellzeitpunkt |
1 | Piezospeaker | 0,90€ | Funduino | bereits vorhanden |
Funktionaler Systementwurf / Technischer Systementwurf
Funktionaler Systementwurf
Auf funktionaler Ebene wurde das System nach Komponenten aufgeteilt.
1. Sollwert: Aufgabe dieser Komponente ist es den entsprechenden Sollwert zu ermitteln, den das System aktuell ansteuern soll.
2. Regler: Aufgabe dieser Komponente ist es, aus dem Regelfehler ein PWM-Signal zu erstellen, mit dem die Strecke geregelt werden kann.
3. Aktor: Aufgabe dieser Komponente ist es, mithilfe des PWM-Signals auf die Strecke zu wirken und somit die Feuchtigkeit tatsächlich umzusetzen.
4. Messung: Aufgabe dieser Komponente ist es, die tatsächliche Feuchtigkeit zu messen und als Digitalwort an die Software weiterzugeben.
Technischer Systementwurf
Komponentenspezifikation
Die Komponentenspezifikation beschreibt detailliert die einzelnen Komponenten des Projekts, alle Ein- und Ausgänge sowie alle Parameter, die verwendet werden. Außerdem werden die Spezifikationen der Komponenten in einer Tabelle festgehalten, anhand welcher die Implementierung erfolgen soll.
Durch [Ausklappen] der einzelnen Komponenten werden die detaillierten Beschreibungen tabellarisch dargestellt.
Sollwertgeber
In dieser Komponente wird die aktuelle Position des Buttons eingelesen und dem entsprechenden Sollwert des Regelkreises zugeordnet. Als Hardware kommt hier zur Demonstration nur ein Jumperkabel zum Einsatz, da der Schalter kurz vor der Demo kaputt ging. Diese kann entweder in GND gesteckt werden, um dem Digital Input Pin der Arduino ein LOW-Signal zu übermitteln oder in VCC gesteckt werden, um dem digitalen Pin ein HIGH-Signal zu übermitteln. Das Kabel muss dabei manuell umgesteckt werden. So kann der Nutzer den Sollwert, den der Regler ansteuern soll manuell beeinflussen und zwischen einer hohen Soll-Feuchtigkeit im Substrat für Pflanzen mit hohem Wasserbedarf und einer niedrigen Soll-Feuchtigkeit im Substrat für Pflanzen mit niedrigem Sollwert wechseln. Sobald der neue Kippschalter geliefert und verbaut ist wird der Workaround per Kabel entfernt.
Ausgänge
Ausgänge | Beschreibung | Einheit |
Feuchtigkeit_soll | Ermittelter Sollwert basierend auf dem Buttonzustand | Digitalwort |
Parameter
Parameter | Beschreibung | Einheit | Wert |
Zustand_Button | Ausgelesener Zustand des installierten Buttons | - | [0 1] |
Sollwert | Standardmäßiger Feuchtigkeitswert, der vom Regler erreicht werden soll | - | 680 |
Spezifikationen
ID | Kapitel | Inhalt | Ersteller | Datum |
1 | Rahmenbedingungen | Nils Betten & Marvin Stute | 13.10.2023 | |
111 | Das Auslesen des Button-Werts erfolgt über einen Digital Read Block in Simulink | Nils Betten & Marvin Stute | 13.10.2023 | |
112 | Der Sollwert muss als Digitalwort ausgegeben werden | Nils Betten & Marvin Stute | 13.10.2023 | |
113 | Die Höhe des vorgegebenen Digitalworts entspricht optimalen Messwerten für Pflanzen mit hohem bzw. niedrigem Wasserbedarf | Nils Betten & Marvin Stute | 13.10.2023 |
Regler
In dieser Komponente wird die ermittelte Abweichung von dem Sollwert über einen Regler in ein PWM-Signal umgewandelt, mit dem der Arduino und somit auch die Pumpe angesteuert wird. Die Reglung selbst findet vollständig auf dem Arduino statt, sodass hier keine zusätzliche Hardware notwendig ist.
Eingänge
Eingänge | Beschreibung | Einheit |
e | Vom Sollwert abweichende, ermittelte Regelabweichung | Digitalwort |
Ausgänge
Ausgänge | Beschreibung | Einheit |
PWM | PWM-Ausgabe an den digitalen Arduino Pin | - |
Parameter
Parameter | Beschreibung | Einheit | Wert |
Zustand_Button | Ausgelesener Zustand des installierten Buttons | - | [-1 0 1] |
Spezifikationen
ID | Kapitel | Inhalt | Ersteller | Datum |
1 | Rahmenbedingungen | Nils Betten & Marvin Stute | 13.10.2023 | |
211 | Der Regler darf nicht zu stark oscillieren da sonst ein ordnungsgemäßes funktionieren der Pumpe nicht mehr sichergestellt werden kann. | Nils Betten & Marvin Stute | 13.10.2023 | |
212 | Der PWM-Wert muss auf die Maximal bzw. Minimal mögliche Größe beschränkt werden, die der Arduino Pin verarbeiten kann. | Nils Betten & Marvin Stute | 13.10.2023 | |
2 | Berechnung | Nils Betten & Marvin Stute | 13.10.2023 | |
221 | Für die Ermittlung des Reglers wird die Strecke mit einem Sprung angeregt und die gemessene Antwort ausgewertet. | Nils Betten & Marvin Stute | 13.10.2023 | |
222 | Die stationäre Abweichung des Reglers muss minimiert werden. | Nils Betten & Marvin Stute | 13.10.2023 | |
223 | Für den Test wird eine simulierte Strecke aufgebaut, mithilfe derer die Regelparameter eingestellt werden können. | Nils Betten & Marvin Stute | 13.10.23 |
Aktor
In dieser Komponente wird das über den Regler ermittelte PWM-Signal an den Arduino Pin weitergegeben. Als Hardware werden für diesen Schritt auf der einen Seite ein Relais benötigt und auf der anderen Seite eine Pumpe. Das Relais ist notwendig, da die Pumpen mit einer Versorgungsspannung von 12V versorgt werden müssen. Dies überschreitet die maximal 5V die der Arduino als Aussgangsspannung ausgeben kann. Die Relais fungieren dann als eine Art elektronischer Schalter, mit dem die externe Versorgungsspannung von 12V für die Pumpen ein und ausgeschaltet werden kann. Ein Relais besteht aus einer Spule mit einem Eisenkern. Fließen die 5V Versorgungsspannung des Arduino durch die Spule, wird ein elektrisches Magnetfeld aufgebaut und der am anderen Ende der Spule angebrachte "Anker" wird angezogen. Durch das Anziehen des Ankers werden zwei Kontakfedern miteinander verbunden und es schließen sich die "Arbeitskontakte" im Relais. So kann nun die externe Versorgungsspannung von 12V zu den Pumpen fließen. [1] Vorteil der Relais ist ihr kostengünstiger und verhältnismäßig einfacher Aufbau. Nachteil ist allerdings, dass durch die physische Architektur ein zu schnelles Umschalten des Relais zu einem Bauteilversagen führen kann. Als Pumpe wurde sich für eine "R385" Membranpumpe entschieden. Diese besteht aus zwei flexiblen Membranen, die sich hin -& herbewegen und so Flüssigkeit durch die Pumpe entweder ansaugen oder abstoßen. Die Membranen sind mit einer Welle mit einem Luftventil im mittleren Bereich der Pumpe verbunden. Das Luftventil leitet Druckluft auf die Rückseite der ersten Membran, wodurch diese sich vom Mittelteil wegbewegt und einen Druckhub auslöst, der Flüssigkeit aus der Pumpe pumpt. Durch die Welle löst diese Bewegung weg vom Mittelteil bei der zweiten Membran eine Bewegung zum Mittelteil aus. So wird Flüssigkeit am Kugelventil vorbei in die Pumpe befördert. Eine Wechselwirkung von Pumphub und Druckhub ermöglicht die Funktionalität der Pumpe. [2]. Die hier verwendete Pumpe hat eine maximale Durchflussmenge von 1-3L/min, eine maximale Pumphöhe von 3m und eine maximale Saughöhe von 2m. Da diese Durchflussmenge zu groß ist, wurde sich entschlossen, den eigentlich 6-9mm breiten Ein-& Auslass weiter zu verkleinern. Die Pumpe hat eine Lebensdauer von ca. 2500h. [3]
Eingänge
Ausgänge | Beschreibung | Einheit |
PWM | PWM-Ausgabe an den digitalen Arduino Pin | - |
Spezifikationen
ID | Kapitel | Inhalt | Ersteller | Datum |
1 | Rahmenbedingungen | Nils Betten & Marvin Stute | 13.10.2023 | |
311 | Das PWM-Signal des Reglers wird an einen PWM-fähigen Arduino Pin ausgegeben, der über ein Relay die Pumpe ansteuert | Nils Betten & Marvin Stute | 13.10.2023 |
Messung
In dieser Komponente wird über einen Feuchtigkeitssensor die aktuelle Feuchtigkeit im Pflanzentopf ausgelesen und an den Regelkreis weitergegeben. Als Hardware ist ein Feuchtigkeitssensor notwendig. Hier wurde sich für die Verwendung eines Funduino Feuchtigkeitssensors entschieden. Dieser funktioniert im Prinzip als eine Art variabler Widerstand. Der gabelförmige Sensor mit zwei freien Leitern wird dabei in das Substrat eingeführt. Je mehr Wasser dabei im Substrat ist, desto besser wird die Leitfähigkeit zwischen den beiden Leitern und je geringer wird der Widerstand. Wird das Substrat trockener sinkt die Leitfähigkeit und der Widerstand steigt. [4]. Das Messergebnis wird dann als analoge Spannung an den Arduino übermittelt, der sie über einen A/D-Wandler als Digitalwort zwischen 0-800 am analogen Eingang ausliest.[5]
Ausgänge
Ausgänge | Beschreibung | Einheit |
Feuchtigkeit_mess | (keine) | [0-1023] |
Spezifikationen
ID | Kapitel | Inhalt | Ersteller | Datum |
1 | Rahmenbedingungen | Nils Betten & Marvin Stute | 13.10.2023 | |
311 | Die gemessene Feuchtigkeit wird über einen Feuchtigkeitssensor eingelesen und als tatsächliche Feuchtigkeit in den Regelkreis gespeist. | Nils Betten & Marvin Stute | 13.10.23 |
Emergency Overflow
In dieser Komponente wird der zweite Feuchtigkeitssensor eingelesen, und der Wert mit einem Schwellenwert verglichen. Falls dieser überschritten wird, wird die zweite Pumpe aktiviert die überschüssiges Wasser zurück ins Reservoir pumpt, bis die Feuchtigkeit sinkt. Als Hardware ist hier ein weiterer Feuchtigkeitssensor, eine weitere Pumpe sowie ein weiteres Relais notwendig. Die Funktionalität der Bauteile bleibt unverändert, lediglich die digitale Datenverarbeitung auf dem Arduino ist unterschiedlich.
Parameter
Parameter | Beschreibung | Einheit | Wert |
Schwellwert_fuer_Abpumpen | Fest definierter Wert, ab dem die Pumpe anfangen soll Wasser vom Boden abzupumpen | - | 600 |
Feuchtigkeit_mess_2 | Messwert des zweiten Feuchtigkeitssensors | - | [0-1023] |
Pumpe_Boden | Binärer Wert der aussagt, ob die zweite Pumpe aktiviert sein soll oder nicht | - | [0 1] |
Spezifikationen
ID | Kapitel | Inhalt | Ersteller | Datum |
1 | Rahmenbedingungen | Nils Betten & Marvin Stute | 13.10.2023 | |
411 | Der Schwellenwert muss hoch genug sein, dass er zuverlässig auslöst gleichzeitig niedrig genug um überschüssiges Wasser zu erkennen. | Nils Betten & Marvin Stute | 13.10.2023 | |
412 | Die Pumpedarf um den Grenzwert nicht zu stark oszillieren | Nils Betten & Marvin Stute | 13.10.2023 |
Umsetzung
Hardware
Das System besitzt als Kopf einen Arduino Uno mit RTC-Shield. Der Shield dient zum einen dem Aufbau aller gelöteten Komponenten der Schaltung als auch zum anderen dem Datenlogging in der Reglerauslegung und potentiellen Logdateien in der Zukunft. Der Shield versorgt zwei kapazitive Feuchtigkeitssensoren mit Spannung, Ground und liest deren jeweilige Datenleitung mittels der Analogpins 0 und 1 aus. Im folgenden Bild sind die Positionen der Sensoren sehr gut zu erkennen, der eine steckt oben im Substrat in der Nähe des Wasserauslasses während der andere unten im Topf angebracht ist um überschüssiges Wasser zu erkennen.
Außerdem werden beide Relays von hier mit Spannung und einem Eingangssignal über die Pins 5 und 6 versorgt. Diese steuern die beiden Motoren zum Wasser zu- und abführen an. Hier werden Relays verwendet, um eine galvanische Trennung der beiden Stromkreise zu haben. Die Pumpen operieren mit 12V, während der Rest des Systems mit den 5V des Arduinos arbeitet. Um nicht mit Spannungstransformationen arbeiten zu müssen, wurden beide Stromkreise galvanisch getrennt und werden separat über verschiedene Quellen mit Strom versorgt.
Der Wasserkreislauf beginnt mit dem 10l Reservoir unter der Schaltung und geht mittels eines Schlauches durch Pumpe 1 in die Leitungen zum Pflanzenbehälter. Für die Demonstration in der Hochschule wurde aufgrund des vergleichsweise kleinen Topfes ein Stopfen eingesetzt, der den Durchmesser des Schlauches auf 2mm verringert, da die Regelstrecke bei kleinen Töpfen schnell übersteuert. Der zweite Schlauch liegt unterhalb des Untertopfes und führt über Pumpe 2 zurück in das Reservoir, um kein Wasser zu verschwenden.
Alle Komponenten wurden mittels M4 Schrauben und Muttern als Abstandshalter auf dem Deckel des Reservoirs angebracht, um auf diese Weise das System kompakt zu halten.
Verdrahtungsplan
Platine
Wir haben uns im Design für die Hardware bewusst gegen die Herstellung einer individuellen Platine für dieses Projekt entschieden. Der Aufbau des Projektes an/auf einem Wasserbehälter stand sehr früh fest, und um im Verlauf des Projektes möglichst viele Optionen für QoL und weitere Softwarefeatures zu haben wurde die Entscheidung getroffen, ein RTC und SD-Karten Shield auf den Arduino aufzusetzen. Auf diesen Shields sind ca 2/3 des Platzes nicht belegt und können für den Aufbau einer Schaltung verwendet werden. Da die Relays bereits mit allen notwendigen Komponenten auf kleinen Boards kommen war es einfacher, die benötigten Kabel zur Spannungs- und Datenversorgung der einzelnen Komponenten direkt auf den Shield aufzusetzen.
Reglungstechnik
Die Software muss die vom Feuchtigkeitssensor gesammelten Werte einlesen, und damit die beiden Pumpen regeln um eine stets kontrollierte Feuchtigkeit im Topf sicherzustellen. Damit eine erfolgreiche Reglung möglich ist, ist es allerdings zuvor notwendig die Strecke mithilfe eines Einheitssprung zu stimulieren und die Antwort aufzuzeichnen. Diese ermöglicht es dann, die Regler so auszulegen, dass eine kontinuierliche Reglung sichergestellt ist und ein zu großes Überschwingen zu vermeiden. Da die Strecke sehr langsam reagiert, ist auch eine langfristige Auszeichnung notwendig. Konkret wurde die Reaktion der Strecke über 4 Stunden auf einen Einheitssprung mit einer Dauer von 5 Sekunden aufgezeichnet.
In der Reaktion ist eindeutig zu erkennen, wie sich das vom Sensor wahrgenommene Digitalwort über die Zeit erhöht. Dabei wird auch klar, dass es sich bei dem gemessenen System um ein "PT1"-System handelt. Dies wird besonders durch den starken Anstieg zu Beginn und das Abflachen nach oben hin deutlich. Dies gilt als charakteristisches Verhalten für ein "PT1"-System. Nun gilt es, dieses System mithilfe einer Übertragungsfunktion zu beschreiben, um ein simulieren des Systems zu ermöglichen.
Ein PT1 Verhalten lässt sich über die folgende Übertragungsfunktion beschreiben:
Es müssen also die Regelparameter und ermittelt werden. Gemessen wurde das Digitalwort, welches in einem Zeitraum von um angestiegen ist. Dies entspricht 45 A/D-Schritten Differenz. ist also gleich 45.
entspricht also dem Zeitpunkt t, zu dem das Digitalwort 713 gemessen wurde, also:
Es ergibt sich also die Übertragungsfunktion:
Regen wir dieses System mit einem Einheitssprung an und vergleichen die Reaktion mit dem echten System, so wird eine starke Ähnlichkeit deutlich.
Im nächsten Schritt gilt es nun, den Regler für die simulierte Strecke auszulegen. Für den Versuch wurde sich für die Verwendung eines PWM-Reglers entschieden.
Ein PWM (Pulsweitenmodulation) - Regler ist ein digitaler Regler, der eine technische Größe, in diesem Fall den digitalen Output-Pin des Arduino, regelt, indem sie zwischen zwei Werten gewechselt wird. Eine konstante Periodendauer wird in Schleife durchlaufen und setzt sich dabei aus einer Impulsdauer und einer Pausendauer zusammen. Für die Laufzeit der Impulsdauer wechselt der Ausgang auf 1, für die Laufzeit der Pausendauer wechselt der Ausgang auf 0. Der PWM-Ausgang des Reglers gibt die Impulsdauer vor. Hierbei entspricht bspw. ein Ausgang von PWM = 25 insgesamt 25% der gesamten Periodendauer. Der Ausgang ist also auf maximal 100, also Impulsdauer = Periodendauer und minimal 0, also Pausendauer = Periodendauer. [6]Ein PWM-Signal muss durch einen PWM-Generator erzeugt werden, wobei mit dem Arduino gleich mehrere Pins zur Verfügung stehen, die eine solche Funktionalität unterstützen. Um nun den Regler auszulegen muss das Führungsübertragungsverhalten und das Störungsübertragungsverhalten des Reglers bestimmt werden.
Die Führungsübertragungsfunktion wird durch folgende Formel beschrieben:
Die Störungsübertragungsfunktion wird durch die folgende Formel beschrieben:
Für setzen wir nun die oben ermittelte Übertragungsfunktion ein. Wir gehen außerdem davon aus, dass der Sensor ideal ist, also
Dann ergibt sich für die Führungsübertragungsfunktion:
|
<=>
Außerdem für die Störungsübertragungsfunktion:
|
<=>
P-Regler
Um unnötige Komplexität zu vermeiden, wird zunächst die Regelung über einen P-Regler berechnet, mit
Hier ergibt sich:
Es bleibt also mit einem P-Regler eine stationäre Regelabweichung.
PI-Regler
Um einer stationären Regelabweichung entgegen zu wirken, wird als nächster Schritt ein PI-Regler mit
Mit dem PI-Regler ergibt sich:
<=> |
<=>
<=> |
<=>
Ein PI-Regler ermöglicht es also, die stationäre Regelabweichung zu beseitigen und das System perfekt zu regeln. Im Angesicht dessen wurde die Entscheidung getroffen, das System mit einem PI-Regler zu testen.
Software - Simulation
Um die Reglerauslegung zu ermöglichen, wurde zunächst ein vereinfachter Regelkreis mit der Übertragungsfunktion der simulierten Strecke aufgebaut. Dies ermöglicht es verschiedene Regelparameter zu testen ohne lange Wartezeiten zwischen echten Abläufen abzuwarten.
In Abbildung X und Abbildung X findet sich das vollständige Modell, der nebenstehende Code gibt Aufschluss über die notwendigen Parameter.
%**************************************************************** % Hochschule Hamm-Lippstadt * %**************************************************************** % Modul : leseBewässerungsdaten.m * % * % Datum : 22.12.2023 * % * % Funktion : Speichern der Parameter für die Simulation * % des "Blumentopf"-Regelkreises im Wordspace * % * % Implementation : MATLAB 2022b * % * % Req. Toolbox : - * % * % Req. Dateien : Bewaesserungsdaten.m * % * % Author : Nils Betten; Marvin Stute. * % * % Bemerkung : * % * % Letzte Änderung : 16.01.2024 * % * %***************************************************************/ close all; clear all; clc run("Bewaesserungsdaten.m"); RelevanteDaten = Messdaten(1362:15548,2); % Messdaten von 10:10:00 bis 14:10:00 %% Parameter der Strecke K_s = 45; T = 4277; %% Parameter der Regler K_p = 0.05; K_i = 0.0003;
Die genannten Parameter sind sehr gering, da die entsprechende Strecke nur langsam reagiert und zu hohe Parameter zu einem starken Überschwingen der Strecke führen kann. Mit den Reglerparameter von K_p = 0.05 und K_i = 0.0003 reagiert auch der Regler ausreichend langsam, dass ein zu starkes Überschwingen der Strecke vermieden werden kann. In Abbildung X finden sich die Simulationsergebnisse mit den genannten Parametern.
Software - Reale Umsetzung
Die Software liest kontinuierlich die beiden Feuchtigkeitssensoren ein, diese werden aber in zwei voneinander getrennten Kreisen ausgewertet.
Der erste Kreis ist der oben beschriebene Regelkreislauf. Dieser wird über die Messwerte des ersten Feuchtigkeitsensors, WET1, geregelt. Dieser liegt im Substrat und gibt konstant eine gemessene Feuchtigkeit im Wertebereich 0-1023 heraus. Diese gemessene Feuchtigkeit wird von dem Sollwert abgezogen. Dieser liegt bei 680 und wird mit dem Umlegen eines Schalters um bis zu 50 A/D-Schritte erhöht. So ergibt sich der Regelfehler, welcher in den Regler weitergegeben wird und mit dem so mithilfe eines PI-Reglers die Regelgröße erzeugt. Die ausgehende Größe wird per PWM-Wandler in ein PWM-Signal mit einer Dauer von 10 Sekunden umgewandelt und ausgegeben. Das Signal muss eine lange Länge haben, da die Relays sonst Schwierigkeiten haben, schnell genug zu schalten, außerdem ist es für die Lebensdauer der Pumpen sehr abträglich, wenn diese mit Intervallen von <1s geschaltet werden. Ist die Pumpe aktiviert, wird Wasser vom Reservoir in den Blumentopf gepumpt.
Der zweite Kreis ist der sog. "Emergency Overflow" Kreis wird nur aktiv, wenn der zweite Feuchtigkeitssensor, platziert im Ablauf des Topfes, eine erhöhte Feuchtigkeit feststellt. Wird hier eine Feuchtigkeit von über 600 gemessen, wird die zweite Pumpe aktiviert, die Wasser vom Ablauf zurück in das Reservoir pumpt bis der Sensor wieder im trockenen liegt. So wird vermieden, dass die Pflanze durch "nasse Füße" an den Wurzeln anfängt zu schimmeln. Tests haben ergeben, dass es kein Problem ist, wenn der Sensor kurzfristig unter Wasser liegt.
Abbildung X stellt den Ablauf des Programms in Form eines Programmablaufplans dar.
In Abbildung X ist außerdem das ganze gesamte Simulink Modell zu erkennen, welches lauffähig für den Arduino Uno optimiert wurde.
Der gesamte Simulink Code ist, wie in der Komponentenspezifikation dargestellt, in verschiedene Komopnenten aufgeteilt, deren Code im Anschluss dargestellt ist:
1. Sollwert: Ermittelt mithilfe eines Schalters den Sollwert für das Programm.
2. Regler: Ermittelt auf Basis des Regelfehlers ein PWM-Signal, welches in ein binäres Signal für die Pumpen umgewandelt wird.
3. Emergency Overflow: Im Falle einer zu hohen Bewässerung wird eine zweite Pumpe aktiviert, die überschüssiges Wasser zurück in das Reservoir pumpt.
Vollständiges System
Komponententest
Durch [Ausklappen] der einzelnen Komponenten werden die detaillierten Beschreibungen tabellarisch dargestellt.
Sollwertgeber
In dieser Komponente wird die aktuelle Position des Buttons eingelesen und dem entsprechenden Sollwert des Regelkreises zugeordnet. Folgend die Tests der Komponente.
Spezifikationen
ID | Kapitel | Inhalt | Ersteller | Datum | Testergebnis | Datum |
1 | Rahmenbedingungen | Nils Betten & Marvin Stute | 13.10.2023 | |||
111 | Das Auslesen des Button-Werts erfolgt über einen Digital Read Block in Simulink | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 06.12.2023 | |
112 | Der Sollwert muss als Digitalwort ausgegeben werden | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 06.12.2023 | |
113 | Die Höhe des vorgegebenen Digitalworts entspricht optimalen Messwerten für Pflanzen mit hohem bzw. niedrigem Wasserbedarf | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 06.12.2023 |
Regler
In dieser Komponente wird die ermittelte Abweichung von dem Sollwert über einen Regler in ein PWM-Signal umgewandelt, mit dem der Arduino und somit auch die Pumpe angesteuert wird. Folgend die Tests der Komponente.
Spezifikationen
ID | Kapitel | Inhalt | Ersteller | Datum | Testergebnis | Datum |
1 | Rahmenbedingungen | Nils Betten & Marvin Stute | 13.10.2023 | |||
211 | Der Regler darf nicht zu stark oscillieren da sonst ein ordnungsgemäßes funktionieren der Pumpe nicht mehr sichergestellt werden kann. | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 11.12.2023 | |
212 | Der PWM-Wert muss auf die Maximal bzw. Minimal mögliche Größe beschränkt werden, die der Arduino Pin verarbeiten kann. | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 11.12.2023 | |
2 | Berechnung | Nils Betten & Marvin Stute | 13.10.2023 | |||
221 | Für die Ermittlung des Reglers wird die Strecke mit einem Sprung angeregt und die gemessene Antwort ausgewertet. | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 07.12.2023 | |
222 | Die stationäre Abweichung des Reglers muss minimiert werden. | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 07.12.2023 | |
223 | Für den Test wird eine simulierte Strecke aufgebaut, mithilfe derer die Regelparameter eingestellt werden können. | Nils Betten & Marvin Stute | 13.10.23 | Bestanden | 07.12.2023 |
Aktor
In dieser Komponente wird das über den Regler ermittelte PWM-Signal an den Arduino Pin weitergegeben, um über ein Relay, die entsprechende Pumpe anzusteuern. Folgend die Tests der Komponente.
Spezifikationen
ID | Kapitel | Inhalt | Ersteller | Datum | Testergebnis | Datum |
1 | Rahmenbedingungen | Nils Betten & Marvin Stute | 13.10.2023 | |||
311 | Das PWM-Signal des Reglers wird an einen PWM-fähigen Arduino Pin ausgegeben, der über ein Relay die Pumpe ansteuert | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 08.12.2023 |
Messung
In dieser Komponente wird über einen Feuchtigkeitssensor die aktuelle Feuchtigkeit im Pflanzentopf ausgelesen und Folgend die Tests der Komponente.
Spezifikationen
ID | Kapitel | Inhalt | Ersteller | Datum | Testergebnis | Datum |
1 | Rahmenbedingungen | Nils Betten & Marvin Stute | 13.10.2023 | |||
311 | Die gemessene Feuchtigkeit wird über einen Feuchtigkeitssensor eingelesen und als tatsächliche Feuchtigkeit in den Regelkreis gespeist. | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 06.12.2023 |
Emergency Overflow
In dieser Komponente wird der zweite Feuchtigkeitssensor eingelesen, und der Wert mit einem Schwellenwert verglichen. Falls dieser überschritten wird, wird die zweite Pumpe aktiviert die überschüssiges Wasser zurück ins Reservoir pumpt, bis die Feuchtigkeit sinkt.
Spezifikationen
ID | Kapitel | Inhalt | Ersteller | Datum | Testergebnis | Datum |
1 | Rahmenbedingungen | Nils Betten & Marvin Stute | 13.10.2023 | |||
411 | Der Schwellenwert muss hoch genug sein, dass er zuverlässig auslöst gleichzeitig niedrig genug um überschüssiges Wasser zu erkennen. | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 06.12.2023 | |
412 | Die Pumpedarf um den Grenzwert nicht zu stark oszillieren | Nils Betten & Marvin Stute | 13.10.2023 | Bestanden | 06.12.2023 |
Systemtest
Ergebnis
Anforderungserfüllung
ID | Inhalt | Testcase | Testergebnis | Datum |
---|---|---|---|---|
1.0 | Die Feuchtigkeit im Blumentopf muss durch den Arduino, die Sensoren und die Aktuatoren auf einem konstanten, einstellbaren Level gehalten werden. Die Feuchtigkeit muss mit einer Genauigkeit von +/-15% eingehalten werden. | Die Abweichung des Digitalwortes wurde über eine Stunde gemessen und ausgewertet. | Der Test wurde bestanden, die Abweichung des Digitalwortes lag unter +/- 15%. | 29.12.2023 |
2.0 | Um verschiedene Pflanzen versorgen zu können muss der Nutzer in der Lage sein, zwischen verschiedenen Bewässerungsmodi zu wählen. | Ist eine Einstellmöglichkeit des Sollwertes vorhanden? | Der Sollwert kann sowohl in Code angepasst als auch per Button um 50 erhöht werden. | 29.12.2023 |
2.1 | Mindestens zwei verschiedene Bewässerungsprofile müssen im finalen Projekt implementiert sein, die Möglichkeit, sowohl Hard- als auch Software für mehr zu erweitern muss gegeben sein. | Kann der Sollwert angepasst werden? | Der Sollwert kann sowohl in Code angepasst als auch per Button um 50 erhöht werden. | 29.12.2023 |
3.0 | Zwei Feuchtigkeitssensoren messen unabhängig voneinander die Feuchtigkeit an zwei verschiedenen Positionen des Topfs. | Sind mehrere Sensoren an verschiedenen Positionen angebracht? | Ein Sensor steckt bei unserem Testtopf open im Substrat während ein weiterer etwa 1cm überm Boden zwischen Übertopf und Zwischentopf hängt. | 29.12.2023 |
4.0 | Eine Pumpe wird zur Förderung des Wassers aus einem Reservoir zum Blumentopf eingesetzt. | Ist mindestens eine Pumpe verbaut? | Ja, es ist eine Pumpe zur Zu- und eine zur Ableitung verbaut worden. | 29.12.2023 |
4.1 | Die Förderhöhe der verwendeten Pumpe muss mindestens 150cm betragen. | Ist eine Pumpe verbaut, welche diese Förderhöhe zulässt? | Ja, es ist eine Pumpe verbaut, welche eine Saughöhe von 2m und eine Pumphöhe von 3m hat. | 29.12.2023 |
5.0 | Falls am Behälter der Pflanze möglich kann ein motorisiertes Ventil verwendet werden, um überschüssiges Wasser in den Untertopf oder einen Abwasserbehälter abzuführen. Diese Funktion kann nur nicht absorbiertes Wasser ablassen. | Ist am Behälter ein Ventil verbaut? | Nein, der Testtopf für die Messe ist aus Keramik und kann somit kein Ventil erhalten. Alternativ wurde die Abfuhr überschüssigen Wassers per Pumpe implementiert. | 29.12.2023 |
6.0 | Der Sollwert wird in der Software für die einzelnen Bewässerungsprogramme hinterlegt. | Wird der Sollwert der Substratfeuchtigkeit in der Software hinterlegt? | Ja. | 29.12.2023 |
6.1 | Der Sollwert wird mit dem/den (mittleren) Messwert(en) des/der Feuchtigkeitssensor(en) verglichen, um die Abweichung vom Sollwert zu ermitteln. | Wird der Sollwert aus mehreren Werten gemittelt? | Nein, da die Sensoren an zu unterschiedlichen Punkten im Testtopf verbaut wurden. | 29.12.2023 |
6.2 | Bei erkanntem zu niedrigem Feuchtigkeitsgehalt im Substrat wird über einen Regler die Pumpe angesteuert, um den Feuchtigkeitsgehalt des Substrates anzuheben. | Wird dem Testtopf Wasser zugeführt, wenn der Istwert den Sollwert unterschreitet? | Ja. | 29.12.2023 |
6.3 | Bei Erkennung von stehendem Wasser wird gegebenenfalls über das motorisierte Ventil überschüssiges Wasser abgelassen. | Wird überschüssiges Wasser aus dem Testtopf entfernt? | Ja. | 29.12.2023 |
7.0 | Pumpe und Motor müssen als gemeinsam funktionierende Einheit als Strecke fungieren. | Sind Anforderung 6.2 und 6.3 erfüllt? | Ja. | 29.12.2023 |
8.0 | Das System gibt einen Warnton aus, wenn der Füllstand des Tanks unter einen kritischen Wert fällt. | Misst das System erfolgreich den verbleibenden Füllstand? | Nein. Die angedachte und verbaute Lösung hat der konstanten Feuchtigkeit im Wasserreservoir nicht standgehalten und Kurzschlüsse produziert. | 29.12.2023 |
8.1 | Der Wert wird durch einen Füllstandssensor definiert, welcher unter einem gewissen Füllstand keinen Wasserkontakt mehr hat. | Entfällt | - | - |
Zusammenfassung
Beginn des Projekts war die folgende Idee: Wie kann es vermieden werden, dass Topfpflanzen bei manueller Bewässerung entweder austrocknen oder durch zu hohe Bewässerung verschimmeln. Darauf basierend wurde sich das Ziel gesetzt mithilfe eines Arduino diesen Prozess des Pflanzen-Bewässerns zu automatisieren um ein austrocknen oder übergießen zu vermeiden. In dem Projekt wird nach dem V-Modell gearbeitet, sodass der erste Schritt die Anforderungsdefinition ist. Es wurde überlegt, welche Anforderungen für eine erfolgreiche Reglung notwendig sind, wie ein Ausfallen des Systems verhindert werden kann und was für Features das finale Projekt möglichst erfüllen sollte. Der nächste Schritt daraufhin war der funktionale und technische Systemplan. Hier wurde, ausgehend von den Anforderungen, die konkrete technische Umsetzung erstmals betrachtet und geschaut, was für Bauteile und Funktionen notwendig sind um das Projekt technisch umzusetzen. Darauf basierend wurde dann eine Komponentenspezifikation entworfen. In dieser werden einzelne Software-Komponenten sowie Hardware-Teile konkretisiert. Sowohl Ein-& Ausgänge der Software-Funktionen sowie die Entscheidung für konkrete Bauteile wurde hier gefällt. Nun wurde diese Komponentenspezifikation einmal auf Hardwaretechnischer Seite und einmal auf Softwaretechnisches Seite parallel umgesetzt. Nachdem die unabhängige Funktionalität von dem Regelkreis und dem Rest der Software sowie den Pumpen und Feuchtigkeitssensoren sichergestellt wurde, wurde beides zusammengeführt. Durch individuelles Testen einzelner Komponenten sollen größere Probleme möglichst früh identifiziert werden. Nachdem alle Komponenten einzeln funktional waren, wurde das gesamte Projekt an sich getestet. Auch wenn zwischenzeitlich immer wieder Änderungen an Hardware und Software vorgenommen wurden, hat alles am Ende einwandfrei funktioniert. Auch wenn die konkrete Umsetzung, grade was die Messung der Wassermenge im Reservoir angeht, teils nicht genau wie in der Anforderungsdefinition geplant möglich war, wurden die meisten Anforderungen dennoch erfüllt und unsere Zimmerpflanzen haben zukünftig keine Wassersorgen mehr.
Lessons Learned
Ganz oben bei den Lessons Learned steht definitiv der Benefit, mithilfe von MatLab Simulink eine Regelstrecke auszulegen und zu simulieren um den Regler korrekt implementieren zu können. Direkt dahinter leider auch die Tatsache, dass eine codebasierte Programmierung der finalen Software (Arduino IDE oder vergleichbares) zu zwei sauberer implementierten Reglern geführt hätte, die QoL Funktionen wie Datalogging mit RTC auf eine SD-Karte deutlich besser unterstützt hätte und in der Implementierung einige Fehler, die teils auch zu einem temporären Umrüsten des gesamten Projektes auf einen Arduino Mega (der Programmspeicher eines Uno reichte nicht mehr für die automatisch generierten Codes von Simulink aus) geführt haben.
Eine weitere Herausforderung war die Kompatibilität der Relais mit dem PWM-Regler. Dieser hat bei ersten Tests zu schnell zwischen HIGH und LOW der Pumpen gewechselt, was zum Durchbrennen eines Relais geführt hat. Hier musste der Regler entsprechend verlangsamt werden. Alternativ hätte man dieses Problem möglicherweise auch mit MOSFETs umgehen können, die schneller zwischen HIGH und LOW wechseln können.
Projektunterlagen
Projektplan
Projektdurchführung
Die Durchführung des Projektes war leider durch den Verlauf des Studiums in mehrere Phasen mit mehr oder auch weniger Aktivität am Projekt unterteilt, was dazu geführt hat, dass nicht alle vorher gesteckten Termine immer gehalten werden konnten und zu regelmäßigem Zeitaufwand zum "wieder reinfinden" geführt hat.
Insgesamt sind wir aber mit unserer Umsetzung des Projektes zufrieden. Das System wird zukünftig bei einem von uns mehrere bepflanzte Behälter (ca. 100l Volumen jeweils) mit Wasser versorgen. Zu diesem Zweck wird auch der Verengungsstopfen wieder entfernt werden.
Youtube Video
Lorem Ipsum
Literatur
- ↑ https://www.elektro4000.de/magazin/relais-erklaerung-verwendung-funktionsweise/
- ↑ https://www.verderliquids.com/de/de/pumpen-technologie/wie-funktionieren-membranpumpen#:~:text=Verderair%20VA-,Wie%20funktionieren%20Membranpumpen%3F,der%20Luft%20und%20der%20Flüssigkeit
- ↑ https://funduinoshop.com/elektronische-module/ventile-pumpen/pumpen/r385-wasserpumpe-6-12v
- ↑ https://lastminuteengineers.com/soil-moisture-sensor-arduino-tutorial/#:~:text=The%20soil%20moisture%20sensor%20operates,with%20the%20soil%27s%20moisture%20content.&text=The%20more%20water%20in%20the,and%20the%20lower%20the%20resistance
- ↑ https://funduinoshop.com/media/pdf/ff/3b/7c/Datenblatt-Feuchtigkeitssensor.pdf
- ↑ https://www.elektronik-kompendium.de/sites/kom/0401111.htm
→ zurück zur Übersicht: WS2023: Angewandte Elektrotechnik (BSE)