A04|01 Der Wassersensor
Water Sensor

Sensorwerte / Wasser und Feuchtigkeit messen

Im Grunde hat der Wassersensor das gleiche Funktionsprinzip wie der Dampfsensor und kann aus diesem Grund auch zum Messen von Dampf, Niederschlag, Flüssigkeitsniveaus, Überschwemmungen, Flüssigkeitslecks oder die Abwesenheit von Flüssigkeiten hergenommen werden. Der Wassersensor hat aber den Vorteil, dass er größer dimensioniert ist. Dadurch ist er besser geeignet um einen Wasserstand zu messen und sollte eher als Wasserstandsensor bezeichnet werden.

 

Spezifikationen
- Signalart: analog
- Spannung: 3,3V – 5V
- Pinabstand: 2,54mm
- Betriebsstrom: ﹤20mA
- Erkennungsbereich: 40mm x16mm
- Produktionsprozess: FR4 doppelseitig verzinnt
- Arbeitstemperatur: 10℃ bis 30℃

Die Funktionsweise des Wassersensors ist ziemlich einfach. Der Sensor verfügt über eine Reihe von freiliegenden voneinander getrennten Leiterbahnen. Sobald die Bahnen ins Wasser getaucht werden, überbrückt das Wasser die Lücken dazwischen. Das Leitungswasser ist normalerweise mit Mineralien und Salzen versetzt und somit in der Lage den elektrischen Strom weiter zu leiten.

Der Abstand zwischen den Leiterbahnen wirkt wie ein Widerstand, dessen Wert je nach Wasserstand variiert. Der Widerstand ändert sich je nachdem, mit wie viel Wasser die Leiterbahnen bedeckt sind. Je mehr der Sensor ins Wasser eingetaucht wird, desto besser ist die Leitfähigkeit und desto geringer ist der Widerstand. Und umgekehrt: Je weniger der Sensor ins Wasser eingetaucht ist, desto weniger ist die Leitfähigkeit und desto höher ist der Widerstand. Über das analoge Signal mit den Werten 0 bis 1023 können wir Rückschlüsse auf den Wasserstand ziehen. Bei idealen Verhältnissen zeigt uns der Wert 512 an, dass der Wasserstand bei 50% (1024/512=0,5) liegt.

Zusätzlich besitzt das Modul über eine Betriebs-LED. In Verbindung mit dem Wasserstand hat sie keinerlei Funktion und zeigt nur an, dass die Platine mit Strom versorgt wird.

 

Der Aufbau

Schließen wir den Wasserstandsensor an. Verbinde den +Pin (Modul) mit dem 5V Pin (Arduino) und den –Pin (Modul) mit dem GND (Arduino). Und schließlich verbinden wir den S-Pin für das Signal mit dem A0 (Arduino). Die folgende Abbildung zeigt die Verdrahtung:

 
 

Der minimal Sketch

Sobald die Schaltung aufgebaut ist, lade die folgende Skizze auf dein Arduino hoch. Der Sketch sendet den aktuellen Sensorwert an den seriellen Monitor. Gleichzeitig blinkt die interne Arduino LED am Pin 13. Der Sensorwert gibt den Blinkrhythmus an: Je mehr Wasser detektiert wird, umso langsamer blinkt die LED. Bei niedrigem Wasserstand blinkt sie sehr schnell.

/********************************************************
A04|01 Der Wassersensor A
Der minimal Sketch
01 Mr Robot UXSD / www.mrrobotuxsd.com
*********************************************************/

int waterPin = A0;  //Pin-Nummer des Wassersensors
int ledPin = 13;    //Pin-Nummer der LED
int waterValue = 0; //Variable zum Speichern der Sensor-Werte


void setup() 
{
  //Initialisiere die Serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600);
  
  pinMode(ledPin, OUTPUT); //den ledPin als OUTPUT deklarieren
}


void loop() 
{
  waterValue = analogRead(waterPin); //lies den aktuellen Sensor-Wert

  Serial.print("Wasserhöhe: "); 
  Serial.println(waterValue);

  digitalWrite(ledPin, HIGH); //schalte die LED ein
  delay(waterValue);          //pausiere gemäß dem Sensor-Wert
  digitalWrite(ledPin, LOW);  //schalte die LED aus
  delay(waterValue);          //pausiere gemäß dem Sensor-Wert
}
 

Schalte den seriellen Monitor ein, indem du in der Arduino IDE in der Menüleiste auf Werkzeuge > Serieller Monitor gehst. Falls der Sensor trocken ist, solltest du den Wert 0 sehen. Nimm ein Glas Wasser und stecke die Sensorfläche mit den Leiterbahnen in die Flüssigkeit. Achte darauf, dass die kleinen Elektronikteile (Widerstände) und der Kabelanschluss trocken bleiben! Die Schaltung ist nicht dazu gemacht ihn komplett ins Wasser einzutauchen.

Du solltest nun die folgende Anzeige sehen:


Der Sketch im Detail

Zunächst deklarieren wir die Variable int waterPin und weisen ihm den Arduino-Pin A0 zu. Am Pin A0 steckt der S (Signal) Pin des Wassersensors. Um die interne LED des Arduino zum Blinken zu bringen brauchen wir die Variable int ledPin. Hierzu benutzen wir den Pin 13 (dieser Pin ist für die LED reserviert). Als Nächstes definieren wir eine Variable int waterValue, die den aktuellen Wasserstand speichert. Als Ausgangswert setzen wir seinen Wert mit 0 gleich.

int waterPin = A0;  //Pin-Nummer des Wassersensors
int ledPin = 13;    //Pin-Nummer der LED
int waterValue = 0; //Variable zum Speichern der Sensor-Werte
 

Im setup() Abschnitt modifizieren wir den LED als OUTPUT Element. Mit Serial.begin() richten wir den seriellen Monitor mit einer Baudrate von 9600 ein.

void setup() 
{
  //Initialisiere die Serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600);
  
  pinMode(ledPin, OUTPUT); //den ledPin als OUTPUT deklarieren
}
 

Im void loop wird zunächst der Wassersensor mit analogRead() eingelesen und in der Variable waterValue gespeichert und sein Wert an den seriellen Monitor geschickt.

void loop() 
{
  waterValue = analogRead(waterPin); //lies den aktuellen Sensor-Wert

  Serial.print("Wasserhöhe: "); 
  Serial.println(waterValue);
  ...
}
 

Schließlich wird der Wert vom Wassersensor benutzt, um mithilfe von delay das Blinkverhalten zu beeinflussen: Je höher der Wert vom Wassersensor um so langsamer blinkt die LED. Ist der Wasserstand gering ist die Blinkrate sehr hoch.

digitalWrite(ledPin, HIGH); //schalte die LED ein
delay(waterValue);          //pausiere gemäß dem Sensor-Wert
digitalWrite(ledPin, LOW);  //schalte die LED aus
delay(waterValue);          //pausiere gemäß dem Sensor-Wert
 

Den Wassersensor kalibrieren

Eine Sache muss beim Wassersensor beachtet werden: Die Werte sind von der Wasserqualität abhängig. Um den Wasserstand korrekt abzulesen ist eine Kalibrierung des Sensors nötig. Wie oben schon erwähnt ist reines, destilliertes Wasser nicht in der Lage elektrischen Strom zu leiten. Die Leitfähigkeit des Wassers verdanken wir unter anderem den gelösten Mineralien. Dementsprechend verhält sich jede Wasserprobe anders. In meinem Experiment mit einem Glas Wasser aus der Leitung war die komplette Sensorfläche unter Wasser und hat statt dem Maximalwert 1023 den Wert 700 eingelesen.

In solch einem Fall können wir die obere Grenze von 700 als neues Maximum definieren. Mithilfe der map() Funktion strecken wir den Bereich 0 bis 700 auf 0 bis 1023. Aber weitaus intuitiver ist es Prozentwerte von 0% bis 100% zu benutzen. Benutze für die folgenden Schritte den oberen Sketch, um den Maximalwert für das Wasser zu bestimmen. Tauche also die Sensorfläche komplett ins Wasser und notiere den Wert und setze diesen in den unteren Sketch ein. In einem Beispiel sind es 700. Kopiere den unteren Sketch, füge ihn in die Arduino IDE ein und lade ihn auf das Arduino-Board rauf.

/********************************************************
A04|01 Der Wassersensor B
Den Wassersensor kalibrieren
Mr Robot UXSD / www.mrrobotuxsd.com
*********************************************************/

int waterPin = A0;  //Pin-Nummer des Wassersensors
int waterValue = 0; //Variable zum Speichern der Sensor-Werte


void setup() 
{
  //Initialisiere die Serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600);
}


void loop() 
{
  waterValue = analogRead(waterPin); //lies den aktuellen Sensor-Wert

  //Den Bereich von 0 bis 1023 auf 0 bis 100 übertragen
  int newWaterValue = map(waterValue, 0, 700, 0, 100);

  Serial.print("Wasserhöhe: "); 
  Serial.print(newWaterValue);
  Serial.println("%"); 
}
 

Schalte den seriellen Monitor ein, indem du in der Arduino IDE in der Menüleiste auf Werkzeuge > Serieller Monitor gehst.

Du solltest nun die folgende Anzeige sehen:

 

Ein Trick um die Korrusion zu mindern

Ein allgemein bekanntes Problem bei diesen Sensoren ist ihre kurze Lebensdauer durch Korrosion, wenn sie dauerhaft einer feuchten Umgebung ausgesetzt sind. Wenn der Sensor ständig mit Strom versorgt wird, beschleunigt sich die Korrosionsrate erheblich. Dieses Thema behandle ich ausführlicher im Tutorial für Die Erdfeuchtigkeit messen.



Den Wassersensor als Salzsensor nutzen

Da Salz Auswirkungen auf die Leitfähigkeit von Wasser hat, ist es denkbar den Wassersensor als Salz- oder Mineralindikator zu nutzen. Voraussetzung hierfür ist ein gleichbleibender Wasserstand. Aber dir muss bewusst sein, dass eine erhöhte Salzkonzentration die Leiterbahnen in kurzer Zeit zersetzen kann, da hier im Zusammenspiel mit Strom ein Elektrolyse-Prozess gestartet wird.

 
 

Falls du die hier beschriebenen Elektronik-Module nicht hast, kannst du sie in meiner Einkaufsliste finden. Warum ich selber hauptsächlich mit Modulen der Marke Keyestudio arbeite, erläutere ich unter diesem Blog-Artikel.

In dieser Übersicht äußere ich Empfehlungen aller Art.

Hier kommst du wieder zur Übersicht aller Module.