My sister was looking for a custom keyboard and asked me to research it for her. As I researched, I discovered the prices of today's keyboards are outrageous, so I decided to study PCB's from zero experience beforehand(except certain motherboard projects) and make a fully custom keyboard to her liking. I designed from scratch in KiCad — schematic capture, component selection, footprint assignment, and board layout. The goal was to take a board through the full design flow that a production PCB would go through, rather than assembling a kit.
I designed a complete 87-key ANSI tenkeyless keyboard PCB from schematic capture through release to manufacturing: a 373.7 × 188.8 mm two-layer board carrying 234 components, hot-swappable switch sockets, a 16-LED addressable underglow system, and USB-C power and data. The finished design passes KiCad's design rule check with zero errors and zero unconnected nets.
The STM32 microcontroller module is adapted from Joe Scotto's open-source keyboard designs. The key matrix, board layout, routing, LED system, power distribution, and the manufacturing release are my own work.
Subsystem Design
Key matrix
6 rows × 17 columns, ROW2COL scan, 87 × 1N4148W blocking diodes
Controller
STM32F072CBT6, LQFP-48 — crystal-less USB
Switches
Kailh hot-swap sockets
Lighting
16 × WS2812B-compatible addressable LEDs, single data chain
Level shifting
74AHCT1G125 buffer to drive 5 V LED data from a 3.3 V MCU
Power
USB-C 5 V in, XC6206 LDO to 3.3 V, 500 mA resettable fuse
Protection
USBLC6-2SC6 ESD array on the USB data pair, CC pull-downs for USB-C compliance
Firmware
QMK, fully remappable
Board
373.7 × 188.8 mm, 2 layer, 1.6 mm FR-4
Components
234 placed (87 switches, 87 diodes, 28 capacitors, 16 LEDs, 4 ICs)
Routing
11.7 m of copper, 1,289 segments, 275 vias, 0.2 mm signal / 0.4 mm power
Verification
152 / 152 nets connected, 0 DRC errors
Tools
KiCad 10, Python, QMK, SolidWorks (STEP import for enclosure fit)
PCB design complete; Purchased Parts at JLCPCB, waiting for shipment.
PCB-Layout
KiCad PCB capture
3D render from KiCad.