Skip to the content
PCBKitNew board
2 layers70 × 50.5 mmMacroPad Controller Board, the printed circuit board in 3D

MacroPad Controller Board

loredavid/Hapticpad1

A 6 button macropad with a display for button labels and a mouse knob with haptic feedback! — v2 redesign: new Pico SDK firmware + USB configurator.

Size
70 × 50.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
29
Nets
40
Pads
89
Tracks, vias
204, 86
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
21 Aug 2026
Updated
21 Aug 2026

Overview

MacroPad Controller Board is an open-source printed circuit board by loredavid, from the loredavid/Hapticpad repository on GitHub, published under the CERN-OHL-S-2.0 licence. It is a 2-layer board of 70 × 50.5 mm with 29 parts on 40 nets, routed with 204 tracks and 86 vias.

Its parts include 1 capacitor, 1 IC and 1 connector. It belongs with the keyboards and input and robots and motor control boards and the RP2040 boards of this library.

README

README.md

HapticPad v2

HapticPad

A six-key macropad with an OLED label screen and a brushless wheel that generates its detents in software — the clicks you feel are torque curves, not a mechanical ratchet, so every profile can have a different feel.

Version 2 is a ground-up firmware rewrite on the Raspberry Pi Pico SDK, plus a desktop configurator that sets up the whole device over the USB cable. The hardware is unchanged from the original project by dmcke5 — the same two PCBs and the same printed parts run this firmware without any rewiring.

What is new in v2

v1 (Arduino)v2 (Pico SDK)
Macro deliverysendKeystroke() called from both cores; reports lostone core owns USB; queued, never dropped silently
Macro delaysdelay() froze screen, LEDs and buttonsnon-blocking playback, UI keeps running
Wheel zoombroken (Ctrl written into the modifier byte as a keycode)works, and is one preset among twelve
Displaybit-banged SPI, ~30 ms of blocked CPU per framePIO + DMA, ~1 ms, CPU free
LED ringFastLED bit-bang with interrupts offPIO + DMA
Encoder2 GPIO interrupts, up to 80 k/sPIO decoder, zero interrupts
Macro steps3 per button8 per button
ConfigXML on the card, edited by handon-device menu, USB configurator, or plain-text files
Firmware updateBOOTSEL buttonmenu entry or a button in the configurator
Iconsevery .bin on the original card was 72 bytes of zerosconverter that verifies its own output

Full details in CHANGELOG.md; coming from a working v1 pad, read docs/migration-from-v1.md first.

Features

  • 6 macro keys, up to 8 steps each, with per-step delays
  • Actions: key combinations, media keys, typed text, held modifiers, mouse buttons and scrolling
  • 128×64 OLED with a 24×24 icon and a label per key
  • Haptic wheel: 6 feel modes (off free clicky ratchet damped 4points) and 12 function presets (scroll, zoom, volume, tabs, history, undo/redo, timeline…)
  • 20-LED ring: off solid rainbow breath bands halo reactive profile
  • Up to 32 profiles on the microSD card, switched from the keys or the menu
  • On-device settings menu, with a screensaver that parks the motor
  • USB serial protocol — the configurator uses it, and so can a terminal
  • Live telemetry: FOC loop rate, HID queue depth, dropped reports

Repository layout

text
firmware/      HapticPad 2.0 firmware — C/C++ on the Pico SDK
  release/     hapticpad-2.0.0.uf2, ready to flash
configurator/  desktop app: profiles, macros, icons, settings over USB
hardware/      PCBs (KiCad + gerbers), 3D printable and machinable parts, BOM
sd-card/       a starter card: config.txt, example profiles, icons
assets/        190+ PNG icons to import with the configurator
docs/          everything below

Getting started

1. Flash the firmware. Hold BOOTSEL while plugging the pad in, then drag firmware/release/hapticpad-2.0.0.uf2 onto the RPI-RP2 drive. That is the last time you need the BOOTSEL button — afterwards the pad's menu and the configurator can both reboot it into the bootloader.

2. Prepare the card. Copy the contents of sd-card/ onto a FAT32 microSD and insert it. See docs/sd-card.md.

3. Run the configurator.

bash
python3 configurator/hapticpad.py

No installation: it runs on the Python that ships with macOS and opens in your browser. See configurator/README.md.

Building the firmware yourself is in firmware/README.md.

Documentation

DocumentWhat it covers
docs/hardware.mdBOM, PCB assembly, motor stack, wiring
docs/sd-card.mdcard layout, what the firmware writes
docs/profile-format.mdprofile keys, wheel modes, action vocabulary
docs/configuration.mddevice settings, and how profiles override them
docs/serial-protocol.mdthe USB command set
docs/architecture.mdhow the two cores divide the work
docs/migration-from-v1.mdupgrading a v1 pad
docs/troubleshooting.mdwhen something does not work
firmware/README.mdbuilding, flashing, debugging
configurator/README.mdthe desktop app

Credits and licence

The hardware, the enclosure and the original v1 firmware are the work of dmcke5 — Hapticpad, project video. Version 2 is a firmware and software rewrite on top of that hardware.

Licensed under the CERN Open Hardware Licence v2 — Strongly Reciprocal, the same licence as the original project. See LICENSE.

Parts

29
QtyValueFootprintReferences
3GNDTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP1, TP5, TP25
2VCCTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP4, TP24
1+5VTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP2
11Parts:Sparkfun_TMC6300U1
11Parts:RP2040PLUS_SMDWaveshare_RP2040PLUS
110000pF 50VCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1
1ATestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP22
1BTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP23
1BTN_1TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP12
1BTN_2TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP11
1Conn_01x06_PinConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ1
1D_CLKTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP7
1D_CSTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP8
1D_DCTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP9
1D_DINTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP6
1D_RSTTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP10
1LEDTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP3
1S1TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP13
1S2TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP14
1S3TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP15
1S4TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP16
1S5TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP17
1S6TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP18
1UTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP19
1VTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP20
1WTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP21

Questions

How big is the MacroPad Controller Board PCB?

It measures 70 × 50.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the MacroPad Controller Board use?

29 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 MacroPad Controller Board KiCad files?

From the loredavid/Hapticpad repository on GitHub, at the commit this page was made from: the board is hardware/pcb/MacroPad Controller Board/MacroPad Controller Board.kicad_pcb and its schematic hardware/pcb/MacroPad Controller Board/MacroPad Controller Board.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the MacroPad Controller Board design in my own project?

Its repository publishes it under the CERN-OHL-S-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from loredavid/Hapticpad

1
  • 2 layers144 × 79 mmMacroPad, the printed circuit board in 3D

    MacroPad

    loredavid/Hapticpad

    A 6 button macropad with a display for button labels and a mouse knob with haptic feedback! — v2 redesign: new Pico SDK firmware + USB configurator.

    59 parts1CERN-OHL-S-2.0

Similar boards

  • 2 layers52.3 × 10.5 mmStackLink, the printed circuit board in 3D

    StackLink

    gusmanb/logicanalyzer

    24 channel, 100Msps logic analyzer hardware and software

    29 parts5.1kGPL-3.0
  • 2 layers56 × 20 mmHallEffectXY Endstop, the printed circuit board in 3D

    HallEffectXY Endstop

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    29 parts1.1kGPL-3.0
  • 2 layers50 × 23.2 mmAnalog, the printed circuit board in 3D

    Analog

    hoglet67/RGBtoHDMI

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

    29 parts1kGPL-3.0
  • 2 layers16.8 × 13.6 mmE Fidget Lite, the printed circuit board in 3D

    E Fidget Lite

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    29 parts915
  • 2 layers85 × 12.5 mmTERES PCB3-TOUCH BTN Rev.A, the printed circuit board in 3D

    TERES PCB3-TOUCH BTN Rev.A

    OLIMEX/DIY-LAPTOP

    Do It Yourself Open Source Hardware and Software Modular Hacker's Friendly Laptop

    29 parts578Apache-2.0
  • 2 layers33.7 × 97.8 mmHAN ESP TSS721, the printed circuit board in 3D

    HAN ESP TSS721

    UtilitechAS/amsreader-firmware

    ESP8266 and ESP32 compatible firmware to read, interpret and publish data to MQTT from smart electrical meters, both DLMS and DSMR is supported

    29 parts470
  • 2 layers80 × 55 mmGB CARTPP XC, the printed circuit board in 3D

    GB CARTPP XC

    Gekkio/gb-hardware

    Game Boy -related custom hardware by gekkio

    29 parts379CC-BY-4.0
  • 2 layers55 × 58 mmProto ads bee mcu board, the printed circuit board in 3D

    Proto ads bee mcu board

    PantsForBirds/adsbee

    Open Source Embedded ADS-B Receiver

    29 parts344GPL-3.0