A (mostly) 3D printed MIDI controller

Ok…so…for a while now I’ve been wanting to make a MIDI device, not that I am a very musically inclined person but they look kind of cool and I’ve seen people doing interesting things with them.

There are a lot of open projects around, most of them based on Arduinos as main controllers, a couple of examples:

Dartmobo is amazing! It’s a whole system to make highly customized devices. You have an Arduino sketch and a shield whit upto 48 inputs and 32 outputs. Ther is an app to edit and configure your device but It also has an “auto detect” function to recognize inputs by itself. I might build one of these in the future but I wanted to start with something slightly easier.

fliperRGB is a project made by Gustavo Silveira. It is also based on an Arduino, it uses a 16 inputs multiplexer, 16 buttons and 8 potentiometers. I liked this one for the simplicity but also becasue it uses RGB leds and as we all know…everything is better with RGB leds. It uses 16 WS2812w leds, one for each button.

The multiplexer is a 74HC4067. I don’t have any of these but I do have a couple of MCP506 lying around. These are 16 input analog multiplexers quite similar to the 4067, with input protections and higher voltage range.

For the buttons I have a few of these big arcade buttons:

I don’t have enough, as you can see they are humongous, there is no easy way to put the RGB leds inside (at least whit out a ton of work) and they make a huge “clank” sound when you press it. So I decided to find an alternative.

I have a lot of 6mm SMD tact switches. The plan was to design an arcade button analog around these. This is what I came up with:

Assembled button on the left, section view on the right

The button is made of two parts, the bottom (or “base”) is where the tact switch will be. The top (or “cap”) is actually two main components connected together with flexures. The outside part screw into the base and the inside is free to be pushed and press the tact switch.

The displacement is highly exaggerated in the simulation.

As the rest of the device was also going to be 3D printed I put a thread on the outside component of the cap and later on add matching threads on the holes in the front panel. This way the mounting is really straight forward.

I had to come up with a way to mount the RGB leds. I didn’t want to have to wire them individually. I wanted to use the strip (at least in a few groups) so I added a hole in the middle of the cap which allows me to pass through the led strip.

Passing those RGB strip through there was far from easy

The cap is printed in transparent PLA (to act as a diffuser) and It worked really well.

Testing the threads sizes, button separation and diffusers.

This design was working but the force you need to make in order to push one of this tact switch is considerable. At least when you compare it with the arcade buttons. I looked around on the workshop and found a stack of mouse switches. I don’t know why but at some point in time, I thought It was a good idea to desolder these things before tossing out an old/broken mouse.

Several mouse devices were definetely harm in the making of this project.

I had enough switches and they seemed to be far more easy to push than the tact switches so I redesigned the base to accommodate them.

Later on I used a kitchen scale to make a crude measurement of the forces required to activate each type of button. The mouse ones need less than half the pressure that the tact switches required and I was quite happy with the end result.

Testing the force required to activate the different switches. The display on the top is a multimeter in continuity mode. The one at the bottom is the scale in grams.

As I said before the rest of the device is also 3D printed. The front has the holes for the potentiometers and the buttons. I placed the buttons 34mm apart, roughly the distance between leds in a 30 leds/m strip. The bottom has places to put both the multiplexer and the Arduino in place. Both panels are held together with 25mm hex stand offs, one on each corner and one in the midlle of the buton array to have some more support there.

There is also a side panel with another button.This one allows you to change “banks” in software. All the connections are made with point-to-point wiring and I deliberately left the sides open so you can see the “guts”…I thought that it might look better that way.

I modeled everything in CAD and found all the needed components in Grabcad. This was the end result:

There is some weird artifact in the gif…

After that It was several hours of printing and a lot more of soldering

And finally a little video I made of the assembly process