Hallo zusammen,
heute möchte ich Ihnen einen neuen Sensor vorstellen, den wir ab heute in unserem Shop haben. Unser kapazitives Hygrometer V1.2
Dieses Modul funktioniert kapazitiv, d.h. es findet im Gegensatz zum Vorgängermodell keine Korrosion durch galvanische Prozesse statt. Der Output dieses Sensors ist analog, d.h. er kann, obwohl er 3.3V Controller unterstützt, nicht von einem Raspberry ausgelesen werden, die dieser keinen Analog Input hat. Prinzipiell ist dieses Sensormodul nicht nur zum Messen der Feuchte in Substrat, sondern auch zur Anzeige eines Füllstandes geeignet. Bevor wir den Sensor produktiv nutzen muss unser Sketch auf die jeweiligen Werte kalibriert werden.
Für unser Anwendungsbeispiel benutzen wir einen NanoV3. Und ein Glas Wasser anstatt eines Blumentopfs, da sich die Feuchte des Substrats nicht so leicht ändern lässt wie der Füllstand eines Glases. Libarys sind nicht erforderlich.
Die Pinbelegung:
NanoV3 | Sensor |
5V+ | VCC |
GND | GND |
A0 |
AOut |
Wir starten mit der einfachsten Inbetriebnahme, dem AnalogReadSerial Beispiel welches bereits in der IDE integriert ist: Beispiele -> Basics -> AnalogReadSerial
und erhalten im Serial Monitor folgende Ausgabe:
im Serial Plotter sieht es etwas ansprechender aus, ist jedoch immer noch nicht ideal:
Wir bedienen uns am Smoothing Tutorial auf Arduino.cc, hier der Code:
/* Smoothing created 22 Apr 2007 by David A. Mellis <dam@mellis.org> modified 9 Apr 2012 by Tom Igoe This example code is in the public domain. http://www.arduino.cc/en/Tutorial/Smoothing */ const int numReadings = 10; int readings[numReadings]; // the readings from the analog input int readIndex = 0; // the index of the current reading int total = 0; // the running total int average = 0; // the average int inputPin = A0; void setup() { Serial.begin(9600); for (int thisReading = 0; thisReading < numReadings; thisReading++) { readings[thisReading] = 0; } } void loop() { // subtract the last reading: total = total - readings[readIndex]; // read from the sensor: readings[readIndex] = analogRead(inputPin); // add the reading to the total: total = total + readings[readIndex]; // advance to the next position in the array: readIndex = readIndex + 1; // if we're at the end of the array... if (readIndex >= numReadings) { // ...wrap around to the beginning: readIndex = 0; } // calculate the average: average = total / numReadings; Serial.println(average); delay(1); // delay in between reads for stability }
Nachdem wir den Code hochgeladen haben ist die optische Ausgabe etwas angenehmer:
Wir stellen also fest, dass das leere Glas Werte um 792 liefert. Somit haben wir den höchsten Wert ermittelt. Jetzt ermitteln wir den niedrigsten Wert, indem wir unseren Sensor bis zu einer von Ihnen festgelegten Höhe in Wasser tauchen.
Die Eintauchtiefe, also die Höhe des Pegels im Glas/Substrat muss für Vergleiche immer gleich bleiben, wir haben uns für den Punkt von v1.2 als Markierung entschieden. Und erhalten folgende Werte:
Das volle Glas liefert also ca. 419. D.h. wir bewegen uns in einem Bereich von 792 - 419. Bitte achten Sie darauf diese Kalibrierung in dem Medium auszuführen welches Sie später nutzen wollen, da die Werte je nach Substrat abweichen.
Da dieser Sensor so vielfältig einsetzbar ist, unterschiedliche Substrate möglich sind, Pflanzen unterschiedliche Vorlieben haben und wir Ihre Skala nicht abschätzen können stellen wir an dieser Stelle Code zur Verfügung den wir schon in unseren AlcoTester gezeigt haben:
if (average >= 0 and average <= 400) { state = "Sensor defekt?"; } else if (average >= 400 and average <= 500) { state = "Durst!"; } else if (average >= 500 and average <= 649) { state = "Feucht!"; } else if (average >= 650 and average <= 800) { state = "Patschnass!";
Ein Gehäuse zum selberdrucken gibt es Gratis dazu, Sie finden die benötigten Dateien hier.
Viel Spass beim Probieren und Experimentieren, vielleicht findet sich ein treuer Leser der Lust hat ein smartes Trinkglass zu basteln, was dem Barkeeper den Füllstand seiner Gäste anzeigt. :) Bis zum nächsten Beitrag
8 Kommentare
Uwe
Um Lucas’ Frage (auch wenn schon etwas alt) hier mal zu beantworten. JA, es dringt Wasser über die Schnittkanten der Platinen ein, dadurch habe ich inzwischen 8 Sensoren geschrottet. Es löst sich die gesamt Isolierung ab und legt die Kupferflächen frei, so dass es hier doch wieder zu einem Ionenaustausch mit dem Boden kommt. Von völlig absurden Messwerten mal ganz zu schweigen. Ich hatte mal versucht, das Ganze vor der ersten Verwendung mit Nagellack auf den Kanten zu isolieren, brachte aber auch nur kurzfristig eine Besserung, länger als 3 Monate hat bei mir kein Sensor durchgehalten.
Held
Hallo,
ich bin der gleichen Meinung wie Ralf.
Bei Raumluft bekomme ich einen hohen Wert und im Wasser einen niedrigen .
Habe das Ganze mit einem ESP32 getestet am A0 Pin.
Der Serialmonitor gibt bei Luft einen Wert von ca. 2100 und mit Wasser ca. 700 aus. Die Werte verarbeite ich in der MAP- Funktion so, das sie einen logischen Sinn ergeben. Luft- niedrig, Wasser- hoher Wert zwischen 1 und 100.
Mit dieser Spreizung muß man nun selber ein Gefühl entwickelt was für die Pflanze nun trocken oder nass ist.
Nach einer Woche Test bin ich zu der Erkenntnis gekommen, das der Sensor unbrauchbar ist. Nach drei Tagen Messdauer ist der umgerechnete Messwert nur um 5 Punkte gefallen (85 auf 80). Die Erde obenauf wurde aber schon grau.
Darauf hin habe ich den Sensor heraus gezogen abgewischt und wieder eingesteckt. Siehe da, der Wert fiel um 50 Punkte.
Vor dem abwischen habe ich mir die Platine betrachtet, auf ihr befand sich ein Feuchfigkeitsfilm. Also hat der Sensor die Feuchtigkeit auf der Platine gemessen.
Die Erde herum war schon trocken. Ich habe Messung an einer anderenStelle im Blumentopf wiederholt, mit ähnlichem Ergebnis.
Eine automatische Bewässerung würde hiermit scheitern.
Meine Urlaubsbewässerung habe ich wieder auf Pauschalmenge umgestellt.
Gruß Eckard
Murphy
The sensor is said to be version 1.2 but there are differences from other 1,2 version available directly from china market. On the AZ_Delivery sensor, the LDO (U2) seems to be replaced by diode. There is not schematic offered on the web site :(
When supplied with 3.3V, sensor did not provide any output voltage (NE555 is requiring 5V supply). When supplied with 5V, sensor provide 4V on its output as dry (less voltage, when wet) . For 3.3V controllers (like ESP32) this can be fatal!
I have found (as possible solution) resistor of 100 Ohms in series to the 5V power pin is dropping the voltage over the sensor and impacting the sensor output voltage in positive way (3V as dry, less when wet) . This allows to work safely with ESP32 microcontrollers.
Samira
Hallo,
danke für Ihre nutzbare Aufgabe. Ich möchte diese Aufgabe mit STM32 und HAL_Drive schreiben. Wie kann ich letzten Teil schreiben? Wie kann zeigt , der Boden Nass ist oder trocken?
Viele Grüße
Samira
Dennis
Wenn ich den Sensor in das Wasser tauche und den Beispielcode “AnalogReadSerial” ausführe, liefert mir der Monitor lediglich Werte zwischen 0 und 13. Was mache ich falsch?
Klaus
sehe ich auch so wie Ralf.
Gruß
Klaus
Lucas
Dringt von den (Schnittkanten der Platine) kein Wasser in den Sensor ein?
Ralf
Hallo,
sind eure Werte für die Feuchtigkeit nicht verdreht, Müßte nicht zwischen 400 und 500 Patschnass und zwischen 650 und 800 Pflanzen haben Durst sein.
Gruss
Ralf