Having started a band which relied heavily of midi and midi sync we started to run into problems like "who's triggering my keyboard ?".
Since I'd recently made an Arduino based MIDI merger I thought a small project like a MIDI analyser would come in handy for such situations in the future.
Based on Tom Scarff's projects - http://www.midikits.net/. It's a self-powered unit that displays midi data. The front panel flashes a led for data on for each of the 16 midi channel along with common System Messages and Sync messages.
The circuit is quite basic. A standard MIDI input circuit which contains a few resistors and a optocoupler. This then connects to the RX on the Arduino Nano. A small note here is that you can't have this RX connection active while you are programming the Arduino. This is the first time I've used the RX on a Arduino and I didn't realise the potential problem. I got around this by hacking the trace and putting a socket which I could take the link out of when programming. I'll try to remember this for the future .
|MIDI Analyser - lights down so we can see the leds in action|
The major difference with my version of this unit is I have 33 WG2812 rgb modules instead of single red leds as Tom uses. The WG2812 modules are wonderful little devices. They only need three connections -5v, ground and one digital connection. These little devices have a Digital In and a Digital Out so stringing them together is no issue. Adafruit make a wonderful library - https://github.com/adafruit/Adafruit_NeoPixelthat allows control of a string of leds and change any single led within the chain to any colour you choose. These modules are quite fast and I believe the library that I am using is addressing these leds at 800,000 times a second. More than capable of flashing a led based on incoming MIDI data.
The leds are hot glued in behind the top panel in small recesses. Since I've used opaque acrylic the leds are not obvious when the unit is off and we can cut the leds label into the front of the panel. When the led glows it does so through the text of the label.
I've chosen to once again use the MIDI Library written by Francois Best @ Forty Seven Effects - here's the library at GitHub - https://github.com/FortySevenEffects. This is possibly over kill but it certainly makes my end of the coding quite simple. I've used this library before in my UM-SLM midi Sysex Library Module and makes MIDI handling a breeze. I've programmed the channels leds to display the velocity of a note in a different colour based on the velocity of the specific key played.
The unit is powered by an 18650 LiPo battery. This is a nice 3.7v 2400mA unit. This battery is then put through a 3v to 5v step up buck converter to supply the leds and the Arduino with power. There's also micro USB charger board to charge the battery. Alas the step up converter does not have any way of detecting the battery voltage dropping below it's operation voltage so ideally I will use a self protected 18650 battery.
The case is one of my standard type cases made from 3mm opaque acrylic. I designed the case in an old vector program called Macromedia Freehand which is only 2d. I then export each panel to Cut2d which is a program used to create files that can be used to cut the acrylic on my CNC router. I've got this down to a reasonably fine art now but I still make mistakes. The small mistake I made with this unit was the USB port on the Arduino is higher than I had designed thus making connection impossible while the case is screwed shut. Not a great problem as I will probably not need access now.
I should think about upgrading my drawing package for these cases I do often make mistakes converting my 3d mental image into two parts which need 3d routing.