PCB schematics and firmware for a custom MIDI controller
DIY Arduino MIDI controller featuring 48 rotatory potentiometers (knobs). The values are sent out by MIDI CC signals through DIN-5 or USB port. The intended use is to control various software synthesizers but it can be used as a virtual mixer control or as an input device for custom software (for example MAX/MSP or Processing applications).
My work on this project started before Bastl Instruments released their own 60Knobs controller but I incorporated some of their ideas into my design.
There is also a similar MIDI controller Behringer B-CONTROL ROTARY BCR2000 with 32 knobs.
- 48 knobs!
- USB MIDI output
- USB powered = doesn't need a separate power supply
- 3 buttons (1 for sending out all the values, 2 for switching the MIDI mapping)
- 2 signal LEDs
- MIDI OUT DIN output
Schematics and PCB layout
Knobs are divided into six rows of eight potentiometers each. In each row, potentiometers are connected to a 8-channel multiplexer, the output is connected directly to analog pins on the Arduino Mini (there are 8 analog pins in total out of which 6 are used). Three digital pins are connected to selector pins on MUX'es.
For MIDI output, TX pin is connected to DIN-5 connector and MIDI to USB adapter, I didn't bother creating my own schematic for MIDI to USB since it was so cheap on eBay.
MIDI input is not implemented, although it would have been nice for configuration without reprogramming.
- 1x DIN 5 connector (MIDI)
- 1x USB B connector
- 3x Microbutton
- 2x LED
- 3x 10k ohm resistor
- 4x 220R resistors
- 6x 100n capacitor
- 1x 100u capacitor
- 1x MIDI to USB adapter
- 48x vertical 100k potentiometer
- 6x 74HC4051 Multiplexer
- 1x ATMEGA328P Mini board
- 48x potentiometer knob caps
- Potentiometers didn't fit well - the distance between 2mm holes should be a bit smaller (~0.2mm).
- LEDs and 100k resistors are too close.
- DIN-5 connector needs bigger holes (~1.2mm instead of 0.8mm)
- The design allows for adding more rows, it is possible to add 16 more knobs without much hassle (there are two free analog ports left on the Arduino). Adding more rows should be possible using another multiplexer.
- MIDI to USB should be easy enough to include on the main board. It was just easier for me to buy it.
The software scans through all the potentiometers, averages the values and sends out only the changes using MIDI library. Optionally there is a raw output mode implemented for debugging.