Natürliche Umgebungsstrahlung messen mit Arduino

Radioaktive Strahlung ist allgegenwärtig und jeder ist auf natürliche Weise dieser Strahlung ausgesetzt. In Deutschland ist je nach Standort die gesamte Strahlenbelastung zwischen ein bis zehn Millisievert pro Jahr. Sie kommt aus dem Boden, unseren Baumaterialien, der Nahrung, aus dem Weltall usw.
Hinzu kommen die technisch erzeugten ionisierenden Strahlungen zum Beispiel beim Röntgen.

Die Grenzwerte und weitere Informationen zum Strahlenschutz kann auf der Webseite des Bundesamt für Strahlenschutz (BfS) eingesehen werden.

https://www.bfs.de/DE/themen/ion/strahlenschutz/grenzwerte/grenzwerte.html

Zum Nachweis und zur Messung ionisierender Strahlung kommt unter anderem das Zählrohr des deutschen Physiker Hans Geiger zum Einsatz.

Zählrohr für die Messung von Beta- und Gammastrahlung

Radioaktive Teilchen bewirken die Ionisierung eines oder mehrerer Atome des Füllgases im Auslösezählrohr. Die anliegende Spannung ist so gewählt, dass es bei Ladungsträgern im Füllgas wie in einer Gasentladungsröhre zu einem plötzlichen Elektronenschub und einer Gasentladung kommt. Dadurch entsteht im Zählrohr ein Stromstoß, der durch Abgreifen eines externen Widerstandes in einen Spannungsimpuls umgewandelt wird. Das kann ohne Verstärkung direkt an einem Lautsprecher als Knackgeräusch hörbar gemacht werden. Danach erfolgt eine kurze Totzeit von etwa 0,1 Millisekunden.


Diese steigenden und fallenden Signale nutze ich nun, um mit einen Microcontroller diese Entladungen elektronisch zu zählen.
Mit einer Ausgabe der Werte auf einen kleinen OLED Display kann diese Lösung zu experimentellen Strahlenschutzzwecken bestimmt dienlich sein.

Das Geigerzähler Modul
Das hier zu sehende Modul Radiationd-v1.1 wurde vormontiert mit einer Plexiglas-Abdeckung geliefert.
Das Zählrohr J305 war separat und sehr gut verpackt. Beim Einsetzen unbedingt auf die Polung achten.
Die Arbeitsspannung des Moduls liegt bei 5V.

Das Zählrohr wird durch dem auf der Platine vorhandenen 5V DC – 400V DC-Wandler
mit etwa 400V / 0,02A versorgt. Es ist also Vorsicht geboten.
Zum Schutz vor Berührung habe ich ein Gehäuse erstellt und bei Thingiverse zum Download bereitgestellt.
Zum Testen kann es auch ohne Microcontroller eingeschaltet werden. Es benötigt einige Sekunden, bis es anfängt aus dem verbauten Buzzer zu knacken und zeitgleich eine rote LED kurz aufflackert, die anzeigt, dass radioaktive Teilchen auf das Zählrohr treffen.

Kalibrierung:
Das Modul wird vorkalibriert geliefert.
Optional zum Einstellen und Kontrollieren, gibt es hier eine Anleitung

Zu erwartende Messdaten:

Der Hersteller des mitgelieferte Zählrohr J305 gibt an, das die Conversation Rate bei 153,8 liegt.
Soll heißen: 153,8 Treffer pro Minute (cpm) = 1 Mikrosievert pro Stunde Werte (µSv/h)

Tabelle zur Berechnung der mSv/a-Werte abhängig der Zählrohr Konversationsrate

Für die Formel im Quellcode rechne ich lediglich 1:153,8 = 0.0065.
µSv/h = cpm * 0.0065

Quellcode:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

const int Interruptpin = 3;       // GPIO Anschluss des Zählrohr
const int durchlaufzeit = 12000;  // 12 Sekunden
unsigned long treffer;            // Gezählte Treffer des Zählrohr
unsigned long tpm;                // Treffer pro Minute

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET  -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup(){
  treffer = 0;
  tpm = 0;
  pinMode(Interruptpin, INPUT);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //I2C-Adresse des OLED ggf anpassen
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);  //Erster Wert = Anzahl Pixel von links, bis Schrift beginnt
                            // Zweiter Wert = Anzahl Pixel von oben, bis Schrift beginnt
  display.println("Strahlenschutzmessung ");
  display.setCursor(5, 35);
  display.println("Fange an zu zaehlen");
  display.display();
  
// immer wenn fallendes Signal am Geigerzähler soll Funktion counter_hit Zähler um 1 erhöhen
attachInterrupt(digitalPinToInterrupt(Interruptpin), counter_hit, FALLING);
}

void loop(){
  static unsigned long startzeit;
  unsigned long zeit = millis();//Millisekunden seit Auslöser
  double uSv; //Microsievert Wert pro Stunde

  //Wert errechnen beim Ende der Durchlaufzeit
  if (zeit - startzeit > durchlaufzeit) {
    startzeit = zeit;
    if (treffer) {
      tpm = treffer * 5; // Treffer pro Durchlauf mal Wert um auf eine Minute zu kommen
      uSv = tpm * 0.0065; // Zählrohr Konversationsrate J305: 153,8 CPM = 1 uSv/h 
    } else {
      uSv = 0;
    }
    display.display();
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(SSD1306_WHITE);
    display.setCursor(0, 0);
    display.println("Strahlenschutzmessung");
    display.setCursor(7, 17);
    display.println("Treffer:");
    display.setCursor(57, 17);
    display.println(treffer);
    display.setCursor(7, 30);
    display.println("pro Minute cpm:");
    display.setCursor(100, 30);
    display.println(tpm);
    display.setCursor(7, 43);
    display.println("uSv/h:");//Mikrosievert/h
    display.setCursor(50, 43);
    display.println(uSv,4);
    
// Check, ob Alles Ok oder ALARM
    if ( tpm > 90 ) {  // Dosis ueber Normalwert wenn >5mSv/a
      display.display();
      display.clearDisplay();
      display.setTextSize(1);
      display.setTextColor(SSD1306_WHITE);
      display.setCursor(7, 10);
      display.println("ALARM!");
      display.setCursor(7, 23);
      display.println("Dosis ueber Wert!");
      display.setCursor(7, 36);      
      display.println("cpm ist:");
      display.setCursor(55, 36);
      display.println(tpm);
      display.setCursor(8, 49);
      display.println(tpm-90);// ueber Normalwert wird hier abgezogen
      display.setCursor(25, 49);
      display.println("mehr als normal");
    } else {
      display.setCursor(7, 56);
      display.println("Alles ist OK !");
  }
  treffer = 0;
  tpm = 0;
}
delay(50);
}

void counter_hit() { 
  treffer++;          // bei Treffer plus 1 pro Durchlaufzeit
}

Für eine Kontrolle und einen Abgleich der Messdaten in der eigenen Umgebung bietet das Bundesamt für Strahlenschutz aktuelle Werte von über 1700 Standorten unter https://odlinfo.bfs.de

Hardware:

Module Radiationd-v1.1 mit Zählrohr
Arduino Uno
OLED Display

Verdrahtung:

Anbinden eines OLED Display über I2C:
https://prilchen.de/oled-display-i2c-bus/

Youtube-Video:



Optional nicht im Video zu sehen:

Neuer Aufbau mit einem deutlich kleineren Nano Board mit unveränderter Verdrahtung, das von einer kleinen USB-Powerbank mit Spannung versorgt wird.
Um mal zu schauen wie hoch der Stromverbrauch bei dieser Lösung ist, schließlich versorgt das Board das Zählrohr und das OLED Display gleich mit, ist hier optional auch ein Spannungsprüfer zwischen gesteckt.

, ,