Regen-Sensoren

Prof. Jürgen Plate

Regen-Sensoren

Regen-Sensor mit Widerstandsmessung

Dieser Regensensor reagiert auf Regentropfen oder Schnee, die auf einen Leiterkamm einer Platine fallen und einzelne Leiterbahnen miteinander verbinden, wodurch sich der Widerstand ändert (Regenwasser enthält auch immer einige Bestandteile, die es etwas leitfähig machen). Den analogen Ausgang des Sensors (direkt am Kamm angeschlossen, siehe Schaltung) kann man verwenden, um die Leitfähigkeit des Regens (oder auch dessen Stärke) zu erkennen. Über den digitalen Ausgang wird der Regen an einen Digitaleingang des Raspberry Pi gemeldet, wobei hier die Schaltschwelle einstellbar ist. Mit dem Potentiometer auf der Platine wird der Schwellwert festgelegt, bei dem der digitale Ausgang von "0" auf "1" schaltet. Das folgende Bild zeigt den von vielen Anbietern erhältlichen Sensor (auch von Amazon oder Ebay).

Die Betriebsspannung kann zwischen 3,3 V und 5 V liegen. Die Schaltung besteht eigentlich nur auf einem Komparator LM393 und dessen Beschaltung. Erhältlich ist das Board zusammen mit der Sensorfläche und Kabeln bei Amazon oder Ebay. Die Sensorfläche von ca. 5 cm x 4 cm des Kammsensors hat eine vernickelte Oberfläche, um einen Schutz vor Oxidation zu bieten. Derzeit wird nur der Komparator-Ausgang genutzt (digitaler Ausgang). Das folgende Bild zeigt die Schaltung.

Neben dem Komparator sind noch zwei LEDs auf dem Board untergebracht, eine zur Betriebsanzeige und eine weitere, die am Ausgang des Komparators angeschlossen ist und Niederschlag anzeigt. Der Sensor muss auf jedem Fall schräg montiert werden, damit das Wasser abläuft. Auch dann dauert es nach Ende des Regens immer etwas, bis der Sensor wieder trocken genug ist. Um wirklich halbwegs den Zeitpunkt von Niederschlägen nzuzeigen, muss der Sensor geheizt werden. Das ist auch deswegen notwendig, damit er auch Schnee vernünftig detektieren kann. Zum Heizen eignen sich einige Widerstände oder eine kleine Heizfolie.

Es hat sich schon gezeigt, dass dieser extrem preiswerte Sensor noch nicht der Weisheit letzter Schluss ist. Die Widerstandsmessung ist doch recht ungenau und hängt nicht nur vom Leitwert des Regens, sondern auch von Korrosion und Verschmutzung des Sensors ab. Mögliche alternative Verfahren wären die Messung der Temperaturdifferenz zweier Kaltleiter (trocken, benetzt) oder die Messung der Kapazitätsänderung eines Sensors, der dann aber vor Witterung geschützt ist.

Die Software zur Abfrage ist sehr einfach. Es wird nur der GPIO-Port abgefragt, an dem der Sensor angeschlossen ist. Das Programm liefert abhaengig vom Regensensor 0 oder 1.

#!/usr/bin/python
import RPi.GPIO as GPIO

# ------------------------- Beginn Konfiguration ----------------------------
ADR = 25     # GPIO fuer den Regensensor
# ------------------------- Ende Konfiguration ------------------------------

try:
  GPIO.setmode(GPIO.BCM)
  GPIO.setwarnings(False)
  GPIO.setup(ADR, GPIO.IN)

  rain = GPIO.input(ADR);
  print("%1d" % rain)

except Exception:
  print "0"
  exit()
Bedenken Sie bitte auch, dass die Abfrage des Regensensors nur eine Momentaufnahme darstellt. Bei sehr leichtem Regen kann es vorkommen, dass mal Regen angezeigt wird und bei der folgenden Messung nicht - je nachdem, wie gut die Sensorfläche gerade benetzt ist. Hier hilft nur, wiederholt zu messen und mehrere aufeinanderfolgende Messungen zu berücksichtigen. Das Arduino-Programm weiter unten zeigt eine einfache Möglichkeit, einzelne "Aussetzer" zu überbrücken.

Kapazitiver Regen-Sensor

Kapazitive Sensoren

Alle in den letzten Jahren entwickelten Arten von kapazitiven Sensoren haben eines gemeinsam: Sie erkennen an einer Änderung der Zeitkonstante einer RC-Schaltung mit einem variablen Kondensator, dass sich ein Objekt (wie eine Fingerspitze oder ein Wassertropfen) in unmittelbarer Nähe befindet ("Proximity Sensor"). Das Ergebnis kann die absolute oder relative Änderung der Frequenz eines Oszillators oder die Veränderung der Lade-/Entladezeit eines Referenzkondensators sein. Moderne Touch-Sensoren müssen deshalb nicht mehr berührt werden, sondern es genügt eine Annäherung → berührungslose Erkennung.

Im Prinzip ist ein kapazitiver Sensor meist eine kleine Fläche aus leitendem Material, z. B. die Kupferauflage einer Platine. Abhängig vom System (massebezogen oder schwebend) ist die von der Fingerspitze hervorgerufene Änderung der Sensorkapazität negativ oder positiv. Das Messprinzip beruht darauf, dass der Sensor auf ein bekanntes Potential aufgeladen wird. Die (unbekannte) Ladung des Sensors wird in einem Abtastkondensator mit bekanntem Wert gesammelt. Dieser Vorgang wird so lange wiederholt, bis die Spannung über dem Abtastkondensator einen vorgegebenen Pegel erreicht. Die Anzahl der benötigten Ladezyklen ist dann das Maß für die Sensorkapazität. Wird ein Finger in der Nähe des Sensors gebracht, erhöht sich die erforderliche Anzahl von Ladezyklen.

Dieses Prinzip kann mit einem Mikrocontroller realisiert werden. Die Anforderungen sind minimal: es genügen zwei normale Ein-/Ausgabeports. Das folgende Bild zeigt die grundlegende Beschaltung. Es gibt zwei Kondensatoren, die als Ladungsspeicher dienen, den Kondensator Cs bekannter Größe als Speicher und die Touch-Elektrode als Kapazität gegen das Massepotenzial der Schaltung. Am Anfang werden beide Kondensatoren entladen, um diese in einen definierten Zustand zu bringen. Das bedeutet, dass die Ports PB1 und PC1 als Ausgänge und auf LOW geschaltet werden. Nun wartet die Software etwas, damit die Entladung auch vollständig erfolgt.

Danach finden in einer Schleife folgende Aktionen statt:

  1. Der Touch-Sensor wird über PB1 aufgeladen (er hat nur wenige pF). PB1 ist als Ausgang geschaltet und auf HIGH gesetzt. Dabei ist der Port PC1 als Eingang geschaltet (hochohmig), damit Cs nicht auch aufgeladen wird.
  2. Port PB1 wird nun als Eingang konfiguriert und PC1 als Ausgang mit LOW-Potential. Jetzt wandert die Ladung aus dem Touch-Kondensator in den Kondensator Cs. Da dieser viel größer als die Sensorkapazität ist, lädt er sich nur gering auf.
  3. Erst wenn die Spannung an Cs ausreicht, um vom Mikrocontroller als HIGH erkannt zu werden, wird die Schleife beendet und die Anzahl der Schleifendurchläufe ausgegeben. Dieser Zählerstand ist ein Maß für die benötigten Ladezyklen.
Für die nächste Messung beginnt die Schleife von vorne. Der Endstand des Zählers wird verändert, wenn man den Touchsensor mit dem Finger berührt oder wenn die Kapazität auf andere Weise beeinflusst wird.

Der Controller AT42QT1010

Der Hersteller Atmel hat einige seiner Controller ab Werk mit der Software für diese Form der Messung versehen. Die Anforderungen an die Hardware sind minimal, so dass schon ein Modell mit vier Ports ausreicht. Zwei der Ports dienen zur Messung, der dritte Port gibt das Ergebnis als Digitalwert aus und der vierte Port erlaubt die Einstellung des Betriebsmodus. Die Software ist so programmiert, dass der Controller nach dem Einschalten ein Kalibrierungsprogramm durchläuft und ermittelt, welche Anzahl von Messzyklen für "nicht berührt" steht. So kann man nicht nur kleine "Touch-Tasten" realisieren, sondern beispielsweise auch eine Metallskulptur als "Sensor" anschließen. Jede Berührung des Kunstwerks würde einen Alarm auslösen. Es gibt verschiedene Touch-Sensor-Controller, die sich durch die Arbeitsweise unterscheiden. Manchen wirken wie eine Taste, andere haben eine Toggle-Funktion. Ein größeres Modell mit mehr Eingängen erlaubt Tastenfelder oder sogenannte Slider. Für eine einfache Tastenfunktion wird der AT42QT1010 verwendet. Die Schaltung ist minimal:

Der SYNC/MODE-Eingang erlaubt zu einen die Synchronisation des Chips mit einem externen Takt (für spezielle Anwendungen). Über einen festen HIGH- oder LOW-Pegel kann andererseits die Arbeitsweise beeinflusst werden:

Man muss nicht einmal diese Minimalschaltung selbst realisieren. Bei diversen Anbietern gibt es fertige Breakout-Boards, die sofort als Touch-Taste eingesetzt werden können. Da der Chip mit einer Versorgungsspannung von 1,8 V genauso gut arbeitet wie mit 5 V, ist er bei fast allen Controller-Boards als Peripherie einsetzbar. Das folgende Bild zeigt das Breakout-Board von Adafruit, das noch zwei nette Features hat. Zum einen ist die oben im Schaltplan gezeigte Anzeige-LED fest integriert und zum anderen gibt es unter dem Touch-Feld ein Lötauge zum Anschluss eines externen Sensors (direkt über dem "Q" der Beschriftung, im Foto rot markiert). Die Anzeige-LED kann übrigens vom QT1010 getrennt und dann über den Lötpunkt LEDA von Controller aus autark angesteuert werden.


Das Touch-Board von Adafruit (links Oberseite, rechts Unterseite)

Der kapazitive Regensensor

Der Regensensor besteht aus einem Silikonschlauch von 6 - 10 mm Durchmesser, auf den ein Trichter gesteckt wird um den Regen aufzufangen. Das Regenwasser rinnt dann durch den Schlauch und gelangt am anderen Ende wieder ins Freie. Um den Schlauch wickelt man einige Windungen isolierten Schaltdraht (siehe Bild). Im Mustersystem ist die Wicklung ca. 2 cm lang und reagiert schon auf größere Tropfen. Der Schaltdraht wird mit dem oben erwähnten Lötauge für den externen Sensor verbunden - fertig.

Der Schlauch kann so verlegt werden, dass sich die Stelle mit dem Drahtwickel und dem Touch-Board im Trockenen befindet, Trichter und Abfluss aber im Freien liegen. So muss man auch nicht befürchten, dass die Elektronik Schaden nimmt. Alternativ kann der Touch-Sensor auch in ein Gehäuse eingebaut werden, damit er nicht direkt der Witterung ausgesetzt ist. Zusätzlich kann man die Platine noch mit Plastik-Spray einsprühen. Das Breakout-Board wird mit GND, 3,3 V und GPIO 25 verbunden.

An der Software für den Regensensor muss nichts verändert werden. Der kapazitive Sensor läuft mit dem oben aufgelisteten Programm. Das Problem, Niederschlag in Form von Schnee zu messen bedingt wieder eine Form der Heizung. Hier böte es sich an, Trichter und Schlauch im Eingangsbereich mit Heizdraht zu umwickeln.

Bedenken Sie bitte auch, dass auch die Abfrage des kapazitiven Regensensors nur eine Momentaufnahme darstellt. Bei sehr leichtem Regen hilft es auch hier nur, wiederholt zu messen und mehrere aufeinanderfolgende Messungen zu berücksichtigen. Das folgende Arduino-Programm zeigt eine einfache Möglichkeit, einzelne "Aussetzer" zu überbrücken. Es wird einmal pro Sekunde der Zustand des Sensors gecheckt und, falls er Regen erkannt hat, die Variable "Sum" um 1 erhöht. Dabei gibt es ein oberes Limit, ab dem nicht mehr weiter inkrementiert. Wird kein Regen erkannt, zählt das Programm die Variable hinunter (bis minimal 0). So dauert es auch einige Sekunden, bis wieder Trockenheit gemeldet wird.

// Sensoreingang
#define PIN 2
// Integrationszeit in Sekunden
#define LIMIT 60

int State, Sum;

void setup() 
  {
  pinMode(PIN, INPUT);
  Serial.begin(9600);
  }

void loop() 
  {
  State = digitalRead(PIN);
  if (State == 1)
    { Sum = (Sum > LIMIT)? Sum + 1 : LIMIT; }
  else
    { Sum = (Sum > 0)? Sum - 1 : 0; }
  State = (Sum > 0);
  Serial.println(State,DEC);
  delay(1000);
  }

Links


Copyright © Hochschule München, FK 04, Prof. Jürgen Plate
Letzte Aktualisierung: