Macro Pad

As someone who spends a lot of time working on the computer, I have come to prefer a certain set of peripherals, mainly my IBM Model M keyboard. This keyboard is almost perfect for me except for the lack of modern features like media controls and programmable macro keys. To fix this, I designed a small addition for my keyboard that implements 6 buttons and a 4 way directional joystick to add functionality to my keyboard.

Electronics

To connect the buttons to my computer, I used a Teensy 3.1 microcontroller which allows me to easily emulate a keyboard as well as other computer peripherals. It uses the standard Arduino IDE and libraries which makes it extremely easy to use and write code for.

Physical Construction

The construction of the device is quite simple; a box with 6 buttons and a joystick. However, I decided to make the button design a bit special. I collect vintage calculators and HP’s are my favorites. The majority of them use a simple yet tactile button mechanism. I took inspiration from that design to build the buttons on my keypad. Here is a cross section of my design:

Button design cross section

The PCB mounted push button pre-loads the 3D-printed button which means when it is pressed, there will be little to no play in the button. This makes for a very satisfying button press. The stem of the button that contacts the PCB push button was intentionally designed to be longer than needed (which can be seen by the clipping of the parts in the cross section). This was so the stem could be sanded to fit perfectly against the push button, reducing play in the button.

Construction

The device was 3D printed in 3 parts: The bottom housing, the top housing, and the six buttons. The housing pieces are designed with tolerances which lead to a good press fit, while the PCB and joystick have are screwed directly into the bottom housing. All three pieces can be seen in the cross section above. Here is a render of the device from Fusion360:

Render of the macropad

The buttons were laid out in this order, from left to right: Lock, macro1, macro2, macro3, play/pause. The macro keys were not labeled as their function can vary depending on the current need. The joystick’s vertical axis is programmed for volume control while it’s horizontal axis is programmed for track skipping.
To mount the whole device to my keyboard, two strips of double sided tape were used. Since both surfaces are flat, this holds extremely well without damaging the keyboard.