DIY MIDI Controller for Ableton Live
In this article, we’ll walk you through building your own controller for music production/performance in Ableton Live!
We'll be turning an Amazon delivery cardboard box into a Hardware controller using 4 knobs, 4 buttons, and a Joystick, with the help of an Arduino Microcontroller, and Ableton’s Max for Live.
Watch this video to learn how, and follow along with the instructions written out below!
What you need
A Breadboard (69 INR)
Arduino Leonardo Microcontroller with USB Cable (749 INR)
4 Resistors (10 INR)
4 Push Button Sensors (100 INR)
4 Rotary Potentiometers ( 130 INR)
Plastic Knobs for Potentiometers (50 INR)
XY module (Joystick) (55 INR)
Ableton Live Standard or Suite (9 or higher)
Arduino IDE (software)
Du Pont Jumper Cables - Male-Female (60 INR)
Du Pont Jumper Cables - Male-Male (55 INR)
Loose Jumper cables (89 INR)
Amazon Cardboard Box
2 L Clamps with screws [cheaper to buy from a local hardware shop] (20-30 INR)
Glue gun (170 INR)
Prerequisite Softwares on your computer
- Download and Install Arduino IDE software
- Download and install Ableton Live (Ignore if you already have a working suite/standard of version 9 or above)
- Download and install Max For Live Connection Kit for Ableton Live.
- For the outer +ve and -ve rows, the signal is internally shared across the pins row-wise.
- For the middle section (i.e - a,b,c,d,e rows and f,g,h,i,j rows) signal is internally shared column-wise. Now let's start building our controller.
Step by Step Guide:
A good place to start is by testing if all our equipment works! So we'll start by wiring our sensors while understanding how they work.
Connecting and testing the Sensors
- Use 2 Male-Male Du Pont Cables to connect the Arduino’s 5V and Ground (GND) pin to the Breadboard’s +ve and -ve rows as shown below.
This ensures that the power supply is distributed across the rows.
- Connect a Potentiometer to the Arduino, via the breadboard.
Notice that the outer left & right pins of the potentiometer go the -’ve and +ve rows respectively. Don’t worry if the order is reversed. This basically powers up the Potentiometer.
- Hook up the middle pin to any one of the six Analog Inputs (A0 to A5). This is the live pin that relays a message to the Arduino Controller, whenever we turn the potentiometer knob, clockwise or anticlockwise.
- Connect the Push Button to Arduino via the breadboard.
We need 3 jumper wires and a resistor for every button we connect as described below.
- Wire 1: Connect one terminal of the Button directly to +’ve row on the breadboard. Connect the other terminal.
- Wire 2: Connect another terminal of Button to the row labelled ‘g’ on the breadboard. Make note of the column number. (here, its column 26).
- Resistor: Connect one leg of a resistor, on an adjacent pin (row h) on the same column and connect the other leg directly to any column on the -ve row. We can use any resistor of values between 100 Ohms to 10MegaOhms.
- Wire 3: Connect one end to another adjacent pin (row f) of the same column on breadboard. Other end goes to one of the Arduino’s digital pins - 0 to 13. (digital pin 0).
This ensures that when button is pressed, current flows across the button, and the digital pin should receive an ‘ON’ message.
- Connect a Joystick to the Arduino, via the breadboard.
Joystick pins from left to right - Ground, 5V, X pin, Y pin, button.
We only need the first 4 pins here. The joystick can be understood as 2 potentiometers mashed up together, one in the X direction and the other in the Y direction. They share a common power supply. Thus, moving the joystick knob can vary the live readings from both X and Y pins.
- Connect the Ground and 5V pins to the breadboard's power rails just like we did with the potentiometer. Connect the X and Y pins to any two remaining Analog Inputs (here, A1 & A2 as we used A0 for the Potentiometer)
- Connect the Arduino to your laptop with a USB cable (micro USB to USB Cable for Arduino Leonardo)
- Run the Arduino IDE software and open the ‘Standard Firmata Code.
- Upload the code onto Arduino hardware by hitting the Upload button.
Once uploaded, this code will sit inside Arduino's memory. The Standard Firmata code prepares the Arduino to easily communicate with external devices and softwares; in our case we use this to pair with Ableton's Max for live device.
- Once it is done uploading, start Ableton Live and open the installed Max Connection Kit Pack. Under Devices - Find and load ‘Arduino’ max device onto a track.
The Arduino device is part of the Max for live Connection kit. It has been deviced to communicate with the Arduino inputs and outputs via the serial usb ports, and interact with parameters within Ableton Live!
- Test the sensors by mapping them via the max for live device!
Here, we see two tabs Analog and Digital. Analog refers to the set of 6 analog inputs on the Arduino Hardware. Digital refers to the set of 14 digital I/O pins. In our illustration, we had connected the potentiometer to A0, and the joystick pins to A1 and A2 respectively. We connected the Button as digital input 0.
- Click on the Map button next for the A0 pin.
- Next, click on any device parameter that you’d like to control. If the connection is assigned successfully, you will see the parameter color greyed out.
This means we can control it with the potentiometer sensor connected to A0 on Arduino, and no longer directly move it. So try moving the potentiometer dial to verify.
- Do the same with the pins connected to the X and Y inputs of your joystick controller and verify
Here we used A1 and A2 to map to arpeggiators Rate and Steps respectively.
- To test the buttons, switch to the digital tab. Click on Map for pin D0 and click a parameter that works like a 2 state button.
In this case, we assigned it to the track on/off switch. Verify if the track stays on while the button is pressed.
Once we've tested and understood the connections for our sensors, we can prepare the cardboard housing!
Prepare the housing
- Place the cardboard box as shown and cut out the top panel at the left and right edges.
- Hot glue the lower half of the front panel to the side flaps.
- Hook a pair of L clamps on either side of the top panel to give it stability. Start by taping the sides, to help the L clamp screws sit properly.
- Place the L clamp on the inner edge corners and thrust the screws in from the other side. Secure the clamp screws with nuts.
- On the Plastic takeaway cover, measure and mark positions where we have to cut holes for our sensors.
Be sure not to set them too close as every sensor needs space for wires sticking out of them.
- Outline a circular trace with a marker pen matching the form of the respective sensors. You can use the washers/nuts that come along with potentiometers/buttons to help trace these. Use a blade to cut along the circular trace and make holes.
The holes to secure the joystick may be too slim for the blade. You can use a ballpoint pen or a screw driver to force tiny openings in the marked positions.
- Finally, test if all the sensors can actually fit into the openings meant for them. Make adjustments as necessary.
- Use the blade to trace against the plastic cutout and make openings in the cardboard box top panel as well. Hot glue the plastic to the top panel of the cardboard box.
- Use double-sided tape to secure the breadboard and Arduino inside the box.
The Arduino will have to be connected to the USB cable for use, so make sure to stick it appropriately so the cable is easily accessible.
Install all sensors to the housing
- Push the Button sensors into the top panel openings. If it's too tight try turning clockwise to use the threading and screw it in.
- Secure them with washers/bolts.
- Do the same for the potentiometers. Drive it in from the inner side of the top panel.
- Lock them in from the top side using bolts.
- Now is a good time to place some fancy knobs on to the sensors.
Before you do place them, turn the potentiometer dials fully anticlockwise, and ensure that the plastic knob’s position indicators align in the same way as you place them.
- Faster the Joystick to the box using screws.
It helps to pull out the cap for easy access.
- Make an opening on the front panel adjacent to the joystick.
This is to make way for the joystick wiring.
Wiring them all up
Now that everything is in place, it's time to wire up our sensors to Arduino via the breadboard. Refer to the first set of instructions under ‘Connecting and testing the sensors’ steps as a guide. The below schematic should give you a clear reference of how all these connections should look like.
- We start with the power connections - Arduino's ground pin and 5V pin to the breadboard as discussed.
- Start connecting the buttons
Here we connect the 4 buttons to Arduino's digital input pins 0, 1, 2, and 3 respectively.
For every button, replicate what we did in the test connections parallelly. This means we'll need 3 wires and a resistor per button. Make sure you've cut sufficient lengths on the loose single lead jumper wires, for the 2 terminals on the button.
- Connect the 4 potentiometers and the joystick similarly. Here we’re connecting them to A0, A1, A2, and A3 for the potentiometer; A4 and A5 for the joystick's XY pins.
Your fingers will be swimming in a pool of wires when you're close to finishing!
- Tape the Joystick wiring on the top panel just to secure them in place.
Unlike soldering, hot glue works with plastic!
Use hot glue on every connection, on your buttons, potentiometers, joystick, and breadboard.
Finally, use the USB cable to connect the Arduino to your computer. The Program that you already loaded while testing should still be active, so there's no need to run Arduino IDE software again. Open Ableton, run the Arduino (max for live) device, and start mapping all your inputs to Ableton Live's parameters as we discussed.
That’s about it!
We hope this article helps you build and play your very own DIY midi controller! Also hope that you learned something about electronics along the way. Let us know if you have any questions or comments about making this in the comments below :)