Building A Minimoog MIDI Controller - Loophole Letters Arduino
Building A Minimoog MIDI Controller - Loophole Letters Arduino
Last week, a friend a I built a MIDI Controller for the Arturia Mini V3 VST:
• 17 �ip switches
Also, we decided to use �ip switches only + we added 2 extra �ip switches below the 3 pots
on the left.
This is the front panel with all the pots and switches in place:
for comparison:
MIDI Brain
To read the positions of all controls, we ended up using the Arduino Micro:
As we have 44 controls and only 12 analog inputs, we used seven cd4051 ics:
• pins 6 7 & 8 can be connected to ground
• pin 16 is connected to 5V
• via the select pins a b and c, we can control which "channel in" is routed to the "com
out". This is done by splitting the three digits of a binary number (000-111) to the
three select pins.
• by constantly looping through all inputs, we can read all 8 controls in a short
amount of time
• this "trick" is also called time multiplexing, which makes the cd4051 a
multiplexer
• so with the 12 analog inputs of the arduino, we can connect up to 12x8 = 96 controls
The Board
To connect all 44 controls with the multiplexers to the arduino, I drew this board plan:
• the copper strips go from left to right
• red: 5V
• white: ground
As this was our �rst real electronics project, we ran into some unforseen problems.
Problem 1: Mirroring
• After the plan was made, we started using it on the copper side (top image) to solder
the 16 pin jacks and the plug jacks.
• When we were done soldering, we realized that if we now attach the ics from the
plastic side (down image), they will be mirrored, having wrong pin placements!
• Wo rkaro und: To �x the problem, we painstakingly bent all the ic legs to the other
side to "mirror" them...
• F ut ure Learning : Use two plans, where one is the mirrored version of the other, for
both sides of the board
• Another thing that we realized too late was all the multiplexers inputs must be
connected to the circuit to make them work
• Wo rkaro und: We connected all empty inputs via 10k pull up resistors to ground
• all other pins of the switches + one of the outer pot pins are connected to 5V
• all the 5V pins of the switches are connected to ground with a 10k resistor
For the switches and the empty inputs (see Problem 2), we added the resistors directly on
the board, before the plugs:
• F ut ure Learning : Add the resistors directly to the 5V pin
• The �rst two digits are the analog input of the ic (a0 - a5 = 18 - 23, a9 = 27)
For easier access, we can seperate the two numbers into two arrays:
int midiCh = 9;
int cc = 1;
int voltageChangeThreshold = 8;
int TIMEOUT = 300;
unsigned long PTime[NControls] = {0}; // previous time the voltage changed (more than
int midiPState[NControls]; // previous sent midi value for control i
int voltagePState[NControls]; // voltage of control i at last midi send
• to compensate for voltage jitter, we ignore voltage changes that are lower than a
threshold of 8
• if the voltage change is above the the theshold, the time is remembered
• for 300ms after a signi�cant voltage change, the voltage is mapped to a midi value
(0-127)
• if the calculated midi value is di�erent from the last, the value is sent out, using
MIDIUSB lib
• isInverted inverts the mapping for controls with inverted voltages (depends on
wiring of 5v and ground)
• rotaryMidi maps the 6 step rotary switch to the target 7 step midi value of osc3 range
(ignoring the �rst step)
Conclusion
After 4 days of soldering, and learning a lot about electronics, the basic controller was
�nished. I also built a prototype case:
Huge thanks goes out
I already know that this was not the last MIDI controller to build for myself. Next time, I
will try to build a controller for the Prophet V (maybe also including keys).
TBD
• add labels