Schlagwort-Archive: Regensensor beheizt

MQTT- Kapazitiver Regensensor

Kapazitiver Regensensor Dokumentation
Kapazitiver Regensensor Dokumentation

Der Source Code f√ľr dieses Projekt kann in unserem Web Shop erworben werden.

Allgemeines

Anfang 2021, wurde von uns eine IoT-Wetterstation f√ľr eine Projekt in S√ľdtirol entwickelt. Ein Teil der Aufgabenstellung bestand darin, einen kapazitiv arbeitenden Regensensor zu integrieren.
Nach Abschluss der Entwicklung, blieben aus dem Prototyping noch einige der Sensor Platinen √ľbrig, daras entstand dann dieses Projekt.
Um dem interessierten Kunden das Funktionsprinzip n√§her zu bringen und eine Anleitung f√ľr den grundlegenden Aufbau eines kapazitiven Regensensors anzubieten, wurde der folgenden Artikel auf unserem Blog dazu ver√∂ffentlicht: Kapazitiver Regensensor.

Da die Anfragen f√ľr einen solchen Sensor sehr gro√ü waren, haben wir uns entschlossen ein kleine Auswerte Platine zu entwickeln, die mit einem ESP8266 (WEMOS D1 mini) ausgestattet ist und die Sensordaten per Webserver und MQTT zur Verf√ľgung stellt.
Zusätzlich befindet sich auf der Auswerte Platine ein potentialfreier Relais Schaltkontakt, der es erlaubt bei einer Regenerkennung auch direkt einen externen Schaltvorgang auszulösen. Um z.B. eine Markise ein zu fahren.

Aufbau Hardware

Das Regensensor Modul besteh aus drei Einzel Komponenten

  • Kapazitive Sensorplatine
    Die Funktionsweise der Sensorplatine wird bereits im Beitrag Kapazitiver Regensensor ausf√ľhrlich beschrieben, weshalb wir hier nicht mehr n√§her darauf eingehen werden.
  • Auswerteeinheit
    Die Platine der Auswerteeinheit bildet das Gegenst√ľck zur Sensorplatine. Die beiden Platinen besitzen dieselben Abmessungen, was bei der Befestigung z.B. in einem geeigneten Geh√§use wie einer Verteilerdose von gro√üem Vorteil ist. Die Bohrl√∂cher f√ľr die Befestigung der Auswerteeinheit werden somit komplett von der aufgeklebten Sensorplatine √ľberdeckt und bietet so einen perfekten Korrosionsschutz.
    Auf der Platine befindet sich ein DS18B20 Temperatursensor, der durch seine Position die Geh√§useinnentemperatur und gleichzeitig die Temperatur kurz unterhalb der Sensorplatine erfasst. Auf diese Weise kann in den Wintermonaten verhindert werden, dass sich Forst auf dem Sensor bilden kann. Bei einem Regenereignis wird die Sensorheizung ebenfalls automatisch aktiviert, um ein schnelleres Abtrocknen der Sensoroberfl√§che und somit eine schnellere Reaktionszeit des Sensors nach einem Regenereignisses sicher zu stellen. Die Maximale Sensor Temperatur wird √ľber den Temperatursensor geregelt, das spart Energie und erh√∂ht die Lebensdauer des Regensensors.
    Befindet sich kein Feuchtigkeit, Eis oder Kondensat auf der Sensoroberfl√§che, das durch die Erw√§rmung verdampfen kann, kommt es auch nicht zu einer Abk√ľhlung durch Verdunstung und der Sensor w√ľrde sich immer mehr aufheizen.
    Diese Regelung arbeitet mittels PWM (Pulsweitenmodulation), mit einer Frequenz von ca. 100Hz. Wurde Regen detektiert, findet im Temperaturbereich von 35 – 50¬įC eine stetige Regelung statt.
    Unterschreitet die Temperatur 4 ¬įC, wird die Sensor Heizung ebenfalls aktiviert um Frostbildung auf der Sensoroberfl√§che zu verhindern. Hierbei wird ebenfalls die Leistung der Sensorheizung in Abh√§ngig der gemessenen Temperatur geregelt. Der Regelbereich liegt hier bei zwischen 4¬įC und -6¬įC, was dann einer Heizleistung von 100 % entspricht.
    Um eine Betauung der Sensoroberfl√§che zu verhindern, .z.B. bei Morgentau oder Nebelbildung, wird die die kompensierte Sensorkapazit√§t als Messgr√∂√üe herangezogen. √úberschreitet diese einen Wert von 5 pF, wird die Sensorheizung mit einer Leistung von 20 % betrieben, um diesen Effekt zu eliminieren. Die Maximale Sensorheizleistung kann √ľber MQTT oder das Webfrondend in einem Bereich von 1 ‚Äď 100% eingestellt und somit begrenz werden. Die Spannungsversorgung der Sensorheizung wird √ľber eine 500mA selbstr√ľckstellende Sicherung gesch√ľtzt. Der WMOS D1 mini besitzt eine eigene selbstr√ľckstellende Sicherung. Die Spannungsversorgung erfolgt nicht √ľber die Micro USB-Buchse, sondern √ľber die zwei auf der Platine herausgef√ľhrten L√∂tpunkte *5V und GND. N√§here Informationen hierzu erhalten Sie in der Dokumentation, die sie oben im Beitrag kostenlos herunterladen k√∂nnen.

ACHTUNG:
Auf der Platine ist kein Verpolungsschutz vorhanden! Ein falscher Anschluss der Spannungsversorgung f√ľhrt zu einer Zerst√∂rung der elektronischen Bauteile.
Das Netzteil benötigt eine stabilisierte Ausgangsspannung von 5V= und  mindestens 1A  Ausgangs Strom, um die Auswerteeinheit und die Sensor Heizung sicher zu betreiben.

  • Auf der Platine der Auswerteeinheit befindet sich auch noch der hochgenaue Langzeit Timer 7555, der hier als 3V Variante best√ľckt ist und die Kapazit√§tsfrequenzumsetzung durchf√ľhrt. Als letztes Bauteil ist nun noch das Read Relais zu nennen, dass einen potentialfreien Ausgangskontakt zur Verf√ľgung stellt und bei einem Regenereignis ein externes Schaltsignal zur Verf√ľgung stellt.
    Der ungenutzte Raum der Platine wurde mit einem 2,54mm Lochraster versehen, das noch gen√ľgend Raum f√ľr eigenen Erweiterungen und Ideen bietet.
  • WEMOS D1 mini pro
    Das Schaltungsdesigne  des WEMOS D1 mini Board der Auswerteeinheit musste ebenfalls modifiziert werden (Nähere Informationen hierzu finden Sie in der Technischen Beschreibung).
    Es besitz 4 MB Flash, was ausreichend Platz f√ľr zuk√ľnftige Erweiterungen oder eigenen Ideeen bereith√§lt. Das Modul wird mit der aktuellen Firmware ausgeliefert, kann aber jeder Zeit √ľber ein Internetverbindung OTA auf die neueste Firmware Versionen upgedatet werden.
    Alle Anschl√ľsse des WEMOS sind nochmals separat auf dem Lochraster (Stiftleiste 2,54mm) herausgef√ľhrt.

Aufbau der Firmware

Um das Regensensormodul in das lokale Netzwerk zu integrieren, wird Anfangs ein eigener AP geöffnet. Verbindet man sich mit diesem AP und öffnet man anschließend im Webbrowser die IP-Adresse 192.168.4.1 gelangt man in das Konfigurationsportal des Regensensor Moduls.
Hier k√∂nnen dann alle notwendigen Einstellungen f√ľr das lokale Netzwerk (SSID, Kennwort) und die die Verbindung zum MQTT-Broker (Server IP, Benutzername, Kennwort und Port) vorgenommen werden.
Konnte anschlie√üend mit den eingegebenen Informationen eine Verbindung zum lokalen Netzwerk hergestellt werden, sind alle Daten und Konfigurationen des Sensors wie Einschaltschwellen, die Schalthysterese usw. neben dem MQTT-Broker auch √ľber das integriertes Web-Interface erreichbar.

Die Kapazit√§t des Sensors steht als Rohwert vom Sensor zur Verf√ľgung. F√ľr die Auswertung der Schaltschwelle, wird der kompensierte (kalibrierte) Sensorwert herangezogen.
Um nicht mit dem absoluten Kapazit√§tswert des Sensors arbeiten zu m√ľssen, kann der Sensorwert bei Trockenheit selbst definiert werden. Hierf√ľr wird eine Kalibrierung durchgef√ľhrt. So dass der Kompensierte Sensorwert dann bei Trockenwetter null hat.
Wandert der Wert um 10 pF in den negativen Bereich f√ľhrt das Sensormodul einen automatischen Nullabgleich durch.

√úbertragung der Werte per MQTT

Wird der Regensensor neu gestartet, werden alle Topics der Settings subscribed und anschließend alle Topics einmalig published.
Danach wird die publishing Routine in der Firmware fix alle 10 Sekunden aufgerufen und dabei nur die Werte published, die eine √Ąnderung seit dem letzten publishing Zyklus erfahren haben.
Dies geschieht um den Traffic möglichst gering zu halten.

Hier eine √úbersicht der ben√∂tigten Werte√§nderung f√ľr eine erneute MQTT √úbertragung:

  • curtemperature ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† >= 1.0 ¬įC
  • curfrequency¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† >= 50.0 Hz
  • curcapacity ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† >= 3.0 pF
  • compcapacity ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† >= 3.0 pF
  • calcapacity ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† >=1.0 pF
  • precipitation¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† >= 0.01 l/m2
  • windspeed¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† >= 0.5 m/s
  • heatsinkpower¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† >= 0.01
  • rain¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† true/false;
  • Uptime / Core Vcc¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† >= 0.01 V

Die CurCapacity und damit auch Comp.Cap. schwankt nat√ľrlich auch ohne Regen immer ein wenig, abh√§ngig von der Luftfeuchtigkeit, Nebel oder √§hnlichem. Deshalb wurde f√ľr die Auswertung der Regenerkennung ein Schwellwert definiert.

Berechnung der Niederschlagsmenge

Eine neue, aber noch experimentelle Funktion ist eine Berechnung der Niederschlagsmenge anhand der Sensorkapazit√§t und der Dauer des Regenereignisses. Hierf√ľr wird der Wert der kalibrierten Sensorkapazit√§t alle 30 Sekunden erfasst und in ein Array gespeichert. nach 15 Minuten, wird aus diesen Werten der Mittelwert gebildet. Die Summe der vier Viertelstundenwerten ergibt dann den Stundenwert, der nach der folgenden Funktion in eine Niederschlagsmenge (l/m2) umgerechnet wird und als 24 Stundenwerte ebenfalls in ein Array mit den Tageswerten geschrieben wird.

Diese Funktion berechnet sich nach der Formel:

float y = 3e-06 * sq(x) – 0.0004 * x + 0.0004;

Windgeschwindigkeitsmessung mit einem Anemometer

Ab Version 1.05 besteht die M√∂glichkeit ein Anemometer f√ľr die Ermittlung der Windgeschwindigkeit an die Auswerteeinheit anzuschlie√üen. Der neue Sensor wird nach dem ersten Impuls automatisch von der Firmware erkannt, anschlie√üend werden weitere Konfigurations- und Anzeigewerte per MQTT und im Web Frontend zur Verf√ľgung gestellt.

Das Anemometer muss √ľber einen potentialfreien Ausgangskontakt verf√ľgen (Sensor mit Reed Ausgangskontakt). Die Erweiterung des Auswertemoduls um diese Funktion gestaltet sich recht einfach, es werden lediglich die folgenden Bauteile ben√∂tigt.

  • Ein Widerstand 10 KOhm 1/4 W, print
  • Ein Keramikkondensator 100 nF, print
  • Ggf. eine Schraubklemme 2-polig, Raster 5,08 mm f√ľr den Sensoranschluss.

Das folgende Bild zeigt die einfache Schaltung, die f√ľr den¬† Anschluss eines Anemometers an der Auswerteeinheit nachger√ľstet werden muss. Die beiden Verbindungsleitungen des Anemometers werden einmal mit den 3.3V und dem GPIO 14 (D5) des WEMOS D1 mini verbunden. Am GPIO14 (D5) wird dann nur noch der Widerstand (10K) und der Keramikkondensator (100nF) gegen Masse angeschlossen.

Es werden viele verschieden Anemometer mit Reed Schaltkontakten im Handel angeboten. Diese unterscheiden sich nicht nur durch verschieden Bauformen (Diameter) sondern auch durch die Anzahl der Impulse pro Umdrehung.

Deshalb stehen nach dem Anschluss eines Anemometers zwei weitere Eingabeparameter im MQTT-Broker und dem Web Frontend zur Verf√ľgung, die eine individuelle Konfiguration des eingesetzten Anemometers zulassen. Der erste Parameter gibt die Anzahl der Impulse pro Umdrehung an. Wieviel Impulse pro Umdrehung der Sensor liefert, kann leicht mit einem einfachen Multimeter oder einem Durchgangspr√ľfer ermittelt werden, indem¬† man das Windrad einmal um seine eigene Achse dreht und das Schlie√üen des Kontaktes abz√§hlt.
Der zweite Parameter gibt die Windgeschwindigkeit in km/h, wenn sich das Windrad innerhalb einer Sekunde einmal um die eigene Achse dreht. Lesen Sie hierf√ľr in den Angaben des Herstellers nach.

Verwendet werden kann z.B. ein Anemometer der Firma TOOGOO mit der Typenbezeichnung „WH-SP-WS01 Anemometer“.
F√ľr dieses Anemometer sind die Konfigurationseinstellungen bereits in der Firmware eingetragen.

  • Pulse/Umdrehung = 1 Puls
  • Geschwindigkeit in km/h bei 1U/s = 2,4 km/h

Ansicht im IO-Broker:

Die Ansicht zeigt alle verf√ľgbaren Parameter des Sensormoduls.

Beschreibung der Notes

Note Name Beschreibung Lesen / Schreiben
INFO/Hostname Bezeichnung des Moduls Read
INFO/IPAdress Aktuelle IP-Adresse Read
INFO/Modul WLAN-Modul Read
INFO/Port Webserver Port Read
INFO/RestartReason Beschreibung des letzten Neustart Ereignisses Read
INFO/Device ID Geräte ID Read
INFO/Version Aktuelle Firmware Version Read
SETTINGS/Calibrate Sensorkalibrierung (set true) Read / Write
SETTINGS/CheckUpdate Neustes Firmware Update laden (set true) Read / Write
SETTINGS/HeatsinkMaxPower
(ab Version x.04)
Maximale Sensor Heizleistung  (%) Read / Write
SETTINGS/HystCapacity Schalthysterese Kapazitätswert (pF) Read / Write
SETTINGS/LightRain Schaltschwelle f√ľr die Textanzeige Light Rain (pF) Read / Write
SETTINGS/ModerateRain Schaltschwelle f√ľr die Textanzeige Moderate Rain (pF) Read / Write
SETTINGS/ModerateRain Schaltschwelle f√ľr die Textanzeige Normal Rain (pF) Read / Write
SETTINGS/ NormalRain Wirkrichtung (direct / inverse) Read / Write
SETTINGS/TrshCapacity Schaltschwelle f√ľr die Regenerkennung (pF) Read / Write
SETTINGS/WSPulsNumber (optional)
Pulse/Umdrehung
P/U
Read / Write
SETTINGS/WSWindSpeed (optional) Geschwindigkeit in (km/h bei 1U/s) Read / Write
Alive
(ab Version x.05)
Online Status des Moduls (true/false) Read
CalCapacity Kapazitäts- Kompensationswert (pF) Read
CompCapacity Relativer (kompensierter Kapazitätswert (pF) Read
CurCapacity Aktuelle Sensor Kapazität (absolut Wert (pF) Read
CurFrequency Aktuelle Sensorfrequenz (Hz) Read
HeatiSinkPower
(ab Version x.04)
Aktuelle Leistung der Sensorheizung (%) Read
Precipitation
(ab Version x.05)
Niederschalgsmenge l/m2 (experimentell) Read
SensorState
(ab Version x.10)
Sensor Status
(ok/failure)
Read
Rain Status der Regenerkennung (true/false) Read
RainState Status der Regenerkennung (Textform)
CompCapacity > TrshCapacity
= „dry“
CompCapacity < 150 = „light rain“
CompCapacity < 350 = „moderate rain “
CompCapacity < 700 = „normaly rain“
> 700= „heavy rain“
Read
Temperature DS18B20 Geh√§use/Sensor Temperatursensor Wert (¬įC) Read
Uptime Zeit seit dem letzten Neustart Read
Vcc Prozessor Core Spannung Read
WindSpeed
(optional)
Windgeschwindigkeit (m/s) Read

Einfaches Blockly Skript f√ľr den IO-Broker

In diesem Abschnitt soll Beispielhaft die Integration einer Markisen Ansteuerung mit einem Blockly Skript f√ľr den IO-Broker gezeigt werden.
Die Variable ‚ÄěRain-Trigger‚Äú ist eine User definierte boolesche Variable im Broker und dient hier als Trigger f√ľr das Umschalten zwischen den Zust√§nden der Regenerkennung und der Regenende Erkennung.

In diesem Skript wird bei einer Regenerkennung ein kurzer ‚ÄěClose‚Äú Befehl an einen Shelly 2.5 Rollladenschalter gesendet, eine Bedienung durch den Nutzer bleibt somit jederzeit weiterhin m√∂glich.

Ansicht im Webbrowser:

Analog zur Ansicht im Broker stehen alle Parameter auch im Webbrowser Interface zur Verf√ľgung.

Ab Firmware Version x.08 wurde aus Sicherheitsgr√ľnden eine Anmeldung am Webinterface eingef√ľhrt!

Die Standard Anmeldedaten f√ľr die Eingabeaufforderung lauten:

Benutzername: admin
Kennwort: Password

Hinweis:
Wird keine Sicherheitsabfrage f√ľr die Weboberfl√§che gew√ľnscht, lassen Sie das Kennwortfeld einfach leer!

Montage Vorschlag:

Das Regensensor Modul sollte nach Westen ausgerichtet in einem Winkel von ca. 30¬į mountiert werden, damit der auftreffende Regen die Sensoroberfl√§che nur benetzt und abflie√üen kann.
Die Ausrichtung nach Westen sch√ľtzt die Sensoroberfl√§che vor direkter Sonneneinstahlung, was die Lebensdauer der Lackschicht enorm¬† verl√§ngert!

Das Modul lässt sich leicht in eine Hensel Verteilerdose (ohne Klemmen) mit den Abmessungen 104 mm x 104 mm, vom Typ DK 0200 G / IP66 einbauen.

Hinweis:
Die oben genannte Abzweigdose besitzt keine Einf√ľhrungen oder W√ľrgenippel. Die Einf√ľhrungs√∂ffnungen sind mit einer Gummimembrane ausgestattet, die leicht durchstochen werden kann und das Kabel anschlie√üend wieder Wasserdicht umschlie√üt.

Im ersten Schritt werden die Befestigungsl√∂cher f√ľr vier Distanzh√ľlsen M3x8mm auf der Deckel Oberseite angezeichnet und mit einem 3,2mm Bohrer gebohrt.
Dann werden die Löcher mit einem Senker soweit angesenkt, dass die M3x4mm Senkkopfschrauben plan in den Senkungen verschwinden.

Anschlie√üend wird mit einem Fr√§ser oder einem Forstner Bohrer ein ca. 25 mm gro√ües Loch f√ľr den Sensorstecker und den DS18B20 Sensor ausgemessen und gebohrt.

Nun werden die Distanzh√ľlsen M3x6mm auf der Innenseite des Deckels befestigt und die Auswerteeinheit so montiert, dass die Buchsen Leiste und der Sensor im Sensorbohrloch platziert sind.

Danach kann der Sensor mit Silikon auf den Deckel aufgeklebt werden.

Achten sie beim Aufbringen des Sensors darauf, dass die Stiftleiste richtig in der zehn Poligen Buchsen Leiste steckt, so dass nach dem aufbringen der Sensorplatine auch alle vier Senkkopfschrauben verdeckt werden.

Versionsverlauf:

Intended:

  • Hard.Firmware Version 2.00
    Integration einer LUX-Messung mit einem VEML7700 (I2C).

Released:

  • 09.10.2023 Version 1.13
    – HTML Code verbessert
  • 07.08.2023 Version 1.12
    РFehlerhafte Windwerte größer 300 Km/h ausgeblendet.
  • 09.03.2023 Alle HW Versionen
    Firmware Version 1.11
    – √úberwachung der Regensensor Funktion „SensorStatus“¬† verbessert. MQTT-Struktur neu angelegt, der f√ľhrende „/“ wurde entfernt!.
    Wichtiger Hinweis:
    Bitte beachten, dass da durch ein neuer Eintrag im Broker erzeut wird!!!
  • 20.10.2022 Alle HW Versionen
    Firmware Version 1.10
    – √úberwachung der Regensensor Funktion „SensorStatus“ hinzugef√ľgt.
  • 23.08.2022 Alle HW Versionen
    Firmware Version 1.09
    – Fehler bei der Uptime behoben und Uptime Library eingebunden.
    – Webserver Port in MQTT/Info eingef√ľgt.
    – Genauigkeit bei Chart und der Durchschnittlichen Regenmenge verbessert.
    – Anzeige der Core VDD im Web Frontend.
  • 29.07.2022 Alle HW Versionen
    Firmware Version 1.08
    Anzeige MQTT/Info/Port des Webservers.
    Wird das Webserver Kennwort leer gelassen, erscheint kein Anmeldedialog im Webbrowser.
    Fehlerbeseitigung √úberlauf bei der Uptime Anzeige.
  • 15.07.2022 Alle HW Versionen
    Firmware Version 1.08
    Erweiterung der Parametrierung f√ľr die Textausgabe des Regenstatus.
    Erweiterung WIFI-Manager, um den Regensensor mit einem Port forwarding im Router auch aus dem Internet erreichen zu können, kann nun der Webserver Port frei konfiguriert werden.
    Zusätzlich wird nun ein Anmeldename und ein Kennwort beim Aufrufen der Webseite abgefragt, um die Sicherheit zu erhöhen.
  • 25.04.2022 Alle HW Versionen
    Firmware Version 1.07
    Aktualisierung der Arduino Librarys, neues Anmeldeportal.
  • 04.02.2022 Alle HW Versionen
    Firmware Version 1.06
    Optimierung bei der √úbertragung der MQTT Daten. Updates bei der Genauigkeit der Messwerte verbessert.
  • 28.08.2021 Alle HW Versionen
    Firmware Version 1.05
    Integration eines Anemometers zur Ermittlung der Windgeschwindigkeit.
    Precipitation Wert (Experimentelle Niederschlagsmenge) Errechnung √ľber Viertelstunden Mittelwerte der Comp. Kapazit√§t in l/m2, in MQTT und im Web Browser eingerichtet. Niederschlags Chart Demo Version 24h.
    LWT / Alive – Last Will Testament Onlinestatus des Sensormoduls in MQTT integriert. Reduzierung des MQTT Datenverkehrs.
  • 29.07.2021 Alle HW Versionen
    Firmware Version 1.04
    – Sensor Temperatursteuerung, Regelung der Leistung per PWM
    und Option zur Begrenzung der maximalen Heizleistung.
    – Temperaturregelung der Sensorheizung f√ľr Frostschutz und
    Maximaltemperatur.
    – Betauungsschutzfunktion ab einer Kompensierten
    Sensorkapazität von 5 PF, Heizleistung Sensorheizung auf 20%
  • 16.07.2021: Alle HW Versionen
    Firmware Version 1.03
    ‚Äď √úberarbeitung im Dialog Update, Reset und Restart im
    Web Frontend vorgenommen.
    – Regen Status als Klartextausgabe.
  • 03.07.2021: Alle HW Versionen
    Firmware Version 1.02
    ‚Äď Anzeige im MQTT – Broker erweitert.
  • 04.06.2021: Alle HW Versionen
    Firmware Version 1.01
    ‚Äď In dieser Version wurde eine Fehlerbeseitigung im
    Web Frontend vorgenommen, es betrifft die Umschaltung
    der Wirkrichtung des potentialfreien Relais Ausgangs.

Kapazitiver Regensensor Funktionsweise

Zum Blogbeitrag MQTT-Regensensor Modul

Allgemeines:

Im Internet wird eine Vielzahl von verschiedenen Regensensoren angeboten. Die meisten davon kommen aus Fernost und arbeiten nach dem Resistance Prinzip.

Trifft ein Regentropfen auf die nicht isolierten Kontakte des Sensors, werden die nebeneinanderliegenden kammf√∂rmigen Kontakte durch den Regen verbunden, was letztendlich zu einer Reduzierung des Sensorwiderstandes f√ľhrt.

Diese Widerstandsänderung ist abhängig vom Verschmutzungsgrad des Regenwassers, sowie der bereits eingetretenen Oxidation des Regensensors.

√úber eine Komparator Schaltung kann hierbei meist der Schaltpegel eingestellt werden, bei dem Regen detektiert wird und der dann ein digitales Ausgangssignal setzt.

Manche Sensoren stellen zus√§tzlich zu diesem Digitalausgang noch ein Analogsignal zur Verf√ľgung, was eine L√∂sung f√ľr eine zeitweilige Kalibrierung des Sensors durch die¬†Software erlauben w√ľrde.

Das große Problem bei dieser Messmethode ist es, dass selbst bei Sensoren mit vergoldeten Kontaktoberflächen immer parasitäre Ströme fließen.

Da praktisch immer ein kleiner Gleichstrom an beiden Polen des Sensors anliegt, f√ľhrt dies unabh√§ngig von der Qualit√§t des Sensors zu einem elektrochemischen Prozess und damit √ľber kurz oder lang zu einer schrittweisen Zerst√∂rung des Sensors.

Eine bessere Lösung stellt dieser Sensor dar, da er auf einem anderen Prinzip, dem kapazitiven Prinzip beruht.

Das Funktionsprinzip bei einem kapazitiven Sensor ist dem oben vorgestellten Messverfahren durchaus ähnlich. Es unterscheitet sich jedoch in einem wesentlichen Punkt, bei Regen wird hier keine leitende Verbindung hergestellt. Durch die Wassertropfen auf der Oberfläche wird lediglich die Kapazität des Sensors verändert, das Wasser wirkt als Dielektrikum.

Der Vorteil bei diesem L√∂sungsansatz liegt darin, dass keine blanken Leiterbahnoberfl√§chen der Witterung ausgesetzt sind und dadurch auch kein elektrochemischer Prozess ausgel√∂st wird, der den Sensor auf Dauer irreversibel besch√§digt. Alle leitenden Teile sind durch eine Lackschutzschicht vor Witterungseinfl√ľssen gesch√ľtzt.

Die Kapazit√§t des Sensors betr√§gt im trockenen Zustand ca. 170pF. Tritt eine Betauung ein oder trifft Regen auf den Sensor, steigt die Kapazit√§t an. Durch das ermittelte Delta C, l√§sst sich sogar eine Aussage √ľber die Art des Regens und dessen Intensit√§t treffen. Ist es Neblig oder es handelt sich um einen feinen Nieselregen, der die Sensoroberfl√§che benetzt, bilden sich viele kleine Wasser Tr√∂pfchen auf dem Sensor, was wiederrum zu einem gro√üen Delta C f√ľhrt.
Bei einem Durchschnittlichen Regen Ereignis sind es vorwiegend größere Tropfen, die zu einem großen Teil sofort wieder abrutschen, so ergibt sich ein kleineres Delta C.

Um schnell festzustellen zu können, ob der Regen zu Ende ist, besitzt der Sensor eine Heizung an der Platinen Unterseite. Diese besteht aus zwanzig 15 Ohm Heizwiderstände, die es bei einer Versorgungsspannung von 5V immerhin auf eine Heizleistung von knapp 1,8 W bringen.
Sie sorgen f√ľr eine z√ľgiges verdunsten der Fl√ľssigkeit bzw. einer Eisbildung auf der Sensoroberfl√§che.

Durch die sehr kleine Bauform des Sensors, kann selbst mit dieser relativ geringen¬† Leistung ein schnelles (ca. 5 Min√ľtiges) Abtrocknen sichergestellt werden.
Energetisch gesehen ist es sinnvoll, die Sensorheizung nur f√ľr die Dauer einer Regenerkennung zu betreiben. Das bedeutet, wird keine Feuchtigkeit oder Regen mehr detektiert, soll die Sensorheizung abgeschaltet werden!
Hierf√ľr ist ein Transistor auf der Sensorplatine vorgesehen.
Wird hier ein Mosfet best√ľckt und ist der Pin in dieser Hardware Version 1.00 f√ľr dessen Ansteuerung nicht angeschlossen, muss dieser auf Masse gelegt werden.
Da der Mosfet bei einem offenem Gate in einem Halbleitenden Zustand gehen k√∂nnte, was zur einer Zerst√∂rung des Bauteils f√ľhren w√ľrde.

Diese Bild zeigt die Best√ľckung der Unterseite des Sensors. Es ist gut zu erkennen, das im Layout zwar Pats f√ľr eine Befestigung der Sensorplatine vorgesehen sind, diese jedoch keine Bohrung besitzen. Weshalb hier auch kurz auf die Befestigung des Sensors eingegangen werden soll.

Wie zu sehen ist befinden sich die Anschl√ľsse ann√§hernd mittig auf der Sensorplatine.

Verwandt man z.B. eine feste wasserdichte Hensel Anschlussdose um die Elektronik darin zu verstauen, gen√ľgt es in den Deckel ein passendes rundes Loch zu bohren, damit die Anschl√ľsse nach innen geleitet werden k√∂nnen. Der Regensensor selbst wird am besten mit Silikon wasserdicht mit dem Deckel verklebt.
Sollten dennoch Befestigungslöcher benötigt werden, so können diese nachträglich ausgebohrt werden.

Es bietet sich an die Platine f√ľr die Auswertung mit dem entsprechenden Gegenst√ľck auszustatten, so dass diese von der Innenseite aufgesteckt werden kann.

Die Befestigung dieser Platine kann mit Distanzbolzen, die am Deckel eingeschraubt werden, erfolgen. Werden die Schrauben nicht vom Sensor (mit Silikon) √ľberdeckt, sollte hier auf Edelstahlschrauben zur√ľckgegriffen werden.

Im Unteren Bild ist der Schaltplan der Sensorplatine zu sehen.
Bei der Steckverbindung wurde wert daraufgelegt, dass die Signale f√ľr alle m√∂glichen Anschlussvarianten an den Pins herausgef√ľhrt wurden.

Somit stehen dem Endanwender auch alle m√∂glichen Messverfahren zur Verf√ľgung, die zur Kapazit√§tsmessung angewandt werden k√∂nnen.

Kapazitiver Regensensor V1.01

Pin Belegung:

  1.  VDD +5V / 3,3V
  2. NC
  3. Sensorheizung
  4. Ladewiderstand
  5. Analog wert (Ladezustand)
  6. Entladewiderstand
  7. GND
  8. GND

Kapazitätsmessung durch Laden- und Samplen der Kondensatorspannung

Die Platine des kapazitiven Regensensors wurde f√ľr verschieden Anwendungsbereiche entwickelt, deshalb gibt es auch verschieden Best√ľckungsvarianten.

Wenn man z.B. einen PIC Mikrokontroller mit einem Komperatoreingang verwnden, kann eine Messmethode angewendet werden, bei die Kapazit√§t des Sensor √ľber den Pin 6, R23 entladen wird (Pin auf LOW) und der Pin anschlie√üend wieder als Komperator Eingang umgeschaltet wird.
Der Pin 4, der zu diesem Zeipunkt im Tristate (hochohmig) war, wird nun als Ausgang programmiert und auf LOW geschaltet. Dieser l√§d nun die die Kapazit√§t des Regensensors √ľber R22 auf, bis der Komperatoreingang kippt.
Die ermittelte Zeit dient dann als Grundlage f√ľr die Kapazit√§tsbestimmung.
Beim MQTT-Regensensormodul wird ein anderes Messvervahren angewannt, da dieser nicht √ľber einen Komperatoreingang verf√ľgt.

Hier wird der AOUT (der gegen GND direkt die Kapazität des Sensors dartellt) als Kapazität eines Multivibrators genutzt, der abhängig von dieser Kapazität seine Ausgangsfrequenz ändert. Diese Ausgangsfrequenz wird an einem digitalen Eingang des ESP8266 gemessen und die Sensorkapazität aus der Frequenz berrechnet.

Da f√ľr dieses Messverfahren der C1, R22 und R23 nicht ben√∂tigt werden, m√ľssen diese Bauteile bei diesem Messverfahren nicht mit best√ľckt werden.

Das obengenannte Messverfahren, dass sich jedoch nur f√ľr gr√∂√üere Kapazit√§ten im Bereich zwischen 10 nF und 2000 uF eigent, beschreibt der folgende Source Code von von Matthias Busse

Quellenverweis :
Kapazitäten von 10nF bis 2000uF einfach messen mit dem Arduino

// Kapazität Messgerät 10nF bis 2000uF
//
// Matthias Busse 22.2.2015 Version 1.1

#define messPin 0            // Analog Messeingang
#define ladePin 13           // Kondensator lade Pin √ľber einen 10kOhm Widerstand
#define entladePin 11        // Kondensator entlade Pin √ľber einen 220 Ohm Widerstand 
#define widerstand  9953.0F  // 10 kOhm > gemessen 9,953 kOhm

unsigned long startZeit;
unsigned long vergangeneZeit;
float microFarad;
float nanoFarad;

void setup() {
  pinMode(ladePin, OUTPUT);     // ladePin als Ausgang
  digitalWrite(ladePin, LOW);  
  Serial.begin(9600);           // Serielle Ausgabe
  Serial.println("Kapazitaetsmesser Version 1.1");
}

void loop() {
  // Kondensator laden
  digitalWrite(ladePin, HIGH);            // ladePin auf 5V, das Laden beginnt
  startZeit = micros();                   // Startzeit merken
  while(analogRead(messPin) < 648){}      // 647 ist 63.2% von 1023 (5V) 
  vergangeneZeit= micros() - startZeit - 114; // 0-Messung abziehen (112-116 us)
  if(vergangeneZeit > 4294960000) vergangeneZeit = 0; // Minuswerte auf 0 setzen (ist long deshalb der hohe Wert)
 // Umrechnung: us zu Sekunden ( 10^-6 ) und Farad zu mikroFarad ( 10^6 ),  netto 1  
  microFarad = ((float)vergangeneZeit / widerstand);   
  Serial.print(vergangeneZeit);           // Zeit ausgeben
  Serial.print(" nS    ");         

  if (microFarad > 1){
    if(microFarad < 100) {
      Serial.print(microFarad,2);         // uF.x ausgeben
      Serial.println(" uF     ");
    }
    else {
      Serial.print((long)microFarad);     // uF ausgeben
      Serial.println(" uF     ");
    }
  }
  else {
    nanoFarad = microFarad * 1000.0;     // in nF umrechnen
    if(nanoFarad > 10) {
      Serial.print((long)nanoFarad);     // nF ausgeben
      Serial.println(" nF     ");
      }
    else
      Serial.println("kleiner 10 nF");  
  }

  /* Kondensator entladen */
  digitalWrite(ladePin, LOW);             // ladePin auf 0V 
  pinMode(entladePin, OUTPUT);            // entladePin wird Ausgang 
  digitalWrite(entladePin, LOW);          // entladePin auf 0V 
  while(analogRead(messPin) > 0){}        // bis der Kondensator entladen ist (0V)
  pinMode(entladePin, INPUT);             // entladePin wird Eingang
  
  while((micros() - startZeit) < 500000){}   // bis 500ms warten, d.h. max 2 Ausgaben pro Sekunde
}

Kapazitätsmessung sehr kleiner Kapazitäten

Da bei sehr kleien Kapazit√§ten die Ladezeit des Kondensators ebenfalls sehr klein wird, m√ľsste beim oben vorgestellten Messverfahren der Ladewiederstand im Verh√§ltnis hierzu entsprechend vergr√∂√üert werden, um mit der Samplingrate des AD-Wandlers im Mikrokontroller immer noch ein akzeptables Messergebnis erzielen zu k√∂nnen.

Das Problem bei einem sehr gro√üen Ladekondensator liegt darin, dass nat√ľrlich auch der analoge Eingang des Mikrokontrollers den Kondensator belastet und entl√§d. Der Messfehler wird also umso gr√∂√üer, je gr√∂√üer der Ladewiderstand wird, bis das System am Ende kippt und der Ladewiderstand die ben√∂tigte Ladung nicht mehr liefern kann.

Da sich die Kapazit√§t des Regensensors in einem Bereich von 170pF – max. 400 pF bewegt, wird hier f√ľr auf eine anderes Messverfahren zur√ľckgegriffen werden.

Das Frequenzmessverfahren

Bei diesem Messverfahren wird keine ADC benötigt, es kommt mit einem Digitaleingang des Mikrokontrollers aus.
Hierf√ľr kommt der hochgenaue Langzeittimer NE555 zum Einsatz.
Dieser Timer seht sowohl in einer 5V Variante als NE555, als auch f√ľr Mikrokontroller die nicht 5V tolerant in einer 3V Variante ICM7555 zur Verf√ľgung.

Arbeitet der Mikrokontroller mit 3,3,V und stehen nur ein NE555 zur Verf√ľgung, kann nat√ľrlich auch ein Spannungsteiler am Ausgang den Levelshift √ľbernehmen.

Der NE555 wird in dieser Schaltung als Multivibrator eingesetzt, der abhängig von angeschlossenen Kondensator seine Ausgangsfrequenz verändert.

Wenn am Ausgang gleiche Ein- und Ausschaltzeiten erzeugt werden sollen, muss die Standardschaltung (siehe oben) mit einer Diode parallel zum Widerstand R2 aufgebaut werden. Andernfalls kann diese Diode einfach entfallen. In der obigen Bauteilauslegung ist das Tastverhältnis annähernd 1:1 was auch hier die Diode unnötig macht.
Im Programm des Regensensors werden beide Varianten ber√ľcksichtigt. Da sowohl die Zeitdauer der negativen als auch der positive Halbwelle gemessen und anschlie√üend addiert werden. Und damit die ganze Periodendauer berechnet wird.

F√ľr die Messung wird vom Regensensor nur der Pin 5 (Analogwert) und Pin 7 (GND) ben√∂tigt.
Soll die Heizung genutzt werden kommen noch der Pin 1 (VDD) und Pin 3 (Sensorheizung aktivieren) hinzu.

Die Ein- Zeit berechnet sich wie folgt:
T1= 0,694 * (R1 + R2) * C

Die Aus- Zeit berechnet sich wie folgt:
T2= 0,694 * R2 * C

Die gesamte Periodendauer ist die Summe aus T1 +T2
T = 0,694 * C * (R1 +(2 * R2))
f = 1 / T

Die Frequenz ist 1 / T1 + T2, damit ergibt sich die Ausgangsfrequenz nach folgender Formel:
f = 1 / (0,694 * C * (R1 +2 * R2))

Da bei dieser Anwendung f√ľr uns nicht wichtig ist, welche Kapazit√§t der Sensor hat, kann bereits die gemessene Frequenz f√ľr eine Regenauswertung verwendet werden.

Der Vollständigkeit halber hier trotzdem noch die kurz die nach C umgestellte Formel:
C =1 / ( f * 0,694 * (R1 + 2 * R2))

Programaufbau f√ľr die Kapazit√§tsmessung des Regensensors

/* Capacitivemeasurement (c) by Dillinger-Engineering 10/2020

   Funktionsweise:
   Um die kleinen Kapazitätsveränderungen des Regensensors (pF-Bereich)
   mit einer hohen Genauigkeit zu messen, wird hier ein NE555/3V verwendet.
   Dieser arbeitet als Multivibrator mit einer Frequenz im KHz Bereich.
   √Ąndert sich die Messkapazit√§t, √§ndert (sinkt) auch die
   Frequenz. Je nach Auslegeung der Schaltung kann √ľber die
   Frequenzänderung dann die entsprechende Kapazität errechent werden. 
   Je gröer der Parameter "MeasuringCycleleTime" gewählt wird,
   um so genauer wird auch die Messung. Zu beachten ist dabei jedoch,
   dass sich, sollte ein Sensor Fehler (kein Signal vom Eingang) vorliegt, damit
   auch die Timeoutzeit entsprechnde verlängert !
*/

const byte InputPin = 5;                       // Wemos D1 mini (Pin D1)
const unsigned int MeasuringCycleleTime = 1e6; // 1000000 us
const long R1 = 10000;   //  10 KOhm
const long R2 = 100000;   // 100 KOhm


float GetFrequeny(){  // Ergebnis in Hz
  float fsum = 0.0;
  unsigned int counts = 0;
  double f, T;
  unsigned long SartTtime = micros();
  bool Fail = false;
  do {
    T = pulseIn(InputPin, HIGH, MeasuringCycleleTime) + pulseIn(InputPin, LOW, MeasuringCycleleTime);
    if(T==0){
      Fail = true;
    }
    f=1/T;      
    counts++;    
    fsum += f * 1e6;
  } while(micros() < (SartTtime + MeasuringCycleleTime) && !Fail); // 1 Sekunde mitteln
  if(Fail){
    return(0);
  }else{
    f = fsum / counts * 0.9925;    //Korrekturwert ermitteln und einrechnen
    return(f);
  }
}

float GetCapacity(){  // Ergebnis in pF
  return(1/(GetFrequeny() * 0.694 * (R1 + 2 * R2))* 1e12);
}

void setup() {
  pinMode(InputPin, INPUT);
  Serial.begin(115200);
}

void loop() {
  char CharStr[30];
  
  // Show Data on Serial if available
  sprintf(CharStr,"Capacity: %.3f pf", GetCapacity()); 
  Serial.println(String(CharStr));
  sprintf(CharStr,"Frequenz: %.3f Hz", GetFrequeny()); 
  Serial.println(String(CharStr));
}