Der Gewitter-Monitor geht online

Es war ja schon lange überfällig: Der Gewitter-Monitor (GwM) V3 mit dem ESP32 kann von Haus aus das WLAN bedienen, wodurch vieles möglich wird. Mit dem hier beschriebenen Update werden die GwM-Daten auf einen Home-Server gesendet und sind von dort auf mobilen Geräten, z.B. dem allgegenwärtigen Handy, verfügbar. Der GwM wird so zum IoT-Device. Das ist tatsächlich nicht nur eine Spielerei, sondern sehr praktisch.

Diese und andere Grafiken können über das Intranet abgerufen werden. Am 15. Juli hatten wir gegen Abend ein sehr heftiges Gewitter. Ausschläge bis zu einem Zähler von fast 200’000 beobachte ich selten.

Neue Anforderungen

Der Auslöser für diese Überarbeitung waren drei Faktoren:

  1. Die Daten vom Gewitter-Monitor sollen online verfügbar sein, also mit mobilen Endgeräten (Handy, Tablett) oder via Laptop oder PC im Intranet abgerufen werden.
  2. Die Daten sollen langfristig verfügbar sein. Bislang hat der Gewitter-Monitor ein Erinnerungsvermögen von 3 Stunden. Ich möchte die Daten gerne im Tages-, Wochen- oder Monatsverlauf sehen und vielleicht sogar ein Trend über Jahre abschätzen.
  3. Die Firma Espressif hat eine neue Version 3 für die Arduino-Plattform des ESP32 herausgebracht. Dort gibt es einige Änderungen, die es sowieso nötig machten, den Source-Code für die Firmware zu überarbeiten.

Erfreulich ist, dass alle 3 Anforderungen mit vertretbarem Aufwand erfüllt werden konnten, und zwar ganz ohne Änderungen der Hardware. Wer den Gewitter-Monitor mit dem ESP32 aufgebaut hat, kann den Lötkolben im Keller lassen. Hier geht es nur um Software.

System -Architektur

Allerdings benötigt das neue System einen Home Server, also einen Rechner im Heimnetzwerk, der rund um die Uhr läuft. Das war in meinem Fall kein Problem, da ich schon seit einiger Zeit einen Raspberry Pi 4 für allerlei Aufgaben in Betrieb habe. Der Rechner hat sich bisher als anspruchsloser und friedfertiger Mitarbeiter gezeigt und war gerne bereit, die zusätzlichen Aufgaben zu übernehmen. Für diese Anwendung wäre auch ein älterer Raspberry Pi 3 völlig ausreichend.

Datenfluss vom Gewitter-Monitor bis zu Handy oder Laptop

Die System-Architektur ist schnell erklärt: Der Datenaustausch zwischen dem Raspberry Pi und dem Gewitter-Monitor geschieht über das MQTT-Protokoll, das in der IoT-Welt weit verbreitet ist. Auf dem Raspberry Pi läuft ein MQTT-Broker (Mosquitto). Der Gewitter-Monitor arbeitet als MQTT-Publisher und veröffentlicht einmal pro Minute aktuelle Daten zu Blitzen, Luftdruck und Alarm-Status. Die Verbindung geschieht dabei über das WLAN. Auf der anderen Seite des MQTT-Broker arbeitet ein kleines Python-Skript, das als MQTT-Subscriber die Daten in Empfang nimmt und in eine relationale Datenbank (MariaDB) einträgt. Die Datenbank ist hier sehr einfach aufgebaut und besteht aus nur einer Tabelle. Schließlich gibt es einen Python-Webserver (Flask), der Anfragen von Webbrowsern entgegen nimmt, die passenden Daten aus der Datenbank ausliest und Grafiken oder Tabelle an den anfragenden Browser übermittelt.

Die hier verwendetet Software basiert vollständig auf freien Open Source-Komponenten. Im Folgenden beschriebe ich kurz die einzelnen Komponenten des Systems. Wer sich damit beschäftigen möchte, sollte aber etwas Erfahrung mit dem Raspberry Pi mitbringen. Für die Installation und Inbetriebnahme des Raspberry Pi, MQTT und Maria DB gibt es viele gute Tutorials und Anleitungen im Internet, auf die ich gerne verweise.

Neue Firmware für den Gewitter-Monitor

Die Firmware ist jetzt in der Version 3.2 verfügbar und wurde weiterhin mit der Arduino IDE entwickelt. Die neue Version enthält einige Erweiterungen, besonders natürlich die Netzwerk- und MQTT-Anbindung. Außerdem basiert die neue Version auf der aktuellen Espressif-Arduino Plattform 3.0.

Die Firmware benötigt einige Bibliotheken, die in der Arduino IDE installiert werden müssen:

  • PubSubClient (Nick O’Leary, Version 2.8)
  • Adafruit Unified Sensor (Version 1.1.14)
  • Adafruit BMP280 (Version 2.6.8)
  • TFT_eSPI (Bodmer, Version 2.5.43).
    Achtung, hier muss das File „user_setup.h“ angepasst werden (wie im Artikel Gewitter-Monitor zum Dritten – Elektronik-Labor (laagewitt.de) beschrieben)
  • DS3231 (A. Wickert, version 1.1.2)

Außerdem muss über den Board-Manager das esp32-Paket von Espressif installiert sein. Die aktuelle Version ist 3.0.2.

Um den Gewitter-Monitor ins Netzwerk zu bekommen, sind einige Angaben notwendig. Diese erfolgen über die serielle Schnittstelle und können z.B. mit einem Terminal oder dem seriellen Monitor der Arduino IDE gemacht werden. Das verbreitete Terminal-Programm PuTTY funktioniert gleichermaßen gut. Die Baudrate muss auf 115200 gestellt werden. Alle Eingaben werden dauerhaft im ESP32 gespeichert. Die Eingabe der Parameter wird also in der Regel ein einmaliger Vorgang bei der Inbetriebnahme sein.

Diese Werte müssen beim Gewitter-Monitor festgelegt werden, um eine Netzwerk- und MQTT-Verbindung zu ermöglichen. Die Angaben in spitzen Klammern müssen durch eigene Werte ersetzt werden.

Wenn der ESP32 erfolgreich geflasht wurde, kann der serielle Monitor in der Arduino IDE geöffnet werden. Der Befehl gc<Enter> zeigt die aktuelle Konfiguration.

Ausgabe der aktuellen Konfiguration mit gc<Enter>

Alle Konfigurationsparameter können über Eingaben verändert oder angepasst werden. Der Befehl sf<Enter> setzt alle Parameter auf sinnvolle Voreinstellungen zurück. Der Befehl h<Enter> zeigt eine Liste aller Befehle.

Für die Verbindungen mit dem Netzwerk werden folgende Angaben benötigt.

  • WLAN Netzwerkname (SSID): Das Netzwerk wird mit ns<Enter> ausgewählt. Der ESP32 zeigt dann alle verfügbaren Netzwerken, von denen das gewünschte Netzwerk ausgewählt wird.
  • WLAN Netzwerk-Passworts: Das Passwort wird mit np <password><Enter> festgelegt.
  • ESP32 Host Name: Das ist der Netzwerk-Name, mit dem sich der Gewittermonitor im Netzwerk meldet. Die Eingabe geschieht mit nh ESP32-GWM<Enter>.
  • MQTT IP-Adresse: Die IP-Adresse des Raspberry Pi muss gegebenenfalls am Raspberry Pi erkundet werden. Sie wird mit ni 192.168.1.249<Enter> eingegeben.
  • MQTT-Port: Der Port ist vom MQTT-Broker vorgegeben. Üblicherweise wird dafür 1883 verwendet. Die Eingabe ist np 1883<Enter>.
  • MQTT User: Auf dem MQTT-Broker muss ein User mit Passwort eingerichtet werden, unter dem sich der Gewitter-Monitor dort anmelden kann. Die Eingabe ist nu gwmv32<Enter>.
  • MQTT Passwort: Das zugehörige Passwort wird mit nx <password><Enter> angegeben.
  • MQTT Topic: Schließlich benötigen wir noch ein Thema, unter dem die MQTT-Nachricht geführt werden. Das Thema wird mit mit nt gwm/strikes<Enter> gesetzt.

Im Prinzip sind alle Angaben frei wählbar, wobei sie natürlich mit den Einstellungen am Raspberry Pi korrespondieren müssen.

Wenn alle Eingaben gemacht sind, wird der Gewitter-Monitor neu gestartet. Dabei verbindet er sich zuerst mit dem WLAN, was durch eine kurze Meldung auf dem Bildschirm bestätigt wird. Im zweiten Schritt wird die Verbindung zum MQTT-Broker hergestellt, was natürlich einen aktiven Broker unter der angegebenen IP-Adresse voraussetzt. Auch das wird im Display kurz bestätigt. Von jetzt ab sendet der Gewitter-Monitor einmal pro Minute die Blitz-Daten, hPA und den Alarmstatus unter dem gewählten Topic an den Broker.

Automatischer Verbindungsaufbau nach dem Einschalten in drei Etappen. Von links nach rechts:
Noch keine Verbindung – Netzwerk-Verbindung okay – MQTT-Verbindung okay.

Der aktuelle Verbindungsstatus wird als ein farbiger Punkt oben links im Display angezeigt. Rot bedeutet, dass keine WLAN-Verbindung besteht. Gelb heißt, dass das WLAN funktioniert, aber keine MQTT-Verbindung besteht. Grün bedeutet, dass alles okay ist.

Der Bildschirm zeigt den Status der Verbindung über einen farbigen Punkt (markiert durch den roten Pfeil)

Wenn die Verbindung zum Netzwerk oder dem MQTT-Broker einmal nicht funktioniert, dann versucht das System dreimal im Abstand von jeweils einer Minute die Verbindung neu aufzubauen … und gibt auf, wenn es auch beim dritten Mal nicht klappt. Tatsächlich läuft das System bei mir seit mehreren Wochen stabil im Netzwerk.

MQTT Broker

Ich verwende den MQTT Broker Mosquitto auf dem Raspberry Pi. Die Software ist frei verfügbar und funktioniert wunderbar. Für die Installation und Inbetriebnahme verweise ich auf das Elektronik-Kompendium (Raspberry Pi: MQTT-Broker Mosquitto installieren und konfigurieren (elektronik-kompendium.de). Mosquitto wird mit systemctl start mosquitto gestartet. Außerdem habe ich Mosquitte mit systemctl enable mosquitto.service so eingerichtet, dass der Service automatisch beim Reboot gestartet wird.

Wenn der MQTT-Broker läuft, muss der User angelegt werden. Dazu wird der User-Name und das Passwort verwendet, wie er auf dem Gewitter-Monitor spezifiziert wurde.

Abschließend kann man auf dem Rasberry Pi im LXTerminal die eingehenden Nachrichten mit der folgenden Anweisung beobachten.

$ mosquitto_sub -t "#" -v -u gwmv32 -P <mqtt_password>

Der MQTT-Broker ist aktiv und empfängt die Nachrichten vom Gewitter-Monitor, die einmal pro Minute gesendet werden.

Wenn die Nachrichten vom Gewitter-Monitor jetzt regelmäßig eintreffen, ist soweit alles vorbereitet.

Maria DB

Im nächsten Schritt wird das Datenbank-System MariaDB auf dem Raspberry Pi installiert. MariaDB ist eine leistungsfähige relationale Datenbank, mit der ich gute Erfahrungen auch auf dem Raspberry Pi gemacht habe. Für die Installation und Inbetriebnahme gibt es viele Beschreibungen im Netz, z.B. hier: How to Install MariaDB on Raspberry Pi? (MySQL Server) – RaspberryTips.

Konfiguration der Datenbank in MariaDB

Innerhalb von MariaDB muss die Datenbank mit der zugehörigen Tabelle und einem User zum Schreiben und Lesen der Daten eingerichtet werden. Für die Einrichtung verwende ich mysql und logge mich als root-User ein. Dort wird dann zuerst die Datenbank gwm angelegt.

MariaDB [(none)]> CREATE DATABASE gwm;

Für alle weiteren Eingaben wird gwm als aktive Datenbank ausgewählt.

MariaDB [(none)]> USE gwm;

Jetzt wird die Tabelle strikes angelegt, die die Daten vom Gewitter-Monitor in Empfang nehmen wird. Die Tabelle hat 5 Spalten. Die Spalte ts wird als primärer Schlüssel definiert:

MariaDB [(gwm)]> CREATE TABLE 'strikes' (ts DATETIME, lstrike, INT, rstrike INT, hpa INT, alarm_level TINYINT);
MariaDB [(gwm)]> ALTER TABLE strikes ADD PRIMARY KEY(ts);

Tabellendefinition für strikes in der Datenbank gwm.

Anschließend wird der User gwm_client angelegt und mit den notwendigen Schreib- und Leserechten versehen.

MariaDB [(gwm)]> CREATE USER gwm_client identified by <password>;
MariaDB [(gwm)]> GRANT SELECT, INSERT on gwm.strikes TO gwm_client;

Damit ist die Datenbank einsatzbereit.

Python

Wie in der System-Architektur gezeigt, werden an zwei Stellen Python-Skripts benötigt. Das erste Skript übernimmt die Verbindung vom MQTT-Broker zur MariaDB und heißt gwm_client.py. Das zweite Skript stellt den Web-Server bereit und nennt sich gwm_webserver.py. Auf dem Raspberry Pi habe ich einen übergeordneten Folder gwm für das Projekt angelegt. Dort gibt es zwei weitere Folder mqtt und webserver entsprechend der oben beschrieben Aufgabenteilung.

Diese Folder-Struktur wird für das Projekt auf dem Raspberry Pi angelegt. Der User auf diesem Raspberry Pi heißt ’stela‘. Der Projekt-Folder liegt direkt im Home-Verzeichnis des Users.

Die aktuelle Distribution für den Raspberry Pi Bookworm forciert die Verwendung eines eigenen virtuellen Environments für jedes Projekt, die mit pip im jeweiligen Folder angelegt werden. Das virtuelle Environment für die MQTT-MariaDB-Verbindung heißt entsprechend gwm_mqtt_venv, und das für den Webserver gwm_flask_venv.

Verbindung vom MQTT-Broker zur MariaDB

Das kurze Skript, das diese Verbindung herstellt, heißt gwm_client.py (GewitterMonitor_v3/RaspberryPi/mqtt/gwm_client.py at main · smlaage/GewitterMonitor_v3 (github.com). Es verwendet die Bibliothek paho, um sich mit dem MQTT-Broker zu verbinden. Im Skript tauchen wieder die Konfigurationsdaten für den MQTT-Broker und die MariaDB auf. Zeilen 10 bis 20 müssen vor der Verwendung entsprechend angepasst werden.

Das Skript wartet auf eine Nachricht vom MQTT-Broker. Sobald eine Nachricht eintrifft, stellt es eine Verbindung zur Datenbank her und legt einen Eintrag in der Tabelle strikes ab. Das passiert einmal pro Minute. Es legt außerdem ein Logfile an (gwm_log_<date>.log), in dem die Aktivitäten protokolliert werden. Dort kann man gegebenenfalls nachschauen, um sich von der richtigen Funktion zu überzeugen.

Dieses Skript muss immer laufen. Deshalb wird es als ein Autostart-Programm auf dem Raspberry Pi eingetragen, was beim Raspberry Pi als cronjob schnell erledigt ist. Das geschieht mit Hilfe von crontab. Mit crontab -e wird ein Editor gestartet, in dem zeitlich wiederkehrende Aufgaben eingetragen werden können. Wenn die Datei mit einem Editor geöffnet ist, kann man dort als letzte neue Zeile den GWM-Client (mit dem zugehörigen Environment) dem Reboot-Ereignis zuordnen. Der Eintrag sieht so aus:

@reboot /home/stela/gwm/mqtt/gwm_mqtt_venv/bin/python /home/stela/gwm/mqtt_gwm_client.py

Webserver

Schließlich wird noch der Webserver benötigt, der als Python-Skript im Folder webserver bereit steht. Die Entwicklung eines Webservers ist ein weites Feld, in dem man sich schnell verlieren kann. Ich habe alles möglichst einfach gehalten. Da der Webserver nur lokal im Heimnetz läuft, habe ich viele Anforderungen an einen produktiven Webserver über Board geworfen. Der Gewitter-Monitor ist schließlich ein Hobby-Projekt.

So verwende ich das Flask-Framework nicht nur für den Pyton-Code zum Erzeugen des HTML-Codes, sondern auch den dort verfügbaren Web-Service, der ausdrücklich nicht als produktiver Server gedacht ist. Wer Zeit und Lust hat, sollte sicherlich auf Apache (oder ähnliches) umsteigen. Wie gesagt, für meine Zwecke reicht es.

Das Skript gwm_webserver.py GewitterMonitor_v3/RaspberryPi/webserver/gwm_webserver.py at main · smlaage/GewitterMonitor_v3 (github.com) ist für die Bereitstellung der HTML-Ausgaben zuständig. Dabei benötigt es Unterstützung für die Verbindung zur Datenbank und die Erstellung der Grafiken, wofür das Skript gwm_util.py GewitterMonitor_v3/RaspberryPi/webserver/gwm_util.py at main · smlaage/GewitterMonitor_v3 (github.com) zuständig ist. In gwm_util.py erscheinen wieder die Verbindungsdetails zu MariaDB, die in Zeile 5 bis 10 gegebenenfalls angepasst werden müssen. Wie oben beschrieben wird auch hier ein virtuelles Environment genutzt, das im Ordner gwm_flask_venv abgelegt ist.

Der Webserver benötigt außerdem noch ein html-Template (im Folder templates). Auch das ist auf Github verfügbar.

Die Grafiken werden mit der Bibliothek matplotlib erzeugt und im Folder webserver/static/images als PNG-File abgelegt. Die Erzeugung der Grafiken benötigt etwas Zeit, je nach Datenmenge bis zu 15 Sekunden. Gegebenenfalls ist also etwas Geduld beim Aufrufen der Seiten notwendig. Das Programm verwendet einen einfachen Cache, bei dem bereits erzeugte Grafiken aus der Vergangenheit abgespeichert werden. Wenn man also ein älteres Datum zweimal aufruft, geht es beim zweiten Mal sehr schnell.

Das Skript unterscheidet außerdem zwischen Desktop- und mobilen Clients. Für mobile Endgeräte wird eine reduzierte Auflösung verwendet.

Der Webserver wird auf dem Raspberry Pi direkt in einem LXTerminal als Super-User gestartet. Sobald er läuft, können die Daten des Gewitter-Monitors im Netzwerk abgerufen werden.

stela@StelaHome:~/gwm/webserver $ sudo gwm_flask_venv/bin/python gwm_webserver.py

Wenn alles funktioniert, kann der Start des Webservers ebenfalls als cronjob eingerichtet werden.

Wenn alles funktioniert …

Ja, es ist in der Tat ein etwas längerer Weg, bis alles klappt. Aber das Ergebnis ist, so finde ich, beeindruckend. Der Raspberry Pi kann unter seiner IP-Adresse von einem beliebigen Browser innerhalb des Netzwerks erreicht werden. Folgende Funktionen stehen zur Verfügung:

Die direkte Eingabe der IP-Adresse ohne weitere Parameter zeigt den neusten Datensatz und weitere Status-Daten zum Gewitter-Monitor:

Der Parameter strikes zeigt den bisherigen Tagesverlauf für das aktuelle Datum:

Der bisherige Tagesverlauf für den heutigen Tag

Wenn zusätzlich ein Datum im Format <yyymmdd> angegeben wird, dann wird der Tagesverlauf für das entsprechende Datum produziert. Das Jahr und der Monat können weggelassen werden und werden in dem Fall durch das laufende Jahr oder den aktuellen Monat ersetzt. Wenn z.B. im Juli 2024 die Abfrage strikes/05 eingeben wird, werden die Daten für den 5. Juli 2024 aufgerufen.

Und schließlich gibt es noch die Möglichkeit, mit dem Parameter alarm den Verlauf des Alarmstatus der letzten zwei Stunden zu zeigen.

Anzeige des Verlaufs des Alarms während der letzten zwei Stunden. Im Hintergrund sind die zugehörigen Strike-Daten gezeigt. Am Abend des 1. August hat der Alarm oft zwischen gelb, orange und rot hin und her gependelt.

Hier ist natürlich viel Raum für weitere Entwicklung. Wer Zeit und Lust zum Programmieren hat, kann den Webserver beliebig verfeinern und erweitern. Vorschläge sind sehr willkommen.

Fazit

Es benötigt durchaus einigen Aufwand, um den Gewitter-Monitor online zu bekommen. Einfacher wird es, wenn es bereits einen bestehenden Home-Server gibt, in den die Funktionen eingehängt werden können. Das Ergebnis ist aber überzeugend, und es macht Freude, aktuelle oder zurückliegende Daten auf dem Handy nachzuschauen. Mit einer VPN-Verbindung in das Heimnetzwerk ist es möglich, auch aus der Ferne die Gewitter-Aktivitäten am Wohnort zu beobachten.

Ressourcen

Wie üblich sind alle Software-Komponenten auf GitHub verfügbar. Neben der aktuellen Firmware gibt es dort einen Folder Rasperry Pi, der die zugehörigen Python-Skripts enthält.

GitHub – smlaage/GewitterMonitor_v3: Lightning detection system with ESP32

Gewitter-Monitor zum Dritten

Das Thema scheint mich nicht loszulassen. Zum einen hatten wir dieses Jahr einen Sommer mit vielen Unwettern, so dass ich den alten Gewitter-Monitor wieder einmal aus dem Schrank geholt. Zum anderen habe ich eine Reihe von Anfragen bekommen, ob es eine einfache Nachbau-Möglichkeit gibt. Tatsächlich ist das Projekt etwas in die Jahre gekommen und nicht mehr auf der Höhe der Zeit. So kam die Idee, eine neue Version zu entwickeln, die mehr Möglichkeiten bietet und einfacher nachzubauen ist.

Version 3: Neue Ideen für ein bewährtes Konzept

Das Konzept des Gewitter-Monitors ist schnell erklärt: Zwei AM-Empfänger hören im Langewellenbereich in den Äther, um das typische Knacken von Blitzen zu empfangen. Die Empfänger verwenden Ferritstab-Antennen mit einer Richtungsempfindlichkeit. Deshalb gibt es zwei Antennen, die rechtwinklig zueinander montiert werden, so dass 360 Grad abgedeckt sind. Das Empfangsergebnis wird verstärkt, von einem Mikrocontroller mit Analog-Digital-Converter (ADC) ausgewertet und grafisch dargestellt. Insbesondere der zeitliche Verlauf über die letzten Stunden ist hier von Interesse. Ein detaillierte Beschreibung des Prinzips gibt es in einem früheren Beitrag auf dieser Seite: Neues vom Gewitter-Monitor: Version 2 – Elektronik-Labor (laagewitt.de)

Das Konzept von Version 2 hat sich bewährt. Der Empfang der Blitze im Bereich von etwa 100 kHz klappt gut. Deshalb wird die Signalverarbeitung mit Verstärkung und Peak-Detection unverändert übernommen. Die Erfassung der Daten über die Zeit und die Darstellung der letzten 2 oder 3 Stunden mit Trendanalyse sind anschaulich. Soweit bleibt alles beim Alten. Was lässt sich also verbessern?

Farbiges Display

Zuerst einmal ist das einfarbige LC-Display mit einer Auflösung von 192 x 64 Punkten nicht mehr zeitgemäß. Das geht inzwischen deutlich besser. Außerdem hat sich der Nachbau mit dem Smart-I2C-Interface für einige Interessenten als nicht ganz einfach herausgestellt. Inzwischen gibt es kleine, farbige Displays, die gut für Mikrocontroller-Projekte geeignet sind. Ich habe mich für ein 3.5inch TFT-Display entschieden, das eigentlich für den Raspberry Pi vorgesehen ist (siehe 3.5inch RPi Display – LCD wiki). Die Auflösung beträgt 480 x 320 Pixel. Das Display kann alle Farben darstellen. Es hat zusätzlich einen resistiven Touch-Controller, den ich in diesem Projekt aber nicht verwende. Und das Display ist gut verfügbar. Es kann bei den üblichen Online-Händlern unter verschiedenen Namen (z.B. Elegoo 3.5 480×320 SPI) zu akzeptablen Preisen erworben werden. Der Anschluss erfolgt über eine Buchsenleiste mit 26 Kontakten, die eigentlich für den Raspberry Pi vorgesehen ist.

Es scheinen inzwischen verschiedene Varianten des Displays im Handel zu sein. Ich habe bei vielen Projekten das ELEGOO Display 3.5 Zoll TFT LCD 480×320 für Raspberry Pi (z.B. bei Amazon erhältlich) erfolgreich eingesetzt. Die Schaltung funktioniert vermutlich auch mit Displays von anderen Herstellern, womit ich aber keine Erfahrung habe.

ELEGOO 3.5″ TFT-Display mit SPI-Schnittstelle.
Auf der Rückseite (rechtes Bild) ist die zweipolige Anschlussleiste zu sehen.

Leistungsfähiger Mikrocontroller

Ein grafisches Display mit höherer Auflösung erfordert mehr Rechenkraft. Besonders das verfügbare RAM ist bei den 8-Bit Arduinos nicht ausreichend. Deshalb verwende ich den ESP32, den ich auch bei vielen anderen Projekten einsetze.

ESP32 Devkit

Der ADC des ESP32 arbeitet bei diesem Projekt mit einer im Vergleich zum ATmega328 höheren Frequenz von 10 kHz. Dabei werden immer abwechselnd die beiden Eingangskanäle abgefragt. Jeder Kanal kommt also auf 5 kHz, was zusammen mit der Peak-Detection-Schaltung völlig ausreicht, um zuverlässig alle Ereignisse zu erfassen.

Für das Display gibt es glücklicherweise eine hervorragende Grafik-Bibliothek zur Ansteuerung des oben genannten Displays, die auf GitHub veröffentlich wurde (github.com/Bodmer/TFT_eSPI). Ein besonderer Dank an den Autor und die Community, die diese Bibliothek ständig erweitert!

Die Verbindung zwischen dem ESP32 und dem Display geschieht mit einem SPI-Interface. Die Dokumentation ist nicht gerade selbsterklärend. Hier ist die Liste der Verbindungen, die ich für meine Projekte standardmäßig verwende:

Anschluss-Schema zwischen ESP32 und TFT-Display

Wichtig sind einige Anpassung in der Datei user_setup.h. Die Datei befindet sich in der Bibliothek TFT_eSPI und ist für die Projekt-spezifischen Einstellungen zuständig. Die Details dazu sind im ReadMe bei Bodmer gut beschrieben.

Notwendige Anpassungen in der Datei user_setup.h in der Bibliothek TFT_eSPI. Achtung: Bei neueren Versionen der Datei passen die Zeilennummern nicht mehr exakt mit den hier gezeigten Angaben. Die entsprechenden Zeilen können aber gut gefunden und entsprechend aktiviert oder deaktiviert werden.

Eine herausragende Eigenschaft des ESP32 ist seine Netzwerkfähigkeit. Hier könnte man natürlich spannende Ideen ausprobieren, z.B. das Einspeisen der Messdaten via MQTT in eine Datenbank in der Cloud. Im Moment sind das aber nur Ideen. Die aktuelle Version der Software ist noch nicht so weit. Vielleicht folgt so etwas zu einem späteren Zeitpunkt, gerne auch mit Beiträgen von anderen Autoren. Quellcode und Daten der aktuellen Version sind auf GitHub verfügbar.

Luftdruck und Zeit

Wenn schon alles neu, dann auch richtig! Die neue Version hat einen Luftdrucksensor bekommen (Bosch BMP280). Die Idee ist, zusätzlich zu den Blitzen auch den aktuellen Luftdruck zu beobachten. Gelegentlich zeigt sich ein nahendes Gewitter durch eine Abfall des Luftdrucks. Ob das eine auswertbare Größe ist, muss die praktische Erfahrung zeigen.

Und schließlich möchte ich die Zeitachse mit der Echtzeit beschriften. Dazu hat die Schaltung eine Echtzeituhr (DS3231) bekommen, die vom Prozessor ausgelesen und in der Grafik dargestellt wird.

Die Schaltung

Der Gewitter-Monitor besteht aus zwei Modulen, dem Hauptmodul und dem Antennen-Modul

Das Projekt besteht nach wie vor aus zwei Modulen, dem Hauptmodul mit Prozessor, Display und Zubehör und dem Antennen-Modul mit zwei AM-Empfängern und Ferritstäben.

Schaltplan des Hauptmoduls

Das Hauptmodul trägt den Prozessor (links unten) und das Display (links oben). Außerdem befindet sich dort (Mitte rechts) die Signalverarbeitung zur Verstärkung der Signale von der Antenne zusammen mit zwei OpAmps, die die Peak-Detection übernehmen. Der Output geht dann auf zwei ADC-Eingänge vom Prozessor.

Weiterhin gibt es hier (unten rechts) zwei einstellbare Konstantspannungs-Quellen zur Versorgung der AM-Empfänger auf dem Antennen-Modul. Die Versorgungsspannung regelt die Empfindlichkeit der Empfänger. Jeder Kanal lässt sich mit jeweils einem Trimm-Poti zwischen 0.8 und 1.5V einstellen. Ich habe gute Ergebnisse mit 1.2V erzielt. Die getrennte Einstellung der Spannung für die beiden Kanäle kann zum Ausgleichen von unterschiedlicher Empfindlichkeit genutzt werden, ist in der Praxis aber nicht unbedingt notwendig. Wer beide Kanäle mit derselben Spannung versorgen möchte, kann ein Trimm-Poti weglassen und statt dessen die Brücke „Single Mode“ setzen.

Oben rechts befinden sich der Luftdrucksensor und die Echtzeituhr, die über das I2C-Interface mit dem Prozessor kommunizieren.

Im Plan links in der Mitte ist eine kleine Schaltung mit einem P-Kanal MOSFET IRLML2244 gezeigt, mit der das Display ein- bzw. ausgeschaltet werden kann. Der Gewitter-Monitor schaltet das Display ab, wenn nach einer einstellbaren Zeit keine relevanten Signale erkannt werden. Wenn sich ein Gewitter nähert, schaltet das Display automatisch ein.

Unten in der Mitte im Plan sind die Bedienelemente. Es sind 5 Taster vorgesehen. Weiterhin gibt es zwei weiße LEDs, die den Empfang von Blitzen durch kurzes Aufblinken anzeigen, und drei farbige LEDs (grün, gelb, rot), die den Alarmstatus kenntlich machen.

Schließlich befindet sich im Plan links in der Mitte ein Spannungswandler zur Stromversorgung. Die Schaltung kann mit 9 oder 12V aus einem kleinen Netzteil betrieben werden. Alternativ kann aber auch ein Mikro-USB-Kabel in das ESP32-Modul gesteckt werden. In dem Fall kann der Spannungswandler TSR einfach weggelassen werden.

Schaltplan des Antennen-Moduls

Das Antennen-Modul ist deutlich einfacher gestrickt. Jeder Kanal bekommt einen TA7642 AM-Empfänger mit der entsprechenden Beschaltung. Der Eingangskreis mit einer Spule auf einem Ferritstab und einem 1nF Kondensator ist für etwa 100 kHz ausgelegt. Die Spule besteht aus 0.3 mm lack-isoliertem Kupferdraht, sauber gewickelt auf eine Länge von 8 cm über einen 10 cm Ferritstab. Die exakte Frequenz ist nicht relevant, weil Blitze als Breitbandsender einen großen Bereich abdecken.

Die beiden Module werden über ein 6-poliges Flachbandkabel mit Pfostenstecker verbunden.

Spannungsversorgung

Es gibt zwei Möglichkeiten, das Gerät mit elektrischer Energie zu betreiben:

Die einfachste Variante ist ein Netzteil mit einem Mikro-USB-Stecker, das in die Buchse des EPS32-Moduls gesteckt wird. Wenn diese Variante gewählt wird, dann können die DC-Buchse und der 5V-Spannungswandler (U7) entfallen. Der Strombedarf liegt bei etwa 100 mA, wenn das Display eingeschaltet ist.

Alternativ kann das Gerät mit einem Netzteil versorgt werden das eine Spannung zwischen 9 und maximal 30V liefert. Dazu gibt es eine Hohlbuchse auf der Platine, die für DC-Stecker geeignet ist.

Die beiden Schraubklemmen neben der DC-Buchse sind für einen optionalen Erdungsanschluss gedacht, mit dem gegebenenfalls der Störabstand verringert werden kann (siehe unten: Aufstellungs-Ort).

Spannungsversorgung entweder über die USB-Buchse am ESP32-Modul (links) oder ein externes Netzteil an der DC-Hohlbuchse (Mitte)

Platinen

Der Schaltung hat im Vergleich zu den früheren Versionen des Gewitter-Monitors an Komplexität zugenommen. Ein Aufbau auf einer Lochraster-Platine wäre möglich aber recht mühevoll. Deshalb habe ich zwei Platinen entworfen, eine für das Hauptmodul und eine für die Antenne. Alle Bau- und Bedienelemente haben darauf Platz gefunden. Abgesehen vom Verbindungskabel zwischen den Modulen gibt es keine weiteren Verdrahtungsarbeiten.

Platine des Hauptmoduls im Leiterbahnen-Editor. Die aktuelle Version ist 3b.

Die Bestückungsseite der Platine des Hauptmoduls trägt alle Bauelemente. Die Taster, LEDs und das Display sind auf der Lötseite angeordnet. So ergibt sich eine platzsparende Bauweise.

Bestückungsseite der Platine. Der ESP32 (rechts), das Uhrenmodul DS3231 (links) und der Luftdrucksensor BME280 (oben) werden über Steckleisten montiert. Links in der Mitte befinden sich die beiden Trimm-Potis zur Einstellung der Betriebsspannung der AM-Empfänger auf dem Antennen-Modul.
Lötseite der Platine. Oben links befindet sich die Steckerleiste für das Display, oben rechts die Leuchtdioden und darunter 5 Taster für die Bedienung.
Die Platine für die Antenne ist vergleichsweise klein. Das Bild zeigt die Platine noch ohne Bestückung.

3D-Druck

Für den mechanischen Aufbau gibt es passgenaue Kunststoffteile aus dem 3D-Drucker. Das größte Teil ist die Frontplatte, an der die Platine verschraubt wird. Alle notendigen Abstandshalter und Durchbrüche für Display, LEDs und Taster sind vorhanden. Dadurch wird die Montage einfach.

Frontplatte aus dem 3D-Drucker
Die Rückseite der Frontplatte trägt Abstandshalter und Bohrungen für die Montage der Platine.

Das Display ist eigentlich ausgelegt zum Aufstecken auf einen Raspberry Pi und hat dafür eine große Steckerleiste. Diese Leiste bewirkt, dass das Display in dieser Anwendung relativ weit aus der Frontplatte hervor steht. Deshalb gibt es zur Stabilisierung einen Abstandshalter (Display-Spacer), der unter das Display geschoben wird.

Display-Spacer

Nachdem das Display aufgesteckt ist, wird es von einem Rahmen gehalten, der von oben aufgeschraubt wird. Beim Prototypen wurde der Rahmen mit blauem Filament gedruckt. Die Farbwahl ist offensichtlich Geschmackssache.

Display-Rahmen

Zum Aufstellen des fertigen Geräts gibt es einen Standfuss. Dort lässt sich die Frontplatte mit Schrauben befestigen. Die Frontplatte mit dem Display bekommt so einen stabilen, leicht nach hinten geneigten Stand.

Standfuss

Für den Einbau der Leuchtdioden auf der Platine dient ein kleiner Abstandshalter, der den passenden Abstand der LEDs sicherstellt.

Ein kleines aber sehr nützliches Teil: Der LED-Abstandshalter

Als weiteres Teil gibt es einen Träger für das Antennen-Modul mit den beiden Ferritstäben. Die Ferritstäbe werden mit kleinen Kabelbindern an den Stützen fixiert.

Antennen-Träger

Software

Die Elektronik und die Mechanik sind zusammengelötet und verschraubt. Aber erst mit der Software wird daraus ein funktionierendes Gerät. Erst dachte ich, dass das in 1 oder 2 Tagen erledigt ist. Wie so oft beim Freizeit-Programmieren lag ich deutlich falsch. Es benötigte wesentlich mehr Zeit, um alle Funktionen sinnvoll zu gestalten und zu testen. Und die Software ist noch lange nicht fertig (wann ist Software jemals fertig?). Die aktuelle Version der Software kann aber schon eine ganze Menge und scheint weitgehend stabil zu laufen. Mit der Zeit wird noch weitere Funktionalität dazu kommen.

Die Software ist mit der Arduino IDE in C++ geschrieben. Das Hauptprogramm ist gewitter_monitor_v3_esp32.ino. Dazu gibt es eine Reihe von Klassen (display, my_rtc, command_line, menu, keyboard) und eine Sammlung von Hilfsfunktionen util. Die Arduino-Software ist auf GitHub verfügbar. Wer Interesse hat, an der Software-Entwicklung mitzuarbeiten, ist sehr willkommen.

Abhängigkeiten

Um den Sketch zu kompilieren, werden eine Reihe von Arduino-Bibliotheken benötigt. Die (minimale) Ausstattung beinhaltet die folgenden Module:

Wie oben beschrieben muss die Datei User_Setup.h im TFT_eSPI Library-Folder angepasst werden, damit das Programm das richtige Display unter den passenden Anschlüssen findet.

Anwendung und Bedienung

Gewitter-Monitor in Aktion. Der Alarm ist gesetzt und zeigt gelb/rot.

Der Gewitter-Monitor hört ständig in den Äther auf der Suche nach Blitzen. Wenn ein Blitz erkannt wird, wird das Maximum der Feldstärke gesucht. Der Monitor speichert für jede Minute zwei Datenpunkte, die Summe der registrierten Blitz-Maxima für beide Kanäle. Auf der rechten Seite des Displays werden für die laufende Minute die Anzahl der Blitze (Count) und die Summe der Maxima (Sum) angezeigt. Außerdem befindet sich dort der letzte Luftdruck-Messwert und die aktuelle Zeit in Minute und Sekunde.

Der größte Teil des Displays zeigt den Verlauf über die letzten drei Stunden, also Datenpunkte für 180 Minuten. Die X-Achse ist eingeteilt in Stunden mit Markierungen für viertel und halbe Stunden. Die grünen und roten Balken zeigen die registrierten Summen-Werte für die abgelaufene Minute. Die Y-Skala wird automatische skaliert, so dass alle Werte sinnvoll dargestellt werden.

Zusätzlich gibt es eine Trend-Berechnung mit linearer Regression über die letzten 60 Minuten, sofern die aktuellen Daten eine sinnvolle Berechnung zulassen. Die Steigung der Geraden wird als Trend-Wert auf der rechten Seite gezeigt. Positive Werte bedeuten, dass die Gerade ansteigt und Gewitter-Aktivitäten möglicherweise weiter zunehmen.

Die blaue Linie zeigt den relativen Luftdruck. Hier lässt sich die Entwicklung des Luftdrucks über die letzten 3 Stunden ablesen.

Die Funktion der Leuchtdioden ist schnell erklärt. Die beiden weißen Leuchtdioden blinken kurz auf, wenn ein Blitz erkannt wurde. Die grüne, gelbe und rote Leuchtdiode zeigen den Alarm-Status.

Aufstellungs-Ort

Der Gewitter-Monitor hat eine hohe Empfindlichkeit und benötigt eine Standort, der einigermaßen frei von magnetischen Störsignalen ist. Störungen können z.B. von Schaltnetzteilen oder Dimmern kommen. Auch das Netzteil zur Stromversorgung der Schaltung kann stören. Wenn es auch ohne Gewitter immer wieder blinkt, dann kann es helfen, einen anderen Ort zu suchen, der einen geringeren Störlevel hat.

Gegebenenfalls kann es nützlich sein, die Masse (Minus-Pol der Stromversorgung) mit einem Erdungsanschluss zu verbinden (wie früher beim Detektor-Radio). Die Schraubklemmen auf der Platine haben zwei GND-Anschlüsse, von denen einer mit einem Draht z.B. mit einer blanke Stelle einer Wasserleitung oder eines Heizungsrohres verbunden werden kann. Auch ein Anschluss an den Schutzleiter des Hausstromnetzes kann helfen.

Erfahrungen

Bei ruhiger, stabiler Wetterlage registriert der Monitor nur gelegentliche, schwache Ausschläge. Signalpegel unter 500 kann man getrost ignorieren. Dabei handelt es sich wahrscheinlich um technische Schaltvorgänge im Haus oder der Umgebung.

Ein ruhiger Morgen bei stabiler Wetterlage. Einzelne Ausschläge stammen von elektrischen Schaltvorgängen im Haus oder in der Nachbarschaft. Davon sieht man in der Nach weniger als am Tag.

Spannend wird es, wenn in der Atmosphäre etwas passiert, z.B. eine Kaltfront herannaht. Dann gibt es in dichter Folge Ausschläge mit Summenwerten von 1000 oder darüber. Interessanterweise registriert der Gewitter-Monitor auch dann Aktivitäten, wenn die Webseite blitzortung.de (noch) gar nichts zeigt. Ich vermute, dass der Gewitter-Monitor auch schwache Entladungen zwischen den Wolken empfängt, die bei blitzortung.de nicht registriert werden.

Hier war der Nachmittag noch ruhig. Aber ab etwa 16 Uhr zog eine Kaltfront mit viel Wind durch unsere Region. Interessant war, dass auf blitzortung.de keine Blitze registriert wurden.

Wenn Gewitter dann tatsächliche in Erscheinung treten, werden sie schon in Entfernungen von einigen 100 km registriert. Die Ausschläge können dann bis weit über 5000 reichen. In der Nacht ist dann meist Wetterleuchten in der Ferne zu sehen.

Dieses Bild zeigt zwei Vorgänge: Bis etwa 19 Uhr ist eine Gewitterfront durch den Schwarzwald gezogen, etwa 200 km nördlich von uns, und hat sich dann abgeschwächt. Ab etwa 19:30 Uhr gab es mehrere Gewitter in den Schweizer Alpen, nach blitzortung.de etwa 300 km östlich von uns, die später wieder abnahmen.
Durchzug eines lokalen Gewitters in der Nachbarschaft. Das Zentrum hat unseren Ort aber nicht erreicht.

Wenn ein Gewitter in die direkter Nähe kommt, es also hörbar „kracht“, dann reichen die Summen-Werte bis weit über 10000. Die stärksten Werte, die ich bisher registriert habe, lagen bei 50000.

Alarm

Das System arbeitet mit 5 verschiedenen Alarmstufen. Dazu wird der Mittelwert der letzten 5 Minuten berechnet. Wenn dieser Wert festgelegte Schwellen überschreitet, wird der Alarm ausgelöst. Der höchste Level kann mit Hilfe der Konfiguration nach Bedarf justiert werden. Die anderen Stufen ergeben sich als Bruchteile des höchsten Alarm-Levels. Ein Beispiel mit der Standardeinstellung:

  • Werte unter 1000 -> Das Display ist (bzw. wird nach einigen Minuten) ausgeschaltet (display timeout). Die grüne LED leuchtet.
  • Alarm Level 1 – Werte über 1000 -> Das Display wird eingeschaltet, die grüne LED leuchtet
  • Alarm Level 2 – Werte über 2000 -> Die gelbe und die grüne LED leuchten
  • Alarm Level 3 – Werte über 3000 -> Die gelbe LED leuchtet
  • Alarm Level 4 – Werte über 4000 -> Die gelbe und die rote LED leuchten
  • Alarm Level 5 -> Werte über 5000 -> Die rote LED leuchtet

Der Wert für den Alarm-Level 5 lässt sich anpassen. Die anderen Alarm-Level ergeben sich als anteilige Faktoren.

Tastenfeld und Konfiguration

Mit den 5 Tasten (4 mal gelb links, rechts, oben, unten, und einmal blau in der Mitte) können Einstellungen verändert werden.

Mit 5 Tasten können häufige Einstellungen vorgenommen werden

Die Software enthält eine ganze Reihe von Parametern, die vom Anwender angepasst werden können. Die Werte werden im non-volatile Speicher des ESP32 abgelegt, sind also auch über das Abschalten hinaus verfügbar. Das Konfigurations-Menü wird über die blaue Tasten geöffnet und über den Menüpunkt Exit wieder verlassen.

Das Konfigurations-Menü wird über die blaue Taste aufgerufen. Dann können die einzelnen Werte mit den gelben Tasten auf und ab ausgewählt werden. Die Werte werden mit den gelben Tasten links und rechts innerhalb sinnvoller Grenzen verändert. Ein neuer Wert muss mit der blauen Taste übernommen werden, damit er aktiv wird.

Paramater:

  • Hour: aktuelle Stunde der Echtzeituhr
  • Minute: aktuelle Minute der Echtzeituhr. Wenn der Minuten-Wert eingestellt wird, wird die Sekunde auf 0 gesetzt.
  • Detector Threshold: Wenn sich zwei aufeinanderfolgende ADC-Werte um den Threshold unterscheiden, dann wird das Signal als Blitz gewertet. Kleinere Werte bedeuten höhere Empfindlichkeit, größere Werte entsprechend weniger Empfindlichkeit.
  • Flash Duration [ms]: Dauer des Aufleuchtens der weißen LEDs, wenn ein Blitz erkannt wird.
  • Display Timeout [min]: Wenn kein Alarm-Level gesetzt ist, schaltet das Display nach dieser Zeit ab.
  • Alarm Level: Summen-Wert, ab dem die rote Leuchtdiode gesetzt wird. Die niedrigeren Alatm-Level werden als anteilige Faktoren berechnet.
  • Alarm Window: Die Anzahl der letzten Minuten, die für die Durchschnittsberechnung des Alarm-Wertes verwendet werden.
  • Scale Minimum: Die kleinste Skalierung der Y-Achse. Wenn gar keine oder nur sehr geringe Signale gemessen wurden, dann wird die Y-Achse mit diesem Wert skaliert.
  • hPa: Offset für die Luftdruck-Einstellung. Je nach der Höhe des Standortes ist der tatsächlich gemessene Luftdruck geringer als der auf Meeresniveau bezogene Luftdruck. Hier kann ein Standardluftdruck eingebeben werden. Das System berechnet daraus einen Offset zum gemessene Druck, den es dann für die Anzeige verwendet.

Schließlich gibt es noch eine Einstellhilfe für die Spannungsversorgung der AM-Empfänger auf den Antennen. Die Werte werden vom ADC des ESP32 ausgelesen und unter dem Menüpunkt Voltage Adjust angezeigt. Wenn dieser Punkt ausgewählt ist, können die Spannungen an den Trimm-Potis auf der Platine eingestellt werden. Die in diesem Beitrag gezeigten Bilder wurden mit einer Spannung von 1.20 V gemacht.

Einstellung der Spannungsversorgung der AM-Empfänger. Größere Werte ergeben eine höhere Empfindlichkeit, womit aber auch die Anfälligkeit für Störungen zunimmt.

Fazit

Der neue Gewitter-Monitor steht bei mir jetzt einige Wochen im Regal und zeigt immer wieder interessante Grafiken und Daten. Das farbige Display macht sich gut. Wenn sich das Display einschaltet und besonders die gelbe und rote LED aktiv werden, ist das ein untrügliches Zeichen für Gewitter-Aktivitäten in der Atmosphäre.

Die Funktionsweise wurde weitgehend vom Vorgänger übernommen, im Detail aber deutlich überarbeitet. Der Nachbau ist durch die Platine und die Verwendung von Standardbauteilen deutlich einfacher geworden. Zusammen mit den Teilen aus dem 3D-Drucker ergibt sich ein kompaktes Gerät, dass wenig Handarbeit benötigt. Die Entwicklung der Software hat viel Zeit in Anspruch genommen – und reizt noch lange nicht alle Möglichkeiten aus. Hier gibt es noch viel Spielraum.

Ich würde mich freuen, wenn es Interesse gibt, das Projekt nachzubauen oder auch an der Entwicklung mitzuarbeiten, und werde entsprechende Vorhaben nach Möglichkeit unterstützen.

Ressourcen

Alle technischen Details sind auf GitHub verfügbar : smlaage/GewitterMonitor_v3: Lightning detection system with ESP32 (github.com)

Spezifische Links:

Schaltplan für das Hauptmodul (PDF): GewitterMonitor_v3/GewitterMonitor_v3_Main_Schema.pdf at main · smlaage/GewitterMonitor_v3 (github.com)

Schaltplan für das Antennen-Modul (PDF): GewitterMonitor_v3/GewitterMonitor_v3_Antenna_Schema.pdf at main · smlaage/GewitterMonitor_v3 (github.com)

Stückliste (Excel): GewitterMonitor_v3/GewitterMonitor_v3_PartList.xlsx at main · smlaage/GewitterMonitor_v3 (github.com)

Arduino Source-Code (einschließlich ELF- und BIN-Files): GewitterMonitor_v3/esp32_gewitter_monitor_v32 at main · smlaage/GewitterMonitor_v3 (github.com)

Gerber- und Bohr-Files für die beiden Platinen: GewitterMonitor_v3/PCB at main · smlaage/GewitterMonitor_v3 (github.com)

STL-Files für den 3D-Druck: GewitterMonitor_v3/3D-Printing at main · smlaage/GewitterMonitor_v3 (github.com)

Software-Update für den Gewitter Monitor v2

Gestern ist wieder einmal ein heftiges Gewitter durch unsere Region gezogen und hinterließ seine Spuren auf dem Display des Gewitter-Monitors. Das war eine gute Gelegenheit, die letzten Software-Updates zu testen. Zur Zeit des Fotos lag das Maximum des Gewitters etwa 1 Stunde zurück. Die Trendanalyse über die letzten 45 Minuten (jetzt durch Pfeilsymbole  unterstützt) zeigte, dass die Summe der Blitze pro Minute stark rückläufig war. Der Mittelwert der letzten 15 Minuten lag aber immer noch so hoch, dass alle drei Alarm-LEDs aktiviert waren.

Seitdem ich die Version 2 im Februar in Betrieb genommen hatte, gab es viele Gelegenheiten, die Funktion der Software im Detail zu testen. Allerlei Feinheiten mussten korrigiert werden. Besonders ärgerlich war ein Fehler in der Trendanalyse, der den Prozessor in eine Endlosschleife schickte, wenn die Zahl der Blitze pro Minute sehr hoch wurde. Außerdem gab es Ungereimtheiten mit der Anzeige des Maximums. Jetzt funktioniert aber alles so, wie es soll.

Die neue Software steht wie immer auf der Ressourcen-Seite zum Download bereit. Die neue Software benötigt die Smart I2C GLCD-Software ab Juni 2018. Sonst können die Pfeilsymbole nicht dargestellt werden.

Von Herrn Wolfgang Richter erreichte mich ein Foto. Er hat seinen Gewitter-Monitor in ein Gehäuse aus schwarzem ABS-Kunststoff (200 x 100 x 65 mm) gesetzt. Sehr schön ist die Antenne,  die über dem Gerät schwebt. Vielen Dank für das Foto!

Gewitter-Monitor von Wolfgang Richter

Herr Richter hat mich auch auf die Forschungen von Hans Baumer zu den sogenannten Sferics aufmerksam gemacht. Dabei handelt es sich um elektrische Entladungen in den Wolken, die ohne Lichterscheinungen von Blitzen einhergehen. Tatsächlich ist mir schon seit langem aufgefallen, dass der Gewitter-Monitor bei labilen Wetterlagen (feuchte und warme Luft) deutliche Aktivitäten anzeigt, und zwar schon lange bevor Gewitter zu beobachten sind. Hierbei handelt es sich wahrscheinlich um die genannten Sferics. Übrigens habe ich die Empfindlichkeit des Geräts so eingestellt, dass die Alarmlevel (rote Leuchtdioden) erst dann aktiviert werden, wenn tatsächliche Gewitter im Umkreis von einigen hundert km registriert sind. Zur Kontrolle eignet sich die sehr informative Website Blitzortung.org.

Neues vom Gewitter-Monitor: Version 2

Der Gewitter-Monitor mit graphischer Anzeige war ein Projekt, das ich im Jahr 2014 fertig gestellt hatte. Seit dem habe ich das Gerät immer wieder einmal im Einsatz, und es tut gute Dienste. Inzwischen ist es aber an der Zeit für etwas Modell-Pflege. Rechtzeitig vor der nächsten Gewitter-Saison stelle ich hier die neue Version 2 vor.

Version 2 verwendet im Kern einen Arduino, wodurch das Programmieren und Flashen vereinfacht wurde. Das I2C-Smart Graphic LCD ermöglicht ansprechende Graphiken. Dazu gibt es eine vollständig neu entwickelte Software mit vielen neuen Features, z.B. einen mehrstufigen Alarm-Level, eine Trend-Analyse und ein Konfigurations-Menü.

Bewährtes Design mit neuen Funktionen

Das Grundprinzip des Gewitter-Monitors bleibt bestehen und wird hier kurz zusammengefasst.

Wer Radiohören noch aus den Zeiten von Mittelwelle und Langewelle kennt, der weiß, dass Gewitter-Blitze als störendes Krachen im Lautsprecher zu hören waren. Seit dem Umstieg auf Frequenzmodulation oder gar digitale Verfahren ist das aus unserem Radio-Alltag verschwunden. Das Prinzip eignet sich aber nach wie vor, um Gewitter-Blitze zu beobachten und zu registrieren.

Die hier vorgestellte Schaltung arbeitet mit zwei Langewelle-Empfängern, die auf einer freien Frequenz (ungefähr 100kHz) ständig in den Äther hören. Sobald ein Signal erfasst wird, wird es von einem Mikrocontroller untersucht. Typisch für Blitze sind schnell ansteigende Flanken (im Lautsprecher als „Knacken“ vernehmbar), die mit Hilfe des Analog-Digital-Converters (ADC) im Mikrocontroller selektiert und vermessen werden. Die Software sammelt die Anzahl der registrierten Blitze und die Summe der Pegel, die für jeden Blitz erreicht werden. Die Daten werden dann auf einem graphischen Display angezeigt. Das Display zeigt nicht nur die aktuell gemessenen Werte, sondern auch den Verlauf über die letzten Stunden. Die Daten erlauben die Analyse des Alarm-Levels, der über Leuchtdioden angezeigt werden. Darüber hinaus gibt es eine Trend-Analyse, um abzuschätzen, wie sich die Gewitteraktivitäten entwickeln werden.

Block-Diagramm
Block-Diagramm

Der analoge Schaltungsteil des vorherigen Gewitter-Monitors mit AM-Empfängern und der Peak-Detection-Schaltung hat sich bewährt und wurde übernommen. Die einzige Veränderung bezieht sich auf die Zeitkonstante der Peak-Detection, was weiter unten beschrieben wird.

Es gibt aber drei wesentliche Neuerungen:

(1) Die erste Veränderung trägt dem Feedback von einigen Nachbauten Rechnung. Basierend auf der zunehmenden Popularität des Arduino-Frameworks habe ich mich entschlossen, den ATmega-Prozessor im DIL-Gehäuse durch einen Arduino Nano zu ersetzen. Ich muss zugeben, dass ich für meine Entwicklungen lieber direkt mit den AVR-Prozessoren arbeite. Die  Arduino-Boards waren bisher immer gross, teuer und unhandlich für die Entwicklung von eigenständigen Geräten. Mit der Verfügbarkeit des kleinen und preisgünstigen Arduino Nano-Boards hat sich das aber verändert. Die kleine Platine hat ein komplettes Kernsystem für den ATmega-Prozessor an Board, was den Aufbau vereinfacht. Es bleibt der Nachteil, dass der Arduino im Vergleich zu einem „nackten“ ATmega-Prozessor relativ strom-hungrig ist, da die Peripherie, z.B. das USB-Interface und die eingebaute Leuchtdiode, immer unter Spannung stehen. Da der Gewitter-Monitor aber wahrscheinlich nicht mit Batterie-Strom betrieben wird, ist dieser Nachteil verschmerzbar.

Arduino Nano
Der Arduino Nano hat ein komplettes System auf einem kleinen Board: ATmega328 Prozessor, 16 MHz Quarz, USB-Interface, LEDs und Spannungsregler. Sogar ein Reset-Taster ist dabei.

(2) Die zweite Veränderung bezieht sich auf das Graphik-Display. Bei dem vorher verwendeten ST7920 gab es Beschaffungsprobleme für die SPI-Variante. Außerdem fand ich die u8glib-Bibliothek unhandlich. Was lag also näher als eines der gut verfügbaren KS0108-Displays einzusetzen und mit dem Smart-I2C-Interface zu kombinieren, das an anderer Stelle beschrieben ist (siehe Universelles I2C-Interface für Graphik-LCD). Konkret habe ich mich für das 4-Zoll Display (Typ 3) entschieden, dass mit einer Auflösung von 192 x 64 Pixeln bei ansprechender Größe neue Möglichkeiten eröffnet. Das Graphik LCD-Display ist z.B. bei eBay unter dem Stichwort 4″ 192×64 Graphic LCD Modul Display in verschiedenen Farben erhältlich.

(3) Und schließlich war es an der Zeit, die Software komplett zu überarbeiten. Der neue Gewitter-Monitor hat einige neue Funktionen bekommen, speziell zur Analyse des Alarm-Status und der Trend-Entwicklung. Außerdem lässt sich das neue System flexible konfigurieren über ein Menü zur Einstellung der wichtigsten Parameter. Die Software wurde komplett in der Arduino-Entwicklungsumgebung geschrieben und kann mit dem vorhandenen USB-Interface des Arduinos in den Programmspeicher übertragen werden. Ein separater AVR-Programmer ist dafür nicht notwendig.

Die Schaltung

Der neue Gewitter-Monitor besteht aus dem Antennen-Modul, das wie oben beschrieben ohne Veränderung von der vorherigen Version übernommen wurde, und dem Hauptteil, das für die Auswertung und Anzeige zuständig ist. Das Antennen-Modul wird über ein 6-poliges Flachband-Kabel mit dem Hauptteil verbunden.

Gewitter-Monitor Antennen Modul
Schaltung des Antennen Modul mit dem AM-Empfänger IC TA7642 und einer Ferritstab-Antenne. Dieses Modul ist zweimal vorhanden.

Hier arbeitet ein AM-Empfänger mit dem TA7642 und einem Ferritstab als magnetische Antenne. Der Ferritstab hat eine Richtwirkung mit engen aber stark ausgeprägten Minima in Richtung der Ferritstab-Achse. Deshalb werden zwei Empfänger eingesetzt, die senkrecht zueinander stehen. So wird eine lückenlose Abdeckung von 360 Grad erreicht.

Gewitter Monitor Antenne-Modul
Antenne-Modul mit zwei senkrecht zueinander angeordneten Ferritstäben

Der Hauptteil des Gerätes verwendet, wie oben beschrieben, einen Arduino Nano und das Smart-I2C-Graphic-Display.

Schaltung des neuen Gewitter Monitors
Schaltung des neuen Gewitter Monitors

Das Signal vom Antennen-Modul wird mit einem Transistor (BC549C) verstärkt und dann an die Peak-Detection-Schaltung mit dem Operationsverstärker MCP602 geführt. Diese Schaltung folgt ansteigen Flanken sehr schnell und lässt das Signal dann langsam abfallen. So wird es möglich, mit dem naturgemäß relativ langsamen ADC die kurzen Blitz-Impulse sicher zu erfassen. Die Funktionsweise der Peak-Detection lässt sich mit dem Oszilloskop beobachten.

Eingang und Ausgang der Peak-Detection.
Eingang (untere Kurve) und Ausgang (obere Kurve) der Peak-Detection-Schaltung. Die Anregung erfolgt mit einem kurzen Impuls von wenigen µsec und erzeugt eine abfallende Flanke über mehrere msec. Der ADC tastet den Eingang mit einer Periode von 500µsec ab (4 mal pro Raster-Einheit).

Im Gegensatz zum vorherigen Gewitter-Monitor wurde die ADC-Abtast-Frequenz erhöht auf 2000 Hz pro Kanal. Entsprechend konnte die Zeitkonstante der Peak-Detection-Schaltung reduziert werden (10nF statt vorher 100nF). Dadurch erreicht das neue System eine etwa 10-fach höhere zeitliche Auflösung. Ereignisse, die vorher als ein einziger Blitz registriert wurden, können jetzt in mehrere diskrete Blitze aufgelöst werden.

Rechts oben im Schaltplan befindet sich die Spannungsversorgung für das Antennen-Modul. Die Empfangs-Empfindlichkeit der TA7642-ICs lässt sich über die Versorgungsspannung einstellen. Die Schaltung verwendet eine Band Gap-Referenz (TL431), die exakte 2.5V produziert, und einen Emitterfolger mit einem weiteren BC549C. Mit einem Trimmer kann der gewünschte Spannungswert gewählt werden. Ich habe die besten Erfahrungen mit 1.6V gemacht, gemessen am Eingang des Antennenmoduls (vor der Diode).

Für die Bedienung des Geräts sind drei Tasten verfügbar, die mit Select, Down und Up bezeichnet sind. Die Tasten befinden sich zusammen mit den Leuchtdioden für die Anzeige des Alarm-Levels und der Blitz-Erkennung auf einer kleinen Platine, die hier als Front-Panel bezeichnet wird.

Die Spannungsversorgung der Schaltung geschieht über ein externes Stecker-Netzteil, das mindestens 7V liefern sollte. Der Strombedarf ist abhängig von der eingestellten Beleuchtungsstärke des Displays und liegt maximal bei 150mA. Intern arbeitet ein Festspannungsregler. Zwar hat der Arduino einen eigenen 5V-Regler an Board, den man auch zur Versorgung der anderen Schaltungsteile heranziehen könnte. Ich habe mich aber für eine separate Versorgung entschlossen, weil der Regler auf dem Arduino bei größeren Eingangsspannungen vom Stecker-Netzteil (in meinem Fall 12V) und Strömen oberhalb von 100mA durchaus recht warm werden.

Damit ist die Schaltung beschrieben. Durch den Einsatz des integrierten Arduino Nano-Boards ist der Aufbau überschaubar. Dazu trägt auch die Tatsache bei, dass der Audio-Verstärker, der in der vorherige Version vorhanden war, hier weggelassen wurde.  Es hat sich gezeigt, dass beim laufenden System keine Notwendigkeit besteht, das Signal akustisch auszugeben.

Rückseite des Gewitter Monitor v2
Ein Blick hinter die Kulissen: Im Inneren geht es recht aufgeräumt zu. Das Arduino-Board sitzt auf zwei 15-poligen Pfostenleisten, so dass man es im Falle eines Falles leicht austauschen kann. Die USB-Micro Buchse ist gut zugänglich.

Vollständig neue Software

Der Umstieg auf Arduino und das Smart-I2C-GLCD erforderte eine vollständige Überarbeitung der Software. Das Grundprinzip ist aber weitgehend gleich geblieben.

Die Software besteht aus 4 Modulen:

  • GewitterMonitor_v2.ino ist das Hauptprogramm mit den setup() und loop()-Funktion und der Timer-getriebene Interrupt-Routine
  • GewitterMonitor_graphs.ino beinhaltet die Funktionen zur Anzeige auf dem Display
  • GewitterMonitor_stats.ino beherbergt die Statistik-Funktionen
  • GewitterMonitor_config.ino ist für die Verwaltung der Konfiguration zuständig.

Zusätzlich benötigt das Programm die Arduino-Bibliothek für das Graphik-Display glcd_functions. Um erfolgreich zu kompilieren, muss sich der glcd_functions-Folder im librariers-Ordner der Arduino-Sketche befinden – – wie bei Arduino üblich.

File-Struktur im Arduino-Verzeichnis
File-Struktur im Arduino-Verzeichnis

Alle Dateien sind auf der Ressourcen-Seite zum Download verfügbar. Für die glcd_functions-Bibliothek muss darauf geachtet werden, dass die Version vom 21-Feb-2018 (oder neuer) benötigt wird.

Kernstück der Software ist die Interrupt-Routine im Hauptprogramm. Diese Routine wird durch einen Timer-Interrupt 4000 mal pro Sekunde aufgerufen und liest wechselweise die ADC-Kanäle 0 und 1 ein. Das bedeutet, dass die Ausgänge vom Antennen-Modul wie oben beschrieben 2000 mal pro Sekunde abgefragt werden. Wenn sich zwei aufeinanderfolgende Werte um einen bestimmten Wert unterscheiden, wird dieses als Erkennung einer ansteigenden Flanke gewertet und entsprechend ein Blitz registriert. Der Schwellwert zur Blitzerkennung ist ein wichtiger Parameter des Systems, der sich konfigurieren lässt. Kleinere Werte bedeuten höhere Empfindlichkeit aber auch höhere Anfälligkeit gegen Störsignale. Größere Werte bedeuten geringere Empfindlichkeit. Als Default-Wert wird 150 eingesetzt, was bei dem Wertebereich des ADC von 1024 also etwa 15% Ausschlag entspricht. Damit habe ich die besten Erfahrungen gemacht.

Wenn der Trigger für die Blitzerkennung ausgelöst wurde, ermittelt das Programm den Maximalwert des Blitzes. Für jede Minute speichert das Programm die Anzahl der Blitze (flash_cnt) und die Summe der gemessenen Blitz-Maxima (flash_sum) in einem Array ab. Die Werte der letzten 150 Minuten stehen zur Anzeige zur Verfügung.

4 verschiedene Alarm-Level

Der Alarm-Level soll Auskunft geben, wie stark oder möglicherweise gefährlich die derzeitige Gewitter-Aktivität ist. Diese Information mag den interessierten Wetterbeobachter erfreuen oder hilfreich sein, um z.B. ein geplantes Picknick im Freien zu verschieben oder eine windanfällige Markise einzufahren.

Das System kennt 4 verschiedene Alarm-Level. Der Alarm-Level 1 schaltet die Display-Beleuchtung ein. Die Idee ist, dass das Gerät bei geringer Gewitteraktivität selbstständig um Aufmerksamkeit bittet. Die folgenden Alarm-Level 2 bis 4 werden über die drei roten Leuchtdioden als aufsteigende Reihe angezeigt.

Für die Berechnung des Alarm-Levels werden die Daten der letzten 15 Minuten herangezogen, sofern nichts anderes eingestellt wurde. Das Zeitfenster für die Auswertung des Alarm-Levels (alarm window) ist wiederum ein Parameter, den der Anwender konfigurieren kann. Der Default-Wert von 15 Minuten kann zwischen 5 und 60 Minuten gewählt werden.

Die Datenbasis für den Alarm-Level ist das Array mit den Summenwerten der Blitze pro Minute (flash_sum). Das Programm erlaubt zwischen zwei verschiedenen Algorithmen zu wählen. Entweder wird der Durchschnittswert (average) der Summenwerte berechnet, oder es wird der Maximalwert (max) gesucht. Durchschnittswerte sind robuster gegen einzelne Ausreißer, aber sie reagieren auch träger auf Veränderungen. Hier muss man Erfahrung sammeln, um zu schauen, was sich am Besten eignet. Für meinen Einsatz bevorzuge ich die Durchschnittsberechnung. In jedem Fall liefert das Programm einen Wert, entweder Durchschnitt oder Maximum, der dann mit einem Alarm-Schwellwert verglichen wird. Wird der Schwellwert übertroffen, dann wird der Alarm-Level 1 ausgelöst. Die anderen Alarm-Level verhalten sich entsprechend einer geometrischen Reihe:

  • Durchschnitt oder Maximum > Schwellwert: Alarm-Level 1
  • Durchschnitt oder Maximum > 2 * Schwellwert: Alarm-Level 2
  • Durchschnitt oder Maximum > 4 * Schwellwert: Alarm-Level 3
  • Durchschnitt oder Maximum > 8 * Schwellwert: Alarm-Level 4

Man kann leicht erkennen, dass es bei einem Alarm-Level 4 wirklich gewaltig kracht und das Gewitter in direkter Nähe ist.

Der Schwellwert des Alarm-Levels (alarm threshold) lässt sich ebenfalls konfigurieren. Man kann sowohl den gewünschten Algorithmus (Durchschnitt oder Maximum) als auch den Wert selber wählen. Als Default-Wert verwendet das System die Durchschnitts-Methode bei einem Schwellwert von 50.

Ich muss an dieser Stelle erwähnen, dass ich aufgrund der winterlichen Wetterlage bisher noch keine praktische Erfahrung mit den Alarm-Leveln sammeln konnte. Sicherlich wird es im Laufe des Sommers den einen oder anderen Software-Update geben.

Anzeige und Bedienung

Nach diesen Erklärungen sind das Display und die Bedienelemente hoffentlich einleuchtend.

Display und Bedienungselemente
Display und Bedienungselemente

Das 4-Zoll Display macht den Hauptteil der Frontseite aus. Es gibt dort zwei Bereiche: Auf der rechten Seite werden die aktuellen Messdaten für die laufende Minute gezeigt. Count steht für die Anzahl der registrierten Blitze in dieser Minute, und Sum für den Summenwerte über die gemessenen Maxima. Der Sekundenzähler unten in Bild läuft immer von 0 bis 60. Sobald die Minute voll ist, werden die aktuellen Daten übernommen und in den Verlauf eingefügt, der dabei um eine Reihe (= eine Minute) nach links verschoben wird.

Im rückblickenden Verlauf steht jede vertikale Linie für die Summe der Blitze während einer Minute. Am oberen Rand ist die Zeit-Skala angedeutet. Die kleinen Striche stehen für jeweils 15 Minuten, und der etwas größere Strich für eine Stunde. Man muss beachten, dass die vertikale Achse automatisch skaliert wird, um auch den größten gemessenen Wert sinnvoll abbilden zu können. Wenn z.B. der größte gemessene Wert 350 ist, dann wird die Skala bis 500 skaliert, usw.

Die gepunktete vertikale Linie zeigt das Zeitfenster für die Berechnung des Alarm-Levels. Alle Werte zwischen der gepunkteten Linie und dem rechten Rand (der aktuellen Zeit) werden für die Berechnung der Alarm-Level herangezogen. Wenn man im Konfigurations-Menü das Zeitfenster anders einstellet, wandert die gepunktete Linien an ihren neuen Platz.

Oben links im Display wird das Maximum (max) und der Durchschnittswert (avg) für das aktuelle gewählte Zeitfenster angezeigt.

Die restlichen Bedienelemente sind schnell erklärt. Die beiden gelben Leuchtdioden oben leuchten kurz auf (200 msec), sobald ein Blitz registriert wurde. Mit den beiden gelben Tasten lassen sich die Graphik-Bildschirme durchschalten. Man kann entweder die Anzeige der Summen oder die Anzeige der Anzahl der Blitze wählen. Schließlich ist die rote Taste ist für das Konfigurations-Menü vorgesehen.

Die Beleuchtung der Anzeige schaltet sich nach einiger Zeit ab, sofern kein Alarm-Level gesetzt ist. Wenn der neugierige Zeitgenosse trotzdem die aktuellen Daten sehen möchte, genügt ein Druck auf eine der Tasten, womit die Beleuchtung für 2 Minuten aktiviert wird.

Trend-Analyse

Interessanter als der Verlauf der letzten Minuten oder Stunden ist eigentlich das, was kommt. Wird das Gewitter noch stärker werden oder zieht es ab? In die Zukunft schauen kann der Gewitter Monitor natürlich nicht. Aber die Daten der Vergangenheit geben Anhaltspunkte. Zu dem Zweck habe ich eine Trend-Analyse in das Programm aufgenommen. Genaugenommen wird eine lineare Regression nach der Methode der kleinsten Quadrate über die Werte der letzten 45 Minuten (Regressions-Zeitfenster) berechnet und angezeigt. Die resultierende Gerade kann ansteigen oder abfallen, was sich in einem positiven oder negativen Steigungs-Koeffizienten erkennen lässt. Dieser Wert wird angezeigt – allerdings nur, wenn der Korrelations-Koeffizient grösser als 0.5 ist und somit einen sinnvollen Zusammenhang zeigt. Positive Werte bedeuten also, dass die Gewitter-Aktivität in den letzten 45 Minuten zugenommen hat, während negative Werte die Abnahme anzeigen. Wenn die Messwerte durchgängig bei 0 liegen oder wild streuen, so dass die Statistik keinen Trend erkennen lässt, dann wird im Display nur „–.-“ angezeigt.

Trend-Analyse mit linearer Regression.
Das Schlimmste ist vorbei! Trend-Analyse mit linearer Regression.

Die Trend-Analyse kann jederzeit mit den Up– oder Down-Tasten dazu geschaltet werden. Die beiden gelben Tasten laufen hintereinander 4 verschiedene Darstellungen durch:

  • Zeitverlauf der Summenwerte (Flash Sum)
  • Zeitverlauf der Summenwerte zusätzlich mit Trend-Analyse (Flash Sum + Trend)
  • Zeitverlauf der Anzahl der Blitze pro Minute (Flash Count)
  • Zeitverlauf der Anzahl der Blitze pro Minute mit Trend-Analyse (Flash Count + Trend)

Auch hier gilt die oben gemachte Bemerkung, dass ich bisher noch keine Erfahrung mit dieser Funktion sammeln konnte. Der Sommer wird möglicherweise Software-Updates bringen.

Konfiguration

Wie oben beschrieben gibt es die Möglichkeit, die wichtigsten System-Parameter zu konfigurieren und an den Aufstellungsort und die Anwender-Vorlieben anzupassen. Ein langer Druck (> 3 sec) auf die rote Select-Taste führt in das Konfigurations-Menü.

Konfigurations-Menü
Konfigurations-Menü

Die Auswahl des gewünschten Parameters erfolgt über die Up– and Down-Tasten. Dann führt ein Druck auf die rote Select-Taste in die Einstellung für den gewählten Wert.

Editieren eines Konfigurations-Wertes
Editieren eines Konfigurations-Wertes

Mit den Up– und Down-Tasten kann der gewählte Werte verändert werden. Ein weiterer Druck auf Select übernimmt den neuen Wert und führt zurück zum Menü. Mit der Anwahl des letzten Eintrags, Exit, verlässt man das Konfigurations-Menü.

Alle Parameter haben Default-Werte, die bei dem ersten Programmstart eingestellt werden. Diese Werte haben sich bisher als eine gute Wahl während des Testbetriebs herausgestellt.

Hier eine kurze Zusammenfassung der Konfigurations-Parameter mit ihren Default-Werten

  • Trigger threshold ist die minimale Schrittgröße zwischen zwei aufeinander folgenden Messwerten, um eine ansteigende Flanke als Blitz zu interpretieren. Kleine Werte erhöhen die Empfindlichkeit aber auch die Anfälligkeit gegenüber Störsignalen.
    Default-Wert: 150
  • Alarm window ist die Anzahl der letzten, verstrichenen Minuten, die zur Berechnung des Alarm-Levels herangezogen werden.
    Default-Wert: 15
  • Alarm threshold selektiert den Algorithmus (Durchschnitt oder Maximum) und den Schwellwert für das Setzen der Alarm-Levels. Alarm-Level 1 wird beim Überschreiten des einfachen Schwellwertes aktiviert, Alam-Level 2 beim doppelten Wert, usw.
    Default-Wert: Avg 50
  • Display light setzt die Helligkeit des Displays. Die Werte reichen von 0 (= 0%, aus) bis 10 (= 100%, maximale Helligkeit).
    Default-Wert: 8
  • Startup screen selektiert die Graphik, die nach dem Einschalten des Geräts gezeigt wird. Mögliche Werte sind:
    Flash Sum
    Flash Sum + Trend
    Flash Count
    Flash Count + Trend
    Default-Wert: Flash Sum

Es bleibt noch zu erwähnen, dass alle Konfigurations-Parameter im EEPROM des Prozessors abgelegt werden. Damit bleiben die eingestellten Parameter auch nach dem Abschalten (oder beim Überwintern im Bastelkeller) erhalten – wie es sich für eine Anwendung dieser Art gehört.

Aufstellung und Einstellung

Zum Schluss ein paar Tips für die Inbetriebnahme. Das Gerät empfängt die magnetische Komponenten der elektromagnetische Schwingungen von Blitzen. Zum Glück sind die magnetischen Störfelder im Haus meist weniger stark ausgeprägt als die elektrischen Felder. Trotzdem reagiert das Gerät empfindlich auf Störsignale von manchen Schaltnetzteilen. Das ist natürlich insbesondere relevant für das Stecker-Netzteil, mit dem das Gerät betrieben wird. Hier gibt es deutliche Unterschiede. Im Zweifelsfall ist es keine schlechte Idee, etwas mehr Geld zu investieren. In meinem Fall steht das Gerät in einer Fensterecke, die sich ein bisschen abseits von den anderen Geräten befindet.

Es kann sinnvoll sein, das Gerät an eine Erdung (z.B. Wasserleitung, Heizung, etc.) anzuschliessen. In meinem Fall konnte ich dadurch den Störpegel deutlich reduzieren und die Empfindlichkeit weiter erhöhen. Das sollte aber nicht unbedingt notwendig sein.

Für die erste Inbetriebnahme sollte die Versorgungsspannung des Antennen-Moduls am Trimpoti auf 1.6V eingestellt werden. Für die Software empfehlen sich die Default-Parameter wie oben beschrieben.  Nach dem Einschalten – und in Abwesenheit von Gewittern – sollten die Blitz-Indikatoren nicht aufleuchten. Wenn es gelegentlich ein Signal gibt, dann ist das normal und kommt wahrscheinlich von technischen Geräten. In jedem Fall sollten die Werte aber deutlich unter der Schwelle für den ersten Alarm-Level liegen.

Zum Testen der Funktion nehme ich eine alte 9V-Batterie, die ich mit einem etwa 30 cm langen Drahtstück ein paar Mal kurz schließe. Wenn ich das in etwa 20 bis 30 cm Entfernung von der Antenne mache, sollte das Gerät dies als Blitze registrieren. Wenn das geklappt hat, ist alles in Ordnung und man kann entspannt auf die nächste gewittrige Wetterlage warten.

Es gibt zwei Optionen, die Empfindlichkeit zu verändern. Zuerst kann man mit dem Trimmpoti die Antennen-Spannungsversorgung vergrößern (höhere Empfindlichkeit) oder verkleinern (geringere Empfindlichkeit). Als zweite Option, und besonders um unerwünschte Störsignale heraus zu filtern, kann der Konfigurations-Parameter Trigger Threshold verkleinert (höhere Empfindlichkeit) oder vergrößert (geringere Empfindlichkeit) werden.  Tatsächlich ist eine sehr große Empfindlichkeit gar nicht wünschenswert. In Sommernächten kann das Gerät Reichweiten von vielen 100 km erreichen. Dann ist es fraglich, ob man sich ein Gewitter in den fernen Alpen anzeigen lassen möchte.

Zum Schluss

Ich hoffe, dass der neuen Gewitter Monitor v2 das Interesse des einen oder anderen Bastlers weckt. Wie immer freue ich mich über Rückmeldungen, Kommentare, Vorschläge oder Ideen. Natürlich bin ich auch gerne bereit, bei der Beschaffung von Komponenten zu unterstützen oder Prozessoren zu programmieren.

Die Software hat ein gewisses Mass an Komplexität erreicht – und wird sicherlich allerlei Fehler enthalten. Auch hierzu sind Rückmeldungen willkommen. Ich gehe davon aus, dass es bei Gelegenheit Updates geben wird, die – Arduino sei Dank – über die USB-Schnittstelle sehr einfach eingespielt werden können.

Die Software für dieses Projekt kann von der Ressourcen-Seite herunter geladen werden.

 

 

 

 

 

 

Gewitter-Monitor mit graphischer Anzeige

Nach Auskunft der Meteorologen lässt der Klimawandel es häufiger blitzen. Mit jedem Grad globaler Erwärmung steigt die Zahl der Blitze. Dabei haben die gewaltigen elektrostatischen Entladungen mit den entfesselten Naturkräften nichts von ihrer Faszination verloren. Um so mehr ein Grund, sich als Hobby-Elektroniker mit diesem Thema zu beschäftigen.

So habe ich mit viel Interesse die Diskussionen und Entwicklungen im Internet verfolgt. Z.B. ist der Franzis-Bausatz „Gewitterwarner“ ist ein schönes Gerät mit allerlei genialen Ideen, zum Beispiel, den AM-Empfänger TA7642 zum Empfang zu verwenden, die Empfindlichkeit durch die Betriebsspannung einzustellen, und die Blitze durch einen Flankendetektor im Mikrocontroller zu erfassen. Super!
Für meine eigenen Versuche wollte ich einen Schritt weiter gehen und den Analog-Digital-Konverter (ADC) des Mikrocontrollers dazu verwenden, Blitze mit hoher Empfindlichkeit über weite Entfernungen zu erfassen und quantitativ auszuwerten. Außerdem wollte ich den Verlauf der Intensität und Häufigkeit der Blitze über die Zeit aufzuzeichnen. Herausgekommen ist mein „Gewitter-Monitor“, den ich hier beschreibe.

Vorüberlegungen

Die Idee war, ein Gerät zu entwickeln, das elektrostatische Aktivitäten in der Atmosphäre beobachtet und Auskunft über die Häufigkeit und Stärke von Blitzen gibt. Mir ging es dabei um große Reichweite, so dass Gewitter lange vor dem Erscheinen von Blitz und Donner am Ort erkannt werden. Außerdem wollte ich den Verlauf aufzeichnen, zum Beispiel um zu sehen, ob die Blitz-Aktivitäten zu- oder abnehmen.

Das Design ist einfach: Die elektromagnetischen Impulse von Blitzen werden mit dem AM-Radio-Chip TA7642 empfangen, verstärkt und mit dem ADC eines ATmega ausgewertet. Der ADC erfasst für jeden registrierten Blitz den maximalen Pegel. Der Mikrocontroller summiert die Maxima und berechnet die Summe pro Minute. Ein graphisches LC-Display (GLCD) zeigt den Verlauf, und mit einer Leuchtdiode wird ein Warnlevel angezeigt.

Die Schaltung

Das Gerät besteht aus zwei Komponenten, dem Analogteil um den AM-Empfänger 7642, und dem Digitalteil basierend auf einem ATmega16.

Analogteil: Das Signal der Blitze erreicht die Schaltung über die Antennen. Ich habe die Eingangsschaltung vom Franzis-Gewitterwarner mit dem AM-Empfänger TA7642 und nachgeschaltetem Transistor weitgehend übernommen. Allerdings wollte ich die Empfangsfrequenz so tief wie möglich legen, um näher an das Frequenzmaximum von Gewitterblitzen zu kommen. Der Antennenschwingkreis besteht aus einer Spule von 10 cm Länge auf einem Ferritstab, 0.3 mm Kupferdraht, und zwei parallel-geschalteten 470 pF Kondensatoren. Die Resonanzfrequenz liegt ungefähr bei 100 kHz. Das ist so ziemlich am unteren Rand des Frequenzbereiches, den der TA7642 noch sinnvoll verstärkt (siehe „Frequenzgang des TA7642“, Elektronik-Labor). Aber es reicht noch aus für gute Empfindlichkeit.

Ferritantennen haben eine Richtwirkung. Deshalb kommen zwei Analog-Teile mit jeweils einer eigenen Antenne zum Einsatz. Die Antennen sind rechtwinklig zu einander und horizontal montiert sind. Die horizontale Anordnung bewirkt, dass die häufigeren Wolke-zu-Wolke Blitze erfasst werden. Die bereits zitierten Meteorologen sagen, dass im Durchschnitt 60% der Blitze zwischen den Wolken stattfinden, also horizontal orientiert sind, während die verbleibenden 40% zwischen Wolke und Erde verlaufen. Der eine Ferritstab hat seine höchste Empfindlichkeit in Nord-Süd-Richtung, der andere in Ost-West-Richtung. Die Richtungsinformation, die sich daraus ergibt, lässt sich allerdings kaum verwerten, da die Maxima der Ferritantennen sehr breit sind. Das Digital-Teil berechnet die Summe über beide Kanäle.

Antennen des Gewitter-Monitors
Antennen über Kreuz: Hier werden alle Himmelsrichtungen erfasst. Die Ferritstäbe sind zusammen mit den TA7642 auf eigenen Platinen montiert. Betriebsspannung und Ausgangssignale werden über ein kurzes Flachbandkabel an das Gerät angekoppelt.

Die Spannungsversorgung der beiden TA7642 stellt gleichzeitig die Empfangsempfindlichkeit ein. Ich verwende eine Konstantspannungsquelle mit einer Bandgap-Referenz TL431, die als einstellbare Zenerdiode fungiert. Mit einem Trimmer lässt sich die Spannung und damit die grundsätzliche Empfindlichkeit der Antennen einstellen. Ich habe mit Spannungswerten zwischen 1.5 und 1.6 Volt am 1 kOhm-Widerstand vor dem Empfänger-IC (siehe Schaltung) die besten Erfahrungen gesammelt.

Blitze sind seltene und sehr kurze Ereignisse. Um sie zuverlässig mit dem ADC zu erfassen, müsste man den ADC mit einer hohen Abtastfrequenz betreiben. Ich habe mich für einen anderen Weg entschieden und mit Hilfe des Operationsverstärkers MCP601 einen Maximalwerte-Speicher dazwischen geschaltet. Solche Peak-Detection-Schaltungen waren früher bei Audio-Aussteuerungsanzeigen, z.B. LED-Balken-Anzeigen, verbreitet. Der Ausgang des OpAmp lädt über eine Diode eine RC-Kombination (22 nF und 1 MOhm), die sich dann entsprechend ihrer Zeitkonstante wieder entlädt. Der Spannungswert steht damit ausreichend lange am ADC-Eingang zur Verfügung, so dass eine gemächliche ADC-Abtastrate von 250 Hz pro Kanal gut funktioniert. Da beide Antennen im Wechsel abgefragt werden, läuft der ADC mit 500 Hz, wobei er ständig zwischen den beiden Eingängen hin und her schaltet. Dieses Tempo ist gut verträgliches für einen ATmega ist. Bild 3 zeigt ein Oszilloskop-Bild am Eingang und Ausgang der Peak-Detection Schaltung.

Messung am Peak-Detektor
Messung am Peak-Detektor: Kanal 1 (blau) zeigt das Eingangssignal am OpAmp mit zwei kurzen Blitz-Impulsen. Kanal 2 (gelb) zeigt das langsam abfallende Ausgangssignal. In jedes 10 mS Intervall fallen im Schnitt 2.5 ADC-Wandlungen pro Kanal.

Schließlich enthält der Analogteil noch einen kleinen Audioverstärker, den man als akustischen Monitor zuschalten kann. Das ist zum Beispiel sehr nützlich, um einen geeigneten Aufstellungsort mit geringen Störsignalen zu finden.

Schaltung des Analogteils
Schaltung des Analogteils

Digitalteil: Der Digitalteil ist um den bewährten Atmega168 herum aufgebaut. Der Mikrocontroller wird mit einem 8 MHz-Quarz getaktet. Für den Betrieb der graphischen Anzeige ist eine ganze Menge Festkomma-Arithmetik notwendig, die zum Teil zeitkritisch ist. Deshalb ist die Taktrate von 8 MHz durchaus angemessen.

Die Ausgangsspannungen vom Analogteil erreichen den Mikrocontroller an den Eingängen ADC0 und ADC1. Der ADC wird so konfiguriert, dass er die interne Spannungsreferenz von 1.1V verwendet. Dieser Spannungslevel passt sehr gut zu den Ausgängen der OpAmps und kann ohne weitere Anpassung direkt verwendet werden.

Zwei weiße Leuchtdioden an Port C4 und C5 blinken kurz auf, wenn ein Blitz registriert wird. Die Software verwendet zwei Warnstufen, die durch die Blitzaktivitäten pro Minute ausgelöst werden. In der ersten Warnstufe schaltet Port C2 über einen PNP-Transistor die Hintergrund-Beleuchtung ein. Die Idee ist, dass das Gerät im Alltag ständig läuft und beim Aufziehen von Gewittern selbstständig das Display hell schaltet. Dann weiß man, dass etwas im Busche ist. Wenn die zweite Warnstufe erreicht ist, wird zusätzlich die rote Leuchtdiode an Port C3 aktiviert. Jetzt ist ein Gewitter sehr nah oder vielleicht auch schon direkt am Ort. Für neugierige Zeitgenossen – wie ich einer bin – gibt es eine Taste an Port B0, der die Hintergrund­beleuchtung manuell für 30 Sekunden aktiviert. Dann kann man registrierten Blitzaktivitäten sehen, auch wenn noch keine Warnstufe erreicht wurde.

Schaltung des Digitalteils
Schaltung des Digitalteils

Graphik-Display: Das graphische LC-Display von Sitronix war ein günstiger Kauf im Internet und lag schon eine ganze Weile auf meinem Arbeitstisch in Erwartung von interessanten Aufgaben. Seit einiger Zeit werden diese Displays mit einer Auflösung von 128 x 64 Pixeln für wenig Geld angeboten. Für mich war es das erste Projekt mit diesem Displaytyp, und es geht erstaunlich einfach. Der Display-Controller ST7920 hat die angenehme Eigenschaft, ein paralleles und ein serielles Interface mitzubringen (siehe GLCD Datenblatt). Wenn der Anschluss PSB auf Masse liegt, wird das Interface auf serielles SPI geschaltet. Dann sind nur 3 Leitungen zur Signalübertragung erforderlich. Zusammen mit den Stromversorgungen für Display und Hintergrundbeleuchtung kann man das Display mit nur 6 Leitungen am Mikrocontroller betreiben. Einfacher geht es nicht!

Die andere nützliche Eigenschaft des Displays ist, dass es dazu eine fix- und fertige Software-Bibliothek in C gibt, u8glib, die eine umfangreiche Sammlung von Treibern und Graphik-Primitiven anbietet (siehe U8glib). In meinem Programm kommen die Funktionen DrawPixel, DrawLine, und DrawString zum Einsatz. Tatsächlich funktionierte alles auf Anhieb. Ein Dank an die Macher dieser vielseitigen Bibliothek!

Graphik-Display mit SPI-Interface
Das Graphik-Display mit SPI-Interface benötigt nur 6 Leitungen zum Controller.

Die Software wurde in C entwickelt und wird direkt mit einem AVR-Programmer in den Flash-Speicher des Mikrocontroller geschrieben. Kernstück des Programms ist der regelmäßige Timer-Interrupt, der die Interrupt-Routine mit einer Frequenz von 500 Hz abarbeitet. Dort werden abwechselnd die beiden Antennensignale über die ADC-Kanäle eingelesen. Ein einfacher Software-Flankendetektor sucht nach Sprüngen zwischen zwei Werten, die einen Grenzwert (hier 150) übersteigen. Wenn ein solcher Sprung gefunden ist, sucht die Routine das Maximum des Blitzes und meldet an das Hauptprogramm, dass es etwas zu tun gibt. Das Hauptprogramm zeigt den gefundenen Maximalwert im Display auf der rechten Seite an. Außerdem berechnet es die Summe der Maxima pro Minute und produziert die Balkengraphik mit einer senkrechten Pixelreihe pro Minute. Das Display bietet Platz für die Aufzeichnung von 100 Minuten, wobei die alten Werte im Minutenrhythmus nach links geschoben werden. Schließlich wir einmal pro Minute eine lineare Regression der letzten 30 Minuten berechnet. Die resultierende Steigung wird unten rechts im Display angezeigt und ist eine Trendanalyse, ein Maß, ob der Pegel der Blitze in den letzten 30 Minuten angestiegen (= positive Werte) oder abgefallen (= negative Werte) ist. Allerdings ist der praktische Nutzen dieser Trendanalyse noch nicht recht überzeugend. Da gibt es noch Raum für Experimente.

Die Skalierung muss noch erklärt werden: Der ADC liefert Blitz-Maxima mit Werten zwischen 150 und 1024. Diese Werte werden auf 15 bis 100 skaliert. Der Wert 100 heißt also, dass ein Blitz den ADC maximal ausgesteuert hat. Die Werte werden pro Minute summiert. Eine Minuten-Summe von 500 zum Beispiel bedeutet, dass 5 maximal-starke Blitze registriert wurden, oder entsprechend eine größere Zahl schwächerer Blitze . Die Skala der Y-Achse reicht im Normalfall 0 bis 600 mit Markierungen in 100er-Schritten.

Wie beschrieben gibt es zwei Warnstufen: Wenn eine Minutensumme von 250 oder mehr erreicht wird, schaltet sich das Display automatisch ein. In der Regel ist dann von einem Gewitter noch lange nichts zu sehen oder zu hören. Die Signale kommen (noch) aus großer Entfernung. Wenn die Minutensumme 500 übersteigt, dann wird zusätzlich die rote Leuchtdiode aktiviert. Außerdem wird die Skala der Graphik auf einen Bereich von 0 bis 1200 umgeschaltet. Bei diesen Pegelwerten ist das Gewitter schon näher, zum Beispiel mit Wetterleuchten in der Ferne. Die Warnstufen werden nach 5 Minuten wieder zurückgesetzt.

Zum Testen von Hard- und Software braucht man nicht auf das nächste Gewitter zu warten. Ich habe mir mit einer weitgehend verbrauchten 9-Volt Block-Batterie einen „Blitz-Generator“ gebaut. Zwei etwa 10 cm lange Drahtstücke an die Batterieklemmen gelötet verwandeln die Batterie. Wenn man die blanken Drahtenden kurz miteinander in Kontakt bringt und das in 10 oder 20 cm Entfernung von den Antennen macht, dann sollte dieses Minigewitter Signale auf der Anzeige produzieren.

Praktische Erfahrungen

Ich habe das Gerät jetzt seit zwei Monaten in Betrieb und beobachte natürlich gespannt die Wetteraktivitäten. Der erste Eindruck: Die Empfindlichkeit ist enorm, besonders bei Nacht, wenn langwellige Radiosignale eine weite Ausbreitung haben. Wir hatten einige Nächte mit heftigen Gewittern in Südfrankreich oder Italien, immerhin 600 km oder mehr von meinem Wohnort entfernt. Ich konnte die Gewitter­aktivitäten mit Signalpegeln von 200 oder 300 pro Minute gut beobachten. Im August und September gab es kaum eine Nacht ohne empfangene Gewittersignale. Erst im Oktober wurde es ruhiger und brachte dann auch Tage und Nächte ganz ohne Aktivitäten auf der Anzeige.

Der Durchzug eines Wetterwechsels kündigt sich fast immer mit Gewitteraktivitäten an, die schon von weiter Entfernung als Signale auf der Anzeige erscheinen. Wenn ein Gewitter näher kommt und wir zum Beispiel am Abend auf der Terrasse Wetterleuchten beobachten können, dann zeigt das Gerät Pegel von 500 und mehr pro Minute. Wenn Gewittergrollen zu hören und ein Gewitter in direkter Nähe ist, dann ist das Gerät vollständig aus- und zum Teil auch übersteuert. Es werden durchgängig Maximalwerte angezeigt. Die folgenden Bilder zeigen, wie die Anzeige funktioniert und einige Beispiele.

Display-Anzeige
Viel Information auf kleinem Raum: So sieht die Anzeige an einem gewittrigen Abend aus. Die Gewitterfront ist mehrere hundert km weit weg, kommt aber stetig näher.

Mehr Beispiele von gemessenen Gewitter-Aktivitäten
Im linken Bild ist eine Gewitterzelle in der Ferne vorbeigezogen, ohne wirklich näher zu kommen. Im rechten Bild hat sich innerhalb von 40 Minuten ein heftiges lokales Gewitter entwickelt. Die rote Leuchtdiode wurde gesetzt, und die Skala auf den größeren Bereich umgeschaltet.

Im Laufe der Zeit hat sich das Gerät als eine schöne Erweiterung zu den verbreiteten Wetterstationen etabliert und gibt bereitwillig Auskunft über die atmosphärischen Aktivitäten und die Wetterlage.

Referenzen

Downloads

Firmware des GewitterMonitors, programmiert im AtmelStudio:  GewitterMonitor-Firmware