Powered By Blogger

Samstag, 13. Dezember 2014

darf es noch ein wenig Wasser sein? - Messung der Bodenfeuchte

Remote XBee Feuchtemessung


Warum
Ja warum? Ich kann nur meinen Unmut darüber zum Ausdruck bringen, dass entweder mir oder meinen in der Urlaubszeit angeheuerten Lackaien es nicht gelungen ist, meine durchaus spärlich vorhandenen Pflanzen mit genügend Wasser zu versorgen. Oft, ich will nicht sagen fast immer ist es ihnen nicht gelungen diese vor dem Tod oder dem Scheintod zu bewahren. Nun ich bin selbst nicht der mit dem grünsten Daumen, daher musste technische Abhilfe her. Gesagt getan.


Wie
Bei der Bodenfeuchtebestimmung gibt es zwei vorrangige Möglichkeiten. Es kann per Leitfähigkeit bestimmt werden, wie viel Wasser sich im Boden befindet oder per kappazitiver Messung. Bei der Leitfähigkeit ist es entscheidend zu wissen, wie groß der Abstand der Elektroden ist, es spielt der Strom eine Rolle und da die Elektrode freiliegend sein müssen, können diese korrodieren. Im allgemeinen gelten die Gesetze der Elektrolyse (der Salzgehalt im Boden beeinflußt natürlich auch den Leitwert). Nun es spricht viel dafür, diese Methode nicht zu nehmen und so ist es auch. Ich habe die kappazitive Messung ausgewählt. Diese misst im Prinzip die Dichte der Erde. Das bedeutet es fließt kein Strom durch die Erde sondern es wird die Dichtenänderung per Schwingkreis ermittelt.


Was Google sagt
Das Rad wurde natürlich schon erfunden, siehe hier:

[1] http://wemakethings.net/chirp/

[2] http://www.mikrocontroller.net/topic/169824?goto=new#new
[3] http://www.mikrocontroller.net/topic/335407?goto=new#new
[4] http://www.mikrocontroller.net/articles/Giess-o-mat
[5] www.weisser-engineering.de

Wie das auch immer wieder bei den Autos ist, es gibt jedes Jahr neue und im Endeffekt fahren sie auch nur von A nach B und auch hier funktioniert es zwar aber genau das was ich suchte war nicht vorhanden, daher ging nix über angepasst nachbauen...


Versuche
Als ersten Versuch habe ich den Schaltungsaufbau Flugverdrahtet und eine Platine verwendet, die nur als Sensor in der Erde steckt.Funktioniert!!
erster Test










Als nächstes habe ich mir eine Demoplatine besorgt, die dann die Elektronik aufgelötet bekommen hat. Diese hat auch gut funktioniert, nur rechteckig und zu lang. Von der Schaltung her, viel zu viele (nutzlose) Bauteile.
Demoplatine










Dann kam endlich der erste eigene Prototyp! Bestehend aus Platine, 74HC14, Wiederstand und Kondensator + Kabel. Eingegossen in Heißklebe. Tadellose Funktion bisher...
erster Prototyp










Nach den ganzen Prototypen kommt hier der eigentlich Sensor. Was die anderen def. nicht können, ist die Messwerte per Funk an einen Zentralen Server schicken. Diese Lösung habe ich per XBee UART Brücke gelöst. Also ein Atmel Mikrocontroller misst dank der funktionierenden Feuchteschaltung den Wert und schickt ihn per Funk an einen Raspberry Pi. Der Sensor hat drei (3) AAA Batterien und eine stromsparende Software, die alle 5 Minuten aufwacht und die Daten incl. Temperatur überträgt. Damit bleiben auch entfernte Blumenkübel immer im Blick.

remote Sensor mit XBee












Schaltung
Die Schaltung ist aus den gefundenen Google Links übernommen und funktioniert tadellos. Es entsteht je nach verwendetem Wiederstand (empfohlen wird 1x 1.0M) eine perfekte Rechteckspannung. Die Frequent variiert je nach Länge des Sensorelementes.
Schaltplan
  










Messung / Ankoppelung an den Mikrocontroller
Die Messung der Frequenz sollte über den Timer/Counter Input Capture Pin ICPx laufen. Hier wird der Timer laufen gelassen und sobald der Input Capture Pin seinen Pegel ändert (je nach Einstellung, siehe Datenblatt) wird der Wert bis zu dem es der Timer geschafft hat in ein Register (ICRn) gepeichert. Dieses muss nurnoch ausgelesen werden und schon hat man die Frequenz mit der der Schwingkreis schwingt, ähm wie feucht der Boden ist. Eine Umrechnung zwischen Frequenz und Feuchte habe ich mir erspart, das das wohl etwas zu schwierig ist (unterschiedliche Erdarten,steinig, tonig etc..). Bei der Messung mittels ICPx sollte man darauf achten, dass a) der Schwingkreis für den eigenen Schaltungsaufbau nicht zu schnell schwingt. Sonst läuft der Mikrocontroller mit Interrupten über und kann nix anderes machen. Und b) im Interrupt selber der Capture Wert vom aktuellen Timerwert abgezogen wird. Das hängt damit zusammen, dass der Mikrocontroller bei erreichen des Interruptes nur das Interruptflag TIFR setzte. Ausgeführt wird dieser erst dann, wenn er an Reihe ist. Daher läuft der Timer evtl. weiter und ein falscher Wert wird in ICRn gespeichert. Daher lassen wir den Timer mit der Differenz loslaufen.

ISR (TIMER1_CAPT_vect) {

    TCNT1 = TCNT1 - ICR1;
    compare_register = ICR1;

}


(Das Beispiel steht exemplarisch für einen Atmel ATmega8)


Ausblick
  • Ich baue gerade nur eine Version auf, die per LED und Piezo die Feuchtigkeit anzeigt. 
  • In Zukunft wird die Erfassung der Feuchtewerte auch eine gesteuerte Wasserzufuhr ermöglichen 

Feedback:
blumengiesser@posteo.de