Zusammen mit Techdata haben wir bei cod.m auf Basis des Giess-o-Mats einen Bluetooth Low Energy-Bodenfeuchtesensor (soil moisture sensor) gebaut und an die IBM BlueMix Cloud angebunden: https://ibm.techdata.de/weitere-informationen/smart-garden
Technisch misst ein kaskadierter Schmitt-Trigger die Frequenz an den beiden Kontaktflächen, die im Erdreich sitzen. Anhand dieser Frequenz kann eine Aussage über die Bodenfeuchte getroffen werden.
Die Sensoren laufen mit CR2032 Knopfzellen und bilden ein Bluetooth-Mesh. Auf einem RaspberryPi befindet sich ein weiterer Node, der das Mesh zugänglich macht und die Daten an die BlueMix Cloud sendet.
Das zur Präsentation und Proof-of-Concept geplante Projekt hat doch ein wenig Aufmerksamkeit erzeugt 😀
Um nicht auf Batterien angewiesen zu sein, haben wir uns Gedanken gemacht, wie man einen solchen Sensor kabelgebunden realisieren könnte. Die Entscheidung fiel hier recht schnell auf 1-Wire, da man damit ohne großen Implementations- und Verkabelungsaufwand einen Bus mit bis zu 100 Metern aufbauen kann. Außerdem haben wir damit durch andere Projekte genug Erfahrung und können bei dieser Idee darauf bauen. Zusätzlich hatte ich zwischenzeitlich die vorzügliche OneWireHub-Bibliothek gefunden, mit der man ohne große Probleme 1-Wire-Devices emulieren kann.
Da wir ja auch mit der Loxone-Welt recht verbunden sind, haben wir uns für die Emulation eines DS2438 entschieden. Der DS2438 ist eigentlich ein Batteriewächter, der neben Temperatur auch Spannungen von 0.00-10.00V messen und übertragen kann – damit hätten wir 0-100% als Wert. Dieser Baustein wird bereits bei vielen Fühlerprojekten im Loxone-/1-Wire-Universum genutzt und kann ohne Probleme über die 1-Wire-Extension an den Miniserver angebunden werden. Natürlich auch an jeden anderen Master, der mit dem DS2438 klar kommt (owfs, etc.).
Die Platine wurde so klein wie möglich gehalten und im Prototyp mit passiven Bauteilen der Größe 1206 gefertigt. Auf der 1-Wire Seite des Sensors haben wir außerdem einen MAX9940 zum Schutz des Microcontrollers verbaut. Der Sensor benötigt eine eigene 5V-Stromversorgung da eine parasitäre Speisung aufgrund des Stromverbrauchs des Microcontrollers nicht in Frage kam.
Ein weiteres Problem war, dass jedes 1-Wire-Gerät eine (weltweit) eindeutige Seriennummer hat und diese Seriennummer auch nicht doppelt auf dem Bus vorkommen darf, weil die einzelnen Geräte darüber adressiert werden. Da der DS2438 auch einen Temperaturfühler integriert hat, haben wir kurzerhand einen DS18B20 mit auf die Platine gepackt, um erstens die Temperatur zu messen und um uns zweitens die MAC (Seriennummer) zu „borgen“. Nach Anpassung des Family-Codes haben wir damit wieder eine eindeutige Seriennummer, die uns erlaubt mehrere Sensoren pro Bus zu nutzen. Natürlich könnte man auch einfach eine beliebige Seriennummer vergeben, hätte aber eben dann das Problem, dass man jeden Sensor einzeln mit einer eigenen MAC programmieren müsste.
Nun möchte man ja, wenn möglich dass die Sensoren lange halten, sowie Wind und Wetter trotzen. Wir arbeiten gerade daran, die Platine komplett nach IP67 zu vergießen, sodass man sie sogar vergraben könnte. Das Problem, welches damit einhergeht ist, dass man dann keine Software mehr auf den Microcontroller spielen kann oder anderweitig eine Konfiguration vornehmen kann – außer eben über die nach Außen geführte 1-Wire-Schnittstelle…
Auch dazu haben wir eine Lösung erarbeit: Der DS2438 hat neben seiner Funktion als Batteriewächter und Temperaturfühler auch einen über 1-Wire beschreibbaren Speicherbereich – „40-byte nonvolatile user memory“. Das 1-Wire Protokoll erlaubt es, diesen Speicher zu bedienen und so können wir darin Konfigurationsparameter ablegen und der Microcontroller kann diese verwerten. Dadurch haben wir die Möglichkeit, gemessene Frequenzen als „trocken“ oder „feucht“ zu definieren. Je nach vorhandenem „Erdreich“ kann die Messung des Sensors nämlich variieren. In Pflanzenerde beispielsweise ist ein anderer Zustand „feucht“ als in einem Glas Wasser.
Wir dachten uns, dass diese Konfiguration am besten über ein Mobilgerät erfolgen sollte. Es gibt also nun ein ESP8266 basiertes Gerät, mit dem man sich per WLAN verbindet. Dieses Interface wird statt dem 1-Wire-Master am Bus angeschlossen und man kann damit jeden Sensor kontrollieren und konfigurieren. Zum Beispiel kann man den Sensor, der ja nur durch seine Seriennummer identifiziert wird, blinken lassen, um ihn zu lokalisieren. Zusätzlich kann man festlegen, ob er bei der Messung generell blinken soll und natürlich die oberen und unteren Frequenz-Grenzwerte für feucht/trocken speichern.
Für die Zukunft ist durchaus geplant, dass das Konfigurationsgerät ein eigenständiges Gateway mit MQTT- oder HTTP-Anbindung sowie eigenem Status-Webinterface wird. Der Anbindung an Systeme ohne eigene 1-Wire-Schnittstelle steht damit nichts mehr im Wege.
Schlussendlich ist der Sensor also nichts anderes als ein ATMega328p, ein kapazitiver Bodenfeuchtesensor und ein DS18B20 zur Temepraturmessung. Die Software wie auch die Hardware werden als Open-Source veröffentlicht werden und so könnte sich jeder auch den Sensor selbst bauen 👍
Der Sensor wird, sowie er fertig ist, bei uns im Shop verkauft. Bis dahin halte ich euch natürlich weiter auf dem Laufenden und freue mich über eure Anregungen und euer Feedback.
Update
Die Produktionsprototypen der Sensoren sind fertig. Das erste Mal im VQFN-Package gelötet und es sieht gut aus!
Im Bild ist auch der oben erwähnte Hub zu sehen. Damit können – wenn benötigt – die Grenzwerte, Intervalle, etc. der Sensoren konfiguriert werden.