[Vorstellung] Simpler ESP8266 Sensor zum messen der Bodenfeuchtigkeit

Begonnen von sbiermann, 31 Mai 2016, 14:01:05

Vorheriges Thema - Nächstes Thema

sbiermann

Holas,
heute will ich euch unseren (Kollegen und mir) entwickelten Sensor zum messen der Bodenfeuchtigkeit vorstellen um zu ermitteln wann eine Pflanze Wasser benötigt. Denn bei uns im Büro kommt es sehr häufig vor das die Pflanzen mehr oder weniger verdursten. Wir haben das Projekt im Rahmen des Firmen internen Ship-It Day umgesetzt. Die Umsetzung umfasst neben den Sensor noch eine Software die entsprechend die Werte die der Sensor ermittelt reagiert und Personen per E-Mail benachrichtigt. Dieser Teil der Umsetzung lässt sich auch ziemlich simple mit FHEM realisieren, so das ich hier nicht weiter auf die von uns entwickelte Software eingehen werde.

Wie funktioniert der Sensor?
Der Sensor misst einfach zwischen 2 Kontakten wie leitfähig die Erde ist. Dies geschieht mittels diesem "Gerät" http://de.aliexpress.com/item/Smart-Electronics-Soil-Moisture-Hygrometer-Detection-Humidity-Sensor-Module-For-arduino-Development-Board-DIY-Robot-Smart/32328189936.html. Die Spannung wird mittels Spannungsteiler an den ADC des ESP8266 geleitet und dieser überträgt den Wert (zwischen 0 = Sahara und 1024 = geflutet) an einen MQTT Broker. Mehr macht der Sensor auch gar nicht, die Interpretation der Werte liegt bei FHEM oder ähnlicher Software. Diese entscheidet dann welcher Wert signalisiert das die Pflanze Wasser benötigt. Wir haben uns dazu entschieden den Sensor so dumm zu halten, da es ja von der Erde und Pflanzenart abhängt wann diese wieder Wasser benötigt. Daher ist unser Ansatz dies von einer Software (z.B. FHEM) übernehmen zu lassen. In der Software wird dann der entsprechende Schwellwert und Benachrichtigung definiert. Ist auch der flexibelste Ansatz.

Wie oft misst der Sensor?
Wir haben uns entschieden 2 mal am Tag zu messen. Idealerweise morgens und abends. Hier gibt es eine Besonderheit des ESP8266 zu beachten. Die Werte für den Deep Sleep sind vom Typ uint32 und werden in Mikrosekunden angegeben, das heißt maximal kann der ESP 4.294.967.295 Mikrosekunden schlafen, was ungefähr 71 Minuten entspricht. Daher schläft nun unser ESP 1 Stunde und wacht kurz auf um einen Wert im EEPROM hoch zu zählen und wieder zu schlafen. Wenn die 12 Stunden rum sind, wacht er komplett auf und misst den Wert. Anstelle vom EEPROM kann man auch in den Memory vom RTC schreiben, aber da gab es einen Bug (mittlerweile behoben) und das Beispiel welches ich gefunden habe nutzt den EEPROM und der Einfachheit halber ist das so übernommen worden.

Welche Bauteile benötige ich?
1x ESP-12E (kann auch anderer ESP sein)
1x 220 kOhm Widerstand
1x 100 kOhm Widerstand
einen Schwung 10kOhm Widerstände
1x LDO auf 3,3V z.B. MCP1825
ein paar Kabel
1x Batteriehalter für 4AA Batterien (3 baut man ein und in dem freien Fach kommt der ESP)

Wo finde ich den Arduino Sketch?
Der Arduino Sketch kann hier https://github.com/sbiermann/esp8266-plant herunter geladen werden.

Wie richte ich den Sensor unter FHEM ein?
Da die Werte an einen MQTT Broker gesendet werden muss in FHEM auf das entsprechende Topic gelauscht werden. Default Topic ist "sensor/macaddr", zum Beispiel sieht das dann so aus: "sensor/18fe34cf50ec". Über ein Notify mit IF Bedingung kann dann eine Push Nachricht oder Dummy Device getriggert werden. Denkbar ist auch eine Bewässerung zu starten über ein Ventil.

Anbei noch ein Bild wie der Sensor bei uns in Aktion ist.

Viele Grüße
Stefan

gloob

Wie ist der Sensor denn mit dem ESP verbunden?
Gibt es einen Schaltplan für die Umsetzung?
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

sbiermann

Über einen Spannungsteiler an den ADC Port des ESP. Einen Schaltplan muss ich mal machen.

SpenZerX

Und wie lange wird dieser Sensor halten wenn er in feuchtem Boden steckt?

Wenn du ihn sowieso analog anschließt tut es dann nicht auch der einfache Sensor (mit 1-2 SMD Komponenten) ohne dieses annex-PCB? Oder wird hier das analoge Signal aufbereitet?

MFG

sbiermann

Da der Sensor erst seit letzter Woche im Boden steckt kann ich noch keine Aussage darüber treffen wie lange es funktionieren wird. Ich kenne ein ähnliches Projekt wo das Outdoor eingesetzt wird und dort hält es wohl schon mehr als 6 Monate (siehe http://www.dieletztedomain.de/3-analoge-bodenfeuchtigkeits-sensoren-am-esp8266-update/)

Das annex-PCB nutze ich nicht. Nur das Teil welches in den Boden gesteckt wird und 2 Kabel dran. Bei meiner Suche bei Aliexpress waren die Teile mit dem PCB wesentlich preiswerter als die Teile ohne. Das ist der Grund wieso ich das bestellt habe. Ich muss nachher mal noch ein Foto vom inneren des Batteriefaches machen, dann wird es klarer.

hexenmeister

Bei Korrosionsproblemen könnte man ja "Platin für Arme"  nehmen, also Graphit  ;)
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

sbiermann

Hier nun das versprochene Foto, den LDO und die Widerstände des Spannungsteilers sind nicht so gut zu erkennen weil die Kabel davor hängen.

Wzut

Zitat von: hexenmeister am 01 Juni 2016, 08:14:54
Bei Korrosionsproblemen könnte man ja "Platin für Arme"  nehmen, also Graphit  ;)
Und warum nicht gleich zwei längere V4A Schrauben , statt der Platinengabel ?
Bzw. ich meine irgendwo gelesen zu haben das gute Sensoren die Stromrichtung nach jedem Messzyklus umkehren. Wäre das nicht auch eine Variante, d.h statt einem IO Port und VCC/Masse die beiden Meßstäbe an je einen IO zu klemmen und diese dann wechselweise als Input und Output zu definieren ?   
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

sbiermann

Der ESP hat doch nur einen ADC Eingang, da müsstest du dann eine relativ komplexe Schaltung machen um dann das mit den welchsenden Stromrichtungen hin zu bekommen. Da der Sensor (das Teil was im Boden steckt) bei Aliexpress so um die 30 Cent kostet ist es sehr wahrscheinlich preiswerter den Sensor zu ersetzen als eine solche Schaltung auf zu bauen.

Die Idee mit den Schrauben ist interessant. Ist sicherlich eine gute Option wenn man zum Beispiel Holzblumentöpfe hat wie bei "Vertikale Kleingärten" Projekten (siehe z.B. http://geco-gardens.de/)

Wzut

Komplexe Schaltung ? OK, vllt denke ich da als Hobbybastler zu einfach, mein Ansatz wäre gewesen zwei GPIO Pins zu nehmen für die beiden Schrauben und diese wechselweise als INPUT und OUTPUT zu definieren und über einen Spannungsteiler den Analog Port versorgen.
Aber andere Ansatz : Der so beliebte und teure VG400 macht das wohl nicht  über Widerstandsmessung sondern kapazitiv.
Bsp -> http://eesensors.com/media/wysiwyg/docs-pdfs/ESP06_moistP.pdf   
Zum Messen einer Kapazität reichen ein NE555 , ein Kondensator und zwei Widerstände wie bei meinem Regentonnen Sensor -> https://forum.fhem.de/index.php/topic,23217.msg321929.html#msg321929 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

sbiermann

Wie willst du dann das mit dem Spannungsteiler machen? Weil im Prinzip ist der Sensor ja nichts anderes als ein Poti. Dementsprechend sieht das ungefähr so aus:

3,3V+----P---R1---R2---GND
                             |
                           ADC

P = Sensor/Poti
R1 = 220 kOhm
R2 = 100 kOhm
3,3V = GPIO X

Du willst jetzt nach deiner Idee den GND auf einen GPIO legen und abwechselnd den GND zu 3,3V und 3,3V zu GND machen, richtig? Dann muss aber der Spannungsteiler immer abwechselnd angeschlossen sein, weil sonst würde vermutlich der ESP die Grätsche machen weil der ADC nur 1 V verträgt. Um das hin zu bekommen brauchst du mehr Bauteile und das meine ich mit komplex, so hast du einfach nur die 2 Widerstände, den Sensor und mehr nicht. Halt Mega einfach und bei 2 mal am Tag für gut 1 Sekunde Spannung drauf glaube ich nicht das der Effekt, der mit der wechselnden Spannung vermieden werden soll, sich überhaupt einstellt. 

Wzut

@sbiermann , ja du hast Recht :)
Aber zum Thema Korrosion, mit Wechselstrom messen und Edelstahl möchte ich noch mal etwas nachlegen :
http://homematic-forum.de/forum/viewtopic.php?f=31&t=16930
ich finde die Idee mit den Speichen und dem Elko gut :) 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

LHBL2003

Hallo sbiermann,

ich habe mich heute mal ran gesetzt um dein Beispiel nachzuvollziehen.
Den Code habe ich soweit verstanden und auf FHEM angepasst, sowie durchgängig kommentiert. (Sobald ich fertig bin, werde ich eine Anleitung Posten).

Allerdings bekomme ich dann beim Sensor eine 5 wenn er am land liegt und eine 427 wenn er im Wasser liegt, eine 438 Wenn er in Erde steckt die gestern gegossen wurde und eine 205 wenn er in einer Pflanze steckt die in letzter zeit schon wieder vergessen wurde wobei je nach dem ist es auch ne 245.

Was sind deine realen Maximalwerte?
Was ist der GPIO X bei dir für ein Anschluss? Einfach der 3V3 oder  hast du den Sensor an pinMode(2, OUTPUT) oder pinMode(4, OUTPUT) angeschlossen?

Wozu benutzt du genau die     
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);

Sorry beschäftige mich heute den ersten Tag mit Arduino und ESP und co.

Im Anhang ein Aufbau ohne Kabelsalat (Bild 1,2,3,4).

Also
ESP8266 (3V3) --> Breadboard (+) --> Sensor (P) --> 200K (R1) --> 100K (R2) --> (A0 / ADC0)
Und
ESP8266 (GND) --> Breadboard (-)

Wenn ich nun wie in deiner Beschreibung

Nur habe ich bei der Messung ein Problem.
Du hattest folgendes geschrieben

Zitat
3,3V+----P---R1---R2---GND
                             |
                           ADC

P = Sensor/Poti
R1 = 220 kOhm
R2 = 100 kOhm
3,3V = GPIO X

Wenn ich nun wie in deiner Beschreibung R2 an GND hängen (Bild 5), dann stehe ich immer in der Wüste auch wenn ich ertrinke.
Also einen Wert von 4.

Vielen Dank für Deine / Eure Rückmeldung
Gruß Denis

sbiermann

Du hast vermutlich den Spannungsteiler nicht richtig angeschlossen. Sprich du musst zwischen R1 und R2 zum A0 gehen und nicht vom R2 aus. Der R2 muss auf GND. Der Spannungsteiler hat den Grund das der AD Wandler des ESP nur 1 Volt verträgt und keine 3,3V.  Ich habe mal einen Screenshot wie der Schaltplan richtig aussieht gemacht, anscheinend sieht das je nach Bildschirm Auflösung anders aus.

chunter1

Bist du dir sicher, dass 3 Batterien in Serie gesund für den ESP8266 + FLASH sind?
Bei vollen Batterien liegen 4,8V (3 x 1,6V) an.
Evtl. steigt auch die Stromaufnahme bei der Spannung stark an?

Mein Tipp:
Nimm zwei "Energizer Ultimate Lithium Mignon AA 1,5V".
Damit liegst du perfekt im zulässigen Spannungsbereich, hast sehr lange Lebensdauer und eine extrem lange und flache Entladekurve.
Die ESP Module arbeiten bis ca. 2,4V hinunter.
Da die Lithium Batterien eben genau um die 1,2V erst abknicken, kann man sie bis zum Maximum "auslutschen" ;)
Bei ca. 2800mAh ergibt das eine perfekte Betriebsdauer.

Infos z.B. hier:
https://www.tecchannel.de/a/batterie-test-kaelte-reduziert-leistung-um-bis-zu-40-prozent,2023671,5