Um den Füllstand von Wasser (oder anderen Flüssigkeiten) in einem Behältnis zu messen,
gibt es verschiedene Verfahren.
Hier wird die Möglichkeit der rein optischen Messung verwendet, welche den Vorteil hat keinerlei bewegliche
Teile und somit eine minimale Angriffsfläche für das Wasser zu bieten.
Dieser Sensor lässt sich auch gut als Ergänzung für das
Automatisches Bewässerungssystem mit dem ESP32 verwenden.
Optische bzw. optoelektronische Füllstandssensoren bestehen aus einer Lichtquelle (meist IR-LED)
und einem Empfänger (z.B. Fototransistor). In Luft/Gas wird das ausgestrahlte Licht der LED durch
die Eigenschaften des Prismas an der Spitze des Sensors fast vollständig zurückreflektiert.
Umschließt Wasser (oder eine andere Flüssigkeit) die Spitze, so wird das Licht gebrochen und in
das flüssige Medium abgelenkt. Somit trifft es nicht mehr (oder nur zu einem geringen Teil)
auf den Empfänger und das Signal verändert sich (fällt meist ab).
Um ein möglichst korrektes Messergebnis zu erzielen, sollte direkt einstrahlendes (Sonnen)licht
vermieden werden.
Der hier verwendete Füllstandssensor kann auf verschiedene Arten im Behälter installiert werden:
Der hier verwendete Füllstandssensor besitzt vier verschiedenfarbige Anschlüsse, die dem folgenden Schaltplan des Sensors entsprechen:
In meinem folgenden Aufbau mit dem Arduino Uno habe ich als Vorwiderstand 470Ω statt die im Bild
angegebenen 390Ω für R1 verwendet und als Pulldown-Widerstand für R2 stattdessen einen 10kΩ-Widerstand.
Als Indikatorleuchte habe ich eine Dual-LED (grün/rot) mit gemeinsamer Anode benutzt, es können aber
auch alternativ eine RGB-LED oder zwei separate LEDs verwendet werden. (Hier kann sich evtl. das Verhalten
für digitalWrite()
ändern, denn die gemeinsame Anode wird über (+) gespeist und benötigt
ein LOW
-Signal, damit die LED leuchten kann.
Der 4fach JST-Stecker, der an dem Kabel des Sensors angebracht ist, kann entweder mit den normalen Steckkabeln auf dem Breadboard verdrahtet werden oder man verwendet ein Stück einer Stiftleiste (2,54mm), die perfekt in den Stecker passt:
Der folgende Sketch misst einmal pro Sekunde den Wasserstand und lässt die rote LED leuchten, sobald der Sensor sich außerhalb des Wassers befindet. Ansonsten leuchtet die LED grün. Zusätzlich wird der gemessene Werte auf der seriellen Konsole ausgegeben.
#define PIN_SENSOR A0
#define PIN_LED_RED 7
#define PIN_LED_GREEN 8
void setup()
{
Serial.begin(9600);
pinMode(PIN_LED_RED, OUTPUT);
pinMode(PIN_LED_GREEN, OUTPUT);
}
void loop()
{
static unsigned int sensorValue = 0;
sensorValue = analogRead(PIN_SENSOR);
Serial.println(sensorValue);
digitalWrite(PIN_LED_GREEN, HIGH);
digitalWrite(PIN_LED_RED, HIGH);
if (sensorValue < 50) {
digitalWrite(PIN_LED_RED, LOW);
} else {
digitalWrite(PIN_LED_GREEN, LOW);
}
delay(1000);
}
zurück