Skip to the content
4 layers118 × 94 mmLamp rev b controller, the printed circuit board in 3D

Lamp rev b controller

laminarforge/laminarforge-cad

Parametric CAD models (Rust + vcad) for LaminarForge open-source LAMP diagnostics device

Size
118 × 94 mm
Copper layers
4
Thickness
1.6 mm
Parts
153
Nets
73
Pads
407
Tracks, vias
1,003, 173
Pours
4
Routed
Yes
KiCad
KiCad 1.0 (file 20240108)
Created
18 Feb 2026
Updated
12 Oct 2026

Overview

Lamp rev b controller is an open-source printed circuit board by laminarforge, from the laminarforge/laminarforge-cad repository on GitHub. It is a 4-layer board of 118 × 94 mm with 153 parts on 73 nets, routed with 1,003 tracks and 173 vias.

It is built around the ESP32-S3-WROOM-1-N16, ADS1115IDGSR and CD74HC4051M, with the DB128H-5.08-2P-BK-S among its other parts. Its parts include 37 resistors, 20 connectors, 17 capacitors, 8 ICs and 3 diodes. It belongs with the lEDs and displays boards and the ESP32 boards of this library.

Main components

4

README

pcb/lamp_rev_a/README.md

LaminarForge LAMP Rev A PCBA

This directory is the source package for the real one-board LAMP PCBA.

The goal is one 4-layer ESP32-S3 board that can be checked, laid out in KiCad, exported for JLCPCB, and iterated without going back to the old generated-layout workflow.

Source Of Truth

  • contract.toml: board requirements, rails, nets, GPIO map, test points, and verification gates.
  • parts.toml: selected schematic parts plus explicit fab-blocking part-selection gaps.
  • power_architecture.toml: locked Rev A power topology and the explicit no-buck decision.
  • optical_architecture.toml: locked Rev A optical topology, wavelength, detector, and front-end decision.
  • optical_mode.md: human-readable optical-mode decision and bench validation gate.
  • placement.toml: locked starting refs, coordinates, test points, and eight-slot optical geometry.
  • pin_nets.toml: conservative footprint pad-to-net assignments for known package pinouts.
  • firmware_handoff.toml: ESP32-S3 module-pin to SoC-GPIO handoff, slot map, and firmware bring-up notes.
  • electrical_validation.toml: pre-fab electrical validation assumptions, derating gates, current-path checks, and simulation handoff sources.
  • routing_plan.toml: routing phase order, current unrouted count, autorouter policy, and release gates.
  • routing_seed.toml: DRC-clean starter traces emitted into the materialized board.
  • copper_zones.toml: controlled KiCad copper pours, starting with front/back GND zones.
  • fab_release.toml: repeatable KiCad CLI export contract for Gerbers, drill files, assembly files, STEP, and release reports.
  • lamp_rev_a.kicad_sch: KiCad schematic shell for the one-board Rev A electrical architecture.
  • lamp_rev_a.kicad_pcb: materialized KiCad board with the Rev A outline, 4-layer stack, placed footprints, test points, and optical-slot guides.
  • lamp_rev_a.kicad_pro: KiCad project shell.
  • sym-lib-table / fp-lib-table: project-local library tables pointing at the locked pcb/lib/lcsc symbols and footprints.
  • lamp_rev_a.kicad_dru: custom KiCad design rules for power, heater, analog, and USB constraints.
  • kibot.yaml: intended fab/report export pipeline once the schematic and placed board exist.

Rust should validate contracts and automate exports. KiCad should own the schematic and PCB layout.

Iteration Flow

text
contract.toml + parts.toml
  -> cargo run --release --bin lamp_pcba_check
  -> placement.toml refs and zone checks
  -> pin_nets.toml trusted pad assignments
  -> firmware_handoff.toml firmware pin/slot handoff checks
  -> electrical_validation.toml power, derating, heater, GPIO, USB, and simulation checks
  -> cargo run --release --bin lamp_rev_a_materialize_board
  -> cargo run --release --bin lamp_rev_a_seed_routes_from_drc when reseeding short safe traces
  -> cargo run --release --bin lamp_rev_a_route_greedy for DRC-gated route iteration
  -> kicad-cli pcb drc --refill-zones for zone-connected routing checks
  -> KiCad schematic capture in lamp_rev_a.kicad_sch
  -> KiCad ERC
  -> footprint/BOM/JLC field lock
  -> KiCad placement cleanup from the materialized board
  -> KiCad interactive routing
  -> KiCad DRC + schematic/PCB parity
  -> KiBot/KiKit fab outputs
  -> physical bring-up measurements
  -> update contract.toml for the next revision

Board Decisions

  • One physical board for Rev A.
  • 4-layer stack: F.Cu, In1.Cu ground plane, In2.Cu power plane, B.Cu.
  • ESP32-S3 module, not a bare ESP32 chip.
  • USB VBUS is the Rev A electronics 5 V source through a Schottky path; +3V3 is derived locally.
  • The 12 V input is reserved for heater power. Do not add a 12 V to 5 V buck unless standalone non-USB operation becomes a new explicit Rev change.
  • External heater element driven from the board through a protected high-current output.
  • Heater path protection is locked as board-side resettable fuse + TVS + 5.08 mm heater terminal, with an external inline KSD9700 thermal cutoff mounted on the heater assembly.
  • Optical mode is locked to 650 nm red-light turbidimetry with eight LED/photodiode channels, muxed into one TIA and ADC path.
  • Starting placement is locked in placement.toml: 91 top-side footprints, 16 test points, and 8 optical slots at 12 mm pitch.
  • Test points are mandatory for rails, heater control/output, I2C, UART, boot/reset, ADC, and mux output.

Local Checks

Run:

bash
cargo run --release --bin lamp_pcba_check
cargo run --release --bin lamp_rev_a_electrical_validate
cargo run --release --bin lamp_rev_a_spice_check
cargo run --release --bin lamp_rev_a_materialize_board
cargo run --release --bin lamp_rev_a_fab_preview
cargo run --release --bin lamp_rev_a_fab_release
cargo run --release --bin lamp_rev_a_route_report
cargo build --release --bin lamp_rev_a_materialize_board --bin lamp_rev_a_route_greedy
LAMP_ROUTE_MAX_ACCEPTS=10 LAMP_ROUTE_MAX_TRIALS=160 target/release/lamp_rev_a_route_greedy

lamp_rev_a_spice_check requires ngspice. main CI installs it, runs the operating-point check against the generated power-path netlist, then runs lamp_rev_a_fab_release on a KiCad-enabled macOS runner and uploads lamp-rev-a-pcba-fab-release-<commit> containing the validated fab release directory and upload bundles.

The current schematic is an architecture shell, not a fabrication-ready circuit. The checker should not report fab-blocking part-selection gaps. The board now materializes all selected parts into KiCad with zero physical DRC violations with a DRC-clean starter route seed and GND copper pours. The route seed is currently at 112 accepted segments, zero real unrouted ratlines after KiCad zone refill, and one ignored KiCad self-zone report item for the front GND pour. The active work is schematic completion, schematic/PCB parity, fab export validation, and bench validation. lamp_rev_a_fab_release emits JLCPCB machine-assembly BOM/CPL files separately from through-hole/manual-install parts, then verifies that required Gerbers, drills, reports, position files, review STEP output, and the order audit report are present and non-empty. It also emits validated upload bundles under fab_release/bundles/: fabrication Gerbers/drills, assembly CSVs, and review artifacts. The release also includes a source snapshot bundle with the exact KiCad and TOML inputs used to generate the fab package. The review package includes a bring-up checklist generated from the configured Rev A test points and a firmware handoff generated from the checked ESP32-S3 pin map. It also emits an electrical-validation report, a first-order SPICE power-path handoff, a machine-checked full-speed USB DP/DN routing sanity gate, a simulation/analysis handoff, generated PDN current-path and thermal power CSVs, a structured first-article measurement CSV for current-limited rail bring-up, component derating/stress CSVs for the high-risk electrical parts, an EMC/ESD pre-compliance CSV for USB, heater, 12 V, Wi-Fi, and analog noise risks, a USB-C power-budget CSV for Rd/default-current, VBUS/+5V/+3V3 current, inrush linkage, and first-article rail coverage, a procurement-readiness CSV for critical part ordering, machine/manual assembly, and external safety-component evidence, a procurement-substitution CSV locking safety-critical LCSC order codes and requiring engineering review for swaps, a schematic source/parity CSV tying the architecture-shell KiCad schematic to contract modules, selected parts, and required nets, a connector/polarity CSV for USB-C, manual connectors, diodes, MOSFETs, and orientation-sensitive IC pinouts, an assembly-orientation CSV for machine-placed ICs, polarity-sensitive parts, CPL centroids, and pin-1 evidence, an assembly-inspection CSV requiring AOI/photo evidence, linked validation gates, and stop/rework actions for critical parts, an assembly-fixture/readability CSV requiring visible silkscreen labels, fixture references, photo evidence, and rework actions for critical connectors/test points, a machine-checked assembly-parity CSV for BOM/CPL/manual/position reference consistency, a fabrication-capability CSV for board-house stackup, geometry, drill, via, and routing process limits, an I2C/ADS1115 bus validation CSV for pull-up, rise-time, device identity, and stuck-low coverage, a heater-protection coordination CSV for PTC, terminal, MOSFET, TVS, external cutoff, and current-limit coverage, an external-harness safety CSV for 12 V adapter, heater leads, inline cutoff, wire gauge, polarity, and strain relief, a mechanical-access CSV for service connector, heater terminal, MOSFET, boot/reset, analog, and I2C probe reachability, an ESP32-S3 startup-safety CSV for boot straps, reset, and heater fail-closed defaults, a manufacturing-test coverage CSV for critical test points, firmware diagnostics, and release traceability, a calibration-readiness CSV for heater, ADC, optical, sensor-bus, negative-control, and firmware identity records, a validation-traceability CSV tying each gate to artifacts, manifest evidence, CI steps, and pass criteria, a simulation-input CSV for PDN, electrothermal, USB/SI, and EMC handoff readiness, the first routed-geometry DC PDN simulation CSV for voltage drop and I2R loss, a lumped thermal-margin simulation CSV for component and routed-copper steady-state estimates, a heater/reaction-block thermal transient CSV for warm-up, hold, duty, overshoot, and energy estimates, an ngspice ESP32-S3 reset/boot-strap timing netlist/CSV for EN, GPIO0, and boot-sensitive output startup checks, an ngspice USB/VBUS hot-plug and 3.3 V startup/inrush netlist/CSV for rail startup envelope checks, an ngspice 3.3 V rail load-step transient netlist/CSV for ESP32 burst-load sag, an ngspice power-domain fault/backfeed netlist/CSV for 12 V heater-domain isolation assumptions, an ngspice optical analog front-end transient netlist/CSV for TIA/ADC signal-envelope range, an optical crosstalk/mux-settling CSV for slot isolation and ADC sampling assumptions, an optical signal/noise margin CSV for threshold and negative-control drift assumptions, and a thermistor/ADC transfer CSV for heater temperature-sense range, sensitivity, and fault coverage, and a checksum manifest for the fabrication, assembly, and source bundles. It also mirrors the board STEP review model to output/lamp_rev_a_board.stp; run the CAD conversion for lamp_rev_a_board to create output/lamp_rev_a_board.usdz for the Agentic FlowState CAD tab.

Current KiCad checks:

bash
kicad-cli sch erc pcb/lamp_rev_a/lamp_rev_a.kicad_sch \
  -o pcb/lamp_rev_a/reports/erc.json --format json

kicad-cli pcb drc --refill-zones --format json \
  --output pcb/lamp_rev_a/reports/drc.json \
  pcb/lamp_rev_a/lamp_rev_a.kicad_pcb

Expected DRC state at this stage: 0 violations and no real unrouted connections. KiCad may still report one self-referential front-GND-zone unconnected_items entry; lamp_rev_a_route_report ignores only that exact self-zone artifact and still reports real ratlines by net.

lamp_rev_a_seed_routes_from_drc is intentionally conservative: it only seeds short direct routes that preserve zero physical DRC violations. Longer routes must be added deliberately in routing_seed.toml, accepted by lamp_rev_a_route_greedy, or finished in KiCad. lamp_rev_a_route_greedy mechanically tries candidate routes, runs KiCad DRC, and keeps only candidates that reduce unconnected_items while preserving zero physical DRC violations.

Do not accept autorouter output by itself. Use it to expose bad placement or constraint problems, then finish and review the layout in KiCad.

Parts

153
QtyValueFootprintReferences
8100nFlcsc:C0603C10, C11, C12, C13, C14, C15, C16, C17
810k 0.1%lcsc:R0805R10, R11, R12, R13, R14, R15, R16, R17
82-pin NTC headerlcsc:PINHEADER_1X02_2.54MMJ4, J5, J6, J7, J8, J9, J10, J11
84.7klcsc:R0805R40, R41, R42, R43, R44, R45, R46, R47
510klcsc:R0805R22, R23, R24, R48, R49
4DB128H-5.08-2P-BK-Slcsc:TERM-BLOCK-5.08-2PJ2, J12, J13, J15
322uF rail bulklcsc:C1206C1, C5, C6
2100k/100k VBUS senselcsc:R0805R3, R4
21klcsc:R0805R30, R31
222uF AP63203 outputlcsc:C1206C7, C8
233Rlcsc:R0805R20, R21
25.1klcsc:R0805R1, R2
250mR DNP optionlcsc:R0805R25, R26
2AUX_ANALOG_INlcsc:TESTPOINT_SMD_1.5MMTP_ADS_AIN3, TP_AUX_ANALOG
2IRLB3813PBF TO-220 12V prototypelcsc:TO-220-3_VERTICALQ1, Q2
2LED0603 statuslcsc:LED0603-RDD2, D3
2LED_CURRENT_SENSElcsc:TESTPOINT_SMD_1.5MMTP_ADS_AIN2, TP_LED_SENSE
2THERM_MUX_OUTlcsc:TESTPOINT_SMD_1.5MMTP_ADS_AIN0, TP_THERM_OUT
1+3V3lcsc:TESTPOINT_SMD_1.5MMTP_3V3
1+3V3_ANAlcsc:TESTPOINT_SMD_1.5MMTP_3V3A
1+5Vlcsc:TESTPOINT_SMD_1.5MMTP_5V
10.1R 1% >=1W LED current shuntlcsc:R2512R53
10805 ferrite bead / approved analog rail link from +3V3 to +3V3_ANAlcsc:R0805FB1
10R LED_SUPPLY feed link from VIN_PROTECTEDlcsc:R0805R52
10R VDRV feed link from VIN_PROTECTED, 12 V population onlylcsc:R0805R55
1100R LED DIM serieslcsc:R0805R50
1100k LED DIM pulldownlcsc:R0805R51
1100nF bootstraplcsc:C0603C9
110k LED_FAULT_N pull-uplcsc:R0805R54
122uF 50V VIN buck inputlcsc:C1206C4
122uF >=10V +5V buck outputlcsc:C1206C2
122uF AP63203 inputlcsc:C1206C3
12x3 UART/programming headerlcsc:PINHEADER_2X03_2.54MMJ21
1ADS1115IDGSRlcsc:MSOP-10_L3.0-W3.0-P0.50-LS5.0-BLU4
1AUX_IO0_THERMAL_CUTOFF_OKlcsc:TESTPOINT_SMD_1.5MMTP_CUTOFF
1Analog optical diagnostic headerlcsc:PINHEADER_1X06_2.54MMJ23
1CAM_CS_Nlcsc:TESTPOINT_SMD_1.5MMTP_CAM_CS
1CAM_FRAME_INTlcsc:TESTPOINT_SMD_1.5MMTP_CAM_FRAME
1CAM_PWDN_Nlcsc:TESTPOINT_SMD_1.5MMTP_CAM_PWDN
1CAM_RESET_Nlcsc:TESTPOINT_SMD_1.5MMTP_CAM_RESET
1CART_PRESENT_Nlcsc:TESTPOINT_SMD_1.5MMTP_CART
1CD74HC4051Mlcsc:SOIC-16_L9.9-W3.9-P1.27-LS6.0-BLU5
1CUI/Bel P7805-2000-S 5V 2A 8-36V buck module; hand-place no-substitutionlcsc:P78-2000-S_SIP3U7
1DB128H-5.08-2P high-current heater cutoff loop/linklcsc:TERM-BLOCK-5.08-2PJ24
1Diodes AP63203WU-7 fixed 3.3V 2A bucklcsc:TSOT26_AP63203WUU3
1ESP32-S3-WROOM-1-N16lcsc:WIFIM-SMD_ESP32-S3-WROOM-1-N8U1
1ESP_ENlcsc:TESTPOINT_SMD_1.5MMTP_EN
1ESP_GPIO0_BOOTlcsc:TESTPOINT_SMD_1.5MMTP_BOOT
1EXPOSURE_ACTIVE_INlcsc:TESTPOINT_SMD_1.5MMTP_EXPOSURE
1External camera sync headerlcsc:PINHEADER_1X06_2.54MMJ17
1FAN_PWMlcsc:TESTPOINT_SMD_1.5MMTP_FAN_PWM
1FAN_TACHlcsc:TESTPOINT_SMD_1.5MMTP_FAN_TACH
1FRAME_TRIG_OUTlcsc:TESTPOINT_SMD_1.5MMTP_FRAME_TRIG
1Fan PWM/tach headerlcsc:PINHEADER_1X04_2.54MMJ20
1GNDlcsc:TESTPOINT_SMD_1.5MMTP_GND
1HEATER0_GATElcsc:TESTPOINT_SMD_1.5MMTP_HEATER0_GATE
1HEATER0_LOWlcsc:TESTPOINT_SMD_1.5MMTP_HEATER0_LOW
1HEATER0_PWMlcsc:TESTPOINT_SMD_1.5MMTP_HEATER0_PWM
1HEATER1_GATElcsc:TESTPOINT_SMD_1.5MMTP_HEATER1_GATE
1HEATER1_LOWlcsc:TESTPOINT_SMD_1.5MMTP_HEATER1_LOW
1HEATER1_PWMlcsc:TESTPOINT_SMD_1.5MMTP_HEATER1_PWM
1HEATER_ARMlcsc:TESTPOINT_SMD_1.5MMTP_HEATER_ARM
1I2C expansion headerlcsc:PINHEADER_1X04_2.54MMJ22
1I2C_SCLlcsc:TESTPOINT_SMD_1.5MMTP_I2C_SCL
1I2C_SDAlcsc:TESTPOINT_SMD_1.5MMTP_I2C_SDA
1INA180A1IDBVR gain 20 LED current senselcsc:SOT-23-5U10
1LATCH_LOCKED_Nlcsc:TESTPOINT_SMD_1.5MMTP_LATCH
1LED NTC/ID headerlcsc:PINHEADER_1X04_2.54MMJ16
1LED_EXC_ENlcsc:TESTPOINT_SMD_1.5MMTP_LED_EN
1LED_EXC_PWMlcsc:TESTPOINT_SMD_1.5MMTP_LED_PWM
1LED_SUPPLYlcsc:TESTPOINT_SMD_1.5MMTP_LED_SUPPLY
1LED_SYNC_OUTlcsc:TESTPOINT_SMD_1.5MMTP_LED_SYNC
1LID_CLOSED_Nlcsc:TESTPOINT_SMD_1.5MMTP_LID
1Lid/cartridge/cutoff interlock headerlcsc:PINHEADER_1X06_2.54MMJ19
1Mean Well LDD-700H 700mA CC buck LED driver; LDD-1000H C17529736 DNP thermal-validation alternatelcsc:MEANWELL_LDD-300-1000H_THTU8
1RUEF500K/PTClcsc:FUSE2920F1
1SD_CS_Nlcsc:TESTPOINT_SMD_1.5MMTP_SD_CS
1SMBJ18A footprint optionlcsc:SMB_L4.6-W3.6-LS5.3-RDD1
1SN74LVC1G08DBVR LED_EXC_PWM AND LED_EXC_ENlcsc:SOT-23-5U9
1SPARE_GPIO42lcsc:TESTPOINT_SMD_1.5MMTP_SPARE42

The 128 most common of 153 parts.

More from laminarforge/laminarforge-cad

1
  • 4 layers100 × 80 mmLamp rev a, the printed circuit board in 3D

    Lamp rev a

    laminarforge/laminarforge-cad

    Parametric CAD models (Rust + vcad) for LaminarForge open-source LAMP diagnostics device

    107 parts

Similar boards

  • 2 layers100 × 100 mmLed controller v5, the printed circuit board in 3D

    Led controller v5

    jacob-jarick/esp-solar-contoller

    esp8266 and esp32 based solar controllers targetting fronius inverter users

    119 parts5GPL-3.0
  • 4 layers85 × 56 mmAnthC, the printed circuit board in 3D

    AnthC

    Anthilla/AnthC

    Anthilla AnthC Board

    211 parts40
  • 2 layers57.8 × 34 mmDangerDonut, the printed circuit board in 3D

    DangerDonut

    gavin4d/dangerDonut

    Danger Donut is a work-in-progress 150 gram melty brain combat robot.

    65 parts5
  • 2 layers62 × 100 mmESP32-S3-HUB75-Driver, the printed circuit board in 3D

    ESP32-S3-HUB75-Driver

    wszeto9/ESP32-S3-HUB75-Driver

    This board serves as the Matrix Display driver for MIT's 2.007 gameboards in Spring 2024 and Spring 2025. The board can take 4 button inputs, Stemma-QT I2C sensors, and breaks out 8 GPIO pins for future use.

    137 parts3MIT
  • 4 layers101.5 × 83.4 mmThermostat, the printed circuit board in 3D

    Thermostat

    jrtaylor71/Smart-Thermostat-Alt-Firmware

    A comprehensive, feature-rich smart thermostat firmware for ESP32-S3 microcontrollers with touch display, web interface, and Home Assistant integration.

    91 parts2
  • 2 layers100 × 100 mmEnvcity aqm v2, the printed circuit board in 3D

    Envcity aqm v2

    MateusMaruzka/aqm_envcity_hw

    138 parts2
  • 4 layers100 × 60 mmWetterStationPCB, the printed circuit board in 3D

    WetterStationPCB

    sebif2004/WetterStationPCB

    Wetterstation controller (Akku+Buck-Boost-converter + ESP32/s3)

    119 parts1
  • 4 layers45 × 45 mmESP32-S3-SMALL, the printed circuit board in 3D

    ESP32-S3-SMALL

    AMIFEX-IT/ESP32-S3-SMALL

    Custom ESP32-S3 development board designed in KiCad, featuring the ESP32-S3-WROOM-1-N8R8 module, custom schematic, PCB layout, and supporting hardware design files

    33 partsMIT

Questions

How big is the Lamp rev b controller PCB?

It measures 118 × 94 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Lamp rev b controller use?

153 parts, built around the ESP32-S3-WROOM-1-N16, ADS1115IDGSR, CD74HC4051M and DB128H-5.08-2P-BK-S. 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 Lamp rev b controller KiCad files?

From the laminarforge/laminarforge-cad repository on GitHub, at the commit this page was made from: the board is pcb/lamp_rev_b_controller/lamp_rev_b_controller.kicad_pcb and its schematic pcb/lamp_rev_a/lamp_rev_a.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Lamp rev b controller design in my own project?

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