Skip to content


Folders and files

Last commit message
Last commit date

Latest commit



68 Commits

Repository files navigation



Eikgeiger opensource project for detection of background radiation in Norway. It is developed in cooperation with Eik Ideverksted. Use the design for anything you like comercially and privately, but i would love if you fork it so i can see what it is used for.

First Batch

Thanks to PCBway for providing assembled prototype units for this project. Its awesome that you support the opensource community like this! If you want one for yourself, i've made a pcbway project which you can make an assembly order quite easily.



It uses anESP32-WROOM-32E wifi module both communication and MCU, and is mostly based on surface mount components.

Thanks to the DIYgeiger radmon project for inspiration DIYGeiger RADMON + kit.

If you want to handsolder this, i really recommend to check out the awesome IBOM assembly utility (use it with a desktop as it sucks on mobile) Assembly IBOM



Parameter Description
Input voltage Usb-C cable, Header 4-6v, Direct 3.3v
Current Wifi: 150-250mA, Radio Off: 44mA, Only HV psup 4mA, Deep sleep 70uA
Communication 2.4ghz WIFI, Uart TTL, Uart over USB
Baudrate 115200
PCB size 31x119mm
Case size 30x35x121mm
Series Resistor 4.51MOHM

Serial port controll comands

To reconfigure device settings you need to connect the eikgeiger to a computer with a serial terminal (I reccomend to just use the Arduino Program, but any serial terminal should work)

When you want to configure a value you use two characters plus a number. So to set the PWM frequency to 2000hz, you would write PF2000 in the terminal and send. Some commands need a specific number, eg to factory reset you must transmit FR9999. after you have verified that the configuraion works you use SA1 to save the config to the flash eeprom

Characters Unit Value Factory Value Description Example
VO VOLT (value/4096 %) 0-2000 350 Set pwm duty cycle, this is a value which controlls the duty cycle of HV power supply, it is a 12bit (4096) value, but you cant go over 50% or the coil field colapses. So keep it under 2046=50% duty cycle. (SBM-20 tubes like it best between 350-400) VO350
VF FREQUENCY (hz) 0-18000 1001 Set pwm frequency, from experimentation i have found ~1000hz to be most effective but it can make some coil whine, It is smart to not have this as a value divisible by log output, or it might generate some interferance with ADC readings VF1001
SA SAVE 1 - Saves parameters to eeprom SA1
RE RESTART 1 - Restarts device RE1
RF FACTORY RESET 9999/1111 - Resets all values to factory default and restarts device, 1111 will reset all settings except wifi and radmon credentials, 9999 resets everything RF9999
BE BEEPER (activation) 0/1 0 Activate beeper output 0=Off 1=On BE1
BD _BEEPER duty (val/255) _ 0-127 50 Beeper duty cycle, higher number is louder BD50
BF BEEPER FREQUENCY (hz) 10-40000 6000 Beeper frequency 6000hZ is a very nice and annoying frequency BF6000
LE LED (activation) 0/1 1 Activate LED output 0=Off 1=On LE1
LF FLASHTIME (mS) 1-500 10 How long the beeper beeps and led flashes in mS for every click. If value is higher than 60*1000/CPM, you will have counts without indication LF10
LO LOG OUTPUT 0/1 1 Outputs raw_volt:(Voltage ADC reading, arbtrary number not directly related to volt) set_volt:(Duty cycle value) cpmM:(Running average CPM for one minute) cpmH:(Running average CPM for one hour) cpm:(CPM value for last detection) LO1
LS LOG SPEED 0-10000 1000 Number of milliseconds for every log output over serial LS1000
EV EVENTS (number) 0-1000 0 How many events for one flash, in practice it will divide by that number, so a value of 10, it will need 10 detections for every led and ticker flash. EV0


The pcb has one pinheader (J5) which can be used for 1 x i2c or 2 x Onewire io, and one header (J10) with 1xGpio, and 1x mosfet open collector for eg a clicker. A piezo buzzer with 5mm pitch can be directly soldered in the header holes. It is allso possible to split out the 5v from the usb to insert an ebay generic lipo charger/powersuply to make it battery driven with usb charging.

It allso implements an integrated FTDI chip to get serial over USB, and a transistor based rts#/dtr# pulldown function for the boot pin on the ESP (shamelessly stolen from the weemos d1 mini design) so it allows for automatic programming over USB without pushing the boot pin.

Homeassistant Implementation

To add the sensor in home assistant, use the following YAML sensor, supplied by u/chillinorway

  - platform: rest
    name: EIK_Geiger
    resource: http://<IP-Address>/cpm
      - "data"
    value_template: "OK"
  - platform: template
        value_template: "{{ state_attr('sensor.EIK_Geiger', 'data')['cpm'] }}"
        unit_of_measurement: "cpm"
        value_template: "{{ state_attr('sensor.EIK_Geiger', 'data')['cpm_M'] }}"
        unit_of_measurement: "cpm_avg_m"
        value_template: "{{ state_attr('sensor.EIK_Geiger', 'data')['cpm_H'] }}"
        unit_of_measurement: "cpm_avg_h"
        value_template: "{{ state_attr('sensor.EIK_Geiger', 'data')['raw_volt'] }}"
        unit_of_measurement: "raw_voltage"



It is designed for SBM-20 GM tube integrated onto the PCB with 6.3mm fuse holders, but it can use any tube up to 1000v if you just solder on some leads. The power supply is a standard buck boost, but with a 4x voltage multiplier output. It seems reaonably of effective, and consumes about 4ma@3.3v delivering 350v out running at 1000hz pwm. It has a voltage feedback read by adc2 on the esp32 module, but from experimentation i found it more stable to just set a pwm level rather than actively regulating it


More Pictures


Front Back

SBM-20 Enclosure

SBM-20 SBM-20

SBM-19 Enclosure

SBM-20 SBM-20


IOT Geigergounter for workshop







No releases published


No packages published