Aus Raspberry Pi Geek 04/2021

I2C-Workshop (Teil 34): Blitzsensor AS3935

© Mishoo, 123RF

Donnerwetter

Martin Mohr

Mit dem Sensor AS3935 registrieren Sie Gewitterblitze und auch deren Entfernung zu Ihrem Standort.

Der Sensor AS3935 detektiert Gewitterblitze in einem Umkreis von bis zu 40 Kilometern und wurde für den Einsatz in Wetterstationen, Sportausrüstungen und Mobilgeräten konzipiert. Darüber hinaus gibt er die geschätzte Entfernung zu einer Gewitterfront an. Er erfasst sowohl Blitze zwischen Wolken als auch solche von einer Wolke zum Boden. Ein integrierter Algorithmus unterdrückt dabei nicht natürliche Störungen weitestgehend.

Die benötigte Betriebsspannung des Sensors liegt im Bereich von 2,4 bis 5,5 Volt, der Stromverbrauch bei 60 bis 70 µA im Überwachungsmodus, maximal bei 350 µA. Aktiviert man den Energiesparmodus, sinkt die Stromaufnahme auf 1 µA. Sobald der Sensor einen Blitz erfasst, löst er ein Signal auf der Interrupt-Leitung aus. Kurz darauf lassen sich über die I2C-Schnittstelle die Messwerte aus dem Sensor herunterladen.

Der AS3935 lässt sich sowohl über SPI als auch I2C ansprechen. Im I2C-Modus wählen die Eingänge A0 und A1 die I2C-Adresse aus, die sich im Bereich von 0x00h bis 0x03h bewegt. Der AS3935 verfügt über mehrere Register, über die er sich ansprechen lässt. Eine Übersicht finden Sie in der Tabelle “Register des AS3935”. Eine genaue Beschreibung der einzelnen Register finden Sie im Datenblatt des Sensors [1].

Register

Beschreibung

0x00

Analogverstärkung und Energiesparmodus

0x01

Störungspegel und Schwellwert für Watchdog

0x02

Statistiken zurücksetzen, minimale Blitzanzahl, Unterdrückung von Spitzen

0x03

Frequenzteiler zur Antennenabstimmung und Maske für Störungen

0x04

Energie des einzelnen Blitzereignisses (Bits 0 bis 7)

0x05

Energie des einzelnen Blitzereignisses (Bits 8 bis 15)

0x06

Energie des einzelnen Blitzereignisses (Bits 16 bis 19)

0x07

Geschätzte Entfernung

0x08

Steuerung der internen Kondensatoren, Interrupt-Konfiguration

0x09 bis 0x32

Lookup-Table für Blitzerkennung

0x3C

Rücksetzen aller Register auf Standardwerte

0x3D

Automatische Kalibrierung des internen Oszillators

Um den Sensor zu betreiben, benötigen Sie einige externe Komponenten. Aliexpress bietet für etwa 15 Euro eine Experimentierplatine [2] an, die schon alle zusätzlichen Bauteile mitbringt. Die zur Kommunikation verwendeten Anschlüsse führt das Board über eine Stiftleiste heraus. Eine Beschreibung der einzelnen Anschlüsse finden Sie in der Tabelle “Pin-Belegung der Experimentierplatine”.

Pin

Belegung

VCC

Versorgungsspannung

GND

Masse

SCL

Takt des seriellen Busses (I2C oder SPI, abhängig vom SI-Eingang)

MOSI

SPI-Daten Input oder I2C-Daten (abhängig vom SI-Eingang)

MISO

SPI-Daten Output

CS

Baustein auswählen (im SPI-Modus)

SI

Schnittstellentyp (SPI, falls auf Masse; I2C, falls auf VCC)

IRQ

Interrupt-Leitung

EN_V

Internen Spannungsregler aktivieren

A0

I2C-Adresse Bit 0

A1

I2C-Adresse Bit 1

Blitze erkennen

Bei Blitzen handelt es sich um natürliche Funkenentladungen von Wolke zu Wolke oder Wolke zu Boden. Sie rufen Störungen im Funkverkehr des Lang- und Mittelwellenbereichs hervor, die man in alten analogen Radios als Knacken hört. Der AS3935 vermag dieses spezielle Knacken zu detektieren. Darüber errechnet er die ungefähre Entfernung zum Blitzereignis.

Möchten Sie die genaue Position eines Ereignisses ermitteln, benötigen Sie mehrere dieser Sensoren, die sich in einigen Kilometern Abstand voneinander befinden. Deren Messwerte legen Sie dann übereinander und erhalten damit die Position des Blitzes. Ein System, das Blitze professionell ortet, ist das von Siemens betriebene BLIDS [3], das 155 Messstationen in Europa umfasst. Die Blitzeinschläge lassen sich damit mit einer Genauigkeit von 100 Metern bestimmen.

Testaufbau

Der Testaufbau basiert auf dem in Teil 32 dieser Reihe beschrieben Setup [4]. Den Sensor schließen Sie wie üblich an die I2C-Schnittstelle des RasPi an. Den SI-Eingang des Moduls müssen Sie auf 3,3 Volt legen, damit der Sensor in den I2C-Betrieb geht. Dasselbe gilt für die zwei Adresseingänge, damit der AS3935 die Adresse 0x03h verwendet. Am I2C-Bus des RasPi sind die Adressen 0x00hbis 0x02h schon reserviert, deswegen lässt sich nur 0x03h verwenden. Die restlichen Verbindungen zum Modul finden Sie im Schaltplan in Abbildung 1, Abbildung 2 zeigt den Versuchsaufbau. Die zusätzliche rote Leitung überträgt hierbei das Interrupt-Signal.

Abbildung 1: Schaltplan der Verbindungen zwischen Raspberry Pi und AS3935-Modul.

Abbildung 1: Schaltplan der Verbindungen zwischen Raspberry Pi und AS3935-Modul.

Abbildung 2: Der komplette Versuchsaufbau auf einem Prototyp-Board.

Abbildung 2: Der komplette Versuchsaufbau auf einem Prototyp-Board.

Nach dem Verbinden des AS3935 mit der I2C-Schnittstelle gemäß dem Schaltplan testen Sie den Versuchsaufbau mit dem Tool I2cdetect (Listing 1). Die Ansteuerung das Sensors erfolgt über eine Python-Bibliothek [5], die Sie mit dem Kommandozeilenbefehl pip install Rpi_AS3935 auf dem RasPi einrichten.

Listing 1

Ausgabe von I2cdetect

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          03 -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
[...]
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Testprogramm

Das Testprogramm aus Listing 2 importiert zunächst alle zur Ausführung nötigen Bibliotheken. Danach aktiviert es die BCM-Notation für den Zugriff auf die GPIO. Das nächste Kommando erzeugt das Objekt as3935, mit dem wir auf den Sensor zugreifen. Die übergebenen Parameter passen zum beschriebenen Versuchsaufbau.

Sollte der Sensor einmal nicht richtig arbeiten, kommentieren Sie die Zeile 7 (# as3935.reset()) für einen Lauf ein. Das setzt alle Register wieder auf die Werkseinstellungen zurück. Die nächsten Zeilen initialisieren den AS3935 für den Betrieb in Innenräumen. Sollten Sie mit den hier verwendeten Parametern keine guten Ergebnisse erzielen, passen Sie diese mithilfe des Datenblatts an Ihre konkreten Gegebenheiten an. Der AS3935 benötigt für einige Operationen etwas Zeit, daher finden sich im Quellcode an den entsprechenden Stellen time.sleep()-Kommandos.

Die Funktion irq dient als Interrupt-Handler für den Fall, dass der Sensor ein Blitzereignis registriert. Sie liest den Grund für den Interrupt aus dem as3935-Objekt. Handelt es sich um einen Fehler, versucht die Funktion ihn zu korrigieren. Ansonsten gibt sie den Abstand zum Blitzereignis aus. Die Rohdaten schreibt das Skript zusätzlich in eine Protokolldatei.

Die zwei GPIO-Kommandos initialisieren den Pin 17 als Eingang und installieren den Interrupt-Handler irq für die steigende Flanke. Es folgt eine Endlosschleife, die verhindert, dass sich das Programm beendet. Sie brechen sie mit [Strg]+[C] ab. Hier öffnet sich auch das Logfile, das sich beim Beenden des Programms wieder schließt.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben