./ 2022

Macro Deck

A handcrafted macro deck for those who prefer tactile shortcuts

Details

Tools
  • KiCad
  • Arduino
Team

Leonardo Mussatto

./ introduction

Macro Wheel is a self-initiated hardware project: a compact, programmable macro deck designed to streamline shortcut-heavy workflows across creative software. It’s both a personal productivity tool and a full-stack learning exercise - from PCB design and firmware to case prototyping and desktop companion UI.

The device merges mechanical key switches, rotary encoders, addressable LEDs and a 1.3-inch TFT display into a small desktop controller that connects via USB and acts as a native HID keyboard. A companion app (written in AutoHotkey with a Neutron-based UI) manages profiles, LED states and automatic switching based on the active program.

The project is a work in progress - functional hardware is assembled, firmware and UI are under development, and the case design needs a revised print.

./ development

Intent

Macro Wheel sits at the intersection between a practical productivity tool and a learning-driven hardware project. While similar control surfaces already exist, this prototype was conceived primarily as a way to understand — through practice — how such devices are designed, built and integrated into everyday creative workflows.

Spending long hours in tools like Blender, DaVinci Resolve or TouchDesigner involves constant use of keyboard shortcuts and frequent switching between input devices. Designing and building a macro deck from scratch provided a concrete way to examine how part of this cognitive and physical load can be offloaded onto a customisable, context-aware physical interface.

Beyond its immediate usefulness, the project functioned as an end-to-end exploration: from PCB layout and firmware architecture to mechanical tolerances and desktop automation. The result is a working device that supports real tasks, but whose primary value lies in the understanding gained through its design and construction — including the trade-offs that shape specialised tools of this kind.

./ development

Hardware Overview

ComponentSpecification / Note
MicrocontrollerArduino Micro (USB HID)
Switches16 MX-style hot-swappable switches via 0305 sockets (14 matrix + 2 independent modifier switches)
Rotary encoders4 × EC11 (one central, three smaller secondary encoders)
LEDs20 × SK6812 Mini-E (3535) addressable RGB
Display1.3″ TFT LCD with ST7789 driver, routed through TXB0104 voltage level translator
I²C expandersMCP23017-E/SP-ND + MCP23008-E/P-ND (buttons + encoders)
Power / dataUSB 5 V + HID data via USB
PCB2-layer white board from JLCPCB
Case3d printed PLA with CNC-milled frost-acrylic side panels
AssemblyPCB screwed to PLA baseplate; encoders and sockets hand-soldered; LEDs + display pending

The Arduino Micro communicates with two I²C expanders to free GPIO pins:

  • The matrix of 14 switches uses multiplexing with diodes for stable reads.
  • Interrupts handle encoder rotation, encoder-switch clicks, and two independent switches, ensuring low-latency input.

Image Gallery

  • Firmware

    Developed in PlatformIO (VS Code) using:

    • Arduino Keyboard / HID libraries for native HID keystroke output.
    • Adafruit MCP23X17 and MCP23X08 libraries.
    • Modified MD_REncoder library to support encoders connected through MCP devices.
    • Custom interrupt and event-handling code for encoders and matrix inputs.

    Each input emits a unique HID key combination (F13–F24 with modifiers). These keystrokes are intercepted by the companion script, which maps them to user-defined actions.

    Firmware for LEDs and the display is pending implementation; current focus is on stabilising the encoder and switch logic.

  • Companion Script and UI

    Written in AutoHotkey (AHK) with a Neutron HTML/CSS interface, the desktop companion:

    • Loads and saves profiles via a human-readable .ini file (import/export supported).
    • Lets users assign macros, media or mouse actions to each input.
    • Will (in later builds) manage LED colour and automatic profile switching based on the foreground application.

    At runtime, the companion listens for HID inputs (F13–F24 + modifiers), then triggers the mapped actions. This architecture keeps the firmware simple and light while allowing customization and process aware logic. Being written in AHK, it currently only supports Windows.

Image Gallery

  • Design & Fabrication

    3d printed as a prototype, the next iteration will correct angles, add encoder wheels, and fit the display.

    • PLA case: mechanical testing revealed that the rear angle was too shallow, making PCB insertion difficult once encoders were soldered.
    • Display fit: the TFT module did not align and fit inside the first print - future revision increases clearance.
    • Side panels: frost acrylic (CNC-milled by the university workshop technician).
    • Mounting: PCB fixed with screws to the PLA bottom.

./ outcome

Reflections & learnings

  • End-to-end design thinking: working from schematic to firmware and physical design clarifies how electrical and mechanical decisions ripple through the system.
  • Reliable assembly tools are essential: inadequate soldering gear limited LED work and delayed completion.
  • Ergonomics first: angle, knob size and switch placement significantly affect comfort and use.
  • Separation of concerns: pushing complex profile logic to a desktop companion keeps the embedded side simpler, lighter and safer to update, but introduces compatibility issues.

./ roadmap

Next Steps

  1. Revise and reprint case (correct rear angle, LCD fit, encoder wheels).
  2. Finish soldering LEDs + display.
  3. Extend firmware with LED profiles and display UI.
  4. Complete companion UI (LED editor, auto-switching).
  5. Documentation: improve document and update open-source repository