WiFi Bodenfeuchtesensor
E-Mail Gießerinnerung per WLAN
Zutaten
ESP8266 Modul |
2 x AAA Batterie |
Sensor - 2 Metallstifte |
Schaltplan
Mikrocontrollern können wunderschön Kapazität messen in dem die Kondensator Platte laden, Port auf Input schalten und die Zeit zählen bis die Platte entladen ist. So werden übrigens die Tauch-Tasten abgefragt.
Feuchtemessung Prinzip: zuerst werden die Platten entladen in den das GPIO13 als Ausgang mit dem Pegel Low geschaltet wird.
R1 begrenzt den Entladestrom um das Port nicht zu überlasten.
Danach wird GPIO13 als Eingang geschaltet und GPIO12 als Ausgang. GPIO12 führt jetzt High Pegel. Die Platten werden über R2 (1K) geladen. Während dieser Zeit wird ein Zähler hochgezählt bis der Eingang GPIO13 den High-Pegel erreicht.
Desto feuchter die Blumenerde ist, desto langsamer laden sich die Metalplatten.
Um die zufällige Störungen und Abweichungen zu minimieren wird die Messung der Bodenfeuchtigkeit 10-Mal wiederholt und der Mittelwert berechnet.
Als Bodenfeuchtesensor werden 2 Metall Stifte verwendet. ESP8266 wird von 2 AAA-Batterien mit Strom versorgt und befindet sich im Tiefschlaf. Jede 6 Stunden wacht Mikrocontroller auf und misst die Bodenfeuchte, meldet sich im Hausnetzwerk an und trägt die Messwerte beim ThingSpeak.
Vorgeschichte
Nach dem das Projekt Notruf über Wifi abgeschlossen wurde, bekam ich eine Idee ein Feuchtesensor für mein Blumentopf zu basteln. Die Pflanze steht im Hausflur außerhalb der Wohnung. Ich vergesse die ständig zu gießen. Zuerst wurden verschiedene Erdfeuchte-Sensoren für Arduino in Betracht gezogen. Die haben ein riesen Problem, die Korrosion. Sogar Bodenfeuchte-Meter die bei Amazon verkauft werden, dürfen nicht längere Zeit in der Erde stecken bleiben. Über ein Forum bin ich auf die Idee gekommen ein kapazitiver Sensor zu bauen. Als kapazitiver Sensor, können theoretisch, 2 beliebige isolierte Metallplatten dienen. Die müssen ausreichend Oberfläche und dünne Isolierung haben. Nach etwas Überlegung habe ich entschieden ein Flat-Flex-Cable als Bodenfeuchtesensor zu benutzen. Und das, hat überhaupt nicht funktioniert. Die Ursache dafür war nicht ausreichende Isolierung, so dass, durchsickernde Strom mir das Messergebnis verfälscht hat. Nach mehreren Monaten habe ich das Versuch gestartet, ein Ohmscher Sensor zu bauen. Aber der hatte so eine riesige Kapazität das ich 5 Minuten warten müsste, bis der sich geladen hat und der Strom stabil wurde. Die Kapazität Änderung ist viel grösser als Widerstands Änderung. So habe ich mich entschlossen einfach bei zwei in die Blumenerde eingesteckten Elektroden die Kapazität zu messen. Das Vorteil dabei ist das die oxidieren und Korrosion der Elektroden stört nicht. Es fließt kein ständiger Strom über die Erde. Die Elektroden werden bei Messung 10-mal Geladen und entladen. Die Messung dauert einige Mikrosekunden. Was wiederrum die lange Batterielaufzeit ermöglicht.
Feuchtesensor und deren Dimensionierung
Als Bodenfeuchtigkeit-Sensor können 2 beliebige Metallstifte verwendet werden. Vorausgesetzt die haben genug Oberfläche und reichen bis zum Boden des Pflanzentopfs.Vorteilhaft sind die Stifte aus dem veredeltem Metall die korrodieren nicht. Abstand zwischen den Stiften spielt keine große Rolle, sollte aber nicht größer als 1 Zentimeter sein.
Wenn Bodenfeuchtigkeit Wert bereits 0 ist und die Erde ist noch feucht, dann haben die Bodenfeuchtigkeit Sensoren nicht genug Oberfläche. Oder die Blumenerde ist zu luftig und liegt nicht eng genug zu den Metallplatten an.
Wenn die Erde trocken ist und Bodenfeuchtigkeit Wert relativ groß ist, dann ist es kein Problem. Hauptsache die Zahl steht weit von 50000 ab.
Bodenfeuchtigkeit Messwert Auswertung
Ich schlage vor, einmal die Erde zu gießen. Dabei wird Bodenfeuchtigkeit Wert wahrscheinlich auf 50 000 steigen, das ist das Maximum. Danach warten Sie bis die Erde trocken wird und sie sind der Meinung die Pflanze gegossen werden muss. Bitte merken Sie das Bodenfeuchtigkeit Messwert aus dem ThingSpeak Chart. Dieser Wert wird dann verwendet um Giess-Alarm einzustellen.Erhaltene Bodenfeuchtigkeit Werte sind relative Werte, die sind abhängig von Oberfläche des Sensors und von der Erde Beschaffenheit. Nach dem Giess-Alarm -Wert bestimmt wurde, darf der Sensor nicht mehr in der Erde bewegt werden. Weil wenn der Sensor einmal bewegt wurde, ändert sich seine Position gegenüber den Erdteilchen und dabei ändert sich auch die Kapazität des Sensors.
Ich denke das der Bodenfeuchte Grafik sollte alle 6 Monaten Überprüft werden. Weil Bodenfeuchtemesser Stifte in diesem Zeitraum korrodieren oder durch Wurzeln verschoben werden. Eventuell muss dabei der Giess-Alarm -Wert neu bestimmt werden.
Download Firmware und Quellcode
Download BIN für ESP-07 -Laden der Firmware mit einem Tool über serielle Schnittstelle. Anleitung(Kompiliert mit Arduino ver. 1.6.12, ESP8266 Bibliothek ver. 2.3.0).
Download Projekt -Sketch für Arduino, es wird Bibliothek Core for ESP8266 WiFi chip benötigt
Die WLAN Antenne auf dem Bild ist nur um das Bild Aussagekräftiger zu machen. ESP-07 hat bereits eine Keramikantenne auf dem Board.
ESP8266 und Batterielaufzeit bei WiFi Bodenfeuchtesensor
Nicht vergessen ROTE LED abzulöten. Ein Paar Gedanken dazu bei Tipps und Tricks
Stromverbrauch: Meiste Zeit befindet sich ESP8266 in Deep Sleep –Modus und verbraucht 0,016mA
alle 12 Stunden wacht der WiFi Bodenfeuchtesensor etwa für 3 Sekunden und verbraucht dabei 80mA.
Laut Berechnungen sollen die Batterien für 2,4 Monate reichen.
Wachmodus 80mA 3s alle 6Stunden(6h*60s=360s)
80mA /360s/3s=0,667mAh (3 Sekunden 80mA Verbrauchs auf 6 Stunden verteilt)
Deep Sleep –Modus 0,016mAh
Gesamt 0,683mAh
Alkali-Mangan Batterie des Formfaktors AAA hat typ. Kapazität 1,2Ah.
1200mAh / 0, 683mAh =1757h 1757h / 24h = 73Tage => 2,4Monate.
Ob das stimmt wird erst der Langzeitversuch zeigen.
Wem das zu wenig ist, kann AA-Batterien nehmen, oder Schaltung mit 3 Batterien und Spannungsregler verwenden.
ADC Kalibrieren um Batteriespannung (Ubat) genau zu messen
Ich habe festgestellt, das ESP8266 Modul die Batterie Spannung nicht so genau misst. Und zwar, die Abweichung von einem Modul zum anderen Modul anders ist. Wenn man aber für das jeweilige Modul Abweichungen herausfindet, kann man die Batteriespannung sehr genau messen.
Ich habe ein Programm geschrieben die zwei Referenzwerte misst und in EEPROM speichert. Aus diesem zwei Referenz Spannungen werden Korrekturwerte berechnet und bei zukünftigen Messungen angewendet.
So kann man ADC kalibrieren
ESP8266 Modul an ein Labornetzteil anschließen.
Die Spannung auf 3,40 Volt einstellen. Das Labornetzteil muss mindestens 500mA liefern können.
Setup Modus starten, und im Browser "http://_IP_des_ESP8266/adc.php" eingeben.
Jetzt wird aktuelle Spannung angezeigt. Bitte betätigen Sie das Link "Kalibrieren mit 3,4V".
Danach stellen Sie das Labornetzteil auf 2,40 Volt und betätigen Sie das Link "Kalibrieren mit 2,4V".
Ob das Kalibrieren geklappt hat, können Sie überprüfen indem Sie irgendeine andere Spannung im Bereich von 2,2 und 3,6 Volt einstellen und dabei auf das Link "noch mal messen klicken".
Niedrigste Spannung bei der die Module bei mir noch funktioniert haben war 2,2 und 2,3 Volt.
Verwendete Messwert Anpassung
Um tatsächliche Spannung anzuzeigen benötigen wir ein Faktor Digit/V und der Abweichungswert.
Faktor Digit/V = (ADC3,4V_Wert- ADC2,4V_Wert) / (3,4V-2,4V). Faktor ist eine Zahl die 1V darstellt
Messwert_in_Digits / Faktor = Spannungswert in Volt
Abweichungswert= Tatsächliche Spannung (2,4V)- ESP8266_Messwert_in_Volt
Entgültige Formel lautet: Spannungswert in Volt = Messwert_in_Digits / Faktor + Abweichungswert
ThingSpeak Anleitung
Zuerst muss man sich registrieren über „Sign Up“neues Kanal anlegen: Channels / New Channel
Name vergeben
4 Felder aktivieren und Feldnamen vergeben
Feuchtigkeit, Batteryspg, Zyklus, RSSI
Und abspeichern mit „Save Channel“
Im ersten Feld wird der Feuchtigkeit Wert abgelegt, im zweitem Feld wird Batteriespannung abgelegt, in drittem Feld Zyklusnummer, ihm viertem dann die WLAN Stärke.
Jetzt benötigen Sie „Write API Key“ den finden Sie unter Channels / API Keys
Bitte tragen Sie den „Write API Key“ im Eingabefeld beim Bodenfeuchtesensor Setup.
Ereignis bei unterschreiten der Bodenfeuchtigkeit Wertes einstellen:
Apps / ThingHTTP / New ThingHTTPURL <= „http://api.pushingbox.com/pushingbox“
HTTP Auth Username <= Googlemail der bei pushingbox registriert wurde
Method <= „POST“
Content Type <= “application/x-www-form-urlencoded“
Body <= „devid=vE8D8A1B6CB61541&Bodenfeuchtigkeit =%%channel_205903_field_1%%“
Devid ist DeviceID vom „Scenario“ bei PushingBox.
Post-Parameter „Bodenfeuchtigkeit“ erhält dann den aktuellen Wert aus Feld1. Und wird dann an PushingBox übergeben. Den Wert lässt sich dann in Email oder Twitter Nachricht einfügen.
Und abspeichern
Wie man PushingBox einstellt bitte lesen Sie bei E-Mail und Twitter - Meldung Versand mit Online-Service PushingBox
Bedingung für das Ereignis festlegen
Apps / React / New ReactCondition Type <= „Numeric“
Test Frequency <= „On Data Insertion“
If channel <= Name des Kanals wählen.
Field <= “1“
Bedingung “ is less then“ und Ihr Wert, bei dem pflanze gegossen werden muss.
Action <= “ThingHTTP“
Options <= „Run action only the first time the condition is met“
Batterie leer Warnung
Ereignis einstellen wenn Feld 2 das Wert 2.3V unterschreitet.Aktuelle Werte vom ThingSpeak mittels iframe an Homepage angebunden
Schauen Sie den Quellcode dieser Webseite. Aufschlüsselung vom Aufrufparametern finden Sie bei Create a Chart
Alarm beim verpassten Dateneingang
Ich habe mir Gedanken gemacht was passiert, wenn etwas mit WIFI-Netz passiert, oder Kabel von Batterie abgegangen ist.
Es wäre interessant eine Alarm-Mitteilung erzeugen zu können, wenn der Bodenfeuchtesensor einige Zeit schweigt.
So eine Möglichkeit existiert.
Zuerst soll ein Matlab Skript angelegt werden, welche der Letzte Eintrag einliest und sein Timestamp mit der aktuellen Zeit vergleicht. Wenn Eintragung alter als 8 Stunden ist, wird ein Eintrag in Feld 5 gemacht.
Bitte Ihre eigene readChannelID, readAPIKey und writeAPIKey eintragen.
readChannelID = 205903; readAPIKey = 'NFH8GITCFYDVB3TJ'; WriteAPIKey = 'ZGXVHMQAH8O12U4W'; [data,time] = thingSpeakRead(readChannelID,'Fields',[1],'NumPoints',1); Differenz=datetime('now','TimeZone','Europe/Berlin')-datetime(time(1)); MaxDiff=duration(8,0,0); %display(Differenz, ''); if Differenz > MaxDiff thingSpeakWrite(readChannelID,'Fields',[5],'Values',{1},'WriteKey',WriteAPIKey); else thingSpeakWrite(readChannelID,'Fields',[5],'Values',{0},'WriteKey',WriteAPIKey); endDieser Matlab Skript wird zeitgesteuert ausgeführt.
Die Ausführungszeit wird hier eingestellt: Apps / TimeControl / New TimeControl. Wählen Sie Ihr Skript und die Ausführungszeit.
Es bleibt nur das Ereignis einzustellen, wenn Feld 5 das Wert 1 erhält.
Anzeige und Warnungen mit Android App
Ich habe bei Google Play interessante App gefunden IoT ThingSpeak Monitor Widgetwebmaster_x_esp8266-server.de |