element14 Presents: Project Pripyat – DIY Geiger Counter

This is my solo debut as part of the element14 Presents team, and I’m extremely excited to be on this journey.

Matt Eargle is a cold war nut who loves historical technologies. He just happens to have some old Soviet surplus Geiger tube sitting around. He’ll use it to build his own take on a Geiger counter. It will be something like an updated CDV 700 series. The original CDV-700 Series models were in production from 1954 until 1974. Later XXX series models were produced well into the 1980s. In order to build a homebrew version of a Geiger counter, he’ll need a couple of components in addition to his Geiger tube. A Geiger tube has a sealed vial inside a sealed glass tube containing an inert gas. You take that and apply a really high potential, the one he’s using is about 400 volts. When your particle comes in and strikes the nucleus of the gas inside, it temporarily ionizes that gas, just enough to allow some of that voltage through that it can be measured.

He’ll need a high voltage source to feed his tube. The cathode of the tube will run into an Arduino. Running the high voltage source through batteries will require a transformer. The transformer will require an AC current. The easiest way to create an AC current would be to create a little oscillator with 555 timers and run that into an inductor. The 555 timer will set up in astable mode to produce an alternating signal at 60 Hz that will get amplified by a MOSFET before running into the transformer. The current from the transformer will go into a diode laddering system which will drive the GM tube. The signal from the Geiger tube will run into an NPN transistor. The output pulse of the tube is around 200V, so it needs to have some level of conditioning before it can be counted by the Arduino. Once the output is run into ground they’ll have a digital signal that they can feed back into the Arduino.

He tests the circuit in a breadboard to make sure it works. The output of the Geiger tube is hooked into an oscilloscope. Matt uses an old aircraft instrument, an ADF with a glow in-the-dark radium dial to test to ensure that a signal is outputted to the scope. Now that we know the signal is working, we can condition that signal to create a digital pulse that we can measure and count with the Arduino. The tube output runs through a voltage divider so that it doesn’t fry the transistor. All that’s left is to 3D print some parts and do some coding using the Arduino IDE.

How Does A Geiger Counter Work?

US Army Checmical Corps technician surveys radioactive contamination with CDV-700 series Geiger counterIf there is one piece of technology that is uniquely associated with the Cold War aesthetic (apart from the atomic bomb itself), it is the handheld radiation survey meter depicted in civil defense and popular fiction of the era. The survey meter–typically a U.S.-made CDV-700 or one of its variations–is probably the first image one conjures when they think of a “Geiger counter”, and is often considered a highly technical piece of equipment (they were usually handled by specialized government officials, at least in contemporary depictions). The reality, though, is that the Geiger counter (or, more accurately, a Geiger-Müller counter) is an extremely simple device based on a circuit that’s no more complicated than a toggle switch!

CDV-700 Survey Meter
Bullet308, CC BY-SA 3.0, via Wikimedia Commons

The Geiger-Müller Tube

The technology at the heart of the Geiger counter is the specialized Geiger-Müller (GM) tube. The basic operating principle of the GM tube was developed by Hans Geiger in 1908. Geiger was developing a technique to detect alpha particles based on a principle developed by John Sealy Townsend some ten years earlier. This ionization mechanism, whereby particles are charged by their impact with another ionized particle, is known as the Townsend discharge or Townsend avalanche. In 1928, Geiger and his PhD student Walther Müller developed a sealed-tube version of Geiger’s alpha detector that could reliably detect beta and gamma particles in addition to alpha particles.

Visualization of Townsend avalanche
Dougsim, CC BY-SA 3.0, via Wikimedia Commons

How Does A Geiger Counter Work?

The Geiger-Müller tube itself is a variation on a vacuum tube that is filled with a noble gas (usually argon or xenon) at low pressure and acts as a relay switch. One of the tube’s electrodes has a high electrical potential applied to it, usually around 400 volts. Being a noble gas, it is normally resistant to the flow of electricity and does not allow current to pass through. When an ionizing (alpha, beta, or gamma) particle strikes an atom of the gas in the tube, the atom sheds an electron causing it to become electrically charged (ionized). The freed electrons collide with other atoms and ionize them, and the process is accelerated by the high voltage applied to the anode (the Townsend avalanche) until the resistance of the gas in the tube drops enough to allow the voltage through to the cathode. Once the tube discharges, the gas reverts to its original inert, highly resistive state and the process begins again when another particle enters the tube.

Cutaway illustration of typical Geiger tube and counter
Svjo-2, CC BY-SA 3.0, via Wikimedia Commons

The characteristic clicking sound of the Geiger counter is made by directing the pulsed voltage from the tube’s cathode into a speaker while an analog meter measures the frequency of the pulses, converting it into microSieverts (or röntgens, in the case of older Cold War-era units made before the adoption of the SI standard). It should be noted that the Geiger counter cannot measure the type of ionizing particle detected, only that one was detected. GM tubes are often designed with certain encasing materials to “filter out” lower energy particles such as alpha or beta, but a tube designed to detect alpha radiation cannot distinguish the different types of particles because the materials will not block higher energy particles. Dosage is inferred by knowing the source material being measured, but the energy of the particles themselves cannot be measured with the device.


A Homebrew Geiger Counter Circuit

As discussed previously, a Geiger counter is a fairly simple circuit that takes a high voltage and runs it through the switch-like Geiger-Müller tube and into the meter mechanism. To build a Geiger counter, we need to look at three basic parts: a high voltage source, the GM tube itself, and the counting mechanism.

3 Parts of a Gegier Counter
3 Main Parts of a Geiger Counter

DIY Geiger Counter Circuit

After a bit of research, I decided to base my own circuit on this design by markusb on RobotShop.com. In this circuit, built around a Röhre ZP-1320 GM tube, the high voltage source is provided by a 40:1 transformer and charge pump that supplies the requisite 500V. Of course, a transformer requires an AC input, so a 555 timer in astable mode feeds an alternating 5V to the transformer. The metering side of the circuit uses a 555 timer to generate an electrical pulse that can be fed into a microcontroller or analog counter.

555-based Geiger counter by markusb (RobotShop.com)
555-based Geiger counter by markusb (RobotShop.com)
SBM-20 Geiger-Müller Tube

For Project Pripyat, I’m using a Soviet-era SBM-20 (СБМ-20) GM tube that we had lying around the shop, and I’ll need to adjust the circuit somewhat to power it. I like the oscillator-transformer concept, and I’ll keep that in tact, but I think I can simplify the charge pump somewhat and still provide a reliable 400V to power my tube.

I also want to run my Geiger counter off a rechargeable LiPo battery, so I’ll add a 3.7V pack and an Adafruit Powerboost 500 module to provide a stable 5V (and handle battery charging). On the counter end, I’d like to be able to have extended functionality such as data logging or triggering various outputs, so I’m going to send the GM tube pulse to an Arduino Nano (after passing through a voltage divider, of course).

After quite a bit of trial and error, I’ve come up with this:

Project Pripyat Breadboard LayoutProject Pripyat Schematic

As you can see from the schematic, I’m using a different transformer and a simpler rectifier circuit than the model’s diode ladder. I also tweaked the oscillator slightly, using only an N-channel MOSFET instead of the NPN-MOSFET combination in the original design. The NPN transistor, though, serves a new purpose as the pulse generator that drives the digital input for the Arduino. From this configuration, I can add a piezo buzzer, LED, analog meter, or any other output as well as save data to memory or pipe it to a computer via serial connection.

There are a couple of important things to note with this circuit: First, I have to reiterate that it is a high voltage circuit and you will likely get popped pretty hard if you’re not paying attention. I accidentally touched one of the capacitor terminals on the charge pump during testing and received quite an unpleasant surprise! It’s unlikely that you will suffer any lasting damage, though, but caution is the order of the day whenever high potentials are involved. Second, if you choose to use a different GM tube for this circuit, you will need to adjust the resistor and capacitor values in the charge pump. The film capacitors that I used are rated for up to 700V and the first version I assembled (using 5 capacitors) built a potential in excess of 600V (and literally screamed at me). Third, and it should go without saying, this is a device used to measure ionizing radiation and ionizing radiation is a hazardous phenomenon. Please take all precautions to limit your exposure to beta and gamma particles by using alpha sources for testing and storing your radioactive samples in appropriately shielded containers.

Using An Arduino To Drive A Geiger Counter

It's a moving coil-style analog meter
Moving coil-style analog meter from a CDV-700 (jonshobbies.com)

Traditionally, a Geiger counter like the CDV-700 series is a completely analog device–the device output is driven entirely by the analog electronics. Electrical pulses passing through the Geiger-Müller tube during ionizing events are run through a speaker cone, generating the characteristic clicks of a Geiger counter. That voltage is also directed into an electromechanical meter that displays the average clicks over a given amount of time. For Project Pripyat, I wanted to have the option to drive several different kinds of output with minimal rewiring and I want to be able to save data gathered and send it to a computer. The easiest way to accomplish all of these objectives was to pipe the GM tube output into an Arduino, and I just so happened to have a bunch of Nanos in my parts bin!

Arduino code for a Geiger counter

The Nano has a pretty low tolerance for excessive voltage on its digital pins, so I had to incorporate a pretty hefty voltage divider into my circuit design (from 400V down to <5V) to prevent frying the thing. The code itself was a work of trial and error, mostly playing around with various ways to drive the analog meter. Since the Arduino does not have true analog output (only pulse-width modulation), I decided to let digital pulses “kick” the needle into the appropriate position on the meter. The more frequent the pulses, the more the needle will be displaced. It’s basically PWM, but there’s no averaging being done in software. The v1.0 code, therefore, is rock-basic simple. It is almost entirely pin definitions, based on the “Blink” example sketch, but it’s snappy and serves its purpose as a “minimum viable” solution.

const byte interruptPin = 2;
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, LOW);

In the sketch, we define several pins on the Arduino and how they’ll be used. Pin 2 is going to serve as an interrupt and is attached to the pulse generator in the circuit. In my Geiger counter circuit, the pulse generator is actually reverse-biased to become an interrupt generator. Every ionizing event detected by the GM tube causes the 2N2222 transistor to ground the signal line connected to the Arduino which will be picked up as the interrupt signal. Upon detecting the interrupt, the Arduino will jump to the blink interrupt service routine which changes quickly changes pin states for the LED, meter, and piezo buzzer. The counter sketch has a resolution of about 3 milliseconds which is significantly lower than the theoretical dead time on the SBM-20 tube, but this project is more of a concept demonstration and exploratory toy than anything else, so I’m not worried about it.

One other item to note: When simply given a high/low signal on one pin, the piezo buzzer’s clicks are extremely soft. Connecting the ground terminal of the buzzer to another digital pin held low and swapping the high/low pins during the ISR effectively doubles the deflection of the buzzer and results in a much more satisfying click!

/* Project Pripyat v1.0
 *  by Matthew Eargle https://airbornesurfer.com
 *  for element14 Presents
 *  CC-BY-SA 2018 AirborneSurfer
const byte ledPin = 13;
const byte interruptPin = 2;
const byte speakerPin = 5;
volatile byte state = LOW;
volatile byte speaker = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(speakerPin, OUTPUT);
  pinMode(interruptPin, INPUT);
  pinMode(6, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(9, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, LOW);

void loop() {
  digitalWrite(ledPin, LOW);
  digitalWrite(speakerPin, LOW);
  digitalWrite(6, HIGH);
  digitalWrite(12, LOW);

void blink() {
  digitalWrite(ledPin, HIGH);
  digitalWrite(speakerPin, HIGH);
  digitalWrite(6, LOW);
  digitalWrite(12, HIGH);

Project Pripyat: Redux

When I started Project Pripyat, I was still very out of practice when it came to designing and assembling electronics beyond the breadboard, I was using TinkerCAD exclusively for 3D design, and Arduino was still a new platform for me. I was also in a helluva rush to produce a cache of content in anticipation of the launch of element14 Presents (as well as Clem, James, Andy, and Karen who rounded out the original cast after The Ben Heck Show ended). As such, I was never really happy about the form factor that the Geiger counter ended with–I was just happy to have it working! Over three years (and a global pandemic) later, I finally decided to slow down my production and really concentrate on putting the effort and attention into my projects that–either through neglect or ineptitude–I had not been able to before.

The carcass of a once proud projectProject Pripyat was the first proper element14 Presents project that I completed, but it was also the first one that I cannibalized for parts. Project Xybernaut demanded more power while I was running up against a deadline, so I broke open the hot glue seal on the 3D printed enclosure and reallocated the PowerBoost board and LiPo battery. The carcass of my once-proud project has been languishing on a shelf ever since.

Armed with a little more savvy and a bit of pluck, I decided to finally pick up the pieces and rebuild my homebrew Geiger counter while renewing my efforts to more robustly document my projects. The first objective, of course, was to write my “backlogged” documentation–details of how I built the device in the first place including the circuitry and Arduino code. Since then, I’ve come up with a new case design and started to gather the necessary parts to rebuild.Project Pripyat 2.0 Concept

Pictured: A hot messMy old board layout is a hot mess: huge blobs of solder holding together bundles of wires that are supposed to be power and ground buses, hot glue everywhere, uninsulated solder joints and little-to-no separation between high and low voltage sections. I’m thinking of either soldering a new circuit on protoboard or going ahead and designing a custom PCB for the project. I had actually given thought to producing a PCB as part of a kit that I could sell on Tindie, but I really haven’t gotten that far. I think that, in reality, I’ll likely solder a new protoboard version for this iteration and leave the custom PCB to v3.0.

Finally, I’d like to redesign the probe wand that I used originally. As much as I really like the aesthetic of the Shure 55SH-inspired design I originally came up with, I’m arguing with myself whether or not I want to build something more “hardened” using metal conduit or similar materials. The redesign would likely be more “accurate” (as an original design can be, I suppose) and feel more like something that could have existed. The two problems I foresee are having a window to expose the GM tube and the fact that the proposed materials are conductive so I would have to take extra care to design something that had little risk of shorting the tube and delivering a nasty surprise to anyone holding the probe!

Meanwhile, though, I will start ordering case parts and getting them prepared.