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