Skip to the content
PCBKitNew board
2 layers74 × 75 mmHackpad4, the printed circuit board in 3D

A macropad for switching the expressions of my ASCII character while streaming or recording. Built for Hack Club Stardance.

Size
74 × 75 mm
Copper layers
2
Thickness
1.6 mm
Parts
10
Nets
14
Pads
45
Tracks, vias
57, 0
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
14 Sep 2026
Updated
14 Sep 2026

Overview

Hackpad4 is an open-source printed circuit board by Phonokles, from the Phonokles/hackpad repository on GitHub. It is a 2-layer board of 74 × 75 mm with 10 parts on 14 nets, routed with 57 tracks and 0 vias.

Its parts include 4 switches, 1 IC and 1 connector.

README

README.md

ascii-emotion-controller

A macropad for switching the expressions of my ASCII character while streaming or recording. Built for Hack Club Stardance.

PCB

Why

I have a small face tracking app that renders an ASCII face and animates it from my webcam and mic. The face sits on top of my stream in OBS, so the browser window is never the focused one. Keystrokes always land somewhere else, no matter what I press.

So the hackpad does not show up as a keyboard. It sends lines over USB serial instead, and the page reads them with WebSerial. That works no matter which window is in front.

What is in it

  • Seeed XIAO RP2040
  • 3 Cherry MX switches
  • 1 EC11 rotary encoder with push button
  • 1 SSD1306 OLED, 0.91 inch, 128x32, over I2C
  • 74 x 75 mm, two layers, solid ground pour
  • Case is two printed parts, held together with M3 heatset inserts

Full part list in BOM.csv.

Case

Case base Top plate

The base is a 8 mm tray with four 3 mm posts that hold the board off the floor so the solder joints have room. The top plate is 1.5 mm thick around the switch cutouts, which is what MX clips need to snap in.

Controls

Inputdoes
SW1normal [+_+]
SW2laughing [*_*]
SW3bored [-_-]
Turn wheelopens the menu on the OLED
Press wheel in menuconfirm selection
Hold wheelmouth keeps moving even when I am quiet

The menu has auto, normal, laughing, bored, record and transparent.

Protocol

The XIAO sends one line per event:

text
READY:hackpad
DOWN:btn1
UP:btn1
EXPR:laughing
ACT:record

Repo layout

text
production/
  gerbers/      board files for the fab
  cad/          case as STEP and STL
  firmware/     boot.py and code.py
hardware/       KiCad project
web/            the face tracking page
docs/           renders and photos
BOM.csv

Setup

Firmware

Flash CircuitPython onto the XIAO, then copy boot.py and code.py from production/firmware/ to the root of the CIRCUITPY drive.

From the Adafruit library bundle into CIRCUITPY/lib/:

  • adafruit_displayio_ssd1306.mpy
  • adafruit_display_text/

keypad, rotaryio and usb_cdc are already built in.

Website

Needs a local server, because ES modules fail CORS over file://:

text
cd web
python -m http.server 8000

Open http://localhost:8000 and click the connect button in the bottom right corner. The browser asks for permission once and remembers it.

Needs Chromium or Chrome. Firefox has no WebSerial.

On Linux your user needs access to /dev/ttyACM0. On Arch:

text
sudo usermod -aG uucp $USER

Log out and back in afterwards.

Hardware

KiCad 9 or newer, project in hardware/.

The case prints without support. STEP files are in production/cad/ if you want to change something, STL next to them for printing straight away.

Known things

  • The OBS browser source cannot do WebSerial. The page runs in a Chromium window and OBS picks it up with a window capture.
  • Chromium freezes tabs that are fully hidden, so the window has to stay visible somewhere. I keep it on its own workspace.
  • The display footprint is drawn for a 1.3 inch module but a 0.91 inch one goes in. The four pads line up, the printed outline is just a bit large.

License

MIT

Parts

10
QtyValueFootprintReferences
3SW_PushButton_Switch_Keyboard:SW_Cherry_MX_1.00u_PCBSW1, SW2, SW3
1Conn_01x04Connector:FanPinHeader_1x04_P2.54mm_VerticalJ1
1MOUDLE-SEEEDUINO-XIAOCarePackage:XIAO-Generic-Hybrid-14P-2.54-21X17.8MMU1
1RotaryEncoder_SwitchRotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mmSW4

The 6 most common of 10 parts.

Questions

How big is the Hackpad4 PCB?

It measures 74 × 75 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Hackpad4 use?

10 parts. 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 Hackpad4 KiCad files?

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

Can I use the Hackpad4 design in my own project?

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

Similar boards

  • 2 layers57 × 55.2 mmLogicAnalyzer, the printed circuit board in 3D

    LogicAnalyzer

    gusmanb/logicanalyzer

    24 channel, 100Msps logic analyzer hardware and software

    10 parts5.1kGPL-3.0
  • 2 layers32.2 × 15.4 mmProtector, the printed circuit board in 3D

    Protector

    byrantech/laptop

    anyon_e, a highly integrated, high end, open source laptop. Attempt the impossible.

    10 parts4.3kMIT
  • 2 layers26 × 18 mmConn, the printed circuit board in 3D

    Conn

    yaqwsx/KiKit

    Automation tools for KiCAD

    10 parts2.1kMIT
  • 2 layers44.3 × 30.5 mmLime2-SATA RevA, the printed circuit board in 3D

    Lime2-SATA RevA

    OLIMEX/OLINUXINO

    OLINUXINO is Open Source / Open Hardware, low cost from EUR 24 Linux Industrial grade Single Board Computer capable to operate -25+85C

    10 parts1.5k
  • 2 layers17.8 × 43.2 mmNano Adapter, the printed circuit board in 3D

    Nano Adapter

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    10 parts1.1kGPL-3.0
  • 2 layers53.9 × 23.2 mmBuffer, the printed circuit board in 3D

    Buffer

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    10 parts1kGPL-3.0