Gießanlage - Ventilsteuerung
Wann und wozu braucht man so was
Wenn man, um vor Ort gießen zu können, eine Tagesreise braucht. Mechanische Zeitschaltuhren haben den Nachteil, dass nach Stromausfall die Zeiten verschoben werden, und die Uhr dann gießt wann sie will. Elektronische Zeitschaltuhren brauchen Batterien, die leer werden. Nach Stromausfall geht nichts mehr. Jedes Jahr neue Pflanzen kaufen und einsetzen ist auch nicht das Wahre.
Also - selber was bauen - Eine vollautomatische Gießanlage oder Ventilsteuerung
Hier schon mal ein erster Eindruck der mechanischen Anlage. Die Ventile hinter den Kugelhähnen lassen darauf schließen, dasss mehr dahinter steckt.
Vollautomatisch gießen - und zwar so, wie ich das will und nicht Kollege Zufall.
Die Zeit soll vom Satellit geholt und umgesetzt werden. Vor Ort einstellbar. Ein LC Display zur Anzeige. Über Funknetz (GSM Handy) konfigurierbar und Abfrage der gerade laufenden Parameter. Wasserventile ansteuern.
Die Anlage soll täglich, wenn erforderlich automatisch gießen. Es sind fünf Wasserstränge vorgesehen, die einzeln, nacheinander abgearbeitet werden. Bisher hat eine Zeitschaltuhr alles zusammen gegossen. Je mehr Pflanzen dazu kommen, um so weniger Wasser bringt die Pumpe an diese. Man lässt die Pumpe länger laufen - hab ich gedacht - aber bei langen Leitungen und dem großen Verbrauch kommt hinten nicht mehr viel an; dafür ist vorne alles überschwemmt. Das war der Hauptgrund für die Gießanlage. Wenn man das Jahr klimatisch betrachtet, dann kommt man zur Erkenntnis, dass im Winter in Griechenland nicht gegossen werden muß - da macht der liebe Gott das mit Regen. Im Frühjahr ist alles noch schön feucht, und man kann langsam anfangen zu gießen. In den Sommermonaten ist viel Wasser angesagt, und im Herbst kann man wieder langsam herunter regeln. Der nahe liegende Gedanke war die Gießerei monatlich zu organisieren. Die Anlage ist für fünf Stränge ausgelegt. Ich habe nach den Örtlichkeiten zuerst mal drei davon laufen. Im Bild oben sieht man recht schön, dass zwei Anschlüsse nicht angeschlossen sind. Diese können bei Bedarf mit Ventilen nachgerüstet werden. Nach langer Überlegung, wie man das angehen soll, habe ich programmtechnisch folgendes festgelegt: Kernstück soll ein Atmel ATmega32 sein, der als Eingänge einen Rotary-Switch (Drehschalter), eine Programmierschnittstelle, einen seriellen Zugang (GSM-Modem Siemens M20), einen analogen Eingang (vom M20) und einen Feuchtesensor bedienen soll. Als Ausgänge soll der Atmel Chip Ein LC-Display, die serielle Schnittstelle des GSM-Modems und fünf Relais für die Ventile bedienen. Der Atmel war lange genug im Regal - nun soll er was tun.
Nachdem die Schnittstellen geklärt sind, kann man sich Gedanken über das Programm oder den Programmablauf machen. Wie oben erwähnt soll der Hauptteil des Programms das Gießen sein. Dazu legt man für jeden Monat ein konfigurierbares Programm fest. Als Grundparameter soll je ein Bitfeld von 32 Bit für jedes Monatsprogramm und fünf Sonderprogramme dienen. Also eine Zeile von Einsen und Nullen, die alle eine Bedeutung haben. Die Bitfelder sind fest programmiert und können nur durch Umschreiben des Programms geändert werden. Das sind grundlegende Eigenschaften, die einmalig festgelegt sind. Sie regeln "nur" ob ein Ventil arbeiten soll, ob es einmal oder zweimal pro Tag arbeitet und ob es kurz oder lang einschaltet.
Hier eine Aufzeichnung, wie die Bitfelder organisiert sind.
' Vormittag --^------- Giesszeit1 0=aus 1=an ' Giessdauer --^-------- Dauer1 0-kurz 1=lang ' Nachmittag --^--------- Giesszeit2 0=aus 1=an ' Giessdauer --^---------- Dauer2 0-kurz 1=lang Prog_jan_e = &B0000000_0001_0001_0001_0001_0001_00000 Prog_feb_e = &B0000000_0001_0001_0001_0001_0001_00000 Prog_mar_e = &B0000000_0001_0001_0001_0001_0001_00000 Prog_apr_e = &B0000000_0001_0001_0001_0001_0001_00011 Prog_mai_e = &B0000000_0101_0101_0101_0101_0101_00011 Prog_jun_e = &B0000000_1101_1101_1101_1101_1101_00111 Prog_jul_e = &B0000000_1111_1111_1111_1111_1111_00111 Prog_aug_e = &B0000000_1111_1111_1111_1111_1111_00111 Prog_sep_e = &B0000000_1101_1101_1101_1101_1101_00111 Prog_okt_e = &B0000000_0001_0001_0001_0001_0001_00011 Prog_nov_e = &B0000000_0001_0001_0001_0001_0001_00000 Prog_dez_e = &B0000000_0001_0001_0001_0001_0001_00000 Sonder_1_e = &B0000000_0001_0001_0001_0001_0001_00111 'alle Zeit1,kurz Sonder_2_e = &B0000000_0100_0100_0100_0100_0100_00111 'alle Zeit2,kurz Sonder_3_e = &B0000000_0011_0011_0011_0011_0011_00111 'alle Zeit1,lang Sonder_4_e = &B0000000_1100_1100_1100_1100_1100_00111 'alle Zzeit2,lang Sonder_5_e = &B0000000_1111_1111_1111_1111_1111_00111 'alle voll ' ^^^^^^^-------------------------------- Frei für Erweiterungen ' ^^^^---------------------^----- Ventil 4 ' ^^^^-----------------^---- Ventil 3 ' ^^^^-------------^--- Ventil 2 ' ^^^^---------^-- Ventil 1 ' ^^^^-----^- Ventil 0 Beispiel für das Monatsprogramm Mai: Prog_mai_e = &B 0000000_0101_0101_0101_0101_0101_00011
Im Klartext: Ventil 0 und 1 an, Vormittag gießen kurz, Nachmittag gießen kurz. In den Bitfeldern wird binär gezählt. Man fängt mit Null an. Deshalb hat das erste Ventil die Nummer 0.
Damit ist jetzt das Grundgerüst für den Ablauf festgelegt. So wie es jetzt ist, bringt es noch keinen rechten Sinn. Es fehlen noch die zugehörigen Werte wie Einschaltzeit oder Einschaltdauer. Zum Ändern dieser Werte soll nun über Klartext am LCD eine Information dargestellt werden, und über den Rotary-Switch soll eine Eingabe entsprechend des Textes möglich sein. Man wählt zum Beispiel mit dem Rotary-Switch die Einschaltzeit. Am Display wird demzufolge ein Text wie "Einschaltzeit eins" und der gerade gültige Wert dazu ausgegeben. Nun können mit dem Rotary- Switch die Werte im Klartext eingegeben werden, die dann programmtechnisch als Variablen in Bezug auf die Bitfelder übernommen werden. Läuft das Programm, dann wird zuerst Zeit und Datum vom Satellit geholt, angezeigt und ausgewertet. Dazu stellt das Programm fest, welches Monats-Programm in Bezug auf das Datum aktiv werden soll. Die aktuelle Zeit wird mit den Werten, die als Variablen abgelegt sind, verknüpft und entsprechend der Bitfelder werden die Ventile angesteuert.
Mit dem Rotary-Switch kann man folgende Einstellungen ansehen oder ändern: Gießdauer kurz in Min, Gießdauer lang in Min, Sonderprogramm 1-5 0=aus, Gießen ein/aus 0=aus, Ventil manuell 0=aus (einzeln oder alle), Startzeit Gießen eins (Stunden), Startzeit Gießen eins (Minuten), Startzeit Gießen zwei (Stunden) Startzeit Gießen zwei (Minuten).
Welche Einstellungen sind vor Ort möglich
Und so wird' s gemacht
Wird der Rotary-Switch gedrückt, dann schaltet das Programm auf das Eingabemenü und zeigt am LC Display (2x24) in der ersten Zeile die Erklärung an - in der zweiten den zugehörigen Wert.
Drückt man den Switch erneut, dann zeigt das Display den nächsten Menüpunkt an usw. Sind alle Punkte durch, dann wird wieder Zeit und Datum angezeigt und das Programm "konzentriert sich wieder auf' s Gießen". Will man einen Wert innerhalb des Menüs ändern, so dreht man den Rotary- Switch links zum Dekrementieren des Wertes und rechts zum Inkrementieren. Jede Änderung wird im Arbeitsspeicher geändert und auch in den nichtflüchtenden Speicher übertragen. Somit werden alle geänderten Parameter sofort wirksam und auch permanent gespeichert.
Ein bisschen Handarbeit muss aber doch sein
Die Anlage steuert Ventile, regelt sie aber nicht - Was heißt das nun wieder. Die Ventile machen nur klick klack - also nur auf oder zu. In der Anlage ist kein Einfluss auf die Wassermenge pro Zeit und/oder Ventil programmiert. Deshalb ist der Durchfluss, wie man im ersten Bild oben sieht, über Wasserhähne einstellbar. Nicht, dass das nicht zu programmieren wäre. Mir ist es lieber das händisch zu machen. Ich laufe lieber am Strang entlang und prüfe, wie viel Wasser an den Pflanzen ankommen soll. Dazu sind von jedem Strang dünne Schläuche zu jeder Pflanze gelegt. An den Enden sind kleine Gießer montiert, mit denen man zusätzlich die Wassermenge einstellen kann. So bekommt jede Pflanze die Feuchtigkeit, die sie braucht.
Und ran an die Elektronik
Auf meinem Mega32 Testboard wird das Programm Schritt für Schritt geschrieben. Auf einem Steckbrett sind alle zusätzlich benötigten Teile wie Serielle, Analogswitch, Relaistreiber, Tondecoder (MT8870DE), GPS-Maus und Rotary-Switch verdrahtet. Nach langer Testerei ist der Aufbau fertig und es kann eine Platine gemacht werden. Die hier links unten habe ich entwickelt und dann fertigen lassen. Rechts ist sie fertig bestückt.
Unten sieht man die fertig aufgebaute und mit Peripherie ausgestattete Lösung.
Das Bild rechts unten zeigt die Montage. Die Teile vom linken Bild sind in ein Gehäuse eingebaut. Im Gehäusedeckel erkennt man oben eine Ausfräsung mit Plastikfenster für das Display und mittig den Rotary-Switch. Links in dem Werkzeugkoffer aus Metall ist das Netzteil 5V, 12V und 24V eingebaut. Wenn es noch angestrichen wird, dann sieht es nicht mehr so unprofessionell aus.
Was macht das M20 Terminal
Das Handy "ohne Tastatur und Display" oder GSM-Modem hängt über einen Analogschalter (MC14016) an der seriellen Schnittstelle des Mega32. Analogschalter deshalb, weil darüber auch noch die GPS-Maus an der selben Schnittstelle hängt. Vorrangig ist die Maus, weil die Zeiterfassung der absolut wichtigste Bestandteil ist. Wird das GSM Modem aktiv, dann wird über die Ring-Leitung ein Interrupt ausgelöst, der dann das Modem über den Analogschalter auf die serielle Schnittstelle legt. Und zwar solange bis die Verbindung getrennt wird, oder ein parallel laufender Timer die Verbindung abbricht. Soweit der technische Teil zum Modem. Der Zugriff auf das Programm erfolgt so: Wird das Modem von einem Handy oder vom Festnetz aus angerufen, so prüft die Software zuerst die Berechtigung der anrufenden Telefon- oder Handynummer. Ist die Nummer bekannt, so hebt die Software ab, und die analoge Verbindung steht. Als Quittung werden von der Software vier Töne gesendet. So weiß der Anrufer, dass er agieren kann. Es können sechs Parameter oder Variablen über das Funknetz eingegeben werden, oder eine Statusabfrage per SMS angefordert werden. Dazu ist jeweils ein Anruf nötig. Die Programmierung erfolgt über Eingabe einer fünfstelligen Nummer über die Telefon Tastatur. Zur Auswertung der Tastentöne ist ein DTMF-Chip (Dual Tone Multi Frequenz) eingesetzt, der die hörbaren Töne der Tastatur in Zahlen umwandelt. Diese Zahlen werden dann im Programm verarbeitet. Nach erfolgter Programmierung werden wieder vier Töne gesendet, und man kann auflegen.
Beschreibung der Programmierung über Handy
Stelle 1 ist die Funktion Stelle 2-5 ist der Wert Funktionen: 1 = Gießdauer kurz in Minuten (10003 ist drei Minuten) 2 = Gießdauer lang in Minuten (20005 ist fünf Minuten) 3 = Sonderprogramm 0 bis 5, 0 ist aus (30000 ist aus) 4 = Gießen ein/aus, 0 ist aus (40000 ist aus) 5 = Startzeit eins StdStdMinMin (51625 ist 16Uhr25) 6 = Startzeit zwei StdStdMinMin (61625 ist 16Uhr25) 0 = SMS über Status der Anlage abrufen (00000 ist Status-Abfrage)
Der Schluss
Der Programmcode und eine ausführliche Beschreibung mit Ablaufdiagramm und Schaltplan kann hier in der Beispielseite angesehen und heruntergeladen werden. Das Programm, das in BASCOM geschrieben ist, hat rund 1200 Zeilen Code.
Umsetzung der Gedanken in das Programm
Die Anforderung mal genauer betrachtet
Grundlegende Anforderungen an die Steuerung
Was soll das neue Teil nun genau machen