Custom Controller Box

In this project, you'll learn how to build a basic USB HID keyboard for triggering things like commands and hotkeys for controlling any number of software and hardware. We'll use an Adafruit Feather M0 Express, a handful of arcade buttons and Circuit Python to make a DIY keyboard controller.

Circuit Python makes this project super simple to program and easy to update - no need for a compiler, IDE, or any special drivers. Just plug it in and open up the text file in the virtual USB key to reprogram the keys whenever you want.

When this box is connected to your computer, it behaves just like a USB HID Keyboard. Press a button and it types a letter! It's really simple and easy to manipulate the software so you can output single characters, or string multiple characters together to execute commands! The LEDs also light up each time you press a button. Sound like an interesting project? Let's get started!

Prerequisite Guides

If your new to electronics and the Adafruit Feather M0 Express, I suggest you walk through the following guides to get the basics. The Adafruit Feather M0 Express guide will walk you through setting it up with CircuitPython.

24mm Arcade Buttons

A button is a button, and a switch is a switch, but these translucent arcade buttons are in a class of their own. Particularly because they have LEDs built right in! That's right, you'll be button-mashing amidst a wash of beautiful light with these lil' guys. They're the same size as common miniature arcade controls, and require a 24mm diameter hole for mounting.


For this project, we're using the Adafruit Feather M0 Express. It's got on-board SPI flash and a special bootloader that allows you to use different programming languages. We'll use CircuitPython to create a emulated HID keyboard. For the buttons, we'll use 24mm arcade buttons.

1 x Adafruit Feather M0 Express
Designed for CircuitPython
4 x Mini LED Arcade Button
24mm Pick Your Color

Tools & Supplies

To put together the electronics, we need a few tools like a soldering iron and some wire cutters. I recommend using helping third hands and a panavise jr to help you solder things – They help keep things sturdy and in place, making it easier to solder. You'll also need some handy tools and hardware.

1 x Panavise Jr.
Holds things steady
1 x Helping Third Hands
Helps holds wires steady
1 x 30AWG Wire
Silicone cover stranded wire
1 x Flush Cutters
Hakko Precision Flat Pliers
1 x Wire Strippers
Hakko Professsional Quality 20-30 AWG Wire Strippers
1 x Solder Iron
Heat pen used for melting solder wire
4 x Machine Screws
M2.5 x 5mm Phillips Flat Head
1 x Tweezers
Fine tip straight tweezers - ESD safe - 135mm
1 x Precision Screw Driver
Precision screwdriver set (6 pieces)

3D Printed Case

All of the components will be housed in a 3D printed box. It's a two-piece design that features a "snap-on" cover. The cover is specifically designed to house the Adafruit Feather boards using two machine screws.  The CAD model is parametrically driven, so it's easy to modify the design.

No 3D Printer? No Problem!

If you don't have access to a 3D printer, we suggest checking out a 3D printing service like There, you can search and find a local maker who can print the parts and ship them to you! Just download the STLs and upload them, you can browse through a list of local 3D printer operators and choose your material and the color you want the parts to be printed in.

Ideas, Ideas, Ideas!

Game Controller

Make an arcade style game controller to play retro games. These are after all, arcade buttons! They're fun to press and work well for game controllers.

Media Editing Controller

Use this to quickly switch scenes in wirecast, change cameras in adobe premiere or final cut pro. Execute shortcut keys, commands, tools and other handy things with a push of a single button.

Assistive Technology Switch

With easy to press buttons and large surface area, this could be quite handy for AT projects. Make a custom project to trigger any number of systems and applications.

This guide was first published on Jun 28, 2017. It was last updated on Apr 17, 2024.

This page (Overview) was last updated on Jun 12, 2017.

Text editor powered by tinymce.