Ionizing Radiation Geiger counter - Home Assistant

Following my previous experiments using ESP32 Wroom, such as the water-level monitoring project for...

· 3 min read
Ionizing Radiation Geiger counter - Home Assistant
Photo by Kilian Karger / Unsplash

Following my previous experiments using ESP32 Wroom, such as the water-level monitoring project for a 1000L IBC tank using ultrasonic sensors connected to Home Assistant, detailed here:

and my busy light indicator based on my Microsoft Teams status using an ESP8266 mini D1:

along with various other smaller ESP-based projects, I decided it was time to explore something different: measuring ionizing radiation using a Geiger counter connected to Home Assistant.

Geiger Counter Project with ESP32 and Home Assistant

This new project required additional specialized hardware. I purchased the GGreg20_V3 ionizing radiation detector, including a Geiger tube (SBM-20), from IoT Devices:

Upon receipt, the sensor appeared as shown on their website, compact and ready to integrate with my ESP32 setup.

Hardware Integration and ESPHome Configuration

For this project, I used an ESP32 Wroom module I had available. Following the recommended wiring documentation on GitHub, integration was straightforward:

I then configured my ESP32 device with ESPHome using the following YAML configuration:

esphome:
  name: esp-geiger01
  friendly_name: ESP-Geiger01

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

ota:
  platform: esphome
  password: !secret passwd_esphome

# Enable Home Assistant API
api:

# Enable Web server
web_server:
  port: 80
    
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.88.53
    gateway: 192.168.88.1
    subnet: 255.255.255.0
    dns1: 192.168.88.200

sensor:
  - platform: uptime
    name: "esp-geiger01 Uptime"
    update_interval: 120s
    
  - platform: wifi_signal
    name: "esp-geiger01 Wi-Fi Signal"
    update_interval: 120s

  - platform: pulse_counter
    pin: GPIO23
    name: "esp-geiger01 geiger counter CPM"
    id: "geiger_counter"
    update_interval: 100s
    unit_of_measurement: 'CPM'
    on_raw_value:
      - sensor.template.publish:
          id: radiation_level
          state: !lambda 'return x * 0.0081;'
          # This coefficient provided accurate background radiation readings based on datasheet information.
            
  - platform: template
    name: "esp-geiger01 Radiation Level"
    id: "radiation_level"
    unit_of_measurement: 'µSv/h'
    update_interval: 120s
    icon: mdi:radioactive
    accuracy_decimals: 5

binary_sensor:
  - platform: template
    device_class: safety
    name: "esp-geiger01 Radiation Warning"
    lambda: |-
      if (id(geiger_counter).state > 100) {
        // High Count
        return true;
      } else {
        // Normal Count
        return false;
      }

text_sensor:
  - platform: version
    name: "esp-geiger01 ESPHome version"

time:
  - platform: homeassistant
    id: homeassistant_time

Ensure the correct GPIO pin is selected for data collection from the Geiger sensor. In this case, GPIO23 was used.

Monitoring and Data Visualization

The ESP32-based Geiger counter successfully integrated with Home Assistant, allowing real-time radiation monitoring and alerting. The radiation levels, measured in Counts Per Minute (CPM) and converted to microsieverts per hour (µSv/h), provided clear insights into environmental radiation conditions.

Conclusion

This project demonstrated how accessible environmental monitoring can be with affordable ESP-based microcontrollers and ESPHome integration. From water level measurement and status indicators to radiation detection, the versatility of the ESP ecosystem offers endless possibilities for personal IoT projects.