Cosmic Ray Detector
Geiger-Mueller tubes are the heart of “Geiger counters” which you’ve probably seen in movies or on TV- a character points a small device at a radioactive source, and it emits a static-like crackling sound, with more clicks indicating larger amounts of radiation. They work by having a pin inside of a metal tube, with the pin being at a high voltage (in this case 400V) and the outside of the tube grounded to 0V. A spark really, really wants to jump from the pin to the casing, but it can’t because there is a gas in between. However when a radioactive particle of some nature (depending on the gas) passes into the tube and collides with a gas molecule, it releases a cascade of charge carriers which cause a breakdown in the dielectric, allowing a spark to jump.
This event can be seen on the outside of the tube as a sudden spike in voltage, and it’s through this mechanism that we can detect radioactive particles. By taking several of these tubes it is possible to tell which direction a particle has come from since it will pass through several tubes (or rather the cascade of junk, called muons, that explodes out from the initial collision will hit the subsequent tubes…to use the technical terms.).
I built a two-tube Geiger counter to detect high energy cosmic rays coming from the zenith angle (zenith means straight up. The “nadir angle” would mean straight down). I put together my schematic and my system from several sources- first, the Mighty Ohm Geiger Counter whose open source schematics gave me the basic idea of using a 555-timer boost converter to power the Geiger Tubes, and which I modified to use two tubes. The idea to use multiple tubes came from reading this page and this article: 3d Inexpensive cosmic ray detector. The modified schematic to power two tubes is shown below:
I assembled the device on several breadboards, and then condensed it to one solderable perf-board and taped it inside a RadioShack enclosure– which didn’t even have one of the four screw holes on the lid drilled through! I had to drill it out myself!
I had to include a level shifting circuit because the main circuitry works at 5V (including the boost from 5V to 400V for the Geiger tubes), with 5V logic outputs, however the Beaglebone Black’s GPIOs can only handle 3.3V. I came up with a level shifting circuit using the 3.3V rail from the Beaglebone, shown below:
I used a PNP BJT because the signals are active-low, so when the “5V signal” in the diagram goes low, it turns on the transistor, which brings the “3.3V signal” low as well. That means the software running on the Beaglebone (using Adafruit’s great BBIO library) has interrupts looking for falling edges on the three outputs: tube 1, tube 2, and the NOR gate that both tubes go in to which indicates a coincident hit. One problem I ran in to with this level shifting circuit was that I initially chose a 10k current limiting resistor, but the signals weren’t being picked up by the Beaglebone. When I examined it with a multimeter I realized the logic level wasn’t moving very far and it was much lower than I expected when off. It should have been close to 3.3V when the transistor is off, but was only around 2V. It turns out there are pulldown resistors on the GPIO pins inside the Beaglebone which can’t currently be disabled, so I had to lower the resistor to a 1k and that solved the problem. Using only a 1k means that the voltage at the emitter of the transistor (the side with the arrow) goes up much closer to 3.3V when off and still goes pretty low when it’s on, as desired.
If you don’t know what a pulldown resistor is, imagine a resistor in parallel with the transistor in the above schematic between “3.3V signal” and ground. If you have some basic electrical engineering knowledge you can see that the resistor divider determines the “on” voltage at that node based on the values of R1 and R-pulldown.
After all that work, the python script responsible for detecting hits writes the number of hits per hour to a text file, and that text file is converted in to a nice histogram with an octave script. The result for March 19, 2016 is shown below with bins of 1 hour: