Legt man einen radioaktiven Strahler neben seinen Geigerzähler und bestimmt die Häufigkeit einer bestimmten Zählrate z.B. pro Minute, so erhält man eine sog. Poissonverteilung. Benannt ist diese Verteilung nach dem französischen Mathematiker Siméon Denis Poisson (1781 – 1840):
Bildquelle: Wikipedia
Die Poisson-Verteilung ist eine diskrete Wahrscheinlichkeitsverteilung, die verwendet wird, um die Wahrscheinlichkeit der Anzahl von Ereignisen in einem bestimmten Zeitintervall zu modellieren, wenn diese Ereignisse unabhängig voneinander mit einer langfristig konstanten mittleren Rate auftreten. Die Zählraten eines radioaktiven Präparats sind ein typisches Beispiel für eine Poissonverteilung. An der Versuchsanordnung (z.B. Entfernung Strahler-Geigerzähler) darf natürlich nichts verändert werden.
Die mathematische Form lautet:
Mit EXCEL lassen sich unterschiedliche Verteilung sehr schön grafisch darstellen. Hier eine Auswahl von drei Poissonverteilungen für µ = 2, 8 und 16:
EXCEL-Programm: Poissonverteilung-Zählrate_EXCEL
Die Summe aller Wahrscheinlichkeiten (= Säulenhöhe) muss natürlich den Wert 1 ergeben. Für das Experiment lege ich einen radioaktiven Strahler neben den Geigerzähler und ermittle automatisch die absoluten Häufigkeiten der einzelnen Zählraten pro Minute. Dazu erhöhe ich immer den Wert des Felds/arrays an der Stelle der jeweiligen Zählrate pro Minute um 1. Beträgt die letzte Zählrate etwa 28 cpm, so lautet der Code: counts[28] = counts[28] + 1. Nach einer ausreichend langen Zeit (z.B. 2 Stunden) schreibe ich dann die Werte des arrays (Häufigkeiten der Zählraten) per Knopfdruck auf eine Speicherkarte.
Der Arduino-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
#include <LiquidCrystal_I2C.h> #include <Wire.h> #include <SPI.h> #include <SD.h> LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display. ACHTUNG: Adresse kann auch 0x3F sein !!! // Anschlüsse: // GND - GND // VCC - 5V // SDA - ANALOG Pin 4 // SCL - ANALOG pin 5 const int buttonPin = 8; int buttonState = 0; const byte interruptPin = 2; int pulse = 0; long time_alt; int seconds; int i; int counts[200]; const int chipSelect = 10; // used for Arduino // =========================== // ======= SETUP ========= // =========================== void setup() { Serial.begin(9600); pinMode(interruptPin, INPUT); attachInterrupt(digitalPinToInterrupt(interruptPin), Puls, RISING); pinMode(buttonPin, INPUT); while (!Serial) { } Serial.print("Initializing SD card..."); // make sure that the default chip select pin is set to // output, even if you don't use it: if (!SD.begin(chipSelect)) { Serial.println("Initialization failed!"); while (1); } Serial.println("card initialized."); lcd.begin(); // initialize the lcd lcd.backlight(); lcd.setCursor(0,0); lcd.print("Geigerzaehler"); lcd.setCursor(0,1); lcd.print("Poisson"); delay(3000); lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); for(i = 0; i < 1000; i++) { counts[i] == 0; } time_alt = millis(); } // =========================== // ======= LOOP ========= // =========================== void loop() { while(millis() < time_alt + 60000) { // waiting for another minute seconds = (millis() - time_alt) / 1000; lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,0); lcd.print(seconds); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd.print(pulse); lcd.print(" "); delay(200); } counts[pulse] = counts[pulse] + 1; buttonState = digitalRead(buttonPin); if(buttonState == LOW) // counts-data sent to the SD-Card { for(i = 0; i < 200; i++) { String dataString = ""; dataString += String(i); dataString += " "; dataString += String(counts[i]); File dataFile = SD.open("datalog.txt", FILE_WRITE); if (dataFile) { dataFile.println(dataString); dataFile.close(); Serial.println(dataString); } else { Serial.println("error opening datalog.txt"); } } } pulse = 0; time_alt = time_alt + 60000; } // ============================== // ======= INTERRUPT ========= // ============================== void Puls() { pulse = pulse + 1; } |
Hat man keinen radioaktiven Strahler, so kann man schnell einen einfachen Geigerzähler-Generator programmieren. Dieser gibt zufällig nach 0 – 1000 ms einen einzelnen Puls aus. Im Mittel beträgt also die Zeitspanne zwischen zwei Pulsen 500 ms. Der Erwartungswert für die minütliche Zählrate liegt daher bei 120 cpm. Die Ausgabe für die künstlich erzeugten Pulse erfolgt an Pin-2. Ground der beiden Arduino-Schaltungen muss natürlich miteinander verbunden sein!
Hier der Arduino-Code für den Generator:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <LiquidCrystal_I2C.h> #include <Wire.h> #include <SPI.h> int outputPin = 2; LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display. ACHTUNG: Adresse kann auch 0x3F sein !!! // Anschlüsse: // GND - GND // VCC - 5V // SDA - ANALOG Pin 4 // SCL - ANALOG pin 5 // =========================== // ======= SETUP ========= // =========================== void setup() { Serial.begin(9600); lcd.begin(); // initialize the lcd lcd.backlight(); lcd.setCursor(0,0); lcd.print("Geigerzaehler"); lcd.setCursor(0,1); lcd.print("Generator"); pinMode(outputPin, OUTPUT); digitalWrite(outputPin, 0); } // =========================== // ======= LOOP ========= // =========================== void loop() { delay(random(1001)); digitalWrite(outputPin, 1); delay(1); digitalWrite(outputPin, 0); } |
Nach 78 Minuten Messdauer (= 78 minütliche Zählraten) erhalte ich folgende Verteilung mit dem Generator:
Wenn es Neuigkeiten gibt, geht es hier weiter…