Bewässerung – Teil 6: Fuzzy Regelung

Der einfachste Weg für die Steuerung der Bewässerung wäre sicher die Bodenfeuchtigkeit als Schwellwert zu verwenden und damit die Wasserzufuhr zu starten. Ich denke aber nicht dass das ein guter Ansatz ist da die Bodenfeuchtigkeitsmessung wohl eher ein Anhaltspunkt als ein wirklicher Messwert ist. Außerdem möchte ich sowieso einen Regler implementieren um eine einigermassen konstante Wasserzufuhr zu erreichen. Der meist-eingesetzte Regler und damit auch der bekannteste ist wohl der PI-Regler. Dieser hat für hier aber den Nachteil dass er nur eine Eingangsgröße zu einer Ausgangsgröße verarbeiten kann. Natürlich könnte man jetzt mit ein paar Tricks (Störgrößenaufschaltung oder Kaskadierung) weitere Messgrößen in den Regler bekommen aber das werde ich hier nicht machen. Ich werde statt dessen einen Fuzzy Regler verwenden.

Der Fuzzy Regler ist ein Multi-Input-Multi-Output (MIMO) Regler, der mit unscharfen Größen arbeitet. Das klingt sehr innovativ, tatsächlich ist die Geschichte der Fuzzy Regelung aber schon eine ziemlich alte und begann 1965. In der 1990ern erfuhr sie einen richtigen Hype und verschwand dann ein bißchen in der Versenkung. Meiner Meinung nach findet sie viel zu wenig Beachtung da man mit ihr der Problematik der meisten Regelkreise (kein exaktes Modell, empirisches Wissen über den Algorithmus) am besten begegnen kann.

Da wir unseren Webserver schon im Einsatz haben werde ich den Fuzzy Regler in PHP implementieren und verwende dazu eine Klasse von Wojtek Jarzecki. In weiterer Folge wird später der uC für die Ansteuerung der Pumpen das PHP Script aufrufen und bekommt einen Änderungsanforderung(-10% … +10%) für die Sollwerte der Wasserpumpen  (0-100%) zurück. Der uC wird damit jeweils den aktuellen Sollwert für jede Pumpe anpassen und diesen in ein PWM Signal übersetzen.

Für die Parametrierung der Regelung ermittle ich erstmal den Wert für nasse Erde (bei mir ca. 400) und trockene Erde (bei mir ca. 800). Durch googlen finde ich heraus dass die Luftfeuchte bei uns in der Steiermark etwa zwischen 50% und 90%  und die durchschnittliche Temperatur in den Sommermonaten zwischen 8°C und 36°C liegt. Mit diesen Werten definiere ich meine Input Membership Funtions wie folgt:

Fuzzy Parameter

Der Code für mein Script sieht so aus: