Skip to the content
4 layers70 × 50 mmPot pulse, the printed circuit board in 3D

USB-powered ESP32-C3 plant-shelf monitor for home growers to track soil moisture, light, and microclimate trends in a local dashboard without cloud accounts or automatic watering.

Size
70 × 50 mm
Copper layers
4
Thickness
1.6 mm
Parts
60
Nets
27
Pads
224
Tracks, vias
571, 95
Pours
7
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
5 Sep 2026
Updated
14 Sep 2026

Overview

Pot pulse is an open-source printed circuit board by rwrife, from the rwrife/pot-pulse repository on GitHub, published under the MIT licence. It is a 4-layer board of 70 × 50 mm with 60 parts on 27 nets, routed with 571 tracks and 95 vias.

It is built around the ESP32-C3-MINI-1 and VEML7700-TT. Its parts include 13 capacitors, 12 resistors, 7 ICs, 6 connectors and 1 diode. It belongs with the home automation and IoT boards and the ESP32 and RISC-V boards of this library.

Main components

2

README

hardware/kicad/README.md

Pot Pulse KiCad project

This directory contains the editable KiCad 9 project for the USB-powered Pot Pulse four-zone sensor node: first-pass schematic (issue #3) and first-pass PCB (issue #5).

Files

  • pot-pulse.kicad_pro — KiCad project settings.
  • pot-pulse.kicad_sch — editable schematic source of truth.
  • pot-pulse.kicad_pcb — editable first-pass PCB (generated by build_pcb.py, routed via FreeRouter, DRC-adjudicated).
  • lib/pot-pulse.kicad_sym — project symbols whose pin maps were transcribed from the manufacturer documents cited in ../component-selection.md.
  • lib/pot-pulse.pretty/ — project land patterns (ESP32-C3-MINI-1, VEML7700) transcribed from the datasheets cited in ../component-selection.md; generated by generate_footprints.py.
  • fp-lib-table / sym-lib-table — project library registration so the board opens on any machine with KiCad 9.
  • generate_schematic.py — reproducible first-capture generator; the generated schematic remains editable in KiCad.
  • validate_schematic.py — static acceptance checks for required parts, properties, nets, pin mappings, test access, and the native ERC summary.
  • netlist_to_json.py — exports reports/pcb-input/{netlist,components}.json (placement/routing input data derived from the schematic netlist).
  • build_pcb.py — generates pot-pulse.kicad_pcb through the pcbnew API (outline, placement table with courtyard/edge asserts, net classes, RF rule areas, pours, text).
  • generate_footprints.py — generates the project land patterns from datasheet dimensions.
  • route_driver.py — Specctra DSN export / SES import driver (import saves immediately before probing).
  • dsn_strip_inner_layers.py — keeps the autorouter on F.Cu/B.Cu so the inner planes stay solid.
  • rip_up_dangling.py / rip_up_zone.py / rip_up_congested.py — stranded-fragment and surgical rip-up helpers between router passes.
  • close_stubs.py — deterministic final stub closer (collision-capsule tested; --dry reports LEFT pairs verbatim).
  • fill_zones.py — headless "Fill All Zones".
  • silk_hygiene.py — post-route silkscreen cleanup (hides dense-passive refs, shrinks TP/test refs, enforces 0.15 mm text stroke).
  • reload_probe.py / check_placement_vs_table.py / board_inventory.py / list_plane_tracks.py / lane_blockers.py — verification probes (reload integrity, placement-vs-table drift, copper inventory, residual-gap diagnosis).
  • reports/erc.rpt — native KiCad 9 electrical-rules report.
  • reports/schematic-analysis.txt — supplemental static analyzer output.
  • reports/pot-pulse.net — netlist export feeding netlist_to_json.py.
  • reports/drc-placement.json — placement-stage native DRC (pre-routing).
  • reports/routing/ — per-pass DSN/SES/DRC evidence; each passN-drc.json is the kicad-cli truth for that pass.
  • reports/drc-final.json — committed final DRC state for pot-pulse.kicad_pcb.

Layout intent, keepout strategy, grounding approach, assembly/testability notes, and documented first-pass gaps: ../pcb-design-notes.md.

Reproduce and verify

The host needs KiCad 9 symbol libraries and Python 3.11+:

sh
python3 -m venv /tmp/pot-pulse-kicad-venv
/tmp/pot-pulse-kicad-venv/bin/pip install -r hardware/kicad/requirements.txt
KICAD_SYMBOL_DIR=/usr/share/kicad/symbols \
  /tmp/pot-pulse-kicad-venv/bin/python hardware/kicad/generate_schematic.py
kicad-cli sch erc -o hardware/kicad/reports/erc.rpt hardware/kicad/pot-pulse.kicad_sch
KICAD_SYMBOL_DIR=/usr/share/kicad/symbols \
  /tmp/pot-pulse-kicad-venv/bin/python hardware/kicad/validate_schematic.py \
  --erc hardware/kicad/reports/erc.rpt

The PCB steps need the pcbnew Python bindings (KiCad container image); all scripts run inside hardware/kicad/:

sh
kicad-cli sch export netlist pot-pulse.kicad_sch -o reports/pot-pulse.net
python3 netlist_to_json.py
python3 build_pcb.py                       # asserts courtyard/edge placement
python3 reload_probe.py                    # reload integrity + pad-net probe
python3 check_placement_vs_table.py        # board vs build_pcb.py table
python3 route_driver.py export reports/routing/passN.dsn
# host: java -Djava.awt.headless=true -jar freerouting-2.4.1.jar \
#   -de passN-2l.dsn -do passN.ses -mp 12 -gui.enabled=false   (after dsn_strip_inner_layers.py)
python3 route_driver.py import reports/routing/passN.ses
python3 rip_up_dangling.py && python3 fill_zones.py && python3 silk_hygiene.py
python3 close_stubs.py --drc reports/routing/passN-drc.json    # deterministic final stubs
kicad-cli pcb drc --severity-error --severity-warning --format json \
  --output reports/drc-final.json pot-pulse.kicad_pcb

The repository's headless kicad-cli wrapper runs KiCad 9 in a container. Committed reports are generated from the editable sources, not hand-authored.

Evidence boundary

Schematic files provide static schematic and native ERC evidence. The PCB provides static layout + native DRC evidence plus autorouter-derived routing provenance. These files do not provide simulation, assembled-board, EMC, environmental, field, or calibration evidence. RF keepout geometry is datasheet-derived; measured RF performance is bench evidence not yet claimed. USB full-speed impedance is not yet stackup-verified (documented gap in ../pcb-design-notes.md).

Parts

60
QtyValueFootprintReferences
16TestPoint_Pad_D1.5mmTestPoint_Pad_D1.5mmTP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16
12R_0603_1608MetricR_0603_1608MetricR1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12
10C_0603_1608MetricC_0603_1608MetricC2, C5, C6, C7, C8, C9, C10, C11, C12, C13
4JST_PH_S3B-PH-K_1x03_P2.00mm_HorizontalJST_PH_S3B-PH-K_1x03_P2.00mm_HorizontalJ2, J3, J4, J5
3C_1206_3216MetricC_1206_3216MetricC1, C3, C4
3MountingHole_3.2mm_M3MountingHole_3.2mm_M3MK1, MK2, MK3
1D_SOD-523D_SOD-523D1
1ESP32-C3-MINI-1ESP32-C3-MINI-1U2
1Fuse_1812_4532MetricFuse_1812_4532MetricF1
1L_1008_2520MetricL_1008_2520MetricL1
1PinHeader_1x06_P2.54mm_VerticalPinHeader_1x06_P2.54mm_VerticalJ6
1SOT-23-6SOT-23-6U7
1Sensirion_DFN-4_1.5x1.5mm_P0.8mm_SHT4x_NoCentralPadSensirion_DFN-4_1.5x1.5mm_P0.8mm_SHT4x_NoCentralPadU5
1USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalUSB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ1
1USON-10_2.5x1.0mm_P0.5mmUSON-10_2.5x1.0mm_P0.5mmU3
1VEML7700VEML7700U6
1VSSOP-10_3x3mm_P0.5mmVSSOP-10_3x3mm_P0.5mmU4
1WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm_ThermalViasWSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm_ThermalViasU1

Similar boards

  • 2 layers60 × 30 mmTd free, the printed circuit board in 3D

    Td free

    mawoka-myblock/td-free

    Measure the TD of your filament easily

    24 parts60EUPL-1.2
  • 4 layers81.2 × 81.2 mmView base, the printed circuit board in 3D

    View base

    SeedLabs-it/smartknob-hardware

    PCB and CAD files for smartknob devkit

    259 parts47
  • 4 layers239.5 × 239.5 mmBroadcast clock, the printed circuit board in 3D

    Broadcast clock

    espena/broadcast-clock

    Digital precision studio/broadcast masterclock with WiFi configuration, acts as local NTP server with accurate GPS time sync.

    440 parts28GPL-3.0
  • 2 layers38.3 × 20.8 mmESP AHT10-Extra, the printed circuit board in 3D

    ESP AHT10-Extra

    c-/ESP-AHT10-Extra

    minimalist ESP-8266 temperature/humidity sensor

    27 parts20
  • 2 layers36.8 × 90.9 mmBwlr3d, the printed circuit board in 3D

    Bwlr3d

    teapotlaboratories/bwlr3d

    Teapot BWLR3D: Asset Tracker and Environmental Sensor with Solar Energy Harvesting

    108 parts18MIT
  • 4 layers100 × 100 mmSolar panel side Z, the printed circuit board in 3D

    Solar panel side Z

    proveskit/solar_boards

    The solar panel boards for the PROVES Kit

    45 parts4CERN-OHL-W-2.0
  • 4 layers62.5 × 44.5 mmEsp32s3-plant monitor, the printed circuit board in 3D

    Esp32s3-plant monitor

    MuffinByteLabs/esp32s3-plant-monitor

    Portfolio PCB: ESP32-S3 Wi-Fi plant monitor. 4-layer KiCad 10 design, fabricated and assembled at JLCPCB — schematic, reviews and the frozen manufacturing package all readable in-browser.

    70 parts3CERN-OHL-P-2.0
  • 2 layers68.8 × 68.1 mmSmartSensor, the printed circuit board in 3D

    SmartSensor

    AvansETI/SmartSensor

    SmartSensor: a sensor to be used as sensor and actuator within existing buildings.

    68 parts2GPL-3.0

Questions

How big is the Pot pulse PCB?

It measures 70 × 50 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Pot pulse use?

60 parts, built around the ESP32-C3-MINI-1 and VEML7700-TT. 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 Pot pulse KiCad files?

From the rwrife/pot-pulse repository on GitHub, at the commit this page was made from: the board is hardware/kicad/pot-pulse.kicad_pcb and its schematic hardware/kicad/pot-pulse.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Pot pulse design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).