maltepöggel.de

IoT Geiger Counter

Geiger-Müller Zähler mit WLAN / LoRa Anbindung

Vor kurzem erreichte mich eine Frage, welcher Geigerzähler am besten als Strahlungsmonitor an einer Wetterstation geeignet ist. Bei mir läuft zu diesem Zweck seit einigen Jahren ein uRadmonitor Kit1. Dieser Bausatz ist allerdings aufgrund des LAN Ports nicht besonders flexibel, und die Messwerte können nur über Umwege in einer eigenen, lokalen Datenbank abgelegt werden.

Nach weiterer Recherche im Internet konnte ich keinen geeigneten Bauvorschlag finden, der den Anforderungen eines fest verbauten Gerätes als Basis einer drahtlosen Wetterstation gerecht wurde. Eine neue Projektidee war gefunden.

Foto: Platine des Geigerzählers

Vor einigen Jahren hatte ich bereits einen Prototyp einer Schaltung mit SBM-20 Zählrohr aus dem Mikrocontroller.net Forum aufgebaut, siehe YouTube Video. Sie stammt von dem User "kolisson". Der Vorteil dieser Schaltung ist die Verwendung von Standardbauteilen sowie die sehr geringe Ruhestromaufnahme. Der Aufbau ist als selbstschwingender Aufwärts-Schaltregler mit nachgeschalteter Villard-Vervielfacherschaltung realisiert. Die Einstellung der Ausgangsspannung erfolgt über Zenerdioden.

Bild: Schaltplan

Schaltungsbeschreibung

Die Transistoren T2 und T3 bilden den Sperrschwinger, der die Speicherdrossel L1 lädt. Mit der nachgeschalteten Kaskade wird so die von der Spule induzierte Spannung vervielfacht. Sobald die Spannung an C4 die mit den Zenerdioden eingestellte Anodenspannung von 400V erreicht, schalten diese über den Transistor T1 den Schwingkreis ab. Der Anodenwiderstand R8 begrenzt den Strom durch das Zählrohr. Der darüber geschaltete 1pF Kondensator C5 ist ein Vorschlag zur Verbesserung der Plateau-Eigenschaften, kann aber nach Belieben entfallen.

Die 10nF Kondensatoren C2, C3, C4 in der Kaskade sind mit 630V spezifiziert. In Tests hat sich die WIMA MKP10 Serie durch ihre geringen Verluste als optimal erwiesen. Die Keramikkondensatoren C5 und C6 sollten eine Spannungsfestigkeit von 500V haben. Außerdem ist die Auswahl der Zenerdioden kritisch. Auch hier spielt der Leckstrom eine große Rolle. Je nach Typ wird die Hochspannung mehr oder weniger genau eingeregelt. Ich habe die Zenerdioden BZT03C200 gewählt. Da diese im Glasgehäuse einen photoelektrischen Effekt aufzuweisen scheinen, empfiehlt es sich die Zenerdioden vor dem Einlöten mit Schrumpfschlauch zu überziehen. Bei den in der Teileliste genannten Alternativen im Plastikgehäuse (u.a. 2EZ200D5) ist dies nicht nötig. Zur Kontrolle der Anodenspannung sollte ein besonders hochohmiges Analogvoltmeter (z.B. Unigor 3n mit 31,6kOhm/V im 1kV Bereich) verwendet werden. Digitale Voltmeter haben meist in allen Bereichen eine Impedanz von 10MOhm, unter der die Hochspannung um einige hundert Volt einbricht. Einige weitere Infos finden sich in diesem Twitter Thread.

Das Zählrohr SBM-20 stammt aus der Sowjetunion und ist aus Restbeständen leicht zu beschaffen. Alternativ kann das J305βγ (107mm Länge) aus China eingesetzt werden. Beide detektieren Beta- und Gammastrahlen mit vergleichbarer Empfindlichkeit. Wird das Gas im Zählrohr ionisiert, so entlädt sich die Hochspannung über den Spannungsteiler aus R9, R10 und R11. C6 verlängert den dabei entstehenden Impuls. Dieser wird durch den Darlington-Transistor T4 verstärkt, schaltet den Feldeffekttransistor T5, und lässt letztendlich die Leuchtdiode D7 aufblitzen.

Eine digitale Auswertung der Impulse erfolgt wahlweise mit einem ESP32 (WLAN) oder einem Moteino R6 (LoRa). Die Wandlung auf 3,3V Logikpegel geschieht dabei durch geschickte Beschaltung der Shottkydiode D10. Über diese und R14 fließen die 3,3V, sobald der Feldeffekttransistor T5 bei einem Impuls gegen Masse schaltet. Der Ausgang ist somit low-aktiv. Die Eingänge beider Mikrocontroller sind so gewählt, dass interne Timer-Baugruppen als Zähler verwendet werden können. Mehr dazu aber später.

Zur Stromversorgung ist entweder ein DC-DC-Modul oder ein Low-Drop-Spannungsregler (IC1) vorhanden. Dieser erzeugt aus einer Eingangsspannung von 6 bis 26V die nötigen 5V. Sofern bereits eine geregelte 5V Versorgung vorhanden ist, kann der Spannungsregler mit der Steckbrücke J2 überbrückt werden. Die Selbstrückstellsicherung F1 sowie die TVS Diode D8 schützen vor Verpolung und Überspannung.

Über die JST Buchsen J3 bis J6 sind I2C und UART Schnittstellen, jeweils mit 3,3V oder 5V Spannungsversorgung herausgeführt. Hier können zusätzliche Sensoren angeschlossen werden. Auf allen Datenleitungen darf ein Signalpegel von 3,3V nicht überschritten werden.

Aufbau

Bei der Bestückung der Platine sollte mit den kleinsten / flachsten Bauteilen (Widerstände, Dioden, etc) begonnen werden. Besondere Vorsicht ist bei dem Feldeffekttransistor T5 gegeben: Dieser ist empfindlich gegen elektrostatische Aufladungen. Nach der Bestückung muss die Unterseite der Platine mit Isopropylalkohol oder Brennspiritus von Flussmittelresten gereinigt werden, da diese eventuell leitend sein können. Wer möchte, kann den Hochspannungsteil zusätzlich mit Isolationslack (z.B. Plastik 70 von CRC Kontaktchemie) überziehen.

Gehäuse und Montage

Die Abmessungen der Platine sind auf den Einbau in ein IP65 Gehäuse wie zum Beispiel G368 / G258 abgestimmt. Baugleiche Gehäuse mit den Außenabmessungen 160x80x55mm werden von verschiedenen Herstellern angeboten. Wer mehr Platz benötigt, kann alternativ das Gehäuse G369 / G265 mit einer Bauhöhe von 85mm verwenden. Alle Kabel sollten über abgedichtete PG Verschraubungen eingeführt werden. Vor dem Einbau der Platine müssen die beiden unter den Buchsen liegenden Abstandshalter mit einem Bohrer oder Seitenschneider gekürzt werden. Da ich bei einem anderen Projekt bei Kälte einen Wassereintritt an einem solchen Gehäuse beobachtet habe, empfehle ich dieses trotz der Herstellerangaben an einem geschützten Ort zu montieren. Zur Sicherheit kann auch ein kleines Päckchen Trockenmittel (Silica-Gel) mit ins Gehäuse geklebt werden.

Nutzung des ESP32 mit WLAN

Als Software für den ESP32 dient die freie Firmware ESPHome. Mit dieser können ohne Programmierkenntnisse diverse Sensoren integriert und verarbeitet werden. Die Konfiguration der Firmware wird über YAML Dateien vorgenommen.

ESPHome nutzt beim ESP32 automatisch das im Mikrocontroller vorhandene PCNT (Pulse Counter) Modul. Ich habe einige Tests mit einem Funktionsgenerator vorgenommen und war erstaunt von der Genauigkeit der ausgegebenen Werte.

Wer HomeAssistant benutzt, kann die Firmware direkt über die Weboberfläche erzeugen und übertragen. Soll ESPHome mit Hilfe des eigenen PCs aufgespielt werden, wird hierzu Python 3 benötigt. Unter Windows muss dieses zuvor installiert werden, unter Linux ist es bereits vorhanden. Mit dem Befehl "pip3 install esphome" auf der Konsole wird die Installation von ESPHome und allen weiteren Abhängigkeiten gestartet.

Beispielhaft kann nun die Datei geigercounter.yaml mit einem Editor angelegt werden:

esphome:
  name
: geigercounter
  platform
: ESP32
  board
: esp32doit-devkit-v1

wifi
:
  ssid
: "WLAN-SSID"
  password
: "WLAN-Passwort"

i2c
:
  sda
: 21
  scl
: 22
  scan
: false

sensor
:
  - platform
: pulse_counter
    pin
: 14
    name
: "CPM"
    update_interval
: 60s
#   - platform: bme280
#     temperature:
#       name: "Temperature"
#       oversampling: 16x
#     pressure:
#       name: "Pressure"
#     humidity:
#       name: "Humidity"
#     address: 0x76
#     update_interval: 300s

web_server
:
  port
: 80

# Enable MQTT
# mqtt:
#   broker: "192.168.0.100"
#   username: "MQTT-User"
#   password: "MQTT-Passwort"
#   topic_prefix: "MQTT-Topic/geigercounter"
#   log_topic:
#   discovery: false

# Enable Home Assistant API
# api:
#   reboot_timeout: 0s

# Enable logging
logger
:

ota:

Die auskommentierten Zeilen können aktiviert werden, sofern ein BME280 Temperatur-, Luftdruck-, Luftfeuchtesensor eingesetzt werden soll oder die Datenübermittlung über MQTT bzw die Home Assistant API gewünscht ist. In jedem Fall können die aktuellen Werte über den Webserver auf dem ESP32 abgerufen werden.

Um das Programm nun zu compilieren und über USB auf den ESP32 zu übertragen, werden in dem Ordner in dem sich auch das YAML File befindet folgende Befehle ausgeführt:

esphome geigercounter.yaml compile
esphome geigercounter.yaml upload

Wenn das Programm nun erfolgreich compiliert und übertragen wurde, ist der Zähler einsatzbereit. Mit einem Webbrowser lässt sich über die vom WLAN-Router zugeteilte IP Adresse die Oberfläche mit den Messwerten ansehen:

Screenshot: ESPHome Weboberfläche

Nutzung des Moteino R6 mit LoRa

LoRa Funktechnik kann überall dort eingesetzt werden, wo kein WLAN verfügbar ist und eine hohe Reichweite (1km) zur Basisstation gefordert wird. Durch die relativ geringe Stromaufnahme von etwa 15mA ist auch ein Solar / Batteriebetrieb denkbar.

Der auf dem Moteino verbaute Prozessor ist ein Arduino kompatibler Atmel ATMega328P. Zur Nutzung von LoRa empfiehlt sich daher die Arduino LMIC Bibliothek. Es sind zwei zusätzliche Drähte nötig, die die Pins DIO0 (Tx/RxDone) und DIO1 (RxTimeout) mit freien GPIOs (z.B. D2 und D3) verbinden.

Um die Impulse zu zählen, wird D5 (Timer 1) verwendet. Da Timer 0 durch die Arduino Bibliotheken belegt ist, dient Timer 2 als Taktquelle. Durch zählen der Überläufe kann ein 60s Intervall zum Auslesen und Zurücksetzen des aktuellen Zählerstandes erzeugt werden.

Da die Sendezeit pro Stunde limitiert ist, ist es sinnvoll die Messwerte über einige Minuten zu sammeln und gemeinsam zu übertragen.

Ein Beispielprogramm ist bisher noch nicht fertiggestellt, soll aber zu einem späteren Zeitpunkt ergänzt werden.

Visualisierung der Daten

Ich selbst aggregiere sämtliche Sensordaten per MQTT (Mosquitto). Dabei spielt es keine Rolle, ob diese direkt über WLAN, oder über einen beliebigen LoRa Stack eingehen. Der Bridge Modus lässt sogar einen Datenaustausch zwischen verschiedenen MQTT Servern zu. Telegraf schreibt alles gesammelt in eine InfluxDB. Die Messwerte lassen sich anschließend mittels Grafana in einem hübschen Dashboard aufbereiten.

Screenshot: Grafana Dashboard

Da eine genaue Erklärung den Rahmen dieser Dokumentation sprengen würde, soll hier nicht weiter auf die Konfiguration der genannten Tools eingegangen werden. Auf den Herstellerseiten sowie in verschiedenen Tutorials findet sich dazu ausreichend Lesestoff.

Als mögliche Alternative zu dieser Konfiguration kann auch HomeAssistant Lovelace oder NodeRed Dashboard verwendet werden.

Umrechnung der CPM Werte

Die gemessenen Impulse pro Minute variieren je nach eingesetztem Zählrohr. Um diese in die Äquivalentdosis, gemessen in Sievert umzurechnen, werden folgende Umrechnungsfaktoren verwendet:

Quellen: DIY Geiger - GM Tube Info und de:arduino:radioactivity [OB121]

In Grafana kann der Faktor beispielsweise direkt im SELECT Statement mit der Funktion math(*0.00570027) auf den gemessenen CPM Wert aus der Datenbank angewendet werden.

Fehlerkorrekturen
Downloads

Es sind noch einzelne Platinen und Bauteile aus der Entwicklung übrig. Bei Interesse einfach anschreiben.

Veröffentlichungen
Weitere interessante Projekte
Lizenz

Das von mir erstellte Platinenlayout darf für privaten Gebrauch frei verwendet werden, der Name des Autors muss darauf jedoch erhalten bleiben (CC BY-NC-SA). Der Schaltplan unterliegt keinen Beschränkungen.