

SnowGauge
Low-cost, low-power snow depth logger for remote subalpine monitoring (NIR laser ToF + XIAO nRF52840 Sense)
- Size
- 64 × 50 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 25
- Nets
- 15
- Pads
- 80
- Tracks, vias
- 79, 0
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 2 Sep 2026
- Updated
- 11 Sep 2026
Overview
SnowGauge is an open-source printed circuit board by 0kam, from the 0kam/SnowGauge repository on GitHub. It is a 2-layer board of 64 × 50 mm with 25 parts on 15 nets, routed with 79 tracks and 0 vias.
It is built around the NJU7223F50 and 2SK4017(Q). Its parts include 6 capacitors, 6 resistors, 3 connectors, 2 ICs and 2 transistors. It belongs with the nRF52 and nRF5x boards of this library.
Main components
2NJU7223F50
TO-220F-40℃~+85℃@(Ta) 1 122uV 14V 30uA 400mV@(500mA) 500mA 55dB@(120Hz) 5V Fixed Over Current Protection、Over Temperature Protection Positive TO-220F Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSNisshinbo Micro Devices Inc.Voltage Regulators - Linear, Low Drop Out (LDO) Regulators2SK4017(Q)
TO-251(IPAK)1 N-channel 150mΩ@4V 15nC@10V 2.5V 20W 5A 60V 60pF 730pF 95pF N-Channel ±20V TO-251(IPAK) MOSFETs ROHSToshibaMOSFETs
README
pcb/README.mdSnowGauge PCB v1.2 (TFmini Plus / TSD20 common board)
- Board: 64 x 50 mm, 2-layer, all through-hole. Bottom layer is a GND pour.
- Mounting: 4x M3 (3.2mm) holes at the corners, 57 x 43 mm center spacing (3.5mm from every edge; hole centers at (3.5, 3.5) / (60.5, 3.5) / (3.5, 46.5) / (60.5, 46.5) from the board's top-left corner).
- Fits the previous prototype enclosure (Takachi BCAP091208G, inner 66 x 96 mm) with the 50mm side across the width.
- Battery terminal J1 exits at the bottom edge; TFmini terminal J2 exits at the right edge.
- Generated programmatically: generate_board.py →
SnowGauge.kicad_pcb(KiCad 10). DRC: 0 errors, 0 unconnected. - One board serves both variants: U2 = NJU7223F50 for TFmini Plus / NJU7223F33 for TSD20 (same pinout).
Ordering (JLCPCB, ~1 week to Japan)
- Go to jlcpcb.com → "Add gerber file" → upload
SnowGauge_v1.2_gerbers.zip - Settings: 2 layers, 64x50mm (auto-detected), qty 5 (or 10), 1.6mm, HASL, green — all defaults are fine
- Shipping: DHL or OCS Express (this is what makes it arrive in ~3-4 days; economy mail takes weeks)
Firmware pin map (matches this board — the single source of truth)
| XIAO pin | Net | Function |
|---|---|---|
| A0 (D0) | ADC_NODE | Battery voltage = reading x2. Divider hangs on VBAT_SW, so enable SENSOR_EN, then read A0 (v1.2: Q3/R6/D3 deleted — node is 0V during sleep, never above VDD) |
| D4 / D5 | I2C_SDA / I2C_SCL | Spare I2C header J3 (future external IMU) |
| D6 (TX) | UART_TX_MCU | → 1k (R7) → TFmini RX (white) |
| D7 (RX) | UART_RX | ← TFmini TX (green) |
| D10 | SENSOR_EN | High = sensor rail ON (Q2→Q1). Changed from D2 in the hand-wiring plan. |
| 3V3 | 3V3_SYS | Powered from U1 (NJU7223F33) |
Connectors
- J1 (screw terminal 2P, 5.08mm): battery + / − ("+"/"-" on silk)
- J2 (4 positions at 5.08mm = two interlocked 2P blocks): TFmini, top to bottom RED +5V / BLK GND / GRN TX / WHT RX
- J3 (pin header 1x4): SCL / SDA / GND / 3V3 spare I2C
- A1: 2x low-profile 1x7 female headers (2.54mm) — socket for XIAO nRF52840 Sense
Extra BOM lines (in addition to spec §6)
| Part | Qty | Note |
|---|---|---|
| Screw terminal block 2P, 5.08mm pitch, interlocking (TB111-2 / MKDS-1,5 type) | 3 | J1 battery; J2 = 2 blocks snapped together (4 contiguous positions) |
| Female pin socket 1x7, 2.54mm | 2 | XIAO socket. Holes are 0.89mm: fine for round machined tails (~0.5mm) and typical stamped tails; avoid 0.64mm square-tail types |
| 10uF radial MLCC, 5mm lead pitch | 1 | C6. A 2.5mm-pitch part needs its leads splayed |
| Pin header 1x4, 2.54mm | 1 | J3 (optional) |
| M3 screws/standoffs | 4 | mounting holes at corners |
The consolidated BOM for a whole unit (spec §6 parts + these lines, corrected counts, breadboard consumables, TSD20 variant) is docs/01_parts.md / docs/01_parts.csv.
Safety notes silkscreened on the board
- "NO USB WHILE BATTERY CONNECTED!" — disconnect battery before plugging USB into the XIAO
- C4 (OS-CON) polarity marked; D1 cathode marked "K"
Component orientation (U1, U2, Q1, Q2)
The KiCad TO-220 / TO-251 vertical footprints put the reference designator on the metal-tab side, so the part's marked (printed) face points the other way. With the board held "SnowGauge v1.2" up / J1 down: U1 and Q1 have the tab towards the top edge (print facing the XIAO), U2 and Q2 are rotated 180 deg (tab towards the board centre, print facing the top edge). Assembly instructions with a figure: docs/02_assembly.md B-2 (figure regenerated by docs/assets/figures/gen_component_orientation.py).
v1.2 changes (post-review)
- Battery divider now fed from VBAT_SW (the switched rail) instead of VBAT: the ADC node sits at 0V during sleep instead of floating to ~7V through the nRF52840's clamp diode (abs-max violation found in review). Q3, R6 and the D3 GPIO are deleted. Firmware measures battery by enabling SENSOR_EN and reading A0 (x2).
- USB corridor cleared: U1 and C1 moved to the top-left, D1 lowered — a USB-C cable now reaches the socketed XIAO for flashing.
- TFmini wire-order legend moved where it stays visible after C4 is mounted.
- Terminals changed to 3x 5.08mm 2P blocks; the TFmini pair interlocks into one 4P unit on contiguous 5.08mm positions (J2). Standard Akizuki TB111-class parts drop in.
Parts
25| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 0.1u | C_Disc_D5.0mm_W2.5mm_P5.00mm | C1, C2, C3, C5 |
| 4 | M3 | MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 2 | 100k | R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R4, R5 |
| 2 | 1M | R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R1, R2 |
| 1 | 10k | R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R3 |
| 1 | 10u | C_Disc_D5.0mm_W2.5mm_P5.00mm | C6 |
| 1 | 1N5819 | D_DO-41_SOD81_P10.16mm_Horizontal | D1 |
| 1 | 1k | R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R7 |
| 1 | 2SJ334 | TO-220-3_Vertical | Q1 |
| 1 | 2SK4017 | TO-251-3_Vertical | Q2 |
| 1 | BATTERY L91x4 | TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal | J1 |
| 1 | I2C SPARE | PinHeader_1x04_P2.54mm_Vertical | J3 |
| 1 | NJU7223F33 | TO-220-3_Vertical | U1 |
| 1 | NJU7223F50 | TO-220-3_Vertical | U2 |
| 1 | OS-CON 470u/16V | CP_Radial_D10.0mm_P5.00mm | C4 |
| 1 | TFmini 2Px2 | TerminalBlock_Phoenix_MKDS-1,5-4-5.08_1x04_P5.08mm_Horizontal | J2 |
| 1 | XIAO nRF52840 Sense | XIAO-nRF52840-DIP | A1 |
Similar boards
- 2 layers68.6 × 53.3 mm

- 2 layers100 × 100 mm

Pico router backup
Dudestin/tinyEtherDeveloper
Inexpensive FPGA board-based Ethernet evaluation board project. Consists mostly of DIP components and uses Tang PriMER. It can be built for about $50.
98 parts2 - 2 layers60 × 45 mm

- 2 layers110 × 100 mm

ESP32-S3-IO DEVICE
noritama-lab/esp32io-hw
ESP32 ベースの I/O ボードのハードウェア設計をまとめたリポジトリです。 / Hardware designs for an ESP32‑based PLC‑compatible I/O board.
85 parts2 - 2 layers56 × 65 mm

- 2 layers100 × 100 mm

ShutterClock
0kam/ShutterClock
Low-power BLE interval timer for fixed-point Nikon DSLR cameras (XIAO nRF52840, Zephyr, Web Bluetooth)
61 parts - 2 layers68.6 × 53.3 mm

Yamabiko a
airpocket-soundman/chikuwa-flute-robot
学習では、あらかじめ作った 1,000 曲のセット(runs/targetbank.npz、trainresiduales.py --bank 1000 で自動作成)から毎世代 8 曲を選んで使い回します。評価用の曲は別の乱数で作るので、学習用と重なりません。セットの中身は WAV と図で確認できます:
44 parts - 2 layers60 × 45 mm

Questions
How big is the SnowGauge PCB?
It measures 64 × 50 mm and has 2 copper layers, 1.6 mm thick.
What parts does the SnowGauge use?
25 parts, built around the NJU7223F50 and 2SK4017(Q). 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 SnowGauge KiCad files?
From the 0kam/SnowGauge repository on GitHub, at the commit this page was made from: the board is pcb/SnowGauge.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the SnowGauge design in my own project?
Its repository states no licence, so its author keeps all rights: ask 0kam before reusing the design.