Skip to content

PCB & Case Modification

  • KiCad 7 — the PCB design is a KiCad 7 project
  • A PCB manufacturer account (JLCPCB, PCBWay, etc.)

All design files are in the PolyKybd hardware repo:

File Description
poly_kybd/poly_kybd_split72_right.kicad_pro Right PCB schematic + layout
poly_kybd/poly_kybd_split72_left.kicad_pro Left PCB schematic + layout
poly_kybd/poly_kybd_split72_plate_right.kicad_pro Right aluminum plate
poly_kybd/poly_kybd_split72_plate_left.kicad_pro Left aluminum plate

The backup/ directory contains older revisions for reference.

After making changes in KiCad:

  1. Open the PCB editor
  2. File → Plot — select Gerber format, output to a new folder
  3. File → Fabrication Outputs → Drill Files — generate drill files into the same folder
  4. Zip the folder contents and upload to your PCB manufacturer

Python scripts in the root of the repo assist with JLCPCB-format exports:

Terminal window
python bom_csv_jlcpcb.py # generate BOM
python kicad_csv_pos_to_jlcpcb_cpl_csv.py # generate CPL (pick and place)

OpenSCAD render of the PolyKybd case bottom, generated parametrically with the embossed logo and PCB standoffs

All mechanical sources live under parts/, one folder per part group (parts/case/, parts/cirque_insert/, parts/keycap_stem/, …), with every exported mesh in the matching parts/export/<group>/. parts/README.md indexes which file to print for each part. Some sources are OpenSCAD .scad files which can be modified parametrically:

  • parts/cirque_insert/cirque35_insert.scad — 35mm trackpad insert, for the recommended pad (ready STL: parts/export/cirque_insert/cirque35_insert_r3_4p.stl, a four-up plate)
  • parts/cirque_insert/cirque23_slim_insert.scad — slim Cirque 23mm trackpad insert (ready STL: parts/export/cirque_insert/cirque23_slim_insert_r8.stl)
  • parts/cirque_insert/cirque23_insert.scad — high Cirque 23mm trackpad insert (ready STL: parts/export/cirque_insert/cirque23_insert_high_r1.stl)

Render to STL with OpenSCAD: Design → Render, then File → Export → Export as STL.

Three part groups have a build script instead, because they are parameterised or generated and exporting them by hand is how an export falls a revision behind its source:

Terminal window
parts/keycap_stem/build_stems.sh # every stem plate in keycap_stem/variants/
parts/diffuser/build_frame.sh # regenerate the LED diffuser frame from the PCB, then verify
parts/build_parts.sh # the simple parts whose .scad top level IS the plate

Each re-exports idempotently: OpenSCAD emits facets in an unstable order and different builds of it disagree in the last float digits, so the scripts compare against the committed mesh and put the committed bytes back when only that noise moved. A clean re-run prints unchanged and leaves the tree alone — so a real geometry change is visible in git status rather than buried in a whole-file rewrite.