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
Wie ist der Sensor denn mit dem ESP verbunden?
Gibt es einen Schaltplan für die Umsetzung?
Über einen Spannungsteiler an den ADC Port des ESP. Einen Schaltplan muss ich mal machen.
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
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/ (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.
Bei Korrosionsproblemen könnte man ja "Platin für Arme" nehmen, also Graphit ;)
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.
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 ?
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/)
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
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.
@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 :)
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
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.
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 (https://www.tecchannel.de/a/batterie-test-kaelte-reduziert-leistung-um-bis-zu-40-prozent,2023671,5)
Wie oben im Beitrag geschrieben verwende ich einen LDO MCP1825) um die Spannung auf 3,3V zu reduzieren. Von daher sind 3 AA in Serie kein Problem.
ok, verheizen geht natürlich immer wenns nicht lange laufen soll.
Auweia... 120uA nur für den LDO.
Das ist ja fast das doppelte von dem was der ESP braucht (ca. 80uA).
Ich fürchte, damit wirst du nicht lange eine Freude haben ???
Es läuft schon eine ganze Weile ohne Probleme. Es werden auch nur 2 mal am Tag Messungen durch geführt. Daher ist der Stromverbrauch insgesamt sehr sehr gering. Anders sieht die Sache natürlich aus wenn man z.B. alle 5 oder 15 Minuten mit einen DHT22 die Temperatur misst. Dann sind die Batterien nach wenigen Wochen leer gelutscht, das gleiche gilt aber auch für Lithium-Ionen Batterien. Meiner Erfahrung nach schaltet der ESP bzw. die Sensoren schon bei 2,8V ab und messen nichts bzw. tun gar nichts mehr. Im konkreten Fall wo einfach nur analog die Spannung gemessen wird, kann es natürlich sein das der ESP länger durch hält. Bei den DHTs macht er eher schlapp das habe ich mit verschiedenen Modulen (ESP blank, ESP NodeMCU, ESP Wemos D1 mini) getestet. Als Fazit kann man sagen der ESP8266 ist nicht für Batteriebetrieb gemacht, außer man verwendet eine entsprechend große Solarzelle und Lademodul, dann kann man unbegrenzt laufen lassen. Hier im Büro steht so eine Umsetzung mit DHT22 und Solarzelle sowie Li-Ion Akku (https://thingspeak.com/channels/119957).
Hast du dir den fertigen, kapazitiven Sensor mit 2 Batterien hier mal angeschaut?
https://de.aliexpress.com/item/ESP8266-soil-moisture-sensor/32746901878.html (https://de.aliexpress.com/item/ESP8266-soil-moisture-sensor/32746901878.html)
Nee, war mir bis heute unbekannt. Keine Ahnung ob es zum damaligen Zeitpunkt den schon gab. Preislich ist er natürlich etwas teurer, aber klingt auch ganz interessant. So wie es aussieht sollte er auch zu flashen sein.
Hallo SBiermann,
danke für die Info mit dem Spannungsteiler. Jetzt verstehe ich wozu der gedacht ist :)
Wenn ich den Sensor nun in Wasser tauche, dann bekomme ich einen Wert von 212.
Das ist zwar noch weit weg von 1024 aber sei es so, der kleinste Wert am Land bleibt bei 4.
Ich hab nochmal nachgeschaut ob die Wiederstände passen, aber die sind richtig. 219KOhm und 94KOhm sagt mein Messgerät. Evtl. kommt daher noch die Abweichung wer weiß. :)
Zumindest werden die 3 Volt auf etwa 0,9V reduziert und das ist ja schon mal gut.
Im Anhang die Bilder von meinem jetzigen Aufbau :) Freu.
Ach ja was noch fehlte war das schwarze Kabel über dem ESP das von DO / GPIO15 nach RST/Reset geht.
Sonst kommt er ja nicht mehr aus seinem ESP.deepSleep(...) raus :D
Hatte gestern nämlich immer die Reset Taste gedrückt da ich zu faul war die 60 Minuten umzustellen.
Und dabei ist mir nie aufgefallen das dies ja dann garnicht richtig geht.
Und beim drücken der Reset Taste wird der Stundenzähler auch hochgezählt :)
Hallo sbiermann,
eine Frage ist noch offen geblieben.
Was machst du genau mit
Dem:
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
Vielen dank für deine Bemühung
Pin 2 ist die interne LED, die schalte ich ab. und Pin 4 müsste der Strom für den Sensor sein.