A few days ago, I was recommended a video by Moby Pixel on YouTube where he built a custom MIDI macropad for music composition. It looked like a pretty cool project, and I immediately wanted to build one for myself but not for music, but to automate a couple of on-demand tasks for my day job as a software developer.
I know there are plenty of great, fairly priced macropads available on AliExpress, Tindie, and Lectronz. However, I want to get back into PCB design, as it has been eight years since I last designed a professional board.
I’m also a huge Halo fan. I want my desk setup to feature a Master Chief color scheme, and I want this new macropad to perfectly match my Master Chief controller holder.
While I loved the simplicity of Moby Pixel’s design, I couldn’t find a cheap 4×4 mechanical switch PCB to use for prototyping. That inspired me to build my own.
Files
retainer_macropad.stl
Standard Tesselated Geometry -
69.42 kB -
05/10/2026 at 11:45
A few days ago, I was recommended a video by Moby Pixel on YouTube where he built a custom MIDI macropad for music composition. It looked like a pretty cool project, and I immediately wanted to build one for myself but not for music, but to automate a couple of on-demand tasks for my day job as a software developer.
I know there are plenty of great, fairly priced macropads available on AliExpress, Tindie, and Lectronz. However, I want to get back into PCB design, as it has been eight years since I last designed a professional board.
I’m also a huge Halo fan. I want my desk setup to feature a Master Chief color scheme, and I want this new macropad to perfectly match my Master Chief controller holder.
While I loved the simplicity of Moby Pixel’s design, I couldn’t find a cheap 4×4 mechanical switch PCB to use for prototyping. That inspired me to build my own.
With this project, I have a few specific goals:
Design a PCB where mechanical switches can be directly soldered.
Design a PCB with hot-swap sockets for mechanical switches.
Design a PCB featuring both hot-swap sockets and RGB LEDs.
Explore and experiment with QMK and ZMK firmwares.
Through these iterations, I will be packing more components onto a 2-layer PCB, evolving the project from a basic USB HID macropad into a fully featured version with Bluetooth, HID, and LED support. Finally, I will be stepping away from Eagle to use EasyEDA for the design to see how it performs.
The Design
There are a couple of key differences between Moby Pixel's project and mine. First, he uses a dedicated GPIO pin for every switch, whereas I will be using a keypad matrix. Second, his design integrates both the switches and the microcontroller onto a single PCB. In my version, I will design a separate PCB for the microcontroller. This modular approach will allow me to easily swap out microcontrollers to experiment with different firmwares.
Schematic
In the key matrix i added external pull-ups and switch the rows and columns. this is how the schematic looks.
The bill of materials is pretty simple
Component
Count
1N4148 Diode (SOD-123)
16
Mechanical Switch of your choice
16
10K Resistor (0603) (optional)
4
10 Pin 0.1″ Header Pins
1
PCB Layout
The PCB is 82.8mm x 82.8mm and i want to keep the distance between the switchers small so that it will ergonomic and low profile.
Finally, I was happy with my design. It took me a whole of 2 hours to design it and now i have to send it for fabrication. It was pretty easy to order PCBs from easyEDA. I just had to click one button and the PCB design was sent to JLCPCB.com and form there it was very easy and cheap to order the PCBs. I was not sponsored by JLCPCB. *cough *cough please sponsor thanks.
Assembly
I soldered the diodes using a soldering iron and it took me 10 minutes to do that. I soldered on the resistor for pull ups but later removed them because i wanted to use the internal pull ups of the RP2040.
Now for the mounting plate. I designed it using fusion360 and printed it on my 3D printer. The choice of color on this is not so great.
Next, I snapped the mechanical blue switches into place on the mounting plate and it snapped perfectly into place. Nice.
Finally I mounted and soldered the PCB in the top mounting plate with the switches.
Okay, here's where I messed up. I should have also ordered the bottom PCB with a microcontroller but I had to work with what I had on hand for testing the prototype. So, I soldered the Pi Pico i had which has the RP2040 microcontroller.
I connected the macropad to pi pico using the following pin configuration
Macro Pad Pins
RP2040 GPIO
1 (COL1)
GP9
2 (COL2)
GP8
3 (COL3)
GP7
4 (COL4)
GP6
5 (ROW1)
GP5
6 (ROW2)
GP4
7 (ROW3)
GP3
8 (ROW4)
GP2
9 (VCC)
—
10 (VCC)
—
Now that i have connected everything, I plugged in the Pi Pico to my PC and it showed up as a mass storage device.
Software
I had the sweet temptation of writing the software using...