Working Principle
A Geiger-Müller tube (commonly SBM-20 or J305) is a gas-filled radiation detector. The cylindrical tube contains a low-pressure noble gas (neon, argon, or helium with a halogen quench gas) and a central wire anode held at a high voltage (typically 400–500 V DC). When ionising radiation (alpha, beta, or gamma) enters the tube, it ionises gas molecules, creating an electron avalanche that produces a brief current pulse. Each pulse represents one detected radiation event (a “count”).
The count rate (CPM: counts per minute) is proportional to the radiation intensity and can be converted to dose rate (µSv/h) using a tube-specific conversion factor.
Electrical Characteristics
| Parameter | SBM-20 | J305 |
|---|---|---|
| Operating Voltage | 400 V DC | 350–475 V DC |
| Plateau Range | 350–475 V | 360–440 V |
| Dead Time | 190 µs | ~90 µs |
| Background CPM | ~25 CPM (sea level) | ~20 CPM |
| Detects | Beta + Gamma | Beta + Gamma |
| Tube Length | 108 mm | ~90 mm |
| Conversion Factor | ~0.0057 µSv/h per CPM | ~0.0082 µSv/h per CPM |
| Lifetime | ~1010 counts | ~109 counts |
Interfacing with an MCU
Use a Geiger counter driver board (e.g., RadiationD, GGreg20, or DIY HV supply) that generates the 400 V supply and converts each tube pulse into a 3.3/5 V logic pulse for an MCU interrupt pin. Never connect the tube directly to an MCU.
Calibration
- Background rate: Count for 10+ minutes with no source nearby; divide by minutes for background CPM
- Dose conversion: µSv/h = CPM × tube conversion factor (e.g., 0.0057 for SBM-20)
- Dead time correction: At high count rates: true_CPM = measured_CPM / (1 − measured_CPM × dead_time)
- Radioactive check source: Use a licensed check source (e.g., Cs-137 disc) to verify sensitivity
Code Example
/*
* Geiger Counter (SBM-20 + driver board) — Arduino
* Wiring: Driver pulse output → Pin 2 (interrupt capable)
* Driver VCC → 5V, GND → GND
*/
#define GM_PIN 2
#define CONVERSION 0.0057 /* SBM-20: µSv/h per CPM */
volatile unsigned long counts = 0;
void gmPulse() {
counts++;
}
void setup() {
Serial.begin(9600);
pinMode(GM_PIN, INPUT);
attachInterrupt(digitalPinToInterrupt(GM_PIN),
gmPulse, FALLING);
Serial.println("Geiger Counter Ready");
}
void loop() {
/* Count for 10 seconds, scale to CPM */
counts = 0;
delay(10000);
noInterrupts();
unsigned long c = counts;
interrupts();
float cpm = c * 6.0; /* 10 sec → CPM */
float usvh = cpm * CONVERSION;
Serial.print("CPM: ");
Serial.print(cpm, 0);
Serial.print(" Dose: ");
Serial.print(usvh, 3);
Serial.println(" µSv/h");
}
Real-World Applications
Radiation Monitoring, Nuclear Safety & Citizen Science
Geiger counters are used for personal radiation dosimetry, nuclear power plant safety monitoring, HazMat first-response detection, uranium prospecting, medical radiation safety (X-ray room surveys), food contamination screening (post-Fukushima monitoring), and citizen science radiation mapping networks (Safecast, uRADMonitor). DIY Geiger counters with ESP32 upload real-time data to cloud dashboards.
Limitations
- No energy discrimination: Cannot identify the type of radioactive isotope or distinguish energy levels.
- Dead time: At high radiation levels, counts are lost during the dead time; requires mathematical correction.
- HV supply: Requires a specialised high-voltage DC-DC converter; cannot be powered by MCU alone.
- Alpha detection: Most tubes (SBM-20, J305) cannot detect alpha particles through the metal tube wall; requires a mica-window tube.
- Statistical noise: Radioactive decay is random; short measurement windows have high statistical uncertainty.