Skip to the content
PCBKitNew board
2 layers69.5 × 117.5 mmMacropad, the printed circuit board in 3D

A custom macropad project featuring custom PCB design, laser-cut enclosure, and dedicated firmware implementation.

Size
69.5 × 117.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
87
Nets
71
Pads
327
Tracks, vias
806, 184
Pours
5
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
21 Oct 2026
Updated
3 Nov 2026

Overview

Macropad is an open-source printed circuit board by Jakov4848, from the Jakov4848/CustomMacroDeck repository on GitHub. It is a 2-layer board of 69.5 × 117.5 mm with 87 parts on 71 nets, routed with 806 tracks and 184 vias.

It is built around the ATMEGA32U4-AU and WS2812B. Its parts include 27 diodes, 22 capacitors, 14 switches, 12 resistors and 3 connectors. It belongs with the keyboards and input boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

2

README

README.md

MACRODECK

Macrodeck Macrodeck Macrodeck Macrodeck

This repository contains the hardware and software files for an open-source, programmable macropad keyboard based on the Arduino platform. Developed as a bachelor's thesis, this device allows users to store keyboard shortcuts directly on the hardware's memory, eliminating the need for complex PC software while improving daily workflow productivity.

Features

  • Native USB HID Emulation: Powered by an ATmega32U4 microcontroller with an integrated USB controller, meaning it works plug-and-play on any computer without extra drivers.
  • Mechanical Switch Matrix: Features a 12-key grid with anti-ghosting diodes to prevent false key presses.
  • Hot-Swappable: Utilizes hot-swap sockets for effortless mechanical switch replacement and testing.
  • Customizable RGB Lighting: Addressable WS2812B NeoPixel LEDs provide per-key illumination with customizable static colors and dynamic effects.
  • On-Device Interface: An integrated 0.96" I2C OLED display (SSD1306) and a rotary encoder allow users to navigate menus, select layers, and adjust PC volume directly from the device.
  • Persistent Memory: Key bindings, macro steps, and layer names are permanently saved in the MCU's 1KB EEPROM.
  • Custom Real-Time Configuration Protocol: Shortcuts can be reprogrammed in real-time via a serial UART interface using the Arduino IDE Serial Monitor or a Python script.
  • Custom Enclosure: Designed with a 4-layer laser-cut acrylic (plexiglass) case.

Hardware Bill of Materials (BOM)

The custom PCB was designed in KiCad. If you are assembling the board yourself, you will need the following components:

ComponentDescription / PackageQuantity
MicrocontrollerATmega32U4-AU (QFP-44 10x10)1
USB ConnectorUSB 2.0 Type-C Receptacle 16-pin (SMD)1
Display0.96" OLED I2C SSD1306 (30x30)1
Rotary EncoderEC11 Rotary Switch (THT)1
Mechanical SwitchesCherry MX Keyswitches (THT)12
Hot-Swap SocketsCPG151101S11-2 (SMD)12
RGB Lighting LEDsWS2812B NeoPixel LEDs12
Anti-Ghosting Diodes1N4148W 75V 150mA (SOD-123)12
Reset SwitchTactile Switch 6.1x3.6mm (TS-1092S-B3D2-G)1
Crystal Oscillator16.000MHz SMD5032-2P (ABM3-16.000MHZ-D2Y-T)1
ProtectionSchottky Diode 20V 500mA (MBR0520LT1G)1
ProtectionPolymeric PTC Resettable Fuse 6V 500mA (SMD1206P050TF)1
LED (Indication)Blue 460nm LED (0603)1
Resistors (0603)1kΩ (x1), 2.2kΩ (x2), 5.1kΩ (x2), 10kΩ (x2), 470Ω (x2), 22Ω (x2)11 Total
Capacitors (0603/0805)100nF (x6), 10uF (x1), 1uF (x1), 22pF (x2)10 Total

Building & Installation

  1. PCB & Enclosure: The PCB manufacturing files are generated from KiCad. The enclosure is constructed from 4 layers of laser-cut black plexiglass.
  2. Bootloader: A USBasp programmer is required to flash the initial bootloader to the ATmega32U4 chip using the ISP (In-System Programming) header.
  3. Firmware: The firmware is written using the Arduino IDE. Once the bootloader is installed, you can flash updates directly via the USB-C port.

Interface

The macropad operates on a Finite-State Machine with 8 distinct modes (states):

  1. NORMAL: The primary working state. Scans for keypresses to execute macros and uses the rotary encoder to control PC volume.
  2. MAIN MENU: Accessed by pressing the rotary encoder button. Allows navigation to other settings.
  3. LAYERS MENU: Switch between different shortcut layers.
  4. LEDS MENU: Access sub-menus for lighting.
  5. BRIGHTNESS MENU: Adjust the intensity of the LED backlights.
  6. STATIC COLORS MENU: Select a solid color for the keys.
  7. EFFECTS MENU: Select dynamic RGB animations.
  8. PROG MODE (Programming): Put the device into configuration mode to remap keys and rename layers via UART.

Configuration Protocol (How to program macros?)

When the device is in PROG MODE, open the Arduino IDE Serial Monitor (or use a serial Python script) to send UART commands. Due to the 1KB EEPROM limit, each macro is restricted to a maximum of 10 sequential keystrokes.

  • To rename a layer, send: {{layer_id, layer_name}}
  • To assign a shortcut to a key, send: <<layer_id, key_id, label, macro_steps>>
  • To list all current shortcuts, send: ?

Whenever a programmed key is pressed in normal mode, a pop-up appears on the OLED display showing the executed shortcut (e.g., CTRL+F).

Parts

87
QtyValueFootprintReferences
180.1uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC4, C5, C6, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22 +2
12DDiode_SMD:D_SOD-123D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12
12SW_PushPCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_1.00uSW2, SW3, SW4, SW5, SW6, SW7, SW8, SW9, SW10, SW11, SW12, SW13
12WS2812BLibrary:LED_WS2812B-2020_PLCC4_2.0x2.0mm_editedD15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25, D26
4MountingHoleMountingHole:MountingHole_2.2mm_M2H5, H6, H7, H8
210KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR5, R6
21KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR7, R12
222Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR3, R4
222pFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC2, C3
2470ohmResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR10, R11
25.1KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR1, R2
2LEDLED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolderD13, D27
2MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2
2RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR8, R9
110uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC7
11uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1
1ATmega32U4-APackage_QFP:TQFP-44_10x10mm_P0.8mmU1
1Conn_01x04Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ2
1Conn_02x03_Top_BottomConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ3
1CrystalCrystal:Crystal_SMD_Abracon_ABM3-2Pin_5.0x3.2mm_HandSolderingY1
1D_SchottkyDiode_SMD:D_SOD-123D14
1FuseFuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolderF1
1RotaryEncoder_SwitchRotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm_MountingHolesSW14
1SW_PushButton_Switch_SMD:SW_SPST_CK_RS282G05A3SW1
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1

Questions

How big is the Macropad PCB?

It measures 69.5 × 117.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Macropad use?

87 parts, built around the ATMEGA32U4-AU and WS2812B. 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 KiCad files?

From the Jakov4848/CustomMacroDeck repository on GitHub, at the commit this page was made from: the board is kicad_files/macropad.kicad_pcb and its schematic kicad_files/RGB_LEDs.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Macropad design in my own project?

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

Similar boards

  • 2 layers228.4 × 85 mmLeChiffre, the printed circuit board in 3D

    LeChiffre

    tominabox1/Le-Chiffre-Keyboard

    Great thanks goes to Jake at P3D for really making the case amazing and open sourcing his work. Check him out at P3Dstore.com

    105 parts183GPL-3.0
  • 2 layers228.6 × 76.8 mmSchwann Rev0.5b, the printed circuit board in 3D

    Schwann Rev0.5b

    The-Royal/The_Royal_Open-Source-Projects

    A Master Repository For All things Royal Made

    127 parts159MIT
  • 2 layers308.7 × 241.8 mmOTTOtact, the printed circuit board in 3D

    OTTOtact

    cester-ino/OTTO-hardware

    those specs refer to the tactile buttons version, but a led backlight button version is in the works too.

    229 parts49GPL-3.0
  • 2 layers247.7 × 127 mmEuclid36, the printed circuit board in 3D

    Euclid36

    sadekbaroudi/euclid36

    At the time of creation, using Kicad 5.1.9 - This may not work with future versions

    130 parts24
  • 2 layers285.5 × 112.1 mmYacc46 plate, the printed circuit board in 3D

    Yacc46 plate

    1m38/keyboards

    yacc46 is a 44-46keys self-made keyboard.

    144 parts21MIT
  • 2 layers61 × 43.8 mmPulse 4k, the printed circuit board in 3D

    Pulse 4k

    Maxr1998/Pulse_4k

    CAD files for plate and PCB of my Pulse 4k macropad, with 4 keys and 2 rotary encoders.

    39 parts21
  • 2 layers301.3 × 89.5 mmChocolate bar, the printed circuit board in 3D

    Chocolate bar

    misonoworks/chocolate-bar

    A low-profile 50% keyboard, with less ergonomics than expected!

    156 parts16AGPL-3.0
  • 2 layers163.5 × 163.5 mmSkull badge, the printed circuit board in 3D

    Skull badge

    b1uN7/DEFCON-26-Flying-Skull-Badge

    DEFCON 26 Flying Skull Badge

    111 parts15