Keyboard
BerkeleyHCI·PolymorphicBlocks·examples/Keyboard/Keyboard.kicad_pcb
About the Keyboard PCB
Keyboard is an open source PCB design by BerkeleyHCI, published on GitHub under the BSD-3-Clause license. It is a 2-layer board measuring 64.1 × 103.2 mm, with 80 components from 80 distinct parts.
Other key parts include the reg.ic, mcu.ic, usb_esd, oled.lcd and npx_shift.ic. By type, the board carries 27 capacitors, 25 diodes, 13 switches, 6 resistors, 5 ICs and 3 connectors.
It belongs with the keyboards and displays & leds designs in this gallery.
From the project
A Python-based hardware description language for PCBs for higher-level (block-diagram / system-architecture level) PCB design through libraries of directly reusable subcircuit generators.
subcircuit generator library based hardware description language for circuit board design
Polymorphic Blocks is an open-source, Python-based hardware description language (HDL) for schematic-equivalent design of printed circuit boards (PCBs). Its library of components provide a high-level abstraction for circuit design while subcircuit generators automate the calculation of fine details. Abstract component interfaces enable these libraries to be general across applications and component vendors.

Main components on the Keyboard
Keyboard bill of materials (BOM)
80 components, 80 distinct parts.
| Qty | Part | Footprint | Refs |
|---|---|---|---|
| 1 | reg.ic | SOT-223-3_TabPin2 | U1 |
| 1 | mcu.ic | LQFP-32_7x7mm_P0.8mm | U2 |
| 1 | usb_esd | SOT-23 | U3 |
| 1 | oled.lcd | Lcd_Er_Oled0.96_1.1_Outline | U4 |
| 1 | npx_shift.ic | SOT-23-5 | U5 |
| 1 | mcu.crystal.package | Crystal_SMD_3225-4Pin_3.2x2.5mm | X1 |
| 1 | usb.conn | USB_C_Receptacle_XKB_U262-16XN-4BVC11 | J1 |
| 1 | mcu.sdi | PinHeader_1x04_P2.54mm_Vertical | J2 |
| 1 | oled.device | Hirose_FH12-30S-0.5SH_1x30-1MP_P0.50mm_Horizontal | J3 |
| 1 | sw.sw[0,0].sw | SW_Hotswap_Kailh_MX | SW1 |
| 1 | sw.sw[1,0].sw | SW_Hotswap_Kailh_MX | SW2 |
| 1 | sw.sw[2,0].sw | SW_Hotswap_Kailh_MX | SW3 |
| 1 | sw.sw[0,1].sw | SW_Hotswap_Kailh_MX | SW4 |
| 1 | sw.sw[1,1].sw | SW_Hotswap_Kailh_MX | SW5 |
| 1 | sw.sw[2,1].sw | SW_Hotswap_Kailh_MX | SW6 |
| 1 | sw.sw[0,2].sw | SW_Hotswap_Kailh_MX | SW7 |
| 1 | sw.sw[1,2].sw | SW_Hotswap_Kailh_MX | SW8 |
| 1 | sw.sw[2,2].sw | SW_Hotswap_Kailh_MX | SW9 |
| 1 | sw.sw[0,3].sw | SW_Hotswap_Kailh_MX | SW10 |
| 1 | sw.sw[1,3].sw | SW_Hotswap_Kailh_MX | SW11 |
Show 60 more
| Qty | Part | Footprint | Refs |
|---|---|---|---|
| 1 | sw.sw[2,3].sw | SW_Hotswap_Kailh_MX | SW12 |
| 1 | enc | RotaryEncoder_Bourns_PEC11S | SW13 |
| 1 | ledr.package | LED_0603_1608Metric | D1 |
| 1 | sw.sw[0,0].d | D_SOD-323 | D2 |
| 1 | sw.sw[0,0].npx.device | LED_SK6812MINI-E | D3 |
| 1 | sw.sw[1,0].d | D_SOD-323 | D4 |
| 1 | sw.sw[1,0].npx.device | LED_SK6812MINI-E | D5 |
| 1 | sw.sw[2,0].d | D_SOD-323 | D6 |
| 1 | sw.sw[2,0].npx.device | LED_SK6812MINI-E | D7 |
| 1 | sw.sw[0,1].d | D_SOD-323 | D8 |
| 1 | sw.sw[0,1].npx.device | LED_SK6812MINI-E | D9 |
| 1 | sw.sw[1,1].d | D_SOD-323 | D10 |
| 1 | sw.sw[1,1].npx.device | LED_SK6812MINI-E | D11 |
| 1 | sw.sw[2,1].d | D_SOD-323 | D12 |
| 1 | sw.sw[2,1].npx.device | LED_SK6812MINI-E | D13 |
| 1 | sw.sw[0,2].d | D_SOD-323 | D14 |
| 1 | sw.sw[0,2].npx.device | LED_SK6812MINI-E | D15 |
| 1 | sw.sw[1,2].d | D_SOD-323 | D16 |
| 1 | sw.sw[1,2].npx.device | LED_SK6812MINI-E | D17 |
| 1 | sw.sw[2,2].d | D_SOD-323 | D18 |
| 1 | sw.sw[2,2].npx.device | LED_SK6812MINI-E | D19 |
| 1 | sw.sw[0,3].d | D_SOD-323 | D20 |
| 1 | sw.sw[0,3].npx.device | LED_SK6812MINI-E | D21 |
| 1 | sw.sw[1,3].d | D_SOD-323 | D22 |
| 1 | sw.sw[1,3].npx.device | LED_SK6812MINI-E | D23 |
| 1 | sw.sw[2,3].d | D_SOD-323 | D24 |
| 1 | sw.sw[2,3].npx.device | LED_SK6812MINI-E | D25 |
| 1 | reg.in_cap | C_0603_1608Metric | C1 |
| 1 | reg.out_cap | C_1206_3216Metric | C2 |
| 1 | mcu.crystal.cap_a | C_0603_1608Metric | C3 |
| 1 | mcu.crystal.cap_b | C_0603_1608Metric | C4 |
| 1 | mcu.vdd_cap[0] | C_0603_1608Metric | C5 |
| 1 | mcu.vdd_cap[1] | C_0603_1608Metric | C6 |
| 1 | mcu.vdda_cap | C_0603_1608Metric | C7 |
| 1 | mcu.reset_cap | C_0603_1608Metric | C8 |
| 1 | sw.sw[0,0].npx.cap | C_0603_1608Metric | C9 |
| 1 | sw.sw[1,0].npx.cap | C_0603_1608Metric | C10 |
| 1 | sw.sw[2,0].npx.cap | C_0603_1608Metric | C11 |
| 1 | sw.sw[0,1].npx.cap | C_0603_1608Metric | C12 |
| 1 | sw.sw[1,1].npx.cap | C_0603_1608Metric | C13 |
| 1 | sw.sw[2,1].npx.cap | C_0603_1608Metric | C14 |
| 1 | sw.sw[0,2].npx.cap | C_0603_1608Metric | C15 |
| 1 | sw.sw[1,2].npx.cap | C_0603_1608Metric | C16 |
| 1 | sw.sw[2,2].npx.cap | C_0603_1608Metric | C17 |
| 1 | sw.sw[0,3].npx.cap | C_0603_1608Metric | C18 |
| 1 | sw.sw[1,3].npx.cap | C_0603_1608Metric | C19 |
| 1 | sw.sw[2,3].npx.cap | C_0603_1608Metric | C20 |
| 1 | oled.c1_cap | C_0603_1608Metric | C21 |
| 1 | oled.c2_cap | C_0603_1608Metric | C22 |
| 1 | oled.vcomh_cap | C_0805_2012Metric | C23 |
| 1 | oled.vdd_cap1 | C_0603_1608Metric | C24 |
| 1 | oled.vbat_cap | C_0603_1608Metric | C25 |
| 1 | oled.vcc_cap | C_0805_2012Metric | C26 |
| 1 | npx_shift.vdd_cap | C_0603_1608Metric | C27 |
| 1 | usb.cc_pull.cc1 | R_0603_1608Metric | R1 |
| 1 | usb.cc_pull.cc2 | R_0603_1608Metric | R2 |
| 1 | ledr.res | R_0603_1608Metric | R3 |
| 1 | oled.iref_res | R_0603_1608Metric | R4 |
| 1 | i2c_pull.scl_res | R_0603_1608Metric | R5 |
| 1 | i2c_pull.sda_res | R_0603_1608Metric | R6 |
Keyboard design files
The KiCad project lives in the BerkeleyHCI/PolymorphicBlocks repository on GitHub; these links point at the commit this page was built from.
Keyboard: common questions
How big is the Keyboard PCB?
The Keyboard measures 64.1 × 103.2 mm, has 2 copper layers and is 1.6 mm thick.
How many components are on the Keyboard?
80 components, from 80 distinct parts. The full bill of materials is listed on this page.
Where can I download the Keyboard design files?
From the BerkeleyHCI/PolymorphicBlocks repository on GitHub, which has the KiCad layout; the links under Design files point to each one.
Can I use the Keyboard design in my own project?
Yes, under the terms of its BSD-3-Clause license, which BerkeleyHCI chose for the repository.
More boards in PolymorphicBlocks
ESP32
UsbSourceMeasure
BerkeleyHCI
168 × 52 mm310 parts4LBSD-3-Clause91RP2040/RP2350
FcmlPanel
BerkeleyHCI
115 × 72 mm240 parts2LBSD-3-Clause91RP2040/RP2350
Fcml
BerkeleyHCI
78 × 72 mm179 parts2LBSD-3-Clause91ESP32
IotThermalCamera
BerkeleyHCI
30 × 95 mm119 parts2LBSD-3-Clause91ESP32
SevenSegment
BerkeleyHCI
226 × 74.4 mm114 parts2LBSD-3-Clause91RP2040/RP2350
RobotCrawler
BerkeleyHCI
60 × 80 mm112 parts2LBSD-3-Clause91ESP32
PcbBot
BerkeleyHCI
110 × 97.2 mm107 parts2LBSD-3-Clause91ESP32
EspLora
BerkeleyHCI
63 × 81 mm104 parts2LBSD-3-Clause91ESP32
IotIron
BerkeleyHCI
100 × 36 mm93 parts2LBSD-3-Clause91ESP32
RobotDriver
BerkeleyHCI
116.5 × 82.3 mm86 parts2LBSD-3-Clause91IotFan
BerkeleyHCI
24 × 70 mm56 parts2LBSD-3-Clause91
Similar boards
BM28B0.6-24DSBreakout
scottbez1
15.2 × 35.6 mm3 parts2LApache-2.022.2kView base
scottbez1
81.2 × 81.2 mm81 parts2LApache-2.022.2kLevelShifterBreakout
scottbez1
15.2 × 20.3 mm5 parts2LApache-2.022.2kView screen
scottbez1
35 × 35 mm12 parts2LApache-2.022.2kChainlinkDriverTester
scottbez1
198.1 × 95.3 mm123 parts2LApache-2.04.2kChainlinkBase
scottbez1
98.4 × 190.5 mm119 parts2LApache-2.04.2k