Gewitterwarner
Zusätzlich zu der Wetterstation habe ich spaßeshalber einen Gewitterwarner vorgesehen.
Für die Verarbeitung der Daten ist der Rechner RIDIBUNDA vorgesehen, der bereits andere Sensorendaten verarbeitet.
Zur Auswahl kamen verschiedene Alternativen, ich habe mich zunächst für die billigste (und zur Zeit verfügbare) Variante entschieden und den Blitzsensor Whadda WPSE343 Blitzsensorausgewählt. Und bin natürlich sehr gespannt, ob die Realisierung im Zusammenspiel mit einer Wetterstation gelingt und Spaß macht.
Mit dem Sensor AS3935 registriert man 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. Zur Auswertung der gelieferten Daten kommt wie so oft Python zum Einsatz
Natürlich muß erst die passende Python-Bibliothek installiert werden:
pip install Rpi_AS3935
Zur Auswertung der Daten soll dieses Script verwendet werden (es ist erst einmal nur ein Script zum Testen) :
from RPi_AS3935 import RPi_AS3935
import RPi.GPIO as GPIO
import time
from datetime import datetime
GPIO.setmode(GPIO.BCM)
as3935 = RPi_AS3935(address=0x03, bus=1)
# as3935.reset()
as3935.calibrate(tun_cap=0x0d)
time.sleep(0.05)
as3935.set_indoors(True)
as3935.set_noise_floor
as3935.set_min_strikes(1)
def irq(channel):
time.sleep(0.05)
global as3935
irqReason = as3935.get_interrupt()
if irqReason == 0x01:
print("Zu viel Rauschen")
as3935.raise_noise_floor()
elif irqReason == 0x04:
print("Stoerung erkannt")
as3935.set_mask_disturber(True)
elif irqReason == 0x08:
now = datetime.now()
distance = as3935.get_distance()
if 0 < distance < 63:
now = datetime.utcnow()
ts = now.strftime("%Y-%m-%d %H:%M:%S.%f")
outstring = str(ts)+":"+str(distance)+":\n"
print(outstring)
f.write(outstring)
f.flush
print("Abstand = " + str(distance) + " km at %s ") % now.strftime("%H:%M:%S.%f")[:-3],now.strftime("%Y-%m-%d")
GPIO.setup(17, GPIO.IN)
GPIO.add_event_detect(17, GPIO.RISING, callback=irq)
try:
f=open('Logfile.log','a')
while 1:
time.sleep(1.0)
except KeyboardInterrupt:
print("Abgebrochen\n")
finally:
GPIO.cleanup()
f.close()
Falls es funktioniert: Schön. Wenn es keine Daten findet weil kein Gewitter stattfindet: Auch schön.
Denn in der von vielen Idioten einfach weggeleugneten Klimakatastrophe gibt es ja eigentlich kaum Gewitter und Starkregen, oder? Alles wie immer.
https://www.raspberry-pi-geek.de/ausgaben/rpg/2021/04/i-2-c-workshop-teil-34-blitzsensor-as3935/2/
Tests
Da der Sensor nur auf echte Gewitter reagiert, gestaltete sich der Test unseres Programms etwas schwierig. Für einen schnellen Test, ob das Programm prinzipiell arbeitet, versuchst am besten, mit dem Lichtschalter in deiner Werkstatt oder deiem Büro einen kleinen Lichtbogen zu erzeugen. Das hörst Du am Knistern im Schalter, wenn Du ihn nur leicht drückst.
Diesen Mini-Blitz erkennt der Sensor zwar nicht als Gewitter, aber immerhin als Störung. So siehst zumindest, ob der Interrupt richtig auslöst und das Programm eine Ausgabe erzeugt. Der Trick klappt allerdings nur einmal, weil das Programm die Störungsunterdrückung des Sensors direkt aktiviert. Bei einem richtigen Gewitter sieht die Ausgabe des Programms so aus wie im folgenden Protokoll.
Protokoll
Ausgabe des Testprogramms
Abstand = 10 km at 15:54:35.668 2020-08-11
2020-08-11 15:54:38.853750:10:
Abstand = 10 km at 15:54:38.853 2020-08-11
2020-08-11 15:54:39.320334:10:
Abstand = 10 km at 15:54:45.135 2020-08-11
2020-08-11 15:55:06.538971:8:
Abstand = 8 km at 15:55:06.538 2020-08-11
2020-08-11 15:55:07.982248:5:
Abstand = 5 km at 15:55:07.982 2020-08-11
2020-08-11 15:55:19.245407:5:
Abstand = 5 km at 15:55:29.831 2020-08-11
2020-08-11 15:55:33.990692:5:
Fehlersuche
Sollte der Sensor einmal nicht richtig arbeiten, kommentiere 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. Solltest Du mit den hier verwendeten Parametern keine guten Ergebnisse erzielen, passe 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. Du brichst sie mit [Strg]+[C] ab. Hier öffnet sich auch das Logfile, das sich beim Beenden des Programms wieder schließt.
Zusammenfassung
Der wirklich interessante Sensor AS3935 eignet sich vorzüglich als Erweiterung zur Blitzerkennung für eine selbst gebaute Wetterstation. Wenn du ihn nur einmal testen möchtest, solltest du auf die Jahreszeit achten: Ist gerade keine Gewittersaison, dauert es zuweilen sehr lange, bis sich ein Eintrag in der Protokolldatei findet.
The AS3935 is a lightning detection sensor often used for detecting lightning activity and estimating distance. It can communicate with microcontrollers like the Raspberry Pi via I²C or SPI. Below is a comprehensive guide to connect and interface it.
Hardware Connections
Using I²C
Most hobbyist modules expose I²C pins.
AS3935 Pins ↔ Raspberry Pi Pins
- VCC → Pin 1 (3.3V)
- GND → Pin 6 (GND)
- SCL → Pin 5 (GPIO3 / SCL)
- SDA → Pin 3 (GPIO2 / SDA)
- IRQ → Optional, can be connected to a GPIO if you want interrupt support
Important: Use 3.3V logic levels only. Do not use 5V on SDA/SCL.
Enable I²C on Raspberry Pi
Run the following commands:
sudo raspi-config
- Navigate to Interfacing Options → I2C → Enable.
- Reboot the Pi.
Install I²C tools to verify the connection:
sudo apt update
sudo apt install -y i2c-tools
i2cdetect -y 1
- You should see an address like 0x03 corresponding to the sensor.
Python Implementation
Install smbus2, a library to communicate over I²C:
pip install smbus2
Then, you can use this example Python code:
# Python
# Basic example to read from AS3935 using I2C
import smbus2
import time
# I2C address of AS3935 sensor. Check with i2cdetect; typical default is 0x03
AS3935_ADDR = 0x03
bus = smbus2.SMBus(1) # Use I2C bus 1
def read_register(register):
"""Read single byte from sensor register"""
return bus.read_byte_data(AS3935_ADDR, register)
def write_register(register, value):
"""Write single byte to sensor register"""
bus.write_byte_data(AS3935_ADDR, register, value)
# Example: read the device ID (often register 0x00)
device_id = read_register(0x00)
print(f"AS3935 Device ID: {device_id}")
# Main loop for detection (simplified)
try:
while True:
# Example: check for lightning events via interrupt register
lightning_status = read_register(0x03) # Adjust register per datasheet
if lightning_status & 0b00000001:
print("Lightning detected!")
time.sleep(1)
except KeyboardInterrupt:
print("Exiting program")
Notes:
- Refer to the AS3935 datasheet for register addresses and configurations.
- You can use IRQ pin to detect lightning via interrupts to avoid constant polling.
- Adjust gain and noise floor according to your environment using configuration registers.
Optional SPI Interface
If you prefer SPI, connect the sensor’s SPI pins (CS, SCK, MOSI, MISO) to the corresponding Raspberry Pi SPI pins and use the spidev Python library. SPI can offer better performance for continuous monitoring.
Summary
- Enable I²C on Raspberry Pi.
- Wire AS3935 sensor properly (3.3V, GND, SDA, SCL; optional IRQ).
- Detect the device with i2cdetect.
- Read/write registers using Python smbus2.
- Consult the datasheet for accurate register configuration and detection logic.
This setup allows your Raspberry Pi to reliably detect lightning events and implement reactive actions like notifications or logging.
https://projects-raspberry.com/lightning-the-lightning-detector-for-raspberry-pi-weather-station/
https://www.raspberry-pi-geek.de/ausgaben/rpg/2021/04/i-2-c-workshop-teil-34-blitzsensor-as3935/2/#artRef-l3

