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
...
}
Melden Sie sich an, um einen Kommentar zu erstellen.
arduino/modellbau/projekte/automatische-lenzpumpe.txt · Zuletzt geändert: 2018/11/04 10:51 von 127.0.0.1
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0