zurück

Sensor für Bodenfeuchtigkeit III.

10.11.2018

Die meisten Bodenfeuchtigkeits-Sensoren haben einen Nachteil: sie korrodieren an der Stelle, an der sie mit der feuchten Erde in Berührung kommen, da sie meist aus zwei offenen Metall-Elektroden (Kupfer, Messing o.ä.) bestehen. Der folgende Sensor weist keinerlei offene Metallverbindungen auf und somit kann auch keine Korrosion stattfinden.

Kapazitativer Bodenfeuchtesensor

Funktionsweise

Das Sensor-Modul beinhaltet einen NE555-Timer, welcher in einer astabilen Kippstufe konfiguriert ist. Damit arbeitet er als Oszillator und gibt ein periodisches Rechtecks-Signal ab, welches in eine der Sensor-Elektroden führt. Die andere Sensor-Elektrode ist mit Ground verbunden und bildet zusammen mit der anderen einen Kondensator. In Anwesenheit von Wasser wird die Kapazität dieses Kondensators nun verändert und kann gemessen werden.
Ein kleiner Nachtteil hat dieses Sensor-Modul dennoch. Der Hersteller verwendet für das Modul normales Platinenmaterial, damit ist die Kante nicht versiegelt und Wasser kann hier eindringen. Aber mit Hilfe von Lack, die die Spitze des Sensors abdichtet, kann dem leicht Abhilfe geschafft werden.

Kapazitativer Bodenfeuchtesensor
Abb.: Schaltplan des Bodenfeuchtesensors

Verwendete Bauteile

Aufbau der Schaltung

Aufbau der Schaltung auf dem Breadboard
Video: Live-Demonstration des kapazitativen Bodenfeuchtesensors

Sketch

#define PIN_SENSOR A0

#define PIN_LED_GREEN   8
#define PIN_LED_YELLOW  9
#define PIN_LED_RED    10

unsigned int sensorValue = 0;
byte currentLed = 0, previousLed = 0;

void setup()
{
    Serial.begin(9600);
    pinMode(PIN_LED_GREEN,  OUTPUT);
    pinMode(PIN_LED_YELLOW, OUTPUT);
    pinMode(PIN_LED_RED,    OUTPUT);
}

void loop()
{
    sensorValue = analogRead(PIN_SENSOR);
    Serial.println(sensorValue);

    if (sensorValue < 400) {
        if (currentLed != PIN_LED_GREEN) {
            currentLed = PIN_LED_GREEN;
        }
    } else if (sensorValue < 540) {
        if (currentLed != PIN_LED_YELLOW) {
            currentLed = PIN_LED_YELLOW;
        }
    } else {
        if (currentLed != PIN_LED_RED) {
            currentLed = PIN_LED_RED;
        }
    }

    if (previousLed != currentLed) {
        previousLed = currentLed;
        digitalWrite(PIN_LED_GREEN, LOW);
        digitalWrite(PIN_LED_YELLOW, LOW);
        digitalWrite(PIN_LED_RED, LOW);
        digitalWrite(currentLed, HIGH);
    }

    delay(1000);
}