Hi there,
Need a self build geiger counter? Without complex circurit. Here it is :-)
Here my Arduino sketch:
#include "DogLcd.h" #include "Bounce2.h" #include "RunningAverage.h" #define calFactor 1.0/5.8 /* LCD SI pin to digital coupin 7 LCD CLK pin to digital pin 8 LCD RS pin to digital pin 5 LCD CSB pin to digital pin 6 LCD RESET pin is not used +5V LCD Backlight pin is not used */ DogLcd lcd(7, 8, 5, 6); const byte buttonPin = 3; const byte displedPin = 9; const byte buzzerPin = 10; byte buttonState = 0; byte lastButtonState = 0; byte buttonCount = 0; byte buzzerOff = 0; volatile unsigned int count = 0; byte runCount = 0; unsigned int countPerRun[30]; unsigned int countPerMinute = 0; unsigned int averageCountPerMinute = 0; float radiationValue = 0.0; unsigned long timePrevious = 0; RunningAverage RunningAverageCountPerMinute(10); Bounce debouncer = Bounce(); void setup() { Serial.begin(9600); Serial.println("CPM;AV;uSv/h"); pinMode(buttonPin, INPUT_PULLUP); pinMode(displedPin, OUTPUT); pinMode(buzzerPin, OUTPUT); debouncer.attach(buttonPin); debouncer.interval(5); lcd.begin(DOG_LCD_M162); attachInterrupt(0, countPulse, RISING); } void loop() { debouncer.update(); buttonState = debouncer.read(); if (buttonState != lastButtonState) { if (buttonState == LOW) { if(buttonCount < 4) { buttonCount++; } else { buttonCount = 1; } } } lastButtonState = buttonState; switch (buttonCount) { case 4: buzzerOff = 0; break; case 3: buzzerOff = 1; break; case 2: digitalWrite(displedPin, LOW); break; case 1: digitalWrite(displedPin, HIGH); break; } if (millis()-timePrevious > 2000){ timePrevious = millis(); byte i; for (i=0; i<30; i++) { if (i == runCount) { countPerRun[i] = count; } countPerMinute+=countPerRun[i]; } RunningAverageCountPerMinute.addValue(count); averageCountPerMinute = RunningAverageCountPerMinute.getFastAverage(); radiationValue = (float)countPerMinute * (float)calFactor; lcd.clear(); lcd.setCursor(0, 0); lcd.print("CPM="); lcd.print(countPerMinute); lcd.setCursor(9,0); lcd.print("AV="); lcd.print(averageCountPerMinute); lcd.setCursor(0, 1); lcd.print("uSv/h="); lcd.print(radiationValue); Serial.print(countPerMinute); Serial.print(";"); Serial.print(averageCountPerMinute); Serial.print(";"); Serial.println(radiationValue); runCount++; if(runCount > 29) { runCount = 0; } count = 0; countPerMinute = 0; } } void countPulse(){ detachInterrupt(0); count++; if (buzzerOff == 0) { tone(buzzerPin, 2000, 15); } while(digitalRead(2)==1){ } attachInterrupt(0,countPulse,RISING); }
The diode I’m using as beta, gamma and x-ray sensor is Teviso RD2014. It is also sensitive to GSM radiation. Nice to find bugging devices. :-)
Here are some good links I worked with:
http://www.opengeiger.de/index_en.html
http://www.teviso.com/en/products/radiation-sensor-rd2014.htm
Have fun!