Gardena Feuchtesensor FS20-Modul

Für automatische Gartenbewässerungen ist es hilfreich, wenn die aktuelle Bodenfeuchte als ein Parameter zur Entscheidung beiträgt, ob eine Bewässerung notwendig ist oder der Regen bereits für ausreichende Bewässerung gesorgt hat.
Gardena hat für seine Bewässerungssysteme einen robusten und kostengünstigen Bodenfeuchtesensor im Programm. Leider ist es schwer oder teuer mit Gardena-Komponenten komplexe automatische Bewässerungsabläufe umzusetzen. Hier ist eine PC-Basierte Automatisierung unter Berücksichtigung von anderen Sensoren (Zeit, Helligkeit, etc.) flexibeler und bietet viele Freiheiten für ausgefallene Ideen.
In diesem kleinen Projekt wird das Signal des
Gardena Bodenfeuchtesensors in ein FS20-Telegram umgewandelt und gesendet. So kann zum Beispiel direkt eine FS20-Steckdose gesteuert werden, oder aber der Wert wird am PC ausgewertet und z.B. nach Sonnenuntergang die Bewässerung gestartet.
Kurzinfo
Firmware-Download
Sourcen gehostet bei berlios
Hex-File Download
Eagle Schaltplan Download
Inbetriebnahme / Kurzanleitung
Nach dem Einschalten der Schaltung bzw. Anlegen der Stromversorgung, initialisiert sich das Modul. Die LED blinkt mehrfach.
Eine längere (ca. 1sec) Betätigung versetzt das Modul in die Programmier-Modus. Dies wird durch die dauerleuchtende LED signalisiert. Nun sind ca. 10sec Zeit, um ein FS20-Signal zu senden. Aus diesem Signal extrahiert das Modul
Housecode und
Buttoncode und speichert diese als Grundkonfiguration im eeprom. Die Einstellungen werden auch nach einem Batteriewechsel beibehalten. Fortan nutzt das Modul diese Daten um ein FS20-Telegram zu senden.
Eine kurze Betätigung des Tasters führt zu einer sofortigen Übertragung des aktuellen Sensorwertes.
Das Modul ist so ausgelegt, dass bei Trockenheit ein Einschaltbefehl gesendet wird, bei Feuchtigkeit wird ein Ausschaltbefehl gesendet.
Der Sensor sendet nur bei Änderung des Sensorwertes einen Telegram. Der aktuelle Wert wird auch übertragen, wenn innerhalb der letzten Stunde keine Übertragung statt gefunden hat.
Tip: In
fhem einen FS20-Dummygerät (z.B. GartenTrocken) einrichten. Anschliessend das Modul in den Programmiermodus bringen und in fhem auf 'on' klicken. Damit ist das Modul konfiguriert und der aktuelle Sensorstatus kann in fhem überprüft werden und für Bewässerungsautomation in Macros verwendet werden.
Arbeitsweise Gardena Bodenfeuchtesensor
Folgende Informationen zur Arbeitsweise des Bodenfeuchtesensors 1188 wurden vom Gardena-Servicecenter zur Verfügung gestellt:
Anbei die Infos zu dem Feuchtesensor 1188:Elektrothermisches Prinzip:Ein elektrischer Widerstand in der Sensorspitze wird ca. 7sek lang auf ca.
4-5°C über UT aufgeheizt Nach dem Aufheizen wird die Abkühlzeit gemessen.
Diese Abkühlzeit beträgt zwischen 7 und 65sec.Lange Abkühlzeit (z.B. 65sec) = trocken (Widerstand 10 kOhm)kurze Abkhlzeit ( z.B. 7sec)= feucht (Widerstand O kOhm)In Abhängigkeit der Abkühlzeit wird Trockenheit oder Feuchtigkeit gemeldet und die Bewsserung freigegeben bzw. gestoppt. Diese Signale werden ber eine Widerstandsänderung erzeugt d.h. ein Relais wird geschaltet (potentialfreier Ausgang).Zum Anschluss an andere Steuerungen kann der Ausgang mit max. 12 V belastet werden, wobei der Strom durch den Sensorkontakt im Bereich von 10mA liegen sollte.Interne Messintervalle alle 10min
Prinzipiell bedeutet dies, dass an der Sensor-Anschluss bei Feuchtigkeit kurzgeschlossen wird und bei Trockenheit ein 10kOhm Widerstand dazwischen geschaltet wird.

Die neueren Modelle haben eine Anschluss-Buchse mit 3 Pins. Es sind nur die gegenüberliegenden Anschlüsse von Interesse. Der mittlere Pin scheint nicht angeschlossen zu sein. (siehe Bild).
Überlegungen zum Schatplan
Die Sensor-Abtastung kann am besten mit einem Widerstandsteiler erfolgen. Für die FS20-Funkanbindung und als kompaktes Platform für die Mikrocontroller-Entwicklung eignet sich am besten das Modul
CPM von
http://busware.de.
Schaltplan

Über die Anschlussklemme J1 wird die Stromversorgung angeschlossen. Es ist darauf zu achten, dass hier eine geregelte Gleichspannung von 1,8V bis maximal 3,3V angeschlossen wird. Auf die korrekte Polung ist zu achten.
Die Sensor-Leitungen werden an der Anschlussklemme J2 angeschlossen. Die Polung ist hier unerheblich.
Über den Jumper JP2 kann bestimmt werden, ob die Stromversorgung für den Sensor über den Microcontroller-Port PB0 schaltbar ist, oder sie dauernd anliegt. Hier kann erheblich an Energie eingespart werden, wenn der vom Microcontroller geschaltete Modus ausgewählt wird. Ein Nachteil wäre, dass nur mit einer Verzögerung auf eine eventuelle Änderung des Sensor-Wertes reagiert wird. Angesicht der Tatsache, dass der Sensor nur alle 10 Minuten eine Messung durchführt, ist dies eine verschmerzbare Lösung.
Die Programmierung des Microcontrollers erfolgt mit dem AVR ISP-Anschluss JP1. Dieser kann entfallen, wenn die Firmware bereits auf dem CPM-Modul aufgespielt ist.
Firmware
Funktionsweise / Anforderungen
Der aktuelle Stand des Sensors wird überwacht und bei Änderung sofort als FS20-Telegram gesendet. Zusätzlich wird regelmäßig (1 mal pro Stunde) der aktuelle Status ungeachtet dessen ob eine Änderung vorliegt gesendet. Dies soll sicherstellen, dass die Funktionalität des Moduls gegeben ist. Wenn länger als mehrere Stunden keine Meldung vom Modul vorlieget, so liegt es Nahe, dass hier eine Funktionsstörung (z.B. Batterien aufgebraucht) vorliegt.
Bei der Inbetriebnahme (Einsetzen der Batterien) blinkt die LED zur Begrüssung merhmals. Ansonsten leuchtet die LED bei jeder Übertragung des Status kurz.
Über eine kurze Betätigung des Tasters S1 (entprellt) wird manuell das Senden des aktuellen Status getriggert.
Eine längere Betätigung des Tasters versetzt das Modul in einem Programmier-Modus. Die LED leuchtet dauerhaft. Ein Timeout oder eine erneute Betätigung des Tasters versetzen das Modul im regulären Betrieb.
Im Programmiermodus wartet das Modul auf den Empfang eines FS20-Schalt-Telegram. Von diesem Telegram werden
Housecode und
Buttoncode ermittelt und dauerhaft gespeichert. Diese Werte werden für die zukünftige Übertragung des aktuellen Status verwendet. Das Modul wird wieder in den regulären Betriebsmodus versetzt und somit die LED ausgeschaltet.
Das FS20-Telegram besteht aus 4 Bytes:
- Housecode (2 Bytes)
- Buttoncode (1 Byte)
- Commandcode (1 Byte) 0x00 bedeutet feucht, 0x11 bedeutet trocken
Housecode und
Buttoncode sind konfigurierbar und müssen bei einem Restart/Bateriewechsel bestehen bleiben. Sie können über den Program-Modus geändert werden. Als Default werden folgende Werte verwendet:
Housecode=0x1234,
Buttoncode=0x56.
Durch die obige Festlegung des Commandcodes kann das Modul zur direkten Ansteuerung von FS20ST (Funksteckdosen) verwendet werden. Die Steckdose schaltet sich ein, wenn das Modul Trockenheit meldet. (Tip: Die Steckdose sollte den Timer aktiviert haben, sodass nach einer definierten Zeit die Steckdose sich selbst ausschaltet.)
Die Firmware ist so zu gestalten, dass der Stromverbrauch so minimal als möglich ist und somit die Batterielaufzeit maximiert wird.
Umsetzung
Aus den Anforderungen ergibt sich folgender Zustandsautomaten:
Init
Dieser Zustand wird direkt nach dem Anlegen der Stromversorgung bzw. nach einem Reset erreicht.
Es werden hier die IO-Ports und der CC1100-Chip initialisiert.
Die Werte
Housecode und
Buttoncode werden aus dem EEPROM gelesen. Wenn noch keine Werte hinterlegt sind, werden die Default-Werte (siehe Anforderungen) verwendet.
Die Interrupt-Register werden so eingestellt, dass eine Flankenänderung an Taster- (SW) und Sensor-Eingängen zu einem Interrupt führen und somit der Microcontroller aus dem Sleep-Status geweckt wird.
Der Watchdog wird als ein sehr langsamer Timer mit Interrupt-Auslösung initialisert. Somit wird regelmäßig das Modul vom Watchdog-Timer geweckt und es wird ein Status-Check druchgeführt.
Die LED wird zur Signalisierung der Bereitschaft einige male zum Blinken gebracht.
Sleep
Der Sleep-Zustand ist der zentrale Status in dem das Modul sich die meiste Zeit befindet. Hier wird das Modul in den stromsparenden Powerdown-Sleepmode versetzt. Die LED und die Sensor-Aktivierug werden abgeschaltet. Sie kann dann durch den Taster, Sensor-Änderung oder Watchdog-Timer-Interrupt geweckt werden und wird hier dann in den Zustand periodic Statuscheck übergehen.
periodic Statuscheck
Der Zustand periodic Statuscheck kann nur vom Sleep-Zustand durch den Taster, Sensor-Änderung oder Watchdog-Timer-Interrupterreicht werden.
Hat sich der Sensorwert geändert, so wird dieser übertragen (Zustand Transmit Sensorvalue). Der Sensorwert wird auch übertragen, wenn seit der letzten Übertragung ca. 1Std vergangen ist (Zustand Transmit Sensorvalue mit force Transmit-Flag).
Es wird geprüft, ob der Taster gedruckt wurde und die Dauer kurz (weniger als ca. 1s) oder lang ist.
Wurde der Taster nur kurz gedruckt und wieder los gelassen, wird in den Zustand Manual Transmit gewechselt.
Wurde der Taster lang gedruckt findet ein Wechsel in den Zustand Program-Mode statt.
Ansonsten wird das Modul wieder in den Sleep-Zustand versetzt.
Manual Transmit
Der aktuelle Sensorwert wird übertragen (Zustand Transmit Sensorvalue mit force Transmit-Flag), auch wenn keine Änderung vorliegt.
Transmit Sensorvalue
Wenn eine Änderung des Sensorwertes vorliegt oder das Flag force-Transmit gesetzt ist, wird der aktuelle Sensorwert übertragen. Dabei wird der Timer für periodische Übertragung zurückgesetzt und der aktuelle Sensorwert zwischen gespeichert.
Die LED wird bei einer Übertragung kurz zum blinken gebracht.
Danach wird das Modul in den Sleep-Zustand versetzt.
Program-Mode
Im Program-Mode wird die LED dauerhaft bis zur Beendigung des Program-Mode Zustands eingeschaltet. Desweiteren wird der Funkchip in den Empfangsmodus umgesetzt und es wird auf ein eingehender FS20-Telegramm gewartet.
Falls innerhalb von ca. 10sec kein FS20-Telegramm eingeht oder der Taster getätigt wird, wird die LED ausgeschaltet und der Funkchip in den IDLE-Zustand versetzt. Das Modul wird in den Sleep-Zustand überführt.
Wird ein FS20-Telegramm empfangen wird das Modul in den Zustand Svae Config überführt. Dabei wird die LED ausgeschaltet und das Funkchip in den IDLE-Zustand versetzt.
Save-Config
Aus dem empangegenen FS20-Telegramm werden der Housecode und Buttoncode entnommen und im EEPROM gespeichert. Auch die variablen für
Housecode und
Buttoncode werden mit diesen Werte belegt, sodass bei der nächsten Übertragung diese Werte Verwendung finden.
Anschliessend wird das Modul in den Zustand Transmit Sensorvalue mit force Transmit versetzt.
Energieverbrauch
Der Stromverbrauch der Schaltung je nach Zustand und Versorgungsspannung ist typisch wie folgt:
| Zustand | Stromverbrauch 1,8V | Stromverbrauch 3V |
|---|
| Normal (Funk-Chip ist ausgeschaltet, 8MHz CPU-Takt) | 3mA | 5mA |
| Sende / Empfang (Funk-Chip ist eingeschaltet) | 19mA | 24 mA |
| Schlaf-Zustand (Funk-Chip ist ausgeschaltet, Das Modul befindet sich im Sleep-Mode Power Down) | 1,4mA | 1,6mA |
Da handelsüblische Batterien eine Spannung von 1,5V oder 3V liefern, wird hier die Verwendung von 2x1,5V-Batterien bzw. eine CR123A-Fotobatterie(3V) angenommen.
Da das Modul sich in der Regel im Schlaf-Zustand befindet, kann von einem durchschnittlichen Stromverbrauch von 2mA ausgegangen werden.
Gemäß Herstellerangaben und Wikipedia haben 2 AAA/Micro-Batterien eine Kapazität von ca. 1.000mAh. 2 AA/Mignon-Batterien bringen ca. 2.000mAh. Eine CR123A/Foto-Batterie hat eine Kapazität von ca. 1.300mAh. Bei der Annahme von gleichmässiger Entladung und vereinfacht kann die Batterielebensdauer bei diesem Modul als Batteriekapazität / 2mA überschlagen werden. Somit ergibt sich theoretisch bei der Verwendung von 2 AA/Mignon-Batterien eine
Batterielebensdauer von maximal
41 Tagen. (Nebenbei: Bei der Verwendung von zwei Baby-Batterien liegt der Wert dann bei ca. 330 Tagen).