Building a Custom MIDI Controller From Scratch

· Iustinian Olaru · 8 min read
Electronics Tutorial Member Project

It started the way most projects at the makerspace do — with a half-baked idea and a cup of coffee. I wanted a MIDI controller tailored to my live performance setup: something compact, with exactly the knobs and buttons I need, and nothing I don’t.

Why Build Your Own?

Off-the-shelf MIDI controllers are great, but they’re designed for everyone. If you have a specific workflow — say, controlling Ableton Live with one hand while adjusting effects with the other — a custom layout makes all the difference. Plus, building it yourself means you understand every part of it, and you can fix or modify it anytime.

Planning the Layout

I started by sketching the panel layout on paper. I needed:

  • 8 rotary potentiometers for mixer channels
  • 4 buttons for transport controls (play, stop, record, loop)
  • 2 faders for master volume and crossfade
  • A small OLED display showing the current preset

Once the layout felt right, I moved to KiCad to design the schematic and PCB.

The Electronics

The brain of the controller is an Arduino Pro Micro, which natively supports USB MIDI — no extra drivers needed. The pots and buttons connect through a multiplexer (CD74HC4067) to save on GPIO pins.

The soldering was done at the electronics bench in the makerspace. Having a proper station with helping hands and good lighting made the fine-pitch work much easier than my kitchen table setup at home.

The Enclosure

For the enclosure, I laser-cut a front panel from 3mm black acrylic and designed a simple box from 6mm plywood on the laser cutter. The slots and tabs were designed in Inkscape so everything press-fits together, with a bit of wood glue for permanence.

I also 3D-printed custom knob caps in orange PLA to match the makerspace branding — a small touch, but it makes me smile every time I use it.

Programming

The firmware is straightforward Arduino code using the MIDIUSB library. Each knob sends a CC message on a specific channel, and the buttons toggle on/off. The OLED shows which preset is loaded, switchable with a long-press on one of the buttons.

The code is open source and available on my GitHub if anyone wants to build their own version.

What I Learned

  • Plan twice, solder once. I had to redo one section of the PCB because I mixed up two pin assignments. A proper schematic review would have caught it.
  • Use the right tool for the job. The laser cutter made the enclosure panel look professional in minutes. Doing it by hand would have taken hours and looked worse.
  • Ask for help. Two members helped me debug a grounding issue that was causing noise on the analog readings. That’s the best part of a shared workshop.

Final Thoughts

The whole project took about three weekends spread over a month. The total component cost was around 35€, which is a fraction of what a comparable commercial controller would cost. More importantly, it does exactly what I need — nothing more, nothing less.

If you’re thinking about a similar project, come by the makerspace and take a look at the electronics bench. Everything you need is here.

Written by Iustinian Olaru