Kapazitiver Feuchtigkeitssensor mit NE555 Timer
Ein großer Nachteil der über einen veränderten (Erdboden-) Widerstand arbeitenden Sensoren (siehe Kapitel Widerstandsbasierte Feuchtesensoren) ist deren Anfälligkeit gegen Korrosion. Der hier vorgestellte kapazitive Sensor hat diesen Nachteil nicht. Zum einen hat man während des Betriebs kein galvanisches Element und zum anderen sind die messenden Kondensatorplatten komplett hinter einer Kunststoffschicht verborgen.
Im Handel wird der Sensor über der Namen "Capacitive Soil Moisture Sensor 2.0" angeboten. Angeschlossen wird der Sensor an eine 5V Stromversorgung (GND u. VCC). Der dritte Pin des Moduls ist ein analoges Ausgangssignal welches proportional zur Bodenfeuchte ist und von einem Mikrocontroller über dessen ADC eingelesen, ausgewertet und weiterverarbeitet werden kann.
Funktionsweise des Sensors
Der Sensor besteht aus drei Schaltungskomponenten. Einem NE555 Timer der als Astabiler Pulse-Generator verwendet wird, einem RC-Filter zur Glättung des Rechtecksignals in ein Sägezahnsignal dessen Peakhöhe abhängig vom der Kapazität des Bodens ist und einem Peak-Detektor zur Erzeugung einer Ausgangs-Gleichspannung in Höhe der Sägezahnpeaks.
NE555 Timer als Pulse-Generator
Zentrales Bauteil des Pulse-Generators zur Erzeugung einer Rechteck-Taktfrequenz ist ein NE555 Timer. Bei diesem IC ist intern je ein Komparator mit dem SET und RESET Eingang eines Flipflops verbunden. Die Referenzspannung der Komparatoren ist über den integrierten Spannungsteiler beim unteren Komparator 1/3 VCC und beim oberen 2/3 VCC. Die Funktion eines Komparators ist im Kapitel LM393 Sensoren beschrieben.
Sowohl der TRIGGER, als auch der THRESHOLD Eingang des NE555 liegen an dem Kondensator C3 an. Ist der Kondensator ungeladen oder kleiner 1/3 VCC wird der NE555 Ausgang über den TRIGGER auf HIGH geschalten. Über die Widerstände R3 und R2 lädt sich der Kondenstor auf. Erreicht die Ladespannung 2/3 VCC wird OUT über THRESHOLD auf LOW gelegt. Zwischen dem Flipflop Ausgang und der Invertierung kurz davor liegt jetzt HIGH an. Auch die Basis des Transistors ist damit HIGH und schaltet den Transistor auf GND durch. Über den DISCHARGE Pin und den Widerstand R2 ist der Kondensator C3 jetzt mit GND verbunden und beginnt sich zu entladen. Sobald die Ladespannung wieder unter 1/3 VCC kommt wird über den TRIGGER der Ausgang auf HIGH gelegt und der Transistor unterbrochen. So geht das immer weiter und wir haben unseren Rechteckpuls generiert (gelbe Kurve mit 2,5 MHz). Die blaue Kurve ist zum Vergleich das analoge Ausgangssignal.
RC-Filter
Die grundsätzliche Funktion ist im Kapitel RC-Glied zusammengefasst. Über den Widerstand R1 wird der (Erdboden) Kondensator geladen und entladen. Je nachdem ob die mit dem Pulse-Generator erzeugte Rechteckspannung gerade anliegt oder nicht. Da die kurze Pulsdauer nicht zum vollständigen Laden und Entladen des Kondensators reicht entsteht die Sägezahnwelle. Je größer der sich im Boden bildende Kondensator ist, desto flacher verläuft die Kurve und desto geringer sind die Peaks. Ein kleinerer Kondensator erreicht in der Zeitspanne eine höhere Ladung und auch die Peaks sind dann entsprechend höher.
Peak-Detektor
Um die Peakhöhe der Kurve für einen µC auswertbar zu machen muss diese erfasst und geglättet werden. Das im
RC-Filter erzeugte Sägezahnprofil lädt den Kondensator C4. Da die Diode die Entladung in Gegenrichtung
sperrt wird der Kondensator nur geladen. Der Kondensator und somit auch die analoge Ausgangsspannung
erreicht die Peakhöhe des Sägezahnprofils als Gleichspannung. Der sehr große Widerstand R4 ist dazu da, dass
sich der Kondensator C4 mit der Zeit doch entladen kann. Dadurch ist es möglich, dass sich die
Ausgangsspannung immer der aktuell anliegenden Peakhöhe und Bodenkapazität anpasst.
Die blaue Kurve ist das Ausgangssignal des Sensors. Warum ist diese geringer als die Peakhöhe? Genau!
Aufgrund des Spannungsabfalls der Diode beim Ladevorgang.
Schaltung und Programmcode
Zunächst muss man die Maximalwerte ermittel. Man misst den Sensor im trockenen Zustand in der Luft und trägt den Messwert bei TROCKEN ein. Danach versenkt man den Sensor bis zur Markierung in einem Wasserglas und trägt diesen Messwert bei NASS ein. Im Programm werden diese Werte zu 0 und 100%. Alle tatsächlichen Messwerte im Boden sollten dann dazwischen liegen.
// Sensorspezifische Werte
#define TROCKEN 644
#define NASS 299
void setup() {
Serial.begin(9600);
}
void loop() {
int value = analogRead(A7);
byte pz = map(value, TROCKEN, NASS, 0, 100);
Serial.println("Messwert: " + String(value) + " = " + String(pz) +" %");
delay(200);
}