Unser Weihnachtsbaum zwitschert uns was! – Start: Wasserstandssensor

Send to Kindle

Von Anja Schlenker und Mattias Schlenker

Heiligabend, der Weihnachtsbaum steht halbwegs gerade und damit ist die größte Hürde zum harmonischen Fest genommen. Doch nach ein paar Tagen Heizungsluft ist Papa genervt, er muss bäuchlings unter die piksenden Zweige kriechen, ohne dabei Muttis mundgeblasene Glaskugeln herunter zu rammeln, und prüfen, ob noch genügend Wasser im Ständer ist oder es bald heißt: leise rieselt der Baum.

Schöner, rückenschonender und überhaupt viel cooler ist Horst von Forst, unser twitternder Weihnachtsbaum, der seinen Durst meldet und damit Papa’s Gekrieche auf ein Mindestmaß reduziert.

Bis Weihnachten soll mitels Arduino Yún und dem Temboo-API die Nordmanntanne im Wohnzimmer über die Füllhöhe des Wassers und möglichen Rauch im Raum per Twitter informieren und außerdem per Helligkeitssensor selbständig die mit einer Funksteckdose verbundene elektrische Lichterkette schalten. Servieren werden wir die Rezepte in kleinen Häppchen, die – technisch fast identisch, aber in einem anderen Kontext aufbereitet – in unser Buch „Arduino Hausautomation“ eingehen werden.

Tipp: Wer noch nie mit Arduino gebastelt hat, sollte einen Blick auf das Tutorial von makeuseof.com werfen (englisch). Als Hardware kommt der Arduino Yún (Yún bei Amazon) zum Einsatz, für dieses und andere Teilprojekte ohne Netzwerkzugriff kann aber auch ein Arduino Uno (Uno bei Amazon) verwendet werden.

Wie misst man einen Wasserstand?

Wege, den Wasserstand zu messen, gibt es viele. Eine präzise mechanische Lösung wäre ein Schwimmer, der Mikroschalter oder Reedkontakte auslöst – und damit nicht davon abhängig ist, ob hartes Leitungswasser oder weiches Regenwasser verwendet wird. Ebenfalls kaum von der Wasserhärte abhängig ist die sehr elegante kapazitative Messung: Wasser verändert die Eigenschaften eines elektrischen Feldes. Wir haben uns für die einfachste und unpräziseste Methode entschieden, die jedoch für den geplanten Einsatzzweck hinreichend genau ist und in einer halben Stunde nachgebaut werden kann. Wir messen den Widerstand zwischen zwei in Wasser eingetauchten Elektroden. Die werden dabei so hoch ins Wassergefäß des Weihnachtsbaumes getaucht, dass sie bei Unterschreiten einer sehr kritischen Schwelle im Trockenen liegen und damit ein unendlicher Widerstand anliegt. Liegen die Enden der Elektroden unter der Wasseroberfläche, kann aus dem Widerstand die Füllhöhe geschlossen werden.

Einfach, muss aber auf die Wasserhärte kalibiert werden: Zwei Elektroden messen den Widerstand des Wassers.

Einfach, muss aber auf die Wasserhärte kalibiert werden: Zwei Elektroden messen den Widerstand des Wassers.

Und wie hoch ist nun der Widerstand des Wassers?

Der Widerstand eines Elektrolyts hängt gewaltig von den gelösten Salzen ab. Die Webseite Zentrum Gesundheit hat eine Liste in Abhängigkeit von der Wasserhärte. Demnach sind Leitfähigkeiten von 100µS/cm (3,5°dH) bis 600µS/cm (21°dH) für Leitungswasser typisch – bei Regenwasser eher 5µS/cm bis 50µS/cm. Leitfähigkeit in Siemens ist der Kehrwert des elektrischen Widerstandes in Ohm. Dreht man µS/cm um, erhält man also die Einheit MΩcm. Dass die Längeneinheit über dem Bruchstrich steht, hat seinen Sinn, denn dieser spezifische Widerstand muss mit dem Abstand der Elektroden multipliziert und durch Ihre Fläche geteilt werden – dann kürzt sich die Längeneinheit heraus. In unserem Fall zweier M5-Gewindestangen, die den Abstand 1,5cm haben und ca. einen Zentimeter eingetaucht sind (macht 0,5cm² Elektrodenfläche), ergibt sich demnach bei einer Leitfähigkeit von 400µS/cm ein Widerstand von rund 7500Ω:

\(
R = \frac{1,5cm}{0,5cm^2} · \frac{1}{400} · \frac{cm}{µS} = \frac{3}{4} · \frac{1}{10^2 · 10^{-6}} Ω = 7500Ω
\)

 

Für eine Spannungsteilerschaltung ist folglich ein Widerstand zwischen 1kΩ und 20kΩ gut geeignet – je nachdem, was gerade zur Hand ist und in welchem Bereich man präziser messen möchte. Wir haben 10kΩ verwendet.

Die Schaltung und der erste Sketch

Als Schaltung kommt die im Arduino-Tutorial beschriebene Potentiometerschaltung zum Einsatz: Vom D2-Anschluss des Arduino, der als Spannungsquelle dient, zu einer Messelektrode, von der anderen Messelektrode auf den analogen Eingang A0 und von diesem über den 10kΩ-Widerstand auf Masse. Der erste Sketch verwendet noch keine der speziellen Funktionen des Yún. Im Foto ist daher ein „normaler“ Arduino Uno zu sehen, der per USB-Kabel mit dem PC verbunden ist.

Die Spannungsteilerschaltung mit 10kOhm-Widerstand

Die Spannungsteilerschaltung mit 10kOhm-Widerstand

Unser Sketch macht nichts anderes, als alle paar Sekunden den Wert am Analogport zu messen und über die serielle Konsole auszugeben. D2 statt +5V als Stromquelle soll galvanischen Verschleiß verhindern – nur während der Messung wird D2 auf „high“ gezogen:

int sourcePin = 2;
int sensorPin = A0;
int sensorValue = 0;

void setup() {
  pinMode(sourcePin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(sourcePin, HIGH);
  delay(1000);
  sensorValue = analogRead(sensorPin);
  Serial.println(sensorValue);
  digitalWrite(sourcePin, LOW);
  delay(2000);
}

Wer möchte, kann noch etwas rechnen, denn für den gemessenen Wert gilt (analoge Ports des Arduino lösen mit 10 Bit auf – kennen also 0 bis 1023):

\(
N = \frac{R_1}{R_1 + R_2} · 1023
\)

 

Aufgelöst nach dem Widerstand R2 ergibt dies:

\(
R_2 = ( \frac{1023}{N} – 1 ) · R_1
\)

 

In einen Arduino-Sketch sollte man keine Floats verwenden, wir tricksen also mit „unsigned long“:

int sourcePin = 2;
int sensorPin = A0;
int sensorValue = 0;
int resistorTwo = 10000;

void setup() {
  pinMode(sourcePin, OUTPUT);
  Serial.begin(9600);
}

unsigned long getResistor(int sensorVal) {
   unsigned long frac = 1023000 / sensorVal - 1000;
   return frac * resistorTwo / 1000;
}

void loop() {
  digitalWrite(sourcePin, HIGH);
  delay(1000);
  sensorValue = analogRead(sensorPin);
  if (sensorValue > 0) {
      Serial.println(getResistor(sensorValue));
  } // sonst division by zero!
  digitalWrite(sourcePin, LOW);
  delay(2000);
}

Genug der grauen Theorie: Am Montag kombinieren wir die Schaltung zur Wasserstandsmessung mit dem Temboo-API, dann sehen wir den ersten Tweet des Weihnachtsbaumes unter Horst von Forst!

Beitragsbild: Flickr-User weisserstier CC-BY-2.0

Ein Gedanke zu „Unser Weihnachtsbaum zwitschert uns was! – Start: Wasserstandssensor

  1. Pingback: Unser Weihnachtsbaum zwitschert uns was! 2. Teil: Mit Temp(bo)o in Netz | Hausautomation mit Arduino

Kommentare sind geschlossen.