How to build a Geiger-Mueller counter (dosimeter/intensimeter)
Radioactivity was one of the phenomenons of physics which
fascinated me already in my childhood, when I was reading
popular books about its discovery and the pioneers like Marie Curie etc.
Recently I revisited the idea of building a Geiger-Mueller counter,
when I saw on the news the poor guy Litvinenko, who has been served a polonium-enriched tea by KGB.
I am definitely not paranoid enough to check my food or drinks, nor
did I build it because of being afraid of the safety of nuclear power plants in our country (we are hundreds of kilometers far from sea, so no tsunami worries), just for a mere curiosity and fun.
Actually I would also be quite curious to measure the intensity and dosis of X-rays used in the security scanners at airports
as well as the increased background in high altitudes. But I admit that cowardly I did not dare to
take the device with me on an flight, being afraid that in todays paranoid times an unfamiliar, strange looking device
might attract an unpleasant attention of the TSA or board personnel.
On the internet some simple constructions can be found, but typically
they do not employ particularly well stabilized power supply and the pulses are just made
audible or counted by a counter without further processing.
For example look at the interesting pages of the high voltage guys
I have thus decided to add some bells and whistles to my homemade device - controlling the device
by an ATmega16 microcontroller, which allows to make stabilized high voltage
power supply for the tube with a software-controlled voltage
(possibility to make exchangeable probes with tubes of different parameters),
more sophisticated pulse detection (should help for pulse trains are higher counts),
and post-processing to correct for dead time and compute approximate
Recently I discovered that there exist some independent but closely related projects which also employ the Atmel AVR microcontrollers, like the
GM board for Arduino
or a commercial kit with ATmega128 and USB interface
The advantage of my construction is imho the software-adjustable high voltage power supply and more advanced
signal processing in analog circuitry as well as in digital (computing dead time correction).
A nice introduction to the topic of Geiger-Mueller tubes can be found
I have employed the ZP1320
GM tube, which is suitable
for low radiation levels and is sensitive to gamma and beta rays.
Notice that GM tubes are rather insensitive to soft X-rays, say below 30keV (except specifically designed tubes), so be careful of severe underestimation of the dosis
when detecting X-rays - the datasheet sensitivity holds strictly just for gamma rays of one particular energy.
Anyway you cannot take the microsievert reading too seriously, unless you have
a possibility to make a calibration.
I have built the device on a prototyping universal PCB and a posteriori
captured the schematics in eagle - hopefully not many errors inside.
The operation of the circuits should be quite obvious, just I note that I employed two pulse
detection methods: 1. comparison with the threshold voltage employing the
internal analog comparator of the ATmega;
2. taking analogue derivative of the signal (thresholded by some diodes to remove noise) using the second operational amplifier,
negating this signal by a transistor and using INT1 interrupt.
(You might need to check whether it works properly with another GM tube using oscilloscope.)
In my case I have made a bad decision in the mechanical layout of the device,
placing the GM tube too close to the HV power supply and some induced noise
makes the counts by method 1 about 10% higher than by method 2, so I preferred
in the software the values obtained by method 2.
Here you can download the
published under the GPLv3 license.
In the source code, connections of ATmega pins to the control and power parts are listed, for more details see the above schematics.
Depending on the version of avr-gcc and headers you might need the header backward.h
If you just want to build it without cross-compiling the source, here is the hex file for ATMega16 MCU
External crystal 14.7456MHz is assumed, so do not forget also to program the fuse bits appropriately (I used fuse_l=0x2f and fuse_h=0xf9).
The left button selects the display mode - short and long time average rate, cumulative rate/dosis, raw count number etc. Right button toggles display light.
Left+right button reset the counter.
There is also a connector for firmware upload and TTL-level serial line,
which implements several commands (see the source code for details), allowing
a remote-controlled operation suitable for example for experiments with
X-ray tubes controlled remotely from a behind a shield.
Top view of the device.
Here we have a weakly radioactive sample.
Inside it is a bit ugly...
Back to my electronics page
Back to my hobby page
My main page with e-mail contact