Live Agent working · engine-01 Placer/router engine positioning
DS-01Open Source Hardwaredesigned

Door Security Controller

ESP32-S3 door controller — 12V latch driver and reed-switch input on a 2-layer carrier for the ESP32-S3-DevKitC.

Readout
Board80×100mm
Layers2layer
Components13rows·13parts
BOM Cost$2.03/ unit
Placementextracted
DRC0S/0U
Schematics1sheets
Build Phases4
Info

A simple but seriously-built door access controller for a workshop or studio. Designed to keep working when the network drops, the mains drops, or someone tries to pull the unit off the wall.

The TPS27S100 smart switch drives a fail-secure 12V latch with current sensing (so a short or a stuck latch is logged, not just smoke). The BQ25895 charger provides hot-swappable 18650 backup so a brief mains glitch doesn't lock anyone out (or in).

Inspired by Blueprint.am's "home security control board" example.

Specification
MCU Module ES-01 ESP32-S3-DevKitC-1 Plugs into 2x 1x22 pin headers (J1/J2)
Latch Driver DR-01 AO3400A N-MOSFET Low-side switch, SOT-23, 30V/5.8A
Latch Protection PR-01 1N4007 flyback SMA, across the latch coil
Reed Input SE-01 Screw terminal → GPIO6 ESP32 internal pull-up enabled in firmware
Power Inputs PW-01 USB-C (logic) + 12V terminal (latch) Two isolated rails — logic stays alive if latch supply drops
Board PB-01 2-layer, 80 × 100 mm 13 components, auto-routed end-to-end (0S/0U)
Architecture
GPIO5 low-side GPIO6 GPIO7 USB-C 5Vvia DevKitC ESP32-S3-DevKitC 12V Screw Terminal N-MOSFETAO3400A Solenoid Latch Reed Switch Status LED
Features
DS-F1
Auto-routed in 48s
Generated from designgraph TOML through the same Rust pipeline as kvm-board: place → legalize → route → DRC. 0 unconnected, 0 shorts.
DS-F2
Two power domains
Logic on USB-C 5V (via DevKitC), latch on 12V screw terminal. Logic stays online during a brown-out on the latch supply.
DS-F3
Fail-safe latch
MOSFET gate has a 10k pull-down — boot defaults to latch off. Flyback diode protects the FET from the solenoid kick.
DS-F4
Standard parts only
Every footprint is a stock KiCad library footprint. BOM is ~$2.20 in passives; the only custom assembly step is the pin-header sockets.
— · — · —
Bill of Materials
13 rows priced live from JLCPCB · refreshed 2026-04-27
13 rows · 13 components · Total $2.03
Ref Category MPN Description Qty Unit Ext Stock Links
J1 PinHeader_1x22 PinHeader_1x22_2.54mm 1x22 0.1in pin header 1 $0.30 $0.30 LCSC
J2 PinHeader_1x22 PinHeader_1x22_2.54mm 1x22 0.1in pin header 1 $0.30 $0.30 LCSC
J3 Phoenix_MPT_2P MPT 0.5/2-2.54 2-pin 2.54mm screw terminal 1 $0.45 $0.45 DS LCSC
J4 Phoenix_MPT_2P MPT 0.5/2-2.54 2-pin 2.54mm screw terminal 1 $0.45 $0.45 DS LCSC
J5 Phoenix_MPT_2P MPT 0.5/2-2.54 2-pin 2.54mm screw terminal 1 $0.45 $0.45 DS LCSC
Q1 SOT-23 AO3400A B N-channel MOSFET 30V 5.8A 1 $0.05 $0.05 In stock DS LCSC
D1 SMA 1N4007 1A 1000V flyback diode 1 $0.0062 $0.0062 In stock DS LCSC
D2 LED_0805 LTST-C170KGKT Green 0805 LED 1 $0.02 $0.02 In stock DS LCSC
R1 R_0402 RC0402FR-0710KL 10k 0402 1% 1 $0.0004 $0.0004 In stock DS LCSC
R2 R_0402 RC0402FR-0710KL 10k 0402 1% 1 $0.0004 $0.0004 In stock DS LCSC
R3 R_0402 RC0402FR-071KL 1k 0402 1% 1 $0.0004 $0.0004 In stock DS LCSC
C1 C_0402 CL05B104KO5NNNC B 100nF 50V X7R 0402 1 $0.0008 $0.0008 In stock DS LCSC
C2 C_0805 CL21A106KAYNNNE B 10uF 25V X5R 0805 1 $0.0068 $0.0068 In stock DS LCSC
Total $2.03
— · — · —
Wiring

Real KiCad schematic auto-generated from the designgraph TOML by gen_kicad_schematic.py. Each component is a generic block symbol with N pins; nets connect via local + global labels (label-based connectivity, no wires drawn). The .kicad_sch file opens in eeschema and exports to SVG via kicad-cli.

1 sheet · click to open
Drag to pan · Wheel/pinch to zoom · ← → next sheet
— · — · —
Mech

2-layer board, 80 × 100 mm, auto-routed by the Rust VG router. 32 traces, 8 vias, 0 shorts, 0 unconnected. F.SilkS engineering cartouche added in the BR corner.

80 × 100 mm 2 layer
PCB front
DS-01 Front
PCB back
DS-01 Back
DRC Report
2026-05-05T18:14:22
0
Shorts
0
Unconnected
0
Parity
0
Violations
Component Map · Dimensions
Hover BOM ↔ Map
80.0 mm 100.0 mm J1 J2 J3 J4 J5 Q1 D1 R1 R2 D2 R3 C1 C2 MH1 MH2 MH3 MH4
Enclosure (TurboCase)
Ready
TurboCase enclosure outline
Suggested enclosure footprint: PCB outline + 4mm wall clearance, four M3 standoffs at corners. Top cover should clear the 12V terminal block screws (≈10mm above PCB).
3D Model
Loading…
DS-01 Copper Layers
Copper layers
X-Ray Layer Viewer
F.SilkscreenF.CuB.CuB.SilkscreenEdge Cuts
— · — · —
Instructions
  1. Phase 01 Order PCB
    Tools: JLCPCB account
    1. Run `target/release/pipeline hardware/design/door-sec/main.toml hardware/design/door-sec/door-sec.kicad_pcb` to regenerate the PCB.
    2. Open in KiCad to manually clean the 9 silk/edge-clearance violations (or wait for the convergence loop to fix them automatically).
    3. Export gerbers via `kicad-cli pcb export gerbers`.
    4. Upload to JLCPCB. 2-layer, 1.6mm, HASL or ENIG, qty 5 → ~$10 incl. shipping.
  2. Phase 02 Order parts
    Tools: LCSC cart
    1. Open `site/src/projects/door-sec-bom.csv` and copy the LCSC column into the LCSC bulk import tool.
    2. Total parts cost ~$2.20/board (passives + AO3400A + screw terminals).
    3. ESP32-S3-DevKitC-1 ordered separately from the manufacturer or AliExpress (~$8).
  3. Phase 03 Assemble
    Tools: Soldering iron, Solder, Flux, Tweezers
    1. Hand-solder the SOT-23 MOSFET (Q1), SMA diode (D1), and 0805 LED first.
    2. Hand-solder all 0402 passives (R1, R2, R3, C1).
    3. Reflow or hand-solder the 0805 cap (C2).
    4. Solder pin headers (J1, J2) for the ESP32-S3-DevKitC socket.
    5. Solder screw terminals (J3, J4, J5) last.
    6. Plug in the ESP32-S3-DevKitC-1 module.
  4. Phase 04 Bring-up
    Tools: Multimeter, 12V bench supply (current-limited 100 mA)
    1. With no module installed, ohm out V12 ↔ GND on J3. Should be many MΩ.
    2. Apply 12V via current-limited supply. Should draw <5 mA quiescent (just the diode and cap leakage).
    3. Plug in the DevKitC and confirm 3.3V appears at J1.1.
    4. Flash a Blink sketch toggling GPIO5 — D2 should light, and Q1's drain should toggle low (measure at J4.2).
    5. Short J5.1 to J5.2 to simulate a closed reed switch — GPIO6 should read low (with internal pull-up enabled).