Close
0%
0%

Nuclear radiation sensor with photodiode detector

Measuring radioactivity without need of Geiger tube.

Public Chat
Similar projects worth following
There are many ways to measure radioactivity levels. Semiconductor detectors sense interactions between ionizing radiation and a p-n junction. Since most hobbyists use Geiger-Muller-based detectors (which are lamp-based devices, not semiconductors), I think it's a cool idea to explore this semiconductor-based approach.

System architecture

It's better to describe things with diagrams, so take a look below! :)

The higher the radioactivity, the more pulses the device produces on the output, so it works somewhat like a GM counter. One key difference, however, is that this sensor doesn't use the avalanche effect, so the amplitude (at least in theory, I haven’t tested it yet) should be proportional to the energy of the particle.

The sensor is made from three photodiodes connected in parallel. They are polarized using four 12V batteries. The current drawn from the batteries is extremely low, so they should last a long time.

First stage of amplification consist of transimpedance amplifier, due to the very low signal from the photodiodes, the feedback resistor of this amplifier has a value of 1GOhm. The next stage is an inverting amplifier.

The device has two outputs: an analog output, where an oscilloscope can be connected, and a digital output with a logic level of 12V. The digital output (high state when a pulse occurs, low state otherwise) can then be collected and analyzed.

To store data, I used a NUCLEO-F091RC with a small breadboard attached. This sub-project allowed me to view the results in real time using a small LCD, and also to send the data for further analysis. I am currently reworking this sub-project and have moved it to a separate Git repository. Progress can be followed here: Hardware Data Logger

Hardware

Hardware was done using Kicad.

Software

I created a simple script in R in order to plot the results. Below you can see a sample of results.

In the future, I plan to visualize measurements using Grafana.

Mechanic

It's important to note that the device won't function properly without adequate shielding from EMI and light. The chassis must be made of metal and properly grounded.

I drilled a small hole where the photodiodes are located and covered it with tin foil to allow easier penetration of radioactivity. Otherwise, the thick metal chassis would block it.

Circuit.pdf

Adobe Portable Document Format - 67.41 kB - 08/01/2021 at 16:12

Preview

  • Combine KiCad PCB Designs with 3D-Printed Parts in Blender

    Robert Gawron10/05/2025 at 13:08 0 comments

    I tried to add a secondary PCB with a power supply and logic level converter into the device, but it is hard because there is not a lot of space inside, and I don't want to disassemble the device to drill any holes. My plan was to design a 3D-printed holder (yellow on the right on the image) for this new PCB, but how to make sure that everything will fit? I modeled all the components in Blender, and this post is about how I did it.

    The tools I used are all open source:

    • KiCad (for PCB design) + the pcb2blender extension
    • OpenSCAD (for modeling the 3D-printed holder) + FreeCAD (for adding fillets and for file format conversion)
    • Blender (to merge it all) + the pcb2blender extension

    All this could be done in FreeCAD directly and I tried this once for a different project in the past... never again: FreeCAD's user interface is just horrible. On the other hand, I'm quite pleased with how simple Blender is to use (at least for basic things). It looks like a pretty good software!

    But back to the topic: the first thing is how to export the PCB from KiCad to Blender. Fortunately, there is a KiCad/Blender extension called pcb2blender that needs to be installed in both tools. The exported file needs to have the .pcb3d extension; otherwise, Blender fails to import it and the error message says nothing useful.

    Now, for the 3D-printed part: I made it in OpenSCAD and then added fillets in FreeCAD. FreeCAD can export files to .STL, which Blender can then import. Although there is one caveat: scale. During the import in Blender, the scale of the .STL object needs to be set to 0.001. I don't know why.

    The model of the metal enclosure for the device I found on the producer’s site, although it was in .STEP format, which Blender doesn't recognize. Fortunately, FreeCAD can import .STEP files and then export them to .STL, which works for Blender.

    Now, when all the models are imported into Blender, it's time to arrange them in x, y, z and rotate them so they compose a real device. This could be done manually but would be very tedious; fortunately, Blender can be scripted in Python, and this way all objects can be correctly positioned. Just click the "Run" icon in Blender's scripting section, and it's all good. The script is in the project's repo too, it's just that it's not directly visible, but can be accessed via the "Scripting" tab in Blender once the Blender project is opened.

    I think this approach of trying to model everything together, while it can be seen as overkill, really helped me to design the holder and the new PCB.

    And that's it. Everything else was a repetitive cycle of checking clearances, adjusting the holder model, and trying different auxiliary PCB designs.

  • Auxiliary board for power supply and logic level conversion.

    Robert Gawron07/05/2025 at 16:18 0 comments

    Initially, the sensor was powered from a bulky and expensive power supply. However, now that the device is working, I was trying to move to using a cheap wall-mounted power adapter - smaller, cheaper, and easier to use. However, the sensor is sensitive to power supply noise, so I made an extra stabilizer and added plenty of LC filters.

    I didn’t put much effort into it, to be honest. It was just an additional PCB made quickly before placing a PCB order. I used components that I already had, so... the voltage stabilizer I used was... NCP1117. Not the best low-noise chip on the market.

    Surprisingly, the sensor was  working - it’s just that the signal was modulated. Instead of a nice sharp spike when a particle was detected, a series of spikes appeared. Good enough, I was thinking; temporarily, this could be filtered in software. These aren’t super fast signals anyway.

    Nevertheless, I tried to make it better, so I soldered more 10µF caps in parallel to those already on the PCB. Not better, not worse.

    Here I’ll note that different types of capacitors are better suited for filtering different frequencies. Electrolytic capacitors are good for the lowest frequencies. 100nF ceramics are the go-to choice for filtering power lines in digital circuits, and sometimes they are accompanied by 10nF ceramics to filter higher frequencies.

    So then I was thinking: maybe add one of them? The 100µF didn’t make a difference, but randomly adding a 470nF at the output solved the problem. Why? I don’t know.

    Now I think that I could have just used an oscilloscope, connected it in AC-coupling mode, and tried to see what was wrong — instead of randomly trying to fix things.

    In the next revision, instead of NCP1117, I will use TPS7A8701 (much better, superior RMS noise and PSRR characteristics).

    To summarize: the power supply part works, but it needs a rework and better chip selection.

    The second feature of this auxiliary PCB is a logic level shifter, which is just an open-collector, common-emitter transistor. This was also not the best design.

    Most dev boards or cheap logic analyzers require 3.3V as a high state. If they have a dedicated Vcc pin available — great, it will work. But I wanted to use it with cheap clones of logic analyzers (the kind popular on Aliexpress). They don’t have a Vcc pin exposed — just signal pins and GND — so it won’t work out of the box. A 3.3V voltage source is needed. I missed the opportunity to add some kind of cheap, adjustable power supply for this on the PCB.

    One more thing I usually hate — but would actually be useful here — is an LED to indicate that the device is on. It would have been really helpful during testing and assembly. In the next revision, I’ll add it, but I’ll also add a jumper in parallel so it can be disabled in production mode. I hate when LEDs stay on at night (even worse — when they blink like on a router! I always put black tape over those).

    So, to summarize: this is a weird project log — everything goes wrong, but it kind of works in the end.

View all 2 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates