Inhaltsverzeichnis
automatische Lenzpumpe, Wassermelder
Author: Dipl.-Ing. Wilfried Klaas
Board: Arduino Duemilanove, Arduino Uno
Wie funktioniert der Melder?
Wir machen uns die Leitfähigkeit von Wasser zu Nutze. Ich verwende dafür folgende Schaltung:
Als Sensoren reichen 2 Nägel oder Schrauben an der tiefsten Stelle im Boot. Ist kein Wasser vorhanden, wird am Eingang keine Spannung gemessen. → Wert = 0. Ist nun Wasser zwischen den beiden Sensoren vorhenden, wird über den 1K Widerstand Spannung auf den Eingang des Arduinos geleitet. Wert > 0. Um Fehlalarm zu vermeiden, habe ich eine zusätzliche Schranke eingebaut. Und ich reduziere den Wertebereich des Signals auf 0.255. In dem Programm ist das zwar nicht von Nutzen, aber wenn man den Wert weiterverwenden möchte, braucht man dafür nur 1 Byte und nicht 2.
Programm
Das Programm ist einfach und kann quasi in jedes andere Programm integriert werden. Wir brauchen einen analogen Eingangund einen digitalen Ausgang mit Treiber für die Pumpe.
- Wassermelder.ino
/* Wassermelder. (C) Dipl.Ing. Wilfried Klaas Diese Programm meldet über einen analogen Eingang und einer kleine Schaltung, wenn Wassr vorhanden ist. Die Schaltung besteht aus 2 Widerständen und 2 Metallstäben (Schrauben o.ä.) als Sensoren. 1K Widerstand gegen +5V, Sensor + 100k Widerstand gegen Masse, Sensor -, Arduino analoger Eingang Solange kein Wasser zwischen den Seonsoren ist, hält der 100k Widerstand den Eingang auf GND -> 0 Verbindet nun Wasser die beiden Sensoren, liegt über den 1K Widerstand eine Spannung am Eingang des Arduinos an. Mit hilfe des seriellen Monitors können die Werte angeschaut und evt. die Grenze zur Erkennung angepasst werden. */ // Grenze für den Wassereinbruch const byte WATERDETECT = 20; // Eingang für den Sensor const byte analogInPin = A0; // Analog input pin that the potentiometer is attached to // Ausgang für die Alamierung const byte LED = 13; void setup() { // Ausgabe LED pinMode(LED, OUTPUT); // initialisiere serielle Schnittstelle mit 9600 bps: Serial.begin(9600); } void loop() { // Eingang lesen word sensorValue = analogRead(analogInPin); // umwandeln in Wertebereich von 0..255 byte outputValue = map(sensorValue, 0, 1023, 0, 255); // Ausgabe, wenn Wert > dem Detektierungwertes digitalWrite(LED, outputValue > WATERDETECT); // ausgabe auf serieller Schnittstelle Serial.print("sensor = " ); Serial.print(sensorValue); Serial.print("\t output = "); Serial.println(outputValue); // Messung nur alle 100ms... delay(100); }
Programm 2
Jeztzt mal mit einem Tonsignal auf Pin 4…
- Wassermelder.ino
... // Ausgang für die Alamierung const byte LED = 13; // Ausgang für Lautsprecher const byte LS = 4; void setup() { ... void loop() { ... // Ausgabe, wenn Wert > dem Detektierungwertes digitalWrite(LED, outputValue > WATERDETECT); if (outputValue > WATERDETECT) { tone(LS,500); } else { noTone(LS); } // ausgabe auf serieller Schnittstelle ... }