Geigerzähler mit Raspberry Pi

Von MightyOhm gibt es mit dem „MightyOhm.com Geiger Counter v1.0“ einen einfach zu bauenden und kompakten Bausatz eines Geigerzählers mit einem SBM-20 Geiger-Müller-Röhre zur Messung von Radioaktiver Beta- und Gamma-Strahlung. Ursprünglich wurde die Schaltung vom Chaos Computer Club entwickelt.

MigthyOhm Geiger Counter v1.0
MigthyOhm Geiger Counter v1.0 Bausatz mit SBM-20 Geiger-Müller-Zählrohr

Der Geiger-Zähler von MightyOhm ermittelt den aktuellen Wert radioaktiver Strahlung als CPM (counts per minute), CPS (counts per second) und in Mikrosievert (μSv).

Radioaktivität Logo

Das Sievert ist eine gewichtete SI-Maßeinheit von ionisierender Strahlung und dient zur Bestimmung der Strahlenbelastung von biologischen Organismen. Üblicherweise werden Strahlendosen in Mikrosievert (1 μSv = 0,000 001 Sv) oder Millisievert (1 mSv = 0,001 Sv) angegeben.

1 Sv  1 J / kg = 1 m2 / s2

Die veralteten Einheiten wie Rem, Gauss oder Gray sollten eher nicht mehr verwendet werden.

Technische Daten des Geiger-Zählers

  • 100% Open Source
  • Detektion von Beta- und Gamma-Strahlung
  • LED und Piezo-Lautstprecher
  • Taster um das „Klicken“ des Piezo-Lautsprecher still zu schalten
  • Microcontroller: ATtiny2313
  • Unterstützte Geiger-Müller-Röhren: SI-3BG, SI-1G und SBM-20
  • Hochspannung von ca 300-600V (einstellbar)
  • Datenausgabe über serielle Schnittstelle (CPM, CPS und uSv)
  • Stromversorgung: 2x AAA Batterie
  • Anschlüsse:
    • Serielle Schnittstelle „Serial“ (9600 baud)
    • Programmierschnittstelle für Microcontroller „ICSP“
    • Puls-Ausgang „Pulse“ 100us (zB für Audio-Kabel)
  • Optional: transparentes Gehäuse

Die Geiger-Müller-Röhre SBM-20 die beim Bausatz mitgeliefert wird, kann harte Beta- und Gamma-Stahlung aber keine Alpha-Strahlung detektieren. Sie kann sehr leicht gegen andere Röhren getauscht werden. Bei Röhren mit einer kürzeren Bauform, können die Metallhalterungen auf der Platine näher zueinander umgelötet werden.

  • Gasfüllung: Ne + Br2 + Ar
  • Dimensionen: 108 x 11mm
  • Spannung: 400 Volt
  • Gamma Sensitivity Ra226 (cps/mR/hr): 29
  • Gamma Sensitivity Co60 (cps/mR/hr): 22
  • siehe: http://www.gstube.com/data/2398/

Der Raspberry Pi nimmt die aktuellen Messungen des Geigerzählers auf und dient entweder selbst als Datenlogger oder leitet die Messwerte der radioaktiven Strahlung an zB. Xively.com weiter.

Der Bausatz wird mit zwei 1,5V AAA-Batterien betrieben, die allerdings bei Dauerbetrieb nur für ca 4-5 Tage reichen. Der Bausatz lässt sich aber auch direkt an den 3,3V Spannungsversorgung des Raspberry Pi anschließen indem der 3,3V GPIO Pin mit dem Pin 1 des „Pulse“- oder Pin 6 des „Serial“-Anschlusses verbunden wird. Die Batterien müssen dabei aber entfernt werden! Alternativ kann die Schaltung auch über eine Drahtbrücke vom USB-Adapter-Kabel gespeist werden. Da der USB Anschluss aber 5 V liefert, muss die Spannung um ca 2 V auf 3,0 bis 3,3 V zum Beispiel mit Hilfe eines Spannungsreglers oder durch 3 seriell geschaltete Dioden (3*0,7=2,1 V Spannungsabfall) verringert werden!

MightyOhm Geiger Counter USB Spannungsversorgung
MightyOhm Geiger Counter USB Spannungsversorgung über USB und 3 Dioden zur Spannungsreduktion von 5V auf ca 3,3V

Der Geiger-Counter-Bausatz von MightyOhm verfügt über einen Puls-Ausgang der an einen Line-In oder mit einer Vorschaltung an einen Mikrophon-Eingang eines PCs oder Smartphones angeschlossen werden kann. Über die serielle Schnittstelle können die aktuellen CPS-, CPM-Messwerte und die Dosis in Mikrosievert (μSv) ausgelesen werden.

Über den Taster lässt sich der bei jedem Count ertönende Piepton an/aus schalten. Nachdem bei einem Neustart bzw. einer kurzen Spannungsunterbrechung der Pieper aber wieder aktiviert wird, ist es empfehlenswert ihn aus zu löten. Es soll aber eine alternative Firmware für den Bausatz geben, bei der man den Pieper standardmäßig ausschalten kann.

Schnittstellen

Der Bausatz kann sowohl über den „Puls“-Ausgang (J6) als auch über die serielle Schnittstelle „Serial“ (J7) an den GPIO-Anschluss eines Raspberry Pi angeschlossen werden. Wesentlich leichter und praktischer ist die Verbindung des Geigerzählers über die serielle Schnittstelle, weil hier die Messdaten bereits in normierte Strahlungswerte umgerechnet ausgegeben werden.

Serieller-Anschluss (J7)

Beim Raspberry Pi liegt bereits meist ein USB<->Serial Adapter-Kabel bei, mit dem der MigthyOhm Geigerzähler über dessen seriellen Ausgang „Serial“ (J7) an einen freien USB-Anschluss des Raspberry Pi angeschlossen werden kann.

Mit einem USB-TTL Adapter-Kabel kann der Bausatz direkt an einen USB-Port des Raspberry Pi oder PC angeschlossen werden. Alternativ kann auch eine Konverter-Schaltung wie zB. der „FTDI Friend“ von Adafrut verwendet werden. Der Adapter enthält einen Konverter-Chip wie zB: PL2303HX oder PL2303TA.

Das folgende Foto zeigt den Anschluss des Adapters am Geigerzähler:

MigthyOhm Geiger Counter Anschlüsse
BedeutungGNDGNDRXD (3.3V)TXD (3.3V)VCC (+5V)
MightyOhm Geiger Counter Serial (J7)1 „blk“23456 „grn“
USB-TTL-Adapter zu Raspberry Pischwarzweißgrünrot

Impuls-Ausgang (J6)

Der „Pulse“-Ausgang (J6) liefert bei jeder Entladung in der Geiger-Müller-Röhre einen 100 μs Impuls von 3 Volt der ebenfalls zum Zählen mit zB. einem Smartphone verwendet werden kann.

Impuls am Pulse-Ausgang des MightyOhm Geiger Counter
Impuls am Pulse-Ausgang des MightyOhm Geiger Counter mit BitScope Micro DSO mit Frequenzspektrum
BedeutungVCC (+5 V)Pulse (100 μs)GND
MightyOhm Geiger Counter „Pulse“ (J6)123
iPhone Audio 4 poliger SteckerMic In (4)Common (3)

Auslesen der Seriellen Daten

Nach korrektem Anschluss des Geigerzähler-Bausatzes an die Seriell->USB-TTL-Kabel->USB-Schnittstelle können am Raspberry Pi mit lsusb die gefundenen USB-Geräte aufgelistet werden.

lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 005: ID 045e:07b9 Microsoft Corp.

Die aktuellen Messwerte können auf der Konsole auch mit screen von der seriellen Schnittstelle abgefragt werden.

screen /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0

Alternativ kann der Strahlenwert auch mit einem Terminal wie CoolTerm oder ähnlichem Programm mit folgender Konfiguration von der seriellen Schnittstelle eingelesen werden. Dabei müssen folgende Einstellungen gewählt werden:

  • Baud: 9600
  • Data Bits: 8
  • Stop Bits: 1
  • Parity: None
  • Hardware Flow Control: None
  • Software Flow Control: Off (nothing selected)

Der MightyOhm Geiger-Counter Bausatz liefert automatisch die Messwerte in einem einfachen CSV-Format:

CPS, #####, CPM, #####, uSv/hr, ###.##, <Modus>

Der Wert für Modus hat folgende Bedeutungen:

  • LOW – 60 Sekunden
  • FAST
  • INST

Nachfolgend ein einfaches Python-Script zum Einlesen der Strahlungs-Messwerte über ein USB-Serielles TDI-232R-3V3 Adapter-Kabel.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import serial
import datetime
import time
# --------------------------------------------------------------
# Geiger Counter - Display Radiation
# read radiation level from MightyOhm Geiger Counter v1.0
# via serial (USB) interface and dispays radiation level
# by Roland Ortner (2015)
# --------------------------------------------------------------

# serial port interface e.g. /dev/serial/by-id/*usb* or /dev/cu.usbserial
SERIAL_PORT = '/dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0'

# interval between readings in seconds (default: 10 sec)
INTERVAL = 10

# open serial port using 9600 baud, 8 data bit, 1 stop bit, no parity, no flow control
ser = serial.Serial(SERIAL_PORT, baudrate=9600, timeout=2, xonxoff=False, rtscts=False, dsrdtr=False)
ser.flushInput()
ser.flushOutput()

while True:
&amp;amp;amp;nbsp; # read values from serial interface
&amp;amp;amp;nbsp; data_raw = ser.readline()
&amp;amp;amp;nbsp; # print(data_raw)

&amp;amp;amp;nbsp; # split csv formated string e.g. CPS, 0, CPM, 21, uSv/hr, 0.11, SLOW
&amp;amp;amp;nbsp; array = data_raw.split(&amp;quot;,&amp;quot;)
&amp;amp;amp;nbsp; cps = array[1].strip()
&amp;amp;amp;nbsp; cpm = array[3].strip()
&amp;amp;amp;nbsp; radiation = array[5].strip()
&amp;amp;amp;nbsp; mode = array[6].strip()

&amp;amp;amp;nbsp; # get current timestamp
&amp;amp;amp;nbsp; now = datetime.datetime.utcnow()

&amp;amp;amp;nbsp; # output current radiation measurements
&amp;amp;amp;nbsp; print(&amp;quot;Time:&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp; %s&amp;quot; % now.strftime('%Y-%m-%d %H:%M:%S'))
&amp;amp;amp;nbsp; print(&amp;quot;Radiation: %s uSv/h&amp;quot; % radiation)
&amp;amp;amp;nbsp; print(&amp;quot;CPM:&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp; %s&amp;quot; % cpm)
&amp;amp;amp;nbsp; print(&amp;quot;CPS:&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp; %s&amp;quot; % cps)
&amp;amp;amp;nbsp; print(&amp;quot;Mode:&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp; %s&amp;quot; % mode)

&amp;amp;amp;nbsp; # wait and loop
&amp;amp;amp;nbsp; time.sleep(INTERVAL)

Strahlungswert einlesen und Upload zu Xively

Xively.com stellt für den einfachen Upload der Messwerte eine Python-Bibliothek zur Verfügung. Nachfolgend die nötigen Schritte zur Installation von xively-python, daemon-python, pyserial mit PIP.

sudo apt-get install python-setuptools
sudo easy_install pip
sudo pip install virtualenv
mkdir geiger-counter
cd geiger-counter
virtualenv .envs/venv
source .envs/venv/bin/activate
pip install xively-python # oder --pre xively-python
pip install daemon-python
pip install pyserial

Das folgende Python-Script liest die Messwerte über die Serielle->USB Schnittstelle vom MigthyOhm Geiger-Counter in den Raspberry Pi ein und lädt sie zu einem Daten-Feed bei Xively.com.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import datetime
import time
import requests
import logging
from daemon import runner # python-daemon
import serial
import xively

# ---------------------------------------------------------------
# Geiger Counter - Display Radiation
# read radiation level from MightyOhm Geiger Counter v1.0
# via serial (USB) interface and upload to Xively.com data feed.
# Author: Roland Ortner (2015)
# ---------------------------------------------------------------

# serial port interface e.g. /dev/serial/by-id/*usb* or /dev/cu.usbserial
SERIAL_PORT = '/dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0'

# xively.com data feed configuration
XIVELY_API_KEY = '***'
XIVELY_FEED_ID = '***'
XIVELY_FEED_NAME = 'Radioactivity'

# interval between readings in seconds (default: 60 sec)
INTERVAL = 60

# logfile path and filename
LOG_FILE = '/home/pi/geiger-counter/geiger-counter.log'

# pid file path
PID_FILE = '/tmp/geiger-counter.pid'

# main daemon class
class App():
 def __init__(self):
 # daemon runner configuration
 self.stdin_path = '/dev/null'
 self.stdout_path = '/dev/tty'
 self.stderr_path = '/dev/tty'
 self.pidfile_path = PID_FILE
 self.pidfile_timeout = 5

 def run(self):
 # init xively data feed api client
 api = xively.XivelyAPIClient(XIVELY_API_KEY)

 # init logger
 logger = logging.getLogger('app')
 hdlr = logging.FileHandler(LOG_FILE)
 formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
 hdlr.setFormatter(formatter)
 logger.addHandler(hdlr)
 logger.setLevel(logging.DEBUG)

 logger.info(&amp;quot;starting geiger-counter...&amp;quot;);

 # get xively feed and datastream
 feed = api.feeds.get(XIVELY_FEED_ID)
 datastream = get_datastream(feed, XIVELY_FEED_NAME)
 datastream.max_value = None
 datastream.min_value = None

 # open serial port using 9600 baud, 8 data bit, 1 stop bit, no parity, no flow control
 ser = serial.Serial(SERIAL_PORT, baudrate=9600, timeout=2, xonxoff=False, rtscts=False, dsrdtr=False)
 ser.flushInput()
 ser.flushOutput()

 while True:
 # read values from serial interface
 data_raw = ser.readline()

 # continue if no valid data could be read
 if not data_raw.startswith(&amp;quot;CPS&amp;quot;):
 logger.error(&amp;quot;no data available on serial port&amp;quot;)
 time.sleep(INTERVAL)
 continue

 # split csv formated string e.g. CPS, 0, CPM, 21, uSv/hr, 0.11, SLOW
 array = data_raw.split(&amp;quot;,&amp;quot;)
 cps = array[1].strip()
 cpm = array[3].strip()
 radiation = array[5].strip()
 mode = array[6].strip()

 # get current timestamp of readings
 now = datetime.datetime.utcnow()

 # update data feed at xively.com
 datastream.at = now
 datastream.current_value = radiation
 try:
 datastream.update()
 except requests.HTTPError as e:
 logger.error(&amp;quot;HTTPError({0}): {1}&amp;quot;.format(e.errno, e.strerror))

 # log data (values may be used elsewere)
 logger.info(&amp;quot;%s; %s CPM, %s CPS, %s uSv, %s&amp;quot; % (now.strftime('%Y-%m-%d %H:%M:%S'), cpm, cps, radiation, mode))

 # wait interval and loop
 time.sleep(INTERVAL)

# get or create new xively datastream
def get_datastream(feed, feedname):
 try:
 datastream = feed.datastreams.get(feedname)
 return datastream
 except:
 datastream = feed.datastreams.create(feedname, tags=feedname)
 return datastream

app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()

Messung mit Android/iPhone-App „Geiger Bot“

„Geiger Bot“ ist eine gratis Smartphone-App für Android und iOS zur Auswertung beliebiger Geiger-Zähler die einen hörbaren „Klick“ erzeugen können oder über einen Audio/Puls-Ausgang verfügen und so direkt oder über eine kleine Vorschaltung an den Mikrophon-Eingang angeschlossen werden können.

Geiger Bot zählt dabei die Anzahl der Klicks pro Zeiteinheit (CPM) und kann diese je nach verwendetem Geiger-Zählrohr in Mikrosievert pro Stunde (μSv/h) umrechnen und als Liniengraphik darstellen.

Geiger Bot für iOS im Apple App Store →

Radioaktive Testobjekte

  • Bananen
  • Glas-Murmeln
  • Alte Uhren mit flureszierenden Zeigern
  • Alte Keramik
  • Granit-Strein/Fliesen
  • Glühstrümpfe
  • Kohle/Öl
  • Feuermelder
  • Tabak
  • Waldpilze, Wildschweine

Aktuelle radioaktive Strahlung in Salzburg →

Gefahr von radioaktiver Strahlung

SievertμSv, mSvBemerkung
0,000.01 Sv< 10 μSvRöntgenaufnahme Zahn
0,000.03 Sv30 μSvRöntenaufnahme Panorama Zähne
0,000.05 Sv50 μSvRöntgenaufnahme Brustkorb
0,000.10 Sv0,1 mSvFlug von Frankfurt nach New York und Retour
0,004 Sv0,4 mSvMamographie Brust
0,002 Sv2 mSvNatürliche Strahlung in Deutschland pro Jahr (bis 3 mSv)
0,002.8 Sv2,8 mSvNatürliche Strahlendosis in Österreich pro Jahr
0,008 Sv8 mSvCT Brustkorb
0,1 Sv0,1 Sverhötes Krebsrisiko (bei Kindern ab 0,01 Sv)
0,5 Sv0,5 SvHöheres Krebsrisiko, Kopfschmerzen und getrübtes Bewusstsein
1 Sv1 SvLeichte Strahlenkrankheit: Krebsrisiko steigt weiter, Lichte bis mittlere Übelkeit, Erbrechen, Unwohlsein, zeitweise Sterilität beim Mann
3 Sv3 SvSchwere Strahlenkrankheit: Extreme Durchfälle, Erbrechen, Haarausfall, Infektionen, Blutungen, Todesrate 50% binnen einer Woche
> 10 Sv> 10 SvTod innerhalb von 2 Tagen, zum Teil unmittelbar
  1 Sievert (Sv) = 1.000 Millisievert (mSv) = 1.000.000 Mikrosievert (μSv)

Bezugsquellen

Der MightyOhm Geiger Counter Bausatz läßt sich derzeit (Stand 02/2016) in folgenden Online-Shops bestellen:

Quellen

Hinweise

Die mit * gekennzeichneten Links sind sogenannte Affiliate Links.
Kommt über einen solchen Link ein Einkauf zustande, werde ich mit
einer Provision beteiligt. Für Dich entstehen dabei keine Mehrkosten.
Wo, wann und wie Du ein Produkt kaufst, bleibt natürlich Dir überlas-
sen