- Measures radioactive gamma and beta radiation with quite good resolution at the typical low levels of the natural radiation (due to the big STS-6 tube)
- Displays the current counts per minute (CPM), estimated dose equivalent rate in micro-Sievert per hour (µS/h) and 10 minutes history with 5 second resolution as bargraph
- Low-power mode for use with batteries, OLED display and click sounds on, WiFi off
- WiFi mode for thingspeak data upload every minute, see https://thingspeak.com/channels/758223
Feel free to use this project as a base for your own projects AT YOUR OWN RISK!
- Russian Geiger counter tube STS-6 (CTC-6) at 400 V with ~5 MΩ series resistor
- High voltage circuit from ArnoR at mikrocontroller.net https://www.mikrocontroller.net/topic/380666, schematic https://www.mikrocontroller.net/attachment/273334/HystereseStepUpTLC555-2.png. Keep the high-voltage capacitor small to avoid dangerous charges! For safety avoid any contact with the high voltage parts!
- ~400 µs pulse generation using Geiger tube series resistors as voltage divider, high impedance input to darlington transistor and TLC 555 timer for rectangle pulse generation (schematic and pulses see below)
- ESP32 board Wemos Lolin32
- OLED 128x64 with controller SH1106 at I2C
- Voltage supply from either USB or power supply or 3x 1.5V AAA batteries, circuit works stable from 3.0 V up to 5.0 V
- Pulse input is expected at GPIO 18 (high pulses with at least about 250 µs length)
- Switch for WiFi mode is expected at GPIO 4 (low=WiFi mode, high=low-power mode)
- OLED I2C bus is expected at GPIO 22 (SCK) and 21 (SDA)
- PlatformIO VSCode project using Arduino library, Espressif ESP-IDF for sleep functions and U8g2 for display output
- Low-power mode uses light sleep, a wake-up for each signal pulse change and a wake-up every 1000 ms to update pulse statistics and OLED. This results in about 90% sleep. Could be improved using deep sleep and ULP. However, light sleep is already quite good and much easier.
- WiFi mode uses no sleep and simple interrupts for pulse counting. Pulse statistics and OLED are updated every 1000 ms, data is sent to thingspeak every 60 s.
- Credentials (WiFi SSID, password, thingspeak channel key) are declared in
credentials.h
and defined with dummy values incredentials.cpp
. Define them in a sibling file namedsecret_credentials
(which is never committed) and uncomment its include incredentials.cpp
The 5.6 MΩ series resistor is split up to reduce the voltage on each of them. The diode partially removes the noise spikes from the high voltage circuit.
This is the raw pulse at point A, about 2 V for 100 µs, then falling back to 0 V in the next several 100 µs. Remainings of the little noise spikes are still visible:
Here you can see the formed pulsed at point B, nearly 5 V for 200 µs:
It is then feed into a 555 timer to further extend its duration for the ESP32 wake-up from low-power mode.