Close

Does this project spark your interest?

Become a member to follow this project and don't miss any updates

Tannin MIDI controller

DIY Arduino (Nano) based MIDI controller

This project was created on 01/29/2014 and last updated 9 months ago.

Description

DIY custom built Arduino based MIDI controller

Details

4 years ago, I was quite unhappy with my M-Audio X-Session pro MIDI controller, so I decided, heck, I'll build my own! The project was called OpenDeck and it's goal was to be full-featured open-sourced MIDI controller with a nice design. At the time I didn't even know what microcontroller or MIDI actually are, but eventually, I figured my way around.

Fast forward to about 2 months ago. I realized I'm not going to finish that project it any time soon, due to lack of money. I wanted to have everything on PCBs and that would cost me a lot. It was a project with 46 buttons, 27 LEDs, 31 potentiometer, 3 faders and 2 rotary encoders. I decided I'm finally going to build fully-working MIDI controller using the code and parts I already had. The result is Tannin, simple 16 pot, 19 buttons and 4 LEDs controller. It fully supports MIDI Note On/Off and CC messages, including the MIDI In (I'm using that feature in Traktor to control LEDs and set modifiers). It even features experimental MIDI Clock In support. I've set it in a way that LEDs blink in sync with that clock, but there's more work to be done to make it fully work. The buttons also have built-in feature of long press, that is, if you press button for half second (that can easily be defined) it will send another MIDI Note On on another channel (2, regular presses are sent on channel 1). The pots as well send MIDI Note On/Off messages, 6 per pot, depending on their position, with CC messages, of course. So for MIDI control freaks out there, there are a lot of mapping possibilities. Original design is made by me, even tho I drew some inspiration from other controllers out there, like MIDI Fighter, or Traktor Kontrol X1.

The biggest issue that I had was getting the MIDI output from Arduino, that is, I wanted my software (Traktor Pro) to recognize the messages coming from Arduino. Unfortunately, I found out that Arduino doesn't support MIDI directly and that I had to somehow mimick it. It turned out that there is actually a way, and it works really great. There are two steps to it:

1) First you have to somehow translate serial messages coming from Arduino into MIDI messages. There is excellent open-sourced software out that, which by the way works on all platforms (!), hairless-midi. All you have to is match the baud rate with the one in your Arduino sketch. Here is the link for it:

http://projectgus.github.io/hairless-midiserial/

2) After translating the messages, you have to route them somewhere using virtual MIDI cable software. I'm using Windows and for the task I've selected loopBe30 software. When you match your virtual port in hairless-midi software, the once-serial messages from Arduino will become MIDI messages routed over virtual MIDI cable. After that you can easily map your controller to any software which supports MIDI learn.

It would be much nicer when Arduino would support all that out-of-the-box (like Teensy boards), but this way works as well.

The faceplate is some kind of special plastic board, 1.5mm thick glued to 3mm plexiglas. That 1.5mm plastic has black layer on it which is specially designed for CNC laser cutting. It looks great! Also, it's matte black, so fingerprints are not an issue. Deisgn is made in CorelDraw software.

Project has 3 PCBs inside, designed in EAGLE. 2 for 2 groups of potentiometers to get really stable values (I used to connect the pots with wires which often resulted in gibberishvalues), and they both use ground planes on both sides. Main PCB has Arduino on it with connectors for 2 PCBs for pots. Each pot PCB has 4051 chip on it to read potentiometers. Buttons/LEDs are connected in a matrix with shared columns.

Case is also custom made from MDF.

Components
  • 2 × 4051 multiplexer
  • 2 × 0.1µF ceramic decoupling cap Content/Electronic Components/Misc. Electronic Components
  • 16 × 12x12mm tactile switch buttons
  • 1 × Arduino Nano
  • 19 × 1N4148 diode Content/Electronic Components/Misc. Electronic Components
  • 1 × 220 Ohm resistor
  • 4 × 5mm blue LED
  • 16 × linear 10k potentiometer
  • 16 × potentiometer caps
  • 3 × 12mm metal pushbuttons

See all components

Project logs
  • Another code update

    9 months ago • 0 comments

    ​Code now features A LOT simpler potentiometer debouncing code. It also fixes broken behaviour of calculating note events from pots. All should be really stable right now, so I can start working on another controller :)

  • Code updates

    10 months ago • 0 comments

    I've just commited massive code change on GitHub. Added lots of code comments, simplified code and some bits have been rewritten.​

View all 2 project logs

Discussions

somedaygone wrote 9 months ago null point

I don't know which side I like better, the front or the back! I need to learn to wire up a panel like this. Any tips you can offer to Arduino noobs?

Are you sure? [yes] / [no]

shantea wrote 9 months ago null point

Thanks :) Well I'm not really sure what kind of tips you require?

Are you sure? [yes] / [no]

shantea wrote 10 months ago null point

Yeah it does look great. At first I wanted the design to be engraved directly on plexiglas, but I've changed my mind as soon as the guy who did it for me showed me that black plastic board!

Are you sure? [yes] / [no]

Mike Szczys wrote 10 months ago null point

That faceplate is so awesome! I love getting a look at the back of it both before and after all the wiring is added.

Are you sure? [yes] / [no]

Similar projects