Bio photo

Dan Nixon

Code Monkey, Electronics Engineer, Mad Scientist.

Synthesia Learning Keyboard Attachment

By Dan Nixon on 2013-06-17

This was just a quick project I did in a couple of hours, essentially it is an attachment for my M-Audio Oxygen 8 which adds a row of LEDs above the keys which take the MIDI key light output from keyboard learning software such as Synthesia and shows a visual prompt of what keys to press. This uses an Arduino Uno to receive and parse the MIDI data and a MAX7219 to drive the LEDs, as the Oxygen 8 is only a 25 key keyboard (and therefore uses transpose keys to get the full 121 notes) I had to add transpose keys to the project which were to be used simultaneously with those on the keyboard.

The LED strip is essentially an LED matrix with three columns of 8 LEDs and one column of one LED, the code has a look up table which indexes the LEDs 0 to 24, right to left allowing the position of the LED to be lit on a certain note to be easily computed using the MIDI pitch value and the current transpose setting.

The wiring on the LED strip is not the best, since I was using very thin stripboard I could not route all the connections over it so had to use Cat5e cable cores to wire the matrix correctly, I also did not have a single piece of stripboard long enough for all the LEDs so the LED strip is made up of 3 smaller strips kept together using a combination of solder, cable ties and the matrix wiring.

I did consider building a standalone PCB for this project but ended up just making a simple Arduino shield using stripboard which contained the MAX7219 and the two transpose buttons.

It may not be the best looking project but it certainly worked, personally I don't think it actually made playing the keyboard any easier, but I think that may just be the lit key concept I don't like.

Of course this project can be easily adapted to any size keyboard by using various configurations of LED matrix, for example a single MAX7219 can drive 64 (8x8) LEDs so even a 49 key keyboard could be used with the same shield as used here given a large enough LED strip, which would not be much more difficult to produce than the one used here.

Top side of LED strip

Top side of LED strip

Bottom side of LED strip

Bottom side of LED strip

Top of Arduino shield

Top of Arduino shield

Bottom of Arduino shield

Bottom of Arduino shield

Comments