Code Monkey home page Code Monkey logo

open-gamma-detector's Introduction

Open Gamma Detector

Open hardware for a simple, yet powerful scintillation counter and multichannel analyzer (MCA) all-in-one device using a popular NaI(Tl) scintillation crystal. Suitable for (DIY) gamma spectroscopy while being significantly cheaper than any off-the-shelf platform.

Hardware design has been done with EasyEDA and all the needed files for you to import the project as well as the schematic can be found in the hardware folder. There is also a Gerber file available for you to go directly to the PCB manufacturing step.

The software aims to be as simple as possible to understand and maintain; to achieve this I decided to use an off-the-shelf microcontroller - the Raspberry Pi Pico. This board can be programmed with the Arduino IDE over micro-USB and is powerful (dual core, good ADC, plenty of memory, ...) enough for the purpose and also exceptionally cheap.

This project is also on Hackaday.io!

Working Principle

Working Principle Flow Chart

Key Features

Here are some of the most important key facts:

  • Compact design: Only 60 x 60 mm (not including scintillator).
  • All-in-one detector: No external sound card required.
  • Micro-USB serial connection and power.
  • Easily programmable using the Arduino IDE.
  • Low-voltage device: No HV needed for PMT.
  • Low power consumption: ~25 mA @ 5V.
  • Geiger Mode: Capable of up to 30,000 cps without energy measurement.
  • Default Mode: Capable of up to 10,000 cps while also measuring energy.
  • 4096 ADC channels for the energy range of about 30 keV to 1300 keV.

Hardware

This project utilizes a silicon photomultiplier (short SiPM) which is way smaller and more robust than a traditional photomultiplier tube and does not need a high-voltage supply. Here are some very helpful in-depth datasheets about this particular SiPM:

The hardware consists of the main detector (hardware folder) which includes amplification, pulse detection and energy measurement. If you already have a SiPM/crystal assembly you may use it with the detector board by leaving the pin header out and soldering wires directly to the pads. Otherwise, you can use my SiPM carrier board and plug it directly into the pin header.

The heart of the detector board is the Raspberry Pi Pico which uses its ADC to measure the pulse amplitude (i.e. the energy) immediately after an event occurs using an interrupt. I can really recommend you reading the datasheet or maybe also having a look at a deeper analysis of the Pico ADC:

Here are some renders of the detector PCB. Size is roughly 6 x 6 cm.

Front Side PCB Back Side PCB

Scintillator Assembly

The finished SiPM carrier board is there to allow for easier packaging with the scintillator as well as to be reusable for different detectors as that's by far the most expensive part and you'll want to use it as long as possible. You need to apply some optical coupling compound between the SiPM and the crystal window to reduce reflections as good as possible (this way the best photon detection efficiency is achieved). There are also special materials for this use case but you can use some standard silicone grease - works great for me. After you applied some, you press both parts together and wrap everything with light-tight tape, again, I'm just using some black electrical tape here. That's essentially it, now you plug the board in and you're ready to go.

I got all of my scintillators (used NaI(Tl), LYSO, ...) from eBay. Just search for some keywords or specific types, you'll definitely find something! Otherwise you can obviously also buy brand-new scintillators, however, these are very expensive (depends, but a factor of 10x is normal). Just be sure to look out for signs of wear and tear like scratches on the window or yellowing in NaI crystals as these can deteriorate performance significantly.

Software

Raspberry Pi Pico

Programming is done using the Arduino IDE. The so-called "sketch" can be found in /arduino.

To program the Pico you will need the following board configs:

The installation and additional documentation can also be found there. You will also need the following libraries. In addition, I wrote my own little library to calibrate the Pico's ADC using a simple linear calibration which is also used:

They can be installed by searching the name using the IDE's library manager.

Serial Interface

You can also control your spectrometer using the serial interface. The following commands are available, a trailing - indicating an additional parameter is needed for the call.

Commands:

  • read temp reads the µC temperature in °C.
  • read vsys reads the board's input voltage.
  • read usb true or false depending on a USB connection. Thus always true if you can read it.
  • read cal reads the calibration values from Arduino-Pico-Analog-Correction.
  • read spectrum reads the histogram data of all energy measurements since start-up.
  • set mode - use either geiger or energy mode to disable or enable energy measurements respectively. Geiger mode only measures counts per second, but has a 3x higher saturation limit.
  • cal calibrate - calibrates the ADC using Arduino-Pico-Analog-Correction. The parameter being the number of measurements used to average the reading, e.g. cal calibrate -5000.
  • ser int - Enable or disable the event serial output. Takes enable or disable as parameter, e.g. ser int -disable.
  • ogc info prints misc information about the firmware.

PC

To get the data from the detector the serial-over-USB port is used. You can of course use any serial monitor or dump the output to a file, etc.

I have also programmed a custom analyzer web-app called Gamma MCA where you can import these serial output files as well as connecting straight to the serial port and plot the data live. Please head to the repository to find more specific info about this project.

Example Spectra

Spectrum of a tiny (~5g) LYSO scintillator showing all three distinct gamma peaks (88.34, 201.83, 306.78 keV) with an additional ~55 keV X-ray peak:

Lu-176 spectrum

Spectrum of a standard household (ionization) smoke detector. Contains roughly 0.9 µC of Am-241. Gamma peaks at 26.34 and 59.54 keV:

Am-176 spectrum

Spectrum of a small tea cup with pure Uraninite (Pitchblende) glaze. You can see isotopes of the Uranium series and also a distinct U-235 plateau.

Uraninite Glaze

Known Issue

The Raspberry Pi Pico's ADC has some pretty severe DNL issues that result in four channels being much more sensitive (wider AC input range) than the rest. For now the simplest solution was to discard all four of them, by printing a 0 when any of them comes up in the measurement (to not affect the cps readings). This is by no means perfect and I hope this gets fixed in hardware soon.

Some Ideas

Cooling the SiPM

During operation all the electronics including the photomultiplier naturally slightly heat up. Due to the detector board being connected only by a single pin connector all of it's heat shouldn't affect the SiPM PCB much. Also due to the SiPM being connected to a rather big copper area of the PCB it's heat should not increase the temperature much over ambient (if at all that is). So air or water cooling alone won't improve performance significantly. However, you could cool the SiPM PCB with a peltier module to sub-ambient temperatures. According to the datasheet AND9770 (Figure 27) every 10°C reduction in temperature decreases the dark count rate by 50%! But be sure to correct the overvoltage in this case as it also changes with temperature.

Note that the required breakdown voltage of the SiPM increases linearly with 21.5 mV/°C, see the C-Series SiPM Sensors Datasheet. This means that you would also need to temperature correct the PSU voltage if you wanted to use it with considerably different temperatures.

Shielding Background Radiation

Shielding the ambient background can be done ideally using a wide enough layer of lead (bricks) all around the detector with a thin layer of lower-Z material on the inside (to avoid backscattering). The SiPM and the sample can then be put into the structure to get the best measurements possible (low background).

See Wikipedia: Lead Castle


Thanks for reading.

open-gamma-detector's People

Contributors

imgbotapp avatar nuclearphoenixx avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.