Close

Geiger Counter Online

A project log for ATLAS

Built the tricorder I actually wanted in the field: one that warns, not just measures.

apollo-timbersApollo Timbers 06/12/2025 at 12:570 Comments

Had some older C++ code that I was able to get converted to CircuitPython. Ran into a few issues first it was not detecting pulses, then it dawned on me the reason back in the day I went with C++ is it had code interrupts, though CircuitPython does not. So I had to basically optimize the code to update the screen less, every 3 seconds and also read the +CO2 and VOX sensor. 

Current output

CO₂: 533 ppm | TVOC: 0 ppb | CPM: 5 | uSv/h: 0.0942827 | ✅ Excellent air quality. | ✅ Air is clean. | ✅ Background radiation—no risk.Pulse detected! Total: 2
CO₂: 535 ppm | TVOC: 0 ppb | CPM: 5 | uSv/h: 0.0942827 | ✅ Excellent air quality. | ✅ Air is clean. | ✅ Background radiation—no risk.Pulse detected! Total: 3
CO₂: 551 ppm | TVOC: 0 ppb | CPM: 5 | uSv/h: 0.0942827 | ✅ Excellent air quality. | ✅ Air is clean. | ✅ Background radiation—no risk..

As I have built a few Geiger's in the past I ended up getting a calibrated Cesium-137 check disk. I use this to do a calibration of the sensor. (when I get this fully built I should rent a real Geiger Counter and compare the too) This Geiger is a solid state version on a tube and will detect pulsus right at first power on however it really is only good for gamma rays and it was mentioned it was best to sample over a 2 minute time before displaying results. You can still hold it up to a source/sample and if i add the piezo you should hear detections. It the sample is very high detections I would leave it alone/walk away, if it is a mild detection there is likely no harm to stay for the full two minute cycle to get a more scientific/actuate reading

The counter is also calculated to give you a proper "uSv/h" (microsieverts per hour). Prob will need to redo the alpha calibration as it seems my last version was missing detections. However this code runs the radiation sensor at realtime. 

alpha = 53.032  # uSv to CPM conversion factor
cpm = pulse_count
uSv_h = cpm / alph 

GitHub link with the newest code - https://github.com/thedocdoc/AI-Field-Analyzer/tree/main   I also added a helpful little program that scan the I2C Bus

I let it collect data for a bit then graphed out the data to get this: Based on the graph it might be good to do a bit of averaging on the TVOC and CO2 values, just not enough to skew the results. I.E take 3 readings in rapid / 3 = Result to print to OLED

Discussions