Kapazitiven Erdfeuchtigkeitssensor „Giess-o-Mat“ am Raspberry Pi auslesen

Im Bereich der Raspberry Pi Bodenfeuchtigkeitsmessung gibt es resistive und kapazitive Sensoren, welche jeweils Vor- und Nachteile haben. Der neuartige Raspberry Pi Giessomat / „Giess-o-Mat“ Sensor bietet eine dauerhaft präzise kapazitive Messung, was u.a. in unserem Raspberry Pi Gewächshaus sehr interessant sein kann.

In diesem Tutorial geht es um den Aufbau des Raspberry Pi Giessomat sowie dem Auslesen der Frequenz, mit Hilfe derer die relative Erdfeuchte errechnet werden kann.

Da ich nun von mehreren Usern gebeten wurde und es zu dem Thema (im Hinblick auf den Raspberry Pi) nicht viel Stoff gibt, hoffe ich, dass dieses Tutorial die Benutzung etwas vereinfacht.

 

Zubehör

Dazu habe ich folgendes Zubehör bzw. Bauteile genommen:

Ich empfehle gleich die beschichtete Version der Platine zu nehmen, da diese ansonsten in jedem Fall aufwändig per Hand versiegelt werden muss. Die mitgelieferten Bauteile der Platine/Sensor (weiter unten gelistet) sind im SMD Format und daher nicht unbedingt für Löt-Anfänger geeignet. Mit ein wenig Geschick sollte die Größe aber kein Problem darstellen.

Der Frequenzteiler kann auch durch einen Widerstand ersetzt werden. Dabei wird der 100kΩ Widerstand an Position R3 (siehe weiter unten) um einen größeren getauscht: Soll die Frequenz halbiert werden, so wird ein doppelt so großer Widerstand genommen, usw. Dabei ist es natürlich möglich mehrere Widerstände zu kombinieren.

 

Vorteile gegenüber resisitiven Feuchtigkeitssensoren

Resisitive Erdfeuchtigkeitssensoren sind oft nicht von Dauer.

In einem vorherigen Tutorial haben wir die sehr günstigen Bodenfeuchtigkeitssensoren am Raspberry Pi angeschlossen und ausgelesen. Diese Bauart hat allerdings ein Problem, welches im Laufe der Zeit auftritt: Korrosion. Nach längerer Benutzung bei gleicher Polung zersetzen sich oftmals die Sensoren teilweise. Dies ist weder für das Messverhalten noch für die Bodenwerte gut.

Diese Gefahr besteht bei kapazitiven Sensoren hingegen nicht. Dabei wird allerdings kein analoges Signal ausgegeben, welches mit einem MCP3008 ADC ausgelesen werden kann, sondern eine Frequenz, die unterschiedlich hoch ausfällt – je nach Feuchtigkeit der Erde (je nasser, umso niedriger).

Die ausgegebene Frequenz (bis 450kHz) ist zu viel für den Raspberry Pi, weshalb wir entweder einen Frequenzteiler nehmen, der diese eben um einen gewissen Dividenden teilt, oder einfach einen größeren Widerstand. Der Nachteil eines Frequenzteiler ist der Preis, da ein einfacher Widerstand quasi nichts kostet.

 

Zusammenbau des Raspberry Pi Giessomat

Der Giess-o-Mat kommt gewöhnlicherweise nicht zusammengebaut, weshalb die einzelnen SMD Bausteine erst noch auf die Platine gelötet werden müssen. Da diese sehr klein sind, hilft ein Blick auf derern Beschriftung. Außerdem habe ich versucht jeden Schritt mit Bildern zu dokumentieren, damit nichts schief geht.

Folgender Hilfszettel findet sich in der Tüte der Bauteile:

Bezeichnung Typ Aufschrift Funktion
T1 BC847B 1Ft od. 1FW Transistor
C1 10μF 10V Kondensator
IC1 74HC14D HC14 IC
D1 BZX84B5V6 T12 oder Z3 Zehnerdiode 5v6
R1 1k 102 od. 1001 Widerstand 1k
R2 100R 101 od. 1000 Widerstand 100R
R3 100k 104 od. 1003 Widerstand 100k

Beginnen wir mit dem IC. Dabei ist es wichtig, dass die Seite mit der Markierung „nach oben“ zeigt, wo auf dem PCB die kleine runde Einkerbung zu sehen ist.

Der Kondensator (C1) hat keine Aufschrift und es spielt keine Rolle, welche Seite wo verlötet wird:

Bei den Widerständen (R1, R2, R3) musst du vorsichtig sein, da die SMD Beschriftung nicht der eigentlichen Größe entspricht. Auf dieser Seite kannst du einfach den abgebildeten Wert des SMD Widerstands eingeben und dir die echte Größe berechnen lassen.

Falls du keinen Frequenzteiler hast, kannst du (wie oben beschrieben) auch einfach einen größeren Widerstand anstelle von R3 nutzen.

 

Anschließend fehlen nur noch Transistor (T1) und Zehnerdiode (D1), welche die gleiche Form haben. Hier hilft wieder die Beschriftung von oben:

 

Zusammenbau Frequenzteiler (optional)

Auf die gleiche Weise wie den Giessomat bauen wir auch den Frequenzteiler zusammen, sofern wir einen besitzen.

Zunächst die Tabelle:

Bezeichnung Typ Aufschrift Funktion
T1 BC847B 1Ft, 1F-, 1FW Transistor
C1 10μF 10V Kondensator
IC1 74HC4040 HC4040 IC
D1 BAS40 43t, 43-, 43p, 43W Schottky Diode
R1, R2 2k2 222, 2201 Widerstand 2k2

Auch hier beginnen wir mit dem IC, dem Kondensator sowie den Widerständen. Die Größe von R1 und R2 ist identisch.

Fehlen noch Transistor (T1) und die Diode (D1). Achte dabei wieder auf die Beschriftung, da die Bauform identisch ist:

 

Zu guter letzt werden die beiden Kontakte von „:16“ zusammengelötet, wodurch eine 16-fach geringere Frequenz ankommt.

Außerdem habe ich die beiden Platinen noch miteinander verlötet und an den Frequenzteiler ein paar Kontakte für die Jumper Kabel angelötet.

Raspberry Pi Giessomat

 

 

Skript zum Auslesen der Frequenz

Schließe zunächst V+ and 3.3V vom Raspberry Pi an, GND an GND und OUT z.B. an GPIO21.

Zum Auslesen der Frequenz am Raspberry Pi eignet sich die PiGPIO Bibliothek, welche Bibliotheken für C(++), Python, etc. mitbringt. Auf gewöhnlichen Raspbian Versionen (nicht Lite) ist es bereits vorinstalliert, ansonsten können wir es hiermit nachinstallieren:

sudo apt-get update
sudo apt-get install pigpio python-pigpio python3-pigpio

 

Anschließend erstellen wir eine neue C-Datei, welche zum Auslesen der Frequenz da ist:

sudo nano freq_count_1.c

Diese Datei bekommt folgenden Inhalt (Beispiel von hier). Mit STRG+O speichern und STRG+X zum Terminal zurückkehren.

Anschließend kompilieren wir die Datei:

gcc -Wall -pthread -o freq_count_1 freq_count_1.c -lpigpio -lrt

Nun kann das Programm bereits aufgerufen werden. Dabei muss nur der entsprechende GPIO Pin angegeben werden, an welchem „OUT“ verbunden ist (bspw. 21):

sudo ./freq_count_1 21

Anschließend wird die Nummer des GPIOs, gefolgt von der Frequenz (in Hz) angezeigt. Als Test kannst du den Sensor in ein Glas Wasser stellen und wirst beobachten, wie sich die Frequenz verringert.

Im einem Projekt wie dem Raspberry Pi Gewächshaus gilt es nun, den optimalen Wert herauszufinden. Dies ist allerdings abhängig von der Erde, der Bewässerung und den Pflanzen und kann daher nicht eindeutig beantwortet werden. Bei mir ergab volle Nässe (Glas Wasser) eine Frequenz von ca. 1000Hz, wobei totale Trockenheit (kein leitendes Material) ungefähr 10kHz (mit einem Frequenzteiler von 16).

Solltest du ein Python Skript nutzen, so kannst du das obere C-Programm auch erweitern/verkürzen und in dein Python Skript einbinden.

 

Weitere Informationen zum Thema Giess-o-Mat

Weiterführende Informationen zu dem Gießomat gibt es u.a. auf den nachfolgenden Seiten, wobei es sich dabei meist um die Benutzung mit Arduino und/oder ESP8266 und weniger mit dem Raspberry Pi geht. Dennoch denke ich, dass es lesenswerte Links für Interessierte sein können:

Falls du eine weitere gute Quelle kennst, kannst du sie gerne als Kommentar posten, sodass ich die Liste erweitern kann.

50 Kommentare

  1. Es gibt auch noch andere Methoden die Feuchtigkeit via pi zu messen z.b. über den wärmeleitfähigkeit des Bodens (man misst die Temperatur und führt dann Wärme zu und misst die zeit die vergeht bis z.b. die Erhöhung um 3 Grad erreicht ist)
    leider können die Chinesen den gies o mat besser bauen und kostet fertig auch nur zwischen 7-15€ 😉 man muss ihn auch nicht schützen vor Feuchtigkeit da dies bereits vom hersteller passiert.

    Antworten
    • Hi Peddi,
      dein Ansatz klingt interessant, hast du sowas bereits umgesetzt?
      Falls du Links zu den Sensoren hast, ich konnte keine gute Alternative finden. Und die resistiven China-Sensoren sind auch nur für eine gewissen Zeit etwas.
      LG, Felix

      Antworten
  2. Die Chinaböller haben nichts mit dem Giesomaten zu tun !!!
    Diese funktionieren eben restistiv und den damit verbundenen Nachteilen !!!

    Antworten
    • Du denkst an die alten billigen Widerstandsmesser(ja die taugen 0 und man vergiftet die Pflanzen nur selber) 😉 schau mal weiter unten in die Kommentare, z.b
      phantomanic hat das perfekte Beispiel zu den „richtigen“ geschickt.

      Antworten
  3. @Ponos: Deine Aussage ist pauschal und meines Erachtens nicht korrekt, wenngleich es vermutlich auf 99% zutrifft. 🙂

    https://www.china-gadgets.de/xiaomi-mi-pflanzensensor/

    und der soll nicht nur per Xiaomi App auslesbar sein, sondern auch mit dem Pi:
    https://github.com/open-homeautomation/miflora

    Wobei ich mich mangels Zeit noch nicht abschließend mit dem Thema beschäftigt habe….

    V.a. da ich aktuell primär nur ein System zur Feuchtigkeitsanzeige brauche… und da das „fahrbare“ Kübelpflanzen sind, müsste das per Funk gehen. Theoretisch müsste der „Giessomat“ auch erweiterbar sein, so das er meinetwegen alle 15 minuten misst und dann das Signal per BTLE weitergibt…

    Antworten
  4. Chirp! muss umbedingt getaucht werden.
    Ansonsten das selbe Problem wie alle kapazitiven Sensoren: Diffusion von Wassermolekülen.
    Leider haben meine ersten zwei Chirp dadurch gleich mal den Geist aufgegeben.
    Mit der ausgelieferten Vergussmasse taugt das Ding rein gar nichts…..

    Antworten
  5. Achtung: Finger weg vom Chirp! aus China.
    Software ist einfach nur mies !!!
    Die besagte Beschichtung gar nicht vorhanden !!!
    Einfach nur billig !!!
    Besser den Giesomat kaufen und viel Frust sparen.
    (Ausser ihr könnt den AVR auf dem Chirp selbst programmieren)

    Antworten
  6. Danke,
    schöne Zusammenfassung wie der Sensor am RPi betrieben werden kann.
    Nur aus der ‚Zehnerdiode‘ sollte eine ‚Z-Diode‘ gemacht werden, das sieht professioneller aus.
    Und wenn man den Sensor mit 3,3V versorgt kann man sich auch gleich sparen.

    Antworten
  7. Also ich weiß nicht sowohl mein Python script als auch mein Oszilloskop zeigen mir ungefähr die doppele Frequenz an als das hier vorgestellte Programm. Hat jemand das gleiche festgestellt oder mache ich etwas falsch? Trotzde danke für den Beitrag :).

    Antworten
  8. Im Momment gibt es eine Aktion:
    Coupon: hitze2017
    Gibt 10% auf alles!
    Aber scheinbar nur bis Ende Juni.

    Antworten
  9. Wir haben eine Bewässerungsanlage mit einem Arduino gebuat, die wir über einen resistiven Feuchtigkeitssensor steuerten (also über den mV-Wert). Leider ist dieser wegkorridiert. Weiß jemand, wie man die Frequenz im Arduino ausliest bzw. das Auslesen programmiert (Codebeispiel?)?

    Antworten
  10. Warum wird dieses Projekt nicht unter „Projekte“ angezeigt?
    Ich bin jetzt rein zufällig darauf gestossen und werde es schnellst möglich umsetzen 🙂

    Antworten
  11. Hey,
    ich habe das Tutorial mit den selben Bauteilen 1 zu 1 nachgebaut nur leider gibt mein sensor immer 0 aus.
    in der Konsole steht:
    21=0

    bin leider ein absoluter Anfänger und mache das ganze für ein abschlussprojekt.
    hat evtl jemand eine Idee oder einen Ratschlag wo das Problem liegen könnte?
    Lg aus Berlin!

    Antworten
  12. Pegelwandler benutzt?
    Wenn ja:
    Wie hoch ist die Frequenz, welche der Giesomat VOR dem Pegelwandler ausgibt?
    Wenn nein:
    Wie hoch ist die Frequenz, welche der Giesomat NACH dem Pegelwandler ausgibt?

    Antworten
  13. Hallo.

    Mit: „sudo ./freq_count_1 21“ wird das Programm ausgeführt und einem Ausgang zugeördnet.

    Wie kann ich das Ergebniss jetzt in einem Programm verwenden und darüber einen ein <= vergleich führen, darüber eine Ausgang steuern?

    Antworten
  14. Hallo, hab das Tutorial so nach gebaut und bekomme nun leider keine konstanten Werte, welche ich sinnvoll weiterverarbeiten kann.

    Sieht folgendermaßen aus:

    109
    96
    25
    34
    20
    8
    82
    12
    102

    usw.

    Wie könnte ich den Fehler einkreisen?

    Beste Grüße
    Stanef

    Antworten
  15. Was denkt ihr, ist der optimalste Widerstand zur Frequenzteilung für die Benutzung vom Raspberry Pi. Außerdem würde ich die Sensordaten gerne in meinen Python Script einarbeiten, hat da jemand so etwas wie ein Beispielprogramm um den Feuchtigkeitssensor auszulesen?

    Antworten
    • Hallo Maretius. Nimm das Skript oben zum Auslesen. Es funktioniert. Ich habe jetzt einen 200K-Widerstand drauf und ja, es kommen halt Werte raus. Steht der Sensor im Wasser erhalte ich 33200
      und in der Luft 5700. Leider gibt es vom Hersteller keine Tabelle aus der hervorgeht, welche Wertespanne „richtig“ wäre.
      Dieses Messverfahren schätze ich persönlich auch als ungeeignet ein, die Bodenfeuchte zu bestimmen. Es gibt schlichtweg zu viele Störfaktoren (Salzgehalt, Temperatur), die z.T. auch gewollt sind. Zum Beispiel brauchen Wurzeln Sauerstoff und dieser ist in lockerer Erde häufiger anzutreffen als in dichter. In verdichteter Erde kommst Du mit diesem Verfahren aber zu ganz anderen Werten. Und nach einem Gießvorgang lockerer Erde ändern sich die Zahlen weil die Bodendichte partiell! zunimmt (In der Regel gibt man die Erde ja nicht einen Topf mit Wasser und vermischt diese).
      Du kannst es aber mal mit von „unten gießen“ probieren, indem du den Topf in Wasser setzt bis die Erde absolut gesättigt ist. Dann ist die Erde zumindest gleichmäßiger bewässert.

      Antworten
    • Hi Felix,
      Deine Tutorials zum automatischen Gewächshaus und zum kapazitativen Feuchtesensor sind super. Du verweist auch in beiden aufeinander, leider ist mir (und wohl auch vielen anderen hier) total unklar wie man beide zusammenführt, also im Gewächshausprojekt diesen kapazitiven Sensor im Python Programm auslesen und zur Pumpensteuerung nutzen kann. Oben im Text verweist auf https://docs.python.org/2/extending/extending.html#id5 hier in den Kommentaren nun auf https://docs.python.org/2/library/os.html. Tja, weder das eine noch das andere ist wirklich trivial und für Anfänger 1:1 einfach umsetzbar… Könntest Du nicht bitte ein Python Beispiel geben / Dein Gewächshaustutorial um diesen Sensor erweitern??? Wäre sehr nett…

      Antworten
  16. hi,
    Ich finde ein paar Komponenten für den Frequenzteiler nicht
    BC847B hab ich keine Ahnung welchen und 74HC4040 gibt es unterschiedliche bei Conrad:
    Logik IC – Zähler nexperia 74HC4040D,652 Binärzähler 74HC Negative Kante 98 MHz SO-16 ( Artikel 1115002 – 62)
    und
    Logik IC – Zähler nexperia 74HC4040D,653 Binärzähler 74HC Negative Kante 98 MHz SO-16 ( Artikel 1115001 – 62)
    welcher ist der richtige oder egal?

    Antworten
  17. Ist es möglich mehr als zwei Sensoren am Raspberry zu betreiben? Es gibt ja nur zwei GPIOs die SPI können.
    Ich habe schon gegoogelt und bin auf den Hinweis gestoßen einen Muliplexer einzusetzen. Ich verstehe nur nicht genau wie.

    Antworten
    • Ich kann meine Frage nun selbst beantworten. Es gibt viel mehr als nur zwei SPIs (beim Raspberry Pi 3). Ich dachte Raspi wäre auf zwei begrenzt. Hat sich also erledigt.

      Antworten
  18. Warum kaufst du keinen ferigen Bausatz von „Ramser Elektrotechnik“ ?
    Der hat doch alle Bauteile dabei.
    Die paar Cent spart man am falschen Platz.
    Habe in einem Forum gelsen, das die Sensoren einen eigenen Auswerte IC bekommen sollen.
    Da bin ich mal gespannt.

    Antworten
  19. Hallo Zusammsn,

    Erst mal danke für all diese Informationen. Ich bin auf dem Bereich der Elektrotechnik nicht sehr bewandert und Versuche daher die Sache zu verstehen.

    Anstelle des Frequenzwandlers kann man ja um Geld zu sparen einen „Vielfaches vom 100kΩ Widerstand“ verwenden. Der Frequenzwandler selbst bringt ja keine weiteren Vorteile, wenn ich das richtig verstanden habe oder? Ein wie Vielfaches des 100k Widerstandes ist hier zu empfehlen bzw. was ist für den Raspberry akzeptable Frequenz?

    Vielen Dank und Grüße
    David

    Antworten
    • Das wüsste ich auch gerne… In einer der anderen Kommentare steht etwas von 200k, aber ob das genügt weiß ich leider auch nicht.

      Antworten
  20. Mit welchem Verbindungsteil verbindet man die beiden Platinen (Giessomatic und Frequenzteiler)? Geht das mit einem Stück Draht oder braucht man male to male Jumper-Kabel? Oder wie macht man das?

    Antworten
  21. Hat es mittlerweile jmd geschaft eine Pumpe zusammen mit dem giess- o-mat sensor anzusteuern und würde sein Skript zur verfügung stellen?

    Antworten
    • Dickes Lob an euch drei : )
      Die Frequenz auslesen hat ja prima funktioniert, nur wie man ein Relais damit zum schalten bringt
      das war mir völlig unklar. Jetzt kann ich endlich weiter tüfteln…
      Danke euch

      Antworten
  22. Hat das System schon mal jemand mit einem Arduino Undo R3 gelöst?
    Der könnte das Signal auswerten und an einen RPI weitergeben!

    Antworten
  23. Hi Leute,
    kann mir von euch jemand sagen, ob man den GIES-O-SHIELD von Ramser.at auch an einem Raspberry Pi betreiben kann?
    Eventuell mit einem eigenen Script oder so?
    Gruß

    Antworten
  24. Hallo Leute,

    ich bastel auch schon zwei Jahre mit den Gieso-Mat rum….allerdings mit ESP8266. Die Ergebnisse sind auch mehr als zufrieden. Zumindest die Werte. Ich nutze einen ESP der am Sensor hängt und die Daten per MQTT an meinen Raspi sendet. Ein zweiter ESP empfängt die Daten und gibt diese auf ein 2,2″ Zoll Display in „Prozent Erdfeuchte “ wieder. Komisch ist allerdings das Verhalten vom Sensor. (ohne Frequenzteiler) An der Luft habe ich einen Wert von 277kHz, im Wasserglas so etwa 39kHz. In der Erde (leicht angefeuchtet) ca. 90kHz. Ich habe die Erde 3 Wochen nicht gegossen und mein Sensorwert hat sich kaum verändert……Im Topf war eine Tomatenpflanze…sehr merkwürdig….

    Antworten
  25. Alles sehr interessant. 3 Fragen:
    – Ich will es auf dem Balkon betreiben (also auch im Regen). Wie isoliere ich die Kontakte und die Kabelanschlüsse zum Rasberry PI 3 am besten und vermeide Tauwasser und Kurzschlüsse?
    – Liege ich richtig Rasberry PI hat 40 GPIO Eingänge, d.h. ich kann bis zu 40 Feuchtigkeitssensoren (40 Kübelpflanzen) betreiben?
    – Rein pragmatisch reicht es evtl. aus nur eine Kübelpflanze zu messen und dann die Bewässerung für alle zu aktivieren (-> wenn 1 Pflanze trocken ist, werden die anderen Pflanzen auch trocken sein), ich habe auch nur 1 Wasserkreislauf (1 Pumpe)?

    Danke.

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!