The definitive MIDI controller | This is not rocket science

The RPC hardware

The first RPC build is finally done!



Click the pictures for bigger versions. The photo below is a quick shot of the system up and running. The next step of the project is to implement some rudimentary software for the Raspberry Pi. I was thinking of starting off by writing a small arpeggiator first…


Yes, it says “Hello, world!” on the screen. Look closer.

The internals turned out surprisingly clean, given that there’s quite some wiring going on in there. Click for high-resolution pictures.



The Raspberry Pi is placed on the left, and the Arduino Mega 2560 on the right. They are connected by both USB and SPI, but USB is only usable for power supply and reflashing; I’m using all the serial ports of the ATmega for MIDI, so the Arduino USB port cannot be used for communications! The 3.3V/5V SPI bus level conversion and power distribution board is placed in between them (the devices use different operating voltages, remember the architecture?) The yellow stripboards near the back are the MIDI inputs (left) and outputs (right). The single rightmost board is the 5V power supply.

The USB hub is visible at the very bottom on the left, bound to the front panel with a wooden fastener plate. I tried hard to keep the front panel clean, so the only visible elements in addition to the USB ports are the 8 leds and the power switch. On the back I used an RJ45 Ethernet coupler to tidy up the cabling, and a HDMI/VGA converter for the VGA display.

Finally, after taking these pictures, I attached similar wooden fastener bars behind the MIDI ports to give them some more strength. Otherwise plugging and unplugging devices would quickly tear off the sockets and break the PCBs.

I made a few small mistakes, for example the MIDI port holes in the back of the enclosure aren’t perfectly aligned with the sockets. The signal ground connections between the boards are far from ideal. The USB cable from the Raspberry Pi to the Arduino is way too long, because I didn’t have a suitable shorter cable at hand. There’s too little space around the Raspberry Pi to mount it properly, and I couldn’t fit one mounting fastener in because of that. But all of these can be easily fixed for the second revision.

As I wrote earlier, the enclosure was designed by myself and manufactured by Protocase, exactly per my specification. And the quality is very nice: the measurements are perfect and there are no sharp corners anywhere. The case is made of steel, and it has a good feel of solidity to it.

All in all, it’s working perfectly! Success!

4 Responses

  1. Jas Strong

    Looks like you should have used a Teensy++ rather than an Arduino; you wouldn’t have this problem then.

    August 16, 2013 at 04:03

  2. ld

    The main reason for using the Arduino Mega 2560 is the number of UARTs: I’ve only seen 4 or more serial ports in the ARM-based MCUs such as the STM32 or NXP LPC series, and of course in the ATmega 2560 (whole series). And of course I will need the SPI bus to not overlap with those U(S)ART pins!

    The Teensy 3.0 only has three UARTs, so it’s not going to cut it for me…

    August 16, 2013 at 20:59

  3. tefman

    hey Very Very Cool.

    Do you know that you could make this kit of yours make noise
    too w/ Pure Data. (yes I’m guessing, but just in case)
    Sound out of USB seems to be fixed now.
    Let me know if you need to know more……. your DSP synth is way
    awesome too.

    Best Tefman, an old windsynth/ eigenharp player

    August 19, 2013 at 02:29

    • ld

      Oh yeah, certainly there are many ways to get sound out of the Raspberry Pi. But in the end it’s rather limited in its computing capacity, so I don’t want to risk the responsiveness (latency) for unnecessary features to start with.

      August 19, 2013 at 21:12

Leave a Reply

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