Adding Wifi to the cheap BR-6 geiger counter

After my old LND-712 based Geiger died from oxygen poisoning I wanted a cheap replacement as I couldn’t find a new tube. I decided on the super cheap BR-6 Geiger widely available online, primarily because I noticed 4 pads on the PCB! turns out they were not serial - bummer

I continued to add Wi-Fi in a different way, by counting the pulses in the same way the micro in the unit does. I thought I would share the mod in case anyone else wants to convert theirs.

I opened the unit and installed header pins, I used 2 pin and 3 pin headers for a bit of extra strength across the transistors, the Blue wire is the output of a transistor that pulses when the GM tube breaks down. the Grey wire is to sense the backlight status, the Violet wire is the backlight button, Green is Ground and yellow is 5v from the USB. I tried a ESP-01s running from the 3.3v but it couldn’t run stable, so I decided to use a D1 mini with its own regulator. I also connected the backlight pin as when the device first powers up it doesn’t start counting - it waits for a button press. and I decided to connect the backlight output from the micro so I could see if it was on ort not.


a close up of where the header pins are soldered

and here is my code

esphome:
  name: geiger
  friendly_name: Geiger

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxx="

ota:
  password: "xxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Geiger Fallback Hotspot"
    password: "xxx"

captive_portal:
    
sensor:
  - platform: uptime
    name: Gaiger Uptime Sensor
    id: uptime_sensor
    update_interval: 60s
  - platform: pulse_counter
    pin: GPIO4
    name: "Geiger Counter"
    id: "geiger_counter"
    unit_of_measurement: 'CPM'
    update_interval: 20s
    on_raw_value:
      - sensor.template.publish:
          id: radiation_level
          state: !lambda 'return x * 0.0075;'
    on_value_range:
      - below: 1
        then: 
          - switch.turn_on: backlight
  - platform: template
    name: "Radiation Level"
    id: "radiation_level"
    unit_of_measurement: 'µSv/h'
    icon: mdi:radioactive
    accuracy_decimals: 2
    update_interval: 20s

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO12
      mode:
        input: true
        pullup: false
    name: "Backlight_Status"
    id: backlight_status
    filters:
      - delayed_on: 150ms
      - delayed_off: 150ms

switch:
  - platform: gpio
    pin:
      number: GPIO5
      inverted: true
    id: backlight
    name: "Backlight"
    # If ESP reboots, do not attempt to restore switch state
    restore_mode: always off
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: backlight
3 Likes