Building an Unusual Video Game Controller

Every so often I visit OMSI After Dark. These are occasional adults-only evenings that the local science museum puts on. A few months ago the specific After Dark event was about the history of video games. They had (and still do have, for a little while longer) a full exhibit, including some free-play games from Ground Kontrol. They also had tables and booths for locals, for example PIGSquad, the Portland Indie Game Squad. I was instantly drawn to the table for Panoramical. I think I’d describe it less like a game and more like an interactive art project — visuals and sounds that morph to your whim. Although it can be awkwardly controlled by mouse and keyboard, it truly shines with the custom controller. That controller was one of the key things that drew me to the table.

pro_controller

From a technical standpoint, that controller is a MIDI device. It has 18 knobs that send control updates, each from 0..127. It also has a pushbutton that sends a single ‘C’ note. But from a “gameplay” standpoint, it makes the entire experience tactile and intuitive. Instead of fumbling around, trying to adjust 18 sliders on the screen with a mouse and keyboard in a way that’s a little difficult to describe to a bystander, you just twist some knobs. The position of the knobs directly affect the music and visuals. You can leave it in the corner at a party, with no instructions, and people will naturally figure it out.

But most importantly, the controller is Open Source hardware. Although there used to be some available to purchase, the source code and hardware design are on Github. Construction was not exactly straightforward. There were a number of gaps, a few of which I got through by examining the build photos, but some of which I just had to make my own decisions and variations.

I forked the original project and hope to better cover the details, in case someone else wants to follow in my footsteps.

Starting the Build

It all started with a bag of knobs. Well, that plus the other electronic parts. You can see a full parts list, with links, in the project’s README file. I needed to use my calipers to make some measurements on the knobs before I could design the panel or enclosure. I also needed to verify that the parts I selected were compatible with one another and would work the way I wanted.

01-bag_o_knobs

02-laser_cut_verification

I had a rough design for the full enclosure, but decided to immediately order the acrylic faceplate all by itself. That would help me wrangle the knobs into an organized grid I could easily solder to and experiment with. I did not want to have to constantly detangle a rats nest of knob parts. When the panel returned from Ponoko (the online laser-cutting shop all my designs are optimized for), everything assembled and tested well. The Hardware_Test app is what I used for all of the hardware bring-up. Instead of outputting MIDI commands, it outputs human-friendly text over the serial port about the state of all the controls. This is MUCH easier to debug.

03-verify_knob_multiplexing

I then set to work on the wood enclosure design. It is mainly composed of four walls and internal insets that the front panel rests on (and gets epoxied to later). There’s a hole for an arcade pushbutton and a USB outlet. Beyond that, there’s not much to the design. I know that some people like to build laser-cut enclosure that use dovetailed notches that can be wood-glued together, but I prefer the industrial look of captive nut mortise and tenon joints — so that is what I used.

04-Wood_Sides

The design itself was solid, but I did have one major mistake (which I have since corrected in the design files). I accidentally used cut lines instead of etch lines to outline the lettering. Were I to do it again, there are a couple of other changes I would have made. See the “Changes” section at the bottom of this blog post for details.

07-text

Assembly went well. I used nuts and bolts to attach the walls together and Gorilla Glue to glue in the insets. If you look closely, you’ll see that the two longer sides have not just the big arch supports, but also smaller strips. This is to give the panel a little more surface to glue onto.

05-insets

The sides bow out a little (see the “Changes” section below for more gritty detail), so I solved that with some hackery involving zip-ties and stick-on mounts.

11-support

When everything looked good, in both hardware and software, I prepared to glue down the acrylic front panel. To get the epoxy to adhere a little better, I roughed up the underside edges with some high-grit sandpaper.

12-prep_for_glue

The completed project looks pretty snazzy, if I do say so myself:

15-finished

If you’d like to build your own, the complete plans are available at https://github.com/BrianEnigma/Panoramical-Controller

Setup

Setup of the MIDI controller is super easy. Plug it in. Verify your computer sees it. For this I started with Apple’s Audio MIDI Setup.app (found in /Applications/Utilities). If you launch the MIDI Studio View (Cmd-2), you should be able to see the MIDI device in the list. Once this looked good, I used MIDI Monitor to verify that I saw the expected commands come across the wire. When you launch Panoramical, configuring the controller is easy and straightforward: click an on-screen control with the mouse, then twiddle the corresponding panel knob.

98-config

And finally I was able to control the software from the MIDI surface.

99-play

Cha-cha-cha-changes

(a.k.a. zip-ties fix everything)

If I were to do this again, there are a couple of things I would do differently. Maybe you or someone you know wants to fork my project and make these modifications.

I hadn’t considered that the wood enclosure would flex enough to bow out in the center. It pulled outward, away from the acrylic panel, leaving a gap. I solved this by attaching zip-tie mounts on either side of the inside, then attaching zip-ties to give it a little tension. If I were revising the design, I would use a wood cross-brace in the center to help keep the walls at a constant distance from one another.

My original design used a Teensy microprocessor. It’s about the size of a stick of gum, and I figured I could easily zip-tie it to the inside of the enclosure, without any sort of formal mounting bracket. Although I did most of my initial development on the Teensy, I switched to the Arduino fairly late in the project. I just couldn’t get the Hiduino MIDI library to work with the Teensy, but MIDI works quickly and easily on the Arduino with that same library. Of course, the Arduino is much larger and I didn’t have any place obvious to mount it, hence the zip-tie suspension.

13-zip_ties 14-zip_ties

And honestly, you could easily bring these two mods together into one: a wood cross-brace in the center, parallel to the acrylic front panel, with mounting holes to attach the Arduino.

Questions? Comments? Leave ’em here or contact me directly.

Posted in: Games Projects

Published by

Brian Enigma

Brian Enigma is a Portlander, manipulator of atoms & bits, minor-league blogger, and all-around great guy. He typically writes about the interesting “maker” projects he's working on, but sometimes veers off into puzzles, software, games, local news, and current events.

Leave a Reply

Your email address will not be published. Required fields are marked *