-
Notifications
You must be signed in to change notification settings - Fork 636
Geiger Counter
Support and documentation by Sven (@Trickx). Thank you very much!
The wiring of this project is straight forward. I used a NodeMCU board to host ESPurna.
The Geiger counter itself is based on aa Arduino-ready Kit from RH Electronics.
The Geiger board is prepared for two variants of interrupt outputs. I soldered the C-Int type, consisting of 10nF capacitor in front of the output. The corresponding impulse looks like this.
Yes, I know the NodeMCU is a 3V3 powered device, while the Geiger board runs at 5V. Well, the interrupt impuls shows a peak of below 4V and it did not kill my NodeMCU, yet. Use this wiring at your own risk :-) However the impuls shows a width of 20ms, so I decided to go with a debounce time of 25ms, just to be sure. Debouncing does not seem to be required here, but I wanted to be on the safe side. I will test the system with different settings but for the moment rising edge detection is configured. The closest time between two impulses I could fetch while playing with the scope was about 50ms. This would result in a quiet high radiation level.
The Geiger counter board generates an interrupt per detection. One way to measure the local (Gamma) dose rate is therefore to count the impulses per minute [CPM]. CPMs depend on the used geiger tube. Im my case an russian SBM-20. In other words CPMs are not comparable with other geiger tubes.
The Sievert [Sv] is the unit of ionizing radiation dose in the International System of Units (SI). We need a dose rate (per time interval). The most common one is micro Sievert per hour [µSv/h].
But how to convert from CPM to µSv/h?
A web search will end up an large list of conversion factors. For example here or here. They are all wrong. Actually I gave up to calculate the conversion factor.
This is the way I derived my own version of a wrong conversion factor:
I'm located in Lehrte, Germany and see about 18 ticks in average with my SBM20 tube. The German "Bundesamt für Strahlenschutz" (Federal Office for Radiation Protection - BfS) operates some monitoring stations acros Germany. Luckily there is one located in Lehrte. The average of this station is around ~0,075 Sv/h.
This leads to a conversion factor of ~ 0,0041666 (inverse= 240), which is my default conversion factor for now for my instance of the SBM-20 tube.
I recommend to configure a read/counti interval of at least a minute to get stable results. Averaging does not makes sense for impulse counting, since the longer the count interval, the more stable are the results anyway.
I'm using an InfluxDB and Grafana stack to visualise my sensor data. The screenshot below illustrates a typical result from the sensor. On the left hand side the values are dispalyed in the unit "µSv/h", while on the right hand side "counts per minute" are given.
The last values are mentioned on the status page of the device's webpage.
If you're looking for support:
- Issues: this is the most dynamic channel at the moment, you might find an answer to your question by searching open or closed issues.
- Wiki pages: might not be as up-to-date as we all would like (hey, you can also contribute in the documentation!).
- Gitter channel: you have better chances to get fast answers from project contributors or other ESPurna users. (also available with any Matrix client!)
- Issue a question: as a last resort, you can open new question issue on GitHub. Just remember: the more info you provide the more chances you'll have to get an accurate answer.
- Backup the stock firmware
- Flash a pre-built binary image
- Flash a virgin Itead Sonoff device without opening
- Flash TUYA-based device without opening
- Flash Shelly device without opening
- Using PlatformIO
- from Visual Studio Code
- Using Arduino IDE
- Build the Web Interface
- Over-the-air updates
- Two-step updates
- ESPurna OTA Manager
- NoFUSS
- Troubleshooting
- MQTT
- REST API
- Domoticz
- Home Assistant
- InfluxDB
- Prometheus metrics
- Thingspeak
- Alexa
- Google Home
- Architecture
- 3rd Party Plugins
- Coding style
- Pull Requests