Skip to the content
2 layers137 × 84 mmESP32-Geiger Counter, the printed circuit board in 3D

ESP32-Geiger Counter

AronASzucs/Avalanche323

Handheld ESP32-S3 Geiger counter with a firmware-regulated 400 V boost, SBM-20 tube, USB-C charging and OLED display.

Size
137 × 84 mm
Copper layers
2
Thickness
1.6 mm
Parts
89
Nets
80
Pads
321
Tracks, vias
398, 614
Pours
15
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
21 Apr 2026
Updated
28 Oct 2026

Overview

ESP32-Geiger Counter is an open-source printed circuit board by AronASzucs, from the AronASzucs/Avalanche32 repository on GitHub. It is a 2-layer board of 137 × 84 mm with 89 parts on 80 nets, routed with 398 tracks and 614 vias.

It is built around the ESP32-S3-WROOM-1-N8, AP63203WU and UCC27517DBVR-TP, with the BQ25886RGE, USBLC6-2SC6 and AO3401A among its other parts. Its parts include 28 resistors, 26 capacitors, 6 ICs, 6 diodes and 4 transistors. It belongs with the sensors and measurement and lEDs and displays boards and the ESP32 boards of this library.

Main components

9

README

README.md

Avalanche32: ESP32-S3 Geiger Counter

A handheld, battery-powered Geiger counter built around the ESP32-S3-WROOM-1 and a Soviet SBM-20 Geiger–Müller tube. It has a firmware-regulated 400 V supply, an audible click for each count, a 2.42" OLED display, and a single USB-C port for both charging and programming.

Avalanche32 PCB, top view

Status: Rev A, in progress. The perfboard prototype is working: it regulates the tube supply at 370–400 V, counts background radiation, and clearly detects real radioactive sources (see Measurements). The Rev A schematic and PCB layout are complete, and the boards and parts have been ordered. Assembly and testing are next.

FrontBack
Isometric front viewBottom view

Hardware Overview

BlockImplementation
MCUESP32-S3-WROOM-1, native USB (no USB-UART bridge), BOOT and RESET buttons
Battery2S Li-ion / LiPo pack (7.4 V nominal, 6.0–8.4 V) on a JST-XH connector
ChargerTI BQ25886 2-cell boost charger with power-path management, charge-status and power-good LEDs
USB-C5 V input (5.1 kΩ CC pull-downs, no USB PD), 3 A polyfuse on VBUS, USBLC6-2 ESD protection on the data lines
Power switchSlide switch driving an AO3401A P-FET load switch. The charger stays active, so the pack charges with the unit switched off.
3.3 V railDiodes AP63203 synchronous buck converter
High voltageFirmware-regulated boost from the system rail to ~400 V (details below)
DetectionSBM-20 cathode pulse → MMBT3904 pulse shaper → ESP32 interrupt
AudioPiezo transducer switched by a 2N7002 low-side MOSFET, one click per count
Display2.42" 128×64 SSD1309 OLED module over SPI
Battery monitor1 MΩ / 330 kΩ divider into an ESP32 ADC input

High-Voltage Supply

  • Topology: discontinuous-mode boost converter. The ESP32 drives a UCC27517 gate driver, which switches an STN1HNK60 600 V MOSFET into a 10 mH inductor, with a US1M fast-recovery rectifier.
  • Regulation: closed-loop hysteretic control. A 3 × 100 MΩ + 680 kΩ divider (with a 2.2 nF filter cap) feeds the ESP32 ADC, and the firmware gates the boost pulses to hold the setpoint.
  • Protection: a 450 V Zener clamp (3 × 150 V in series) on the output, plus a firmware overvoltage shutdown.
  • Filtering: a 20 nF / 1 kV reservoir, then a 1 MΩ / 10 nF RC ripple filter, then a 5.1 MΩ anode resistor into the tube.
  • Layout: the HV section sits in its own isolated area with a "400V High Voltage" marking on the silkscreen.

GPIO Map (Rev A PCB)

SignalESP32-S3 GPIO
HV_PWM (gate driver input)IO4
HV_SENSE (HV divider, ADC1)IO2
PULSE (tube pulse, active low)IO5
PIEZOIO6
VBAT_SENSE (ADC1)IO1
OLED SCK / MOSI / CS / DC / RSTIO12 / IO11 / IO10 / IO13 / IO21
USB D− / D+IO19 / IO20

Test points are provided for 3.3 V, GND, PULSE and HV_SENSE.

PCB

ParameterValue
Dimensions137 × 84 mm
Layers2 (1.6 mm FR-4, 1 oz copper)
FinishBlack solder mask, white silkscreen, HASL
Mounting4 × M3 mounting holes

Measurements

These readings are from the perfboard prototype, with each sample placed directly against the SBM-20 tube. Dose rates use the firmware's conversion factor of 0.0057 µSv/h per CPM (SBM-20, Cs-137 basis), so they are indicative only.

SourceCPM× BackgroundIndicated µSv/h
Normal indoor background15–251×~0.09–0.14
Uranium glass plate300–400~17×~1.7–2.3
Vintage radium-dial watch350–450~20×~2.0–2.6
Watch + plate together550–650~30×~3.1–3.7
Fiestaware red-orange saucer (uranium glaze)~8,700~435×~50
Fiestaware cup resting on saucer~13,400~670×~76

Contact readings on glazed ceramics are mostly beta from the uranium decay chain, so the µSv/h values overstate the actual dose.

Known Issue: Tube Re-Firing

The current SBM-20 is degraded and sometimes fires a burst of 100–1000+ pulses instead of a single one. The firmware works around this with a burst filter (BURST_FILTER) that merges each burst into one count, at the cost of undercounting at very high rates. A replacement tube is on the way.

Firmware

Firmware/HV_Test/HV_Test.ino is a bench test for the HV supply and counting chain, written for the Arduino ESP32 core. It provides:

  • Hysteretic HV regulation (370 V setpoint, 5 V hysteresis) with a 460 V overvoltage shutdown.
  • An interrupt-driven pulse counter with the optional burst filter (2.5 ms window).
  • A 60-second rolling CPM and an estimated µSv/h.
  • A 4 kHz piezo click for each count.
  • Serial output at 115200 baud showing HV, boost on-time, total and raw counts, CPM and µSv/h. To change the boost on-time, send a number from 5 to 120 (µs).

Note: this sketch targets the perfboard prototype, which uses a classic ESP32 dev board. Its pin assignments (IO4, IO35, IO27, IO25) do not match the Rev A PCB. Update the constants at the top of the file using the GPIO map before running it on the PCB.

Repository Layout

PathContents
ESP32-Geiger-Counter.kicad_*KiCad project: schematic, PCB and design rules
Custom Parts.kicad_sym, libs/Custom symbols, footprints and 3D models
production/JLCPCB fabrication outputs: Gerber/drill archive, BOM, pick-and-place and IPC netlist
bom/ibom.htmlInteractive BOM for hand assembly
Images/3D renders (3D/) and per-layer plots (Layers/)
scripts/generate_images.pyRegenerates everything in Images/ using kicad-cli
Firmware/ESP32 firmware
Draft1.ascLTspice simulation of the HV boost

To regenerate the images (requires KiCad 9+ and, for PNG layer plots, pip install pymupdf):

sh
python scripts/generate_images.py

Roadmap

  • HV boost designed and simulated in LTspice
  • Perfboard HV prototype with regulation verified at 370–400 V
  • SBM-20 background count test (15–25 CPM indoors)
  • Source tests: uranium glass, radium-dial watch and uranium-glazed Fiestaware detected (up to ~670× background)
  • Bench-test firmware: hysteretic HV control, rolling CPM, µSv/h estimate, piezo click
  • Full schematic: power, charger, ESP32-S3, HV supply, detector and display
  • Rev A PCB layout and fabrication outputs
  • Rev A boards and parts ordered
  • Rev A assembly and bring-up
  • Application firmware: OLED UI, menus, dose alarm, logging, battery monitoring

Tools

KiCad · LTspice · Arduino (ESP32 core) · C++

Safety

This device generates ~400 V DC. The stored energy is small, but do not touch the HV section while the unit is powered. Before handling the board, let the capacitors discharge: wait for the HV reading to fall to 0 V.

Store radioactive test samples (radium dials, uranium glass, uranium-glazed ceramics) sealed and away from living spaces. Never open radium-dial watches or gauges, and never eat or drink from uranium-glazed dishware.

Parts

89
QtyValueFootprintReferences
5100nFCapacitor_SMD:C_0805_2012MetricC14, C18, C20, C29, C31
510uFCapacitor_SMD:C_1206_3216MetricC8, C11, C15, C19, C30
522uFCapacitor_SMD:C_1206_3216MetricC7, C10, C16, C17, C32
410KResistor_SMD:R_0805_2012MetricR3, R7, R12, R13
4MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
3100MResistor_SMD:R_1206_3216MetricR14, R15, R16
3100kResistor_SMD:R_0805_2012MetricR20, R27, R28
310kResistor_SMD:R_0805_2012MetricR21, R22, R24
310nF 1kVCapacitor_SMD:C_1206_3216MetricC24, C25, C27
3150V ZenerDiode_SMD:D_SMAD4, D5, D6
31uFCapacitor_SMD:C_0805_2012MetricC12, C22, C28
21kResistor_SMD:R_0805_2012MetricR25, R26
22.2KResistor_SMD:R_0805_2012MetricR8, R9
25.1KResistor_SMD:R_0805_2012MetricR1, R2
2LEDLED_SMD:LED_0805_2012MetricD1, D2
110Resistor_SMD:R_0805_2012MetricR23
110mHInductor_THT:L_Radial_D12.5mm_P7.00mm_Fastron_09HCPL3
110uF 25VCapacitor_SMD:C_1206_3216MetricC23
11MResistor_SMD:R_0805_2012MetricR10
11MResistor_SMD:R_1206_3216MetricR18
11uHSRP4020TA-1R0M:IND_SRP4020TA-1R0ML1
12.2nFCapacitor_SMD:C_0805_2012MetricC26
1200KResistor_SMD:R_0805_2012MetricR4
12N7002Package_TO_SOT_SMD:SOT-23Q3
12s1p Lipo Battery Pack (8.4V-6V)Connector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_HorizontalJ1
13.3VTestPoint:TestPoint_Keystone_5015_Micro_Mini3.3V
13.83kResistor_SMD:R_0805_2012MetricR5
13.9uHInductor_SMD:L_Bourns-SRN6028L2
1330kResistor_SMD:R_0805_2012MetricR11
1383Resistor_SMD:R_0805_2012MetricR6
13A PolyfuseFuse:Fuse_2920_7451MetricF1
14.7uFCapacitor_SMD:C_0805_2012MetricC13
147nFCapacitor_SMD:C_0805_2012MetricC9
147uFCapacitor_SMD:C_1206_3216MetricC21
15.1MResistor_SMD:R_1206_3216MetricR19
1680kResistor_SMD:R_0805_2012MetricR17
1AO3401APackage_TO_SOT_SMD:SOT-23Q4
1AP63203WUPackage_TO_SOT_SMD:TSOT-23-6U2
1BOOTButton_Switch_THT:SW_PUSH_6mmBOOT
1BQ25886RGEPackage_DFN_QFN:Texas_RGE0024H_VQFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm_ThermalViasU1
1BuzzerCPT_1203_78_SMT_TR:XDCR_CPT-1203-78-SMT-TRBZ1
1Conn_01x07footprints:OLED_2.42in_SSD1309_SPI_7pinJ5
1ESP32-S3-WROOM-1RF_Module:ESP32-S3-WROOM-1U3
1GNDTestPoint:TestPoint_Keystone_5015_Micro_MiniGND
1HV_SENSETestPoint:TestPoint_Keystone_5015_Micro_MiniSENSE
1MMBT3904Package_TO_SOT_SMD:SOT-23Q5
1PULSETestPoint:TestPoint_Keystone_5015_Micro_MiniPULSE
1RESETButton_Switch_THT:SW_PUSH_6mmRESET
1SBM-20 Geiger Mueller Tube3529:SBM-20 TubeU6
1STN1HNK60Package_TO_SOT_SMD:SOT-223-3_TabPin2Q1
1SW_SPDTButton_Switch_THT:SW_Slide_SPDT_Angled_CK_OS102011MA1QSW1
1UCC27517DBVRUCC27517:DBV5_TEXU4
1US1MDiode_SMD:D_SMAD3
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U5
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ2

Similar boards

  • 2 layers83 × 32.8 mmREG1-App Dali, the printed circuit board in 3D

    REG1-App Dali

    OpenKNX/OpenKNX-REG1

    27 parts9
  • 4 layersPower board v1, the printed circuit board in 3D

    Power board v1

    N-Pulse/EEG-HW-System

    EEG acquisition board, power board and headset development

    79 parts
  • 4 layers124.6 × 101 mmMicrophone board, the printed circuit board in 3D

    Microphone board

    Epicotch/Acoustic-Camera

    acoustic camera:tm:

    212 partsMIT
  • 2 layers70 × 50 mmBilly, the printed circuit board in 3D

    Billy

    ryandrake08/billy

    Offline Big Mouth Billy Bass voice jokester powered by an ESP32-S3 and a local GPU backend.

    82 partsApache-2.0
  • 2 layers95 × 55 mmWifi geiger counter, the printed circuit board in 3D

    Wifi geiger counter

    atomicra1n/wifi-geiger-counter

    A DIY Geiger counter PCB which can detect ionizing radiation and log readings over Wi-Fi. Built with an ESP32, and a HV multiplier circuit that steps up 3.7V to 400V for the GM tube.

    64 parts
  • 4 layers94 × 65.9 mmMiniHexa, the printed circuit board in 3D

    MiniHexa

    Gex-devs/miniHexa

    Custom mini hexa using Hiwonders chassis

    82 parts1
  • 4 layers60 × 34.1 mmPower v3.3, the printed circuit board in 3D

    Power v3.3

    N-Pulse/BMI-EMG-HW

    Find the schematics and PCB layout for the hardware of the EMG Bracelet

    63 parts
  • 2 layers55.5 × 53.5 mmDebug board v1, the printed circuit board in 3D

    Debug board v1

    proveskit/antenna-board

    The PROVES Kit Antenna Boards! By convention the Z+ Top Cap of the satellite.

    29 partsCERN-OHL-W-2.0

Questions

How big is the ESP32-Geiger Counter PCB?

It measures 137 × 84 mm and has 2 copper layers, 1.6 mm thick.

What parts does the ESP32-Geiger Counter use?

89 parts, built around the ESP32-S3-WROOM-1-N8, AP63203WU, UCC27517DBVR-TP and BQ25886RGE. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the ESP32-Geiger Counter KiCad files?

From the AronASzucs/Avalanche32 repository on GitHub, at the commit this page was made from: the board is ESP32-Geiger-Counter.kicad_pcb and its schematic ESP32-Geiger-Counter.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the ESP32-Geiger Counter design in my own project?

Its repository states no licence, so its author keeps all rights: ask AronASzucs before reusing the design.