Skip to the content
PCBKitNew board
2 layers150 × 92 mmBalkon borg carrier, the printed circuit board in 3D

Balkon borg carrier

hgn/balkon-borg

The ESP32 front panel: THT, 2 layers, made at Aisler. Binding source of truth: docs/board-spec.md. Decisions are in the project log (../log/decisions.md).

Size
150 × 92 mm
Copper layers
2
Thickness
1.6 mm
Parts
36
Nets
36
Pads
120
Tracks, vias
293, 5
Pours
3
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
11 Jul 2026
Updated
20 Jul 2026

Overview

Balkon borg carrier is an open-source printed circuit board by hgn, from the hgn/balkon-borg repository on GitHub. It is a 2-layer board of 150 × 92 mm with 36 parts on 36 nets, routed with 293 tracks and 5 vias.

It is built around the BME280 and BC337. Its parts include 15 resistors, 4 transistors, 2 capacitors, 2 connectors and 1 fuse. It belongs with the ESP32 boards of this library.

Main components

2

README

pcb/README.md

pcb — Sensor carrier board (KiCad)

The ESP32 front panel: THT, 2 layers, made at Aisler. Binding source of truth: docs/board-spec.md. Decisions are in the project log (../log/decisions.md).

Flow (netlist from code, layout scripted)

The schematic — including the correct ESP32-DevKitC-V4 pin mapping — is described in code and turned into a KiCad netlist; placement and routing are scripted so the board is reproducible.

  1. Netlist from gen-netlist.py (SKiDL) → balkon-borg-carrier.net:
    text
    make -C pcb netlist
  2. Import the netlist into a fresh balkon-borg-carrier.kicad_pcb with kinet2pcb (footprints + nets), or start from the committed board.
  3. Place + route (one-time, headless): place-board.py lays out the footprints, draws the outline, adds the mounting holes and the "HagiOne" silkscreen, sets the Aisler DRC minimums, exports a Specctra DSN; Freerouting autoroutes it; apply-ses.py imports the session back. (Freerouting is an external tool, not vendored.)
  4. Ground pour:
    text
    make -C pcb pour           # GND pour (both layers) + antenna keep-out
  5. Verify before ordering (headless, no GUI, no manual steps):
    text
    make -C pcb verify         # ERC, DRC, netlist<->board, spec, fab outputs
    See Verification below.
  6. Fabrication outputs:
    text
    make -C pcb outputs        # gerbers/drill/pos + Aisler zip into output/
    The committed board is fully routed and DRC-clean (0 violations, 0 unconnected).
  7. Upload the gerber zip to Aisler.

Verification

make -C pcb verify runs the whole check unattended and exits non-zero if anything is off, so it is safe to trust before spending money on a fab run. Five stages:

  1. SKiDL ERC — regenerates the netlist and runs the electrical rule check (unconnected ESP header pins are expected warnings, not errors).
  2. KiCad DRC — kicad-cli geometry, clearance, track width and silk checks.
  3. netlist ↔ board — the committed board has not drifted from the code. The compare is by connectivity, not net name, so it survives SKiDL's auto-naming.
  4. board-spec intent — connector pinouts and series-resistor values match docs/board-spec.md. This is the one check a DRC cannot do: it catches a swapped connector pin or a wrong resistor value. The GPIO-number-to-header-pin mapping is out of scope (it needs the external DevKitC-V4 pinout as ground truth).
  5. fab outputs — exports the gerber and drill set, confirms it is a two-layer stack (F.Cu, B.Cu, Edge.Cuts), and renders a top PNG when a GL backend exists.

Files

  • gen-netlist.py — SKiDL script, builds the netlist from docs/board-spec.md.
  • place-board.py / apply-ses.py — headless placement and Specctra-session import (run with the system python, which has the KiCad pcbnew module).
  • add-ground-pour.py — GND pour + antenna keep-out, run in three phases (make pour); the phases must be separate processes (pcbnew drops the rule area otherwise).
  • scripts/gen-outputs.py — fabrication output via kicad-cli.
  • verify.py — orchestrates the five verification stages (make verify).
  • check-netlist-board.py / check-board-spec.py — the netlist↔board and board-spec intent checks; netparse.py is the shared netlist parser.

Conventions

Comments/net names in English. THT only, JST-XH 2.5 mm, generous spacing. Change the schematic only in gen-netlist.py, then regenerate the netlist and re-import.

Wiring

The cable harness from the carrier board's JST connectors to the external components, shown two ways. Both are generated from the netlist (make -C pcb harness), so they cannot silently disagree with the board.

Schematic harness (pinout + wire colours), rendered by WireViz from wiring-harness.yaml — click for the zoomable SVG:

Wiring harness

The same connections on the board render, with callouts placed by annotate-board.py from the connector positions (full-resolution PNG):

Board with cable callouts

Terminal assignment and the GPIO/I²C/Wago plan behind these images live in ../docs/wiring.md.

Parts

36
QtyValueFootprintReferences
7100Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR5, R6, R7, R8, R10, R12, R14
41kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR9, R11, R13, R15
4BC337Package_TO_SOT_THT:TO-92_InlineQ1, Q2, Q3, Q4
4MountingHole_2.7mm_M2.5MountingHole_2.7mm_M2.5H1, H2, H3, H4
4TasterConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ_BTN1, J_BTN2, J_BTN3, J_BTN4
2220Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2
24k7Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR3, R4
1100nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC2
110uFCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC1
12ACapacitor_THT:C_Disc_D7.5mm_W5.0mm_P5.00mmF1
15V inConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ_PWR
1BME280Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ_BME
1ESP32-DevKitC LConnector_PinSocket_2.54mm:PinSocket_1x19_P2.54mm_VerticalJ2
1ESP32-DevKitC RConnector_PinSocket_2.54mm:PinSocket_1x19_P2.54mm_VerticalJ3
1Encoder EC11Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ_ENC
1LD2410BConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ_RADAR

Questions

How big is the Balkon borg carrier PCB?

It measures 150 × 92 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Balkon borg carrier use?

36 parts, built around the BME280 and BC337. 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 Balkon borg carrier KiCad files?

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

Can I use the Balkon borg carrier design in my own project?

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

Similar boards

  • 2 layers110 × 74 mmIot i2c, the printed circuit board in 3D

    Iot i2c

    jordibinefa/PLB-IoT-I2C

    Programming Learning Board - Internet of Things - Inter Integrated Circuit (KiCAD files)

    82 parts
  • 2 layers50 × 25 mmMbus master, the printed circuit board in 3D

    Mbus master

    roarfred/AmsToMqttBridge

    Minimalistic system to read AMS/HAN data from electrical meter

    50 parts223
  • 2 layers118 × 103.5 mmEV Charger2, the printed circuit board in 3D

    EV Charger2

    fotherja/EV_Charger

    Arduino Uno Code for EV Charger

    62 parts167MIT
  • 2 layers28.7 × 81.3 mmLine sensor mini wide, the printed circuit board in 3D

    Line sensor mini wide

    ukmars/ukmarsbot

    A simple beginners multi purpose robot platform

    37 parts138MIT
  • 2 layersLM80C R6, the printed circuit board in 3D

    LM80C R6

    leomil72/LM80C

    A Z80-based homebrew computer withTMS9918, AY-3-8910, Z80 CTC, Z80 PIO, and Z80 SIO

    153 parts123GPL-3.0
  • 2 layers121 × 68 mmFreeds sanchez, the printed circuit board in 3D

    Freeds sanchez

    pablozg/freeds

    Derivador de energía solar excedente creado por Pablo Zerón, Diseño PCB por Amcalo, Tester original por Aeizoon, Wiki por Zoilo Mora

    42 parts108
  • 2 layers56.6 × 57.7 mmTashTwenty Tiny, the printed circuit board in 3D

    TashTwenty Tiny

    lampmerchant/tashtwenty

    An interface for the DCD protocol used by Apple's Hard Disk 20.

    31 parts35GPL-3.0
  • 2 layers52.8 × 149.3 mmPixelSlasher, the printed circuit board in 3D

    PixelSlasher

    CTXz/Video-Glitch-Array

    A collection of glitch art circuits dedicated to VGA signal manipulation

    22 parts30