A Framework For Making Affordable & Stylish Modular Controllers (USB to MIDI, HID, or Serial) by Fuzzy-Wobble
Contest WinnerFeatured
Final-2285.jpg
Mixer-1708.jpg
Sampler-1-6.jpg
Final-2214.jpg
Sampler-1-5.jpg
mk2-2282.jpg
mk2-1699.jpg





****************************************************************************************************************************

I have designed a framework for making affordable and stylish modular controllers. You can use the content of this Instructable to make a wide range of controllers for a wide range of applications relevant to artists, DJs, VJs, gamers, producers, and the like. The DJ controllers I showcase in this document serve only as examples of (more conventional) interfaces you can create within the framework.

I focused on making this project affordable, stylish, and most important, builder friendly. The controllers can be re-programmed to send serial, MIDI, or HID messages. The modular design allows you to plug the controllers into one another, thus requiring only one USB port on your computer. Each module can have approximately 28 digital inputs/outputs, 23 analog inputs, and 4 rotary encoders. Those more savvy could add components such as touchscreens, sensors, pressure pads, etc., to the controllers using this framework. No special tools or equipment are required to build these controllers beyond a basic soldering iron and wire stripper. Also, very little coding is necessary. Editing the code is more like filling in the blanks. 

****************************************************************************************************************************

More info here

Some hype at engadget

**Remember to read this entire Instructable before beginning any of the constituent steps**



 
Remove these adsRemove these ads by Signing Up

Step 1: Components

6208884868_1a4533282e_b.jpg
6208564299_906dbd728a_b.jpg
6208885322_51ea708ffe_b.jpg
Component-2080.jpg
Component-2074.jpg
Component-2081.jpg
Component-2078.jpg
Component-4320.jpg
6239296602_2466e03330_b.jpg
components-2531.jpg
components-2533.jpg
components-2537.jpg
6238776663_d10a6a8c41_b.jpg
controller-4315.jpg
20111203-IMG_0835.jpg
Component-2086.jpg
Component-2085.jpg
crimp.jpg

I have spent endless hours searching for the best and most reasonably priced components from around the world. I ordered many different components to test out and compare, most of them were rubbish and were not used in project. Here is the list of the best stuff I found. The ones with * are my favorites. 

Microprocessor
  • Teensy++ @ PJRC (USA)
  • Teensy suppliers in Europe: 1, 23
Pushbuttons (Many of these pushbuttons are available in different sizes and color - check the sites for more options. With pushbuttons, you usually get what you pay for.)

Faders (If these are out of stock, they may also be available at digikey.com or newark.com. If you are a scratch DJ you probably demand a 'frictionless' fader. DJ Deals sells them for cheap, and they are simple enough to use with the DIY controllers.)

Slide knob
  • Many options available at Newark. 
Potentiometers  Potentiometer Knobs (Knurled knobs can only be attached to knurled shafts. Knobs with set screws will require a hex key to couple with the potentiometer. 6.4mm knobs coupled with 6mm shafts fit slightly non-concentric - this can be fixed with some scotch tape. 6.35mm potentiometers do exist although I was unable to find an economical option.) 

Encoders (Search 'PEC11-' on Newark to get a long list of nice and affordable encoders. I used PEC11-4115F-S0018 and PEC11-4215F-S0024 in my build. I tested many encoders and found the Bourns ones to be best. They have both D, and knurled shaft options available.)

PCB Wires & Connectors Multiplexer Header Pins
  • Male @ All Electronics, Sparkfun, Futurlec, Adafruit, SureElectronics
  • Female @ Sparkfun, SureElectronics, Futurlec 
(Sure electronics is by far the cheapest!)

LEDs (Every site has plenty of different LED options. Keep in mind this controller framework is not really designed to control more than a few LEDs. Now that is not to say you can't use many LEDs in this project, you just can't control them, ie, turn them on and off when you please.)

Hardware
All hardware (nuts, bolts, standoffs) can be found at McMaster (USA). McMaster is the best!

Other
Soldering iron, wire cutters/strippers. 

There are many other components you may want to include in your interface such as LCDs, touchscreens, trackballs, pressure pads, proximity sensors, etc. SparkFun and Adafruit are the best resources for these kinds of components. Although the controllers I showcased in this Instructable are somewhat conventional, I encourage you to get crazy. DIY gives you the power to do anything you can imagine - just wait till you see the next controller I am going to build!

Read the datasheets carefully before buying components.

Discount/surplus stores like Futurlec & All Electronics have excellent prices, but also carry some components which are totally bogus - be extra careful before buying from these stores. 

Note that all these components are panel mount (with exception to the LEDs). There is an important distinction between surface mount and panel mount components. Surface mount components fasten directly to the printed circuit board (PCB) while panel mount components fasten to the top panel and connect to the PCB via wire and solder connections. It is usually not possible to use surface mount components unless you fabricate custom PCBs and have expert soldering skills. Using panel mount components makes this project accessible to anyone. 

So how much do these controllers cost? I don't kow how much your controller is gonna cost but mine were cheap, really cheap!

If you are from Europe or Asia this list may not be totally relevant or useful. Please send me links to suppliers in your countries so I can add them to this document. 

1-40 of 229Next »
sunpialia says: May 12, 2013. 11:47 PM
more high quality LED lights at the site http://www.ledlightshub.com.
larrylpope says: Apr 30, 2013. 8:10 AM
Hi. I want my encoders to send control changes instead of note on messages. Could you tell me how I might go about implementing that in the code?
nocturnalambition says: Mar 10, 2013. 8:02 PM
hello again. So i didnt get a bread board. how would you suggest testing my components? All i ordered is the teensy. not the other larger pcb. I am planning on soldering directly to the teensy so I am kind of hesitant to just solder everything then do the coding even though the only buttons im using now are arcade buttons, so simple on/off switches. I plan to use only 0-16 I/O's on the teensy then chaining all the grounds.
Fuzzy-Wobble (author) says: Mar 11, 2013. 6:23 AM
you must have a breadboard for prototyping.

https://www.adafruit.com/products/239

do not solder directly to the teensy unless you are pro and enjoy spending hours de-soldering.

nocturnalambition says: Feb 16, 2013. 1:22 PM
thank you so much for posting this.

So, I have a question regarding the LED Situation. I was wanting color changing LEDs under some clear rim Sanwa buttons. I'm sure that I could get them to light up but I want complete control over every buttons color. for example when I play one song I want this color scheme/template and a different one for a different song. I am basicly just making a midi fighter/mixer. below is what I have been thinking:

8x8 arcade buttons(color changing led on button rims)
8 faders
solo and mute buttons on each fader(leds under each)
2 bus/eq knobs for each fader
8x8 fx knobs
spring loaded mod wheel

what kind of pcb would i need for this? It needs to be mac compatible and plug and play. I guess i'm willing to shell out if i have to considering that this is like 3 controllers in one. Please point me in the right direction master.
Fuzzy-Wobble (author) says: Feb 16, 2013. 11:46 PM
64 arcade buttons? That is a lot. This framework will not support that many inputs. You need to get some i2c i/o expanders (mcp23017) or some shift-registers. Basically that will require lots of custom circuitry and coding.
drsalty says: Feb 9, 2013. 8:16 PM
Hi there Fuzzy-Wobble!
First off this is a fantastic instructable. I have built a controller and done the coding, but I have one major problem left: how to use it with Ableton live. I haven't been able to work out how to map/script it, so sadly it has sat in the corner for the last few months. I tried a midi sniffer and the messages seem fine. If anyone could help me or point me to a tutorial that would be very much appreciated!
Ps. It's really nice to see that even so long after you released this instructable you still reply to comments.
Fuzzy-Wobble (author) says: Feb 11, 2013. 9:21 PM
Looks like djerk may have the solution you are looking for. I have never mapped to Ableton but I know it is possible. I have seen it done many times.
djerk says: Feb 11, 2013. 11:22 AM
drsalty, you could try adding the controller manually if ableton's not picking it up.

1. Go to the following directory on your computer: Mac: [Your home folder]/Library/Preferences/Ableton/[your version]/User Remote Scripts/ Windows: [Windows boot drive]/Users/ [your Username]/AppData/Roaming/Ableton/[your version]/Preferences/User Remote Scripts/

2. You should see a UserConfiguration.txt file in this directory. This is the template that you will use to create custom controller mappings for Ableton.

3. Create a new directory under "User Remote Scripts" and name it what you want your controller named in Ableton.

4. Copy the UserConfiguration.txt file in to the new directory for your controller. (make sure to copy and not move, as you may need a clean template later.)

5. Open the UserConfiguration.txt you just copied in to the new controller directory and follow the template to specify what you want each knob/button/slider to control (You will need the MIDI CC data from each control on your controller to configure this file.) *note* defining Macro 1 - 8 is very powerful as you can place your soft synths in instrument racks and define macros for commonly used controls. (controls like: Cutoff, Resonance, Osc Pitch, modulation, Envelope settings, AMP Volume, etc.)

6. Save UserConfiguration.txt Now open Ableton and go back to the MIDI tab in preferences. If you've done everything correctly, you will now notice your custom controller name in the 6 pull downs for Instant Mappings.

Source : https://forum.ableton.com/viewtopic.php?f=1&t=167341
GirlNamedGoo says: Feb 1, 2013. 6:44 AM
Hi Fuzzy-Wobble,



I'm so glad I've found your instructable, it has been really informative.

I'm currently at University in England, studying a degree in Music Technology. I'm basing my Final Year Project on the creation of a MIDI controller.



So far, I have added a MIDI output to an Arduino Uno (which seems a bad move now, looking at your instructable!) which is then connected to my computer via a MIDI to USB cable. The arduino is programmed to play MIDI notes.



I really like this instructable as I'm no coder. Is it going to be really difficult for me to follow this instructable with an Arduino? I understand your reasonining for not choosing one, but I've overcome the main issue of USB/MIDI now. Do you have any pointers to help me along?



Many thanks again, this instructable and your final products have reinspired me again :)
Fuzzy-Wobble (author) says: Feb 1, 2013. 8:08 PM
Heya. You will have to revise the code quite a bit so it works with Arduino. The code is made only for Teensy++ at the moment.

The first controller I made (http://fuzzywobble.com/project.php?p=18&n=controllers-v1) was with Arduino and a MIDI shield.
erik97442 says: Jan 1, 2013. 6:59 AM
Can this be done with teensy 3.0 ?
Fuzzy-Wobble (author) says: Feb 1, 2013. 8:05 PM
Yep. You would have to edit the code a bit, but it is possible.
esapode688 says: Jan 27, 2013. 3:04 PM
i put my hat off in front of this amazing guide :)
Dream Dragon says: Dec 30, 2012. 6:04 AM
Nicely done! A well documented instructable and some good tips for "Doing it yourself" without making a slavish copy of your project.

I particularly like the fact that you provide a decently analysis as to which micro controller is most suitable and why. This is an area that I find interesting but there's so many choices with so MANY different combinations of input output etc. I tend to find it all rather confusing.
erik97442 says: Dec 23, 2012. 7:08 AM
Does anyone know if theres a way to put a built in sound card with headphone out and so on ?
erik97442 says: Dec 18, 2012. 9:26 AM
is it possible to add pitchsliders to the "cd-players"/decks and a crossfader to the mixer, if so, how ?
Fuzzy-Wobble (author) says: Dec 18, 2012. 1:51 PM
you can do whatever you want. the framework enabled you to build any kinda controller you can imagine.
maxstednitz says: Dec 5, 2012. 7:22 PM
Hey fuzzy,

So first let me say this guide is amazing. This is my first attempt at a homemade controller and I'm having some real trouble. To my eye, all wiring and connections are solid and everything is connected to the board. When I upload the code though, there is absolutely zero output in the serial monitor (USB mode -> serial). I've messed around with some different combinations of pins but still nothing..

I tried switching to MIDI mode and uncommented the necessary lines, and was going to see if there was any response when creating a custom mapping in Traktor. There definitely was response, but it was just constantly changing notes when attempting to "learn" a command. For a while I was able to get one button to work as it should (toggling on and off), but after a short time, it went back to constantly spitting out values.

any advice would help, thanks
myredhotcar says: Nov 23, 2012. 8:14 AM
I'm still waiting for my Teensy to be delivered but in the meantime I made my own controller out of an old MIDI Keyboard. I used your idea of two acrylic sheets and spacers. Instead of getting it laser cut I tried doing it all myself...

http://www.bleep.io/blog/convert-an-old-midi-keyboard-in-to-a-cool-controller/

Let me know what you think!

Nick
djozmo says: Nov 22, 2012. 1:21 PM
Oh how awesome to see a comment from a fellow South African :) Im here for the read, building my know-how, learning Mechatronics so I will get started soon on this project or another controller soon!! Luckilly im in Germany so getting parts is allot easier...and probably cheaper than SA, thanks for the fantastic info's , pics and inspiration Alex!
balduin-kowalski says: Mar 29, 2012. 5:23 AM
Hi there, I have an other question concerning the I2C module->module communication. It looks like a great feature if you want to use all modules with only one USB-Port. But if I have enough USB-ports on my computer it seems to be much easier just to connect every single module via its own USB. Or would it be a problem if I have thee Teensys all connected via different USB-ports to tractor?
Fuzzy-Wobble (author) says: Mar 29, 2012. 6:38 AM
I recommend using I2C. Modular is always better. It is not very difficult to enable I2C.
balduin-kowalski says: Mar 29, 2012. 7:33 AM
Hmm, okay. But can you just tell me WHY it is always better to use I2C? Don´t get me wrong, but I would just like to know the pros and cons. Yes, it is easier if you can use all modules with only one USB-Port, but this also means you can not use the slave-modules as standalone-controllers anymore (unless reprogramming them).
Fuzzy-Wobble (author) says: Mar 29, 2012. 8:32 AM
OH I see, so sometimes you want them modular, and other times you want them standalone. That is an interesting feature I have overlooked. If you use multiple USB ports just ensure you change the 'channel' in the code of each controller. This ensures they are all sending different MIDI messages. Best of luck.
balduin-kowalski says: Oct 9, 2012. 3:45 PM
Now I finally got two controllers, which I like to use together or as standalone-controllers. Each one is connected to traktor via usb. I also ensured, they are both programmed to send on two different midi-channels. They both work fine if attached separately to tractor. But if I connect them both, the second one is ignored. In the preferences they both appear as midi-interfaces with the same name ("generic teensy midi teensy midi") and I can just activate/deactivate them together. Looks like tractor got problems to understand them as two separate devices. Is there maybe a way to name both devices individually?
Fuzzy-Wobble (author) says: Oct 9, 2012. 5:30 PM
I feel like i (at one point in time) had two teensy-usb devices hooked up to traktor... unfortunately i cannot remember specifically how it was done.

in the traktor dropdown the midi controller 'Teensy' shows up - maybe all of the mappings go under the ONE Teensy?
balduin-kowalski says: Oct 15, 2012. 12:59 PM
Well, in the traktor-preferences both controllers show up, but only the signals of one are recognized - just like only one controller is plugged in. I also tried to give individual names to both devices in the "Audio-MIDI-Setup" (on OSX), but this does not change anything for tractor. Do you know a way to give every device an individual "ID" via Arduino?
Fuzzy-Wobble (author) says: Oct 15, 2012. 3:40 PM
Hmmmmmm. We should solve this. When the Teensy guy (Paul) is not so busy I will email him. We need to find a workaround...
balduin-kowalski says: Nov 12, 2012. 1:30 PM
OK, I somehow "solved" the problem. The solution is quite embarrassing for me - I was using an old version of Traktor (3.3) and as everything else was working fine with it I newer thought about upgrading to an newer version. No I upgraded to Traktor Pro 1.2 and both controllers work fine connected via USB. There are still conflicts if you choose the device ("Teensy") directly as the In-port while mapping with the Controller-Manager, but they are all gone if you choose "all ports" instead.
BleedThemAll says: May 1, 2012. 5:57 AM
Hey man, how do you put the outputs and monitor output into this project? Would really appreciate a reply, thanks.
Fuzzy-Wobble (author) says: May 1, 2012. 6:06 AM
I have no idea what you are asking?
BleedThemAll says: May 1, 2012. 6:08 PM
haha, how do you put the Audio outputs into this project? or are you just using a standalone soundcard?
Fuzzy-Wobble (author) says: May 1, 2012. 7:30 PM
This is a controller.
BleedThemAll says: May 3, 2012. 8:03 PM
yes, i understand that, but in your original project you had a monitor output on the front and the main audio outputs on the back? how did you put them into your design?
Fuzzy-Wobble (author) says: May 3, 2012. 8:10 PM
I have never built a controller with audio outputs.
mongin2010 says: Nov 8, 2012. 8:55 PM
Im pretty sure hes talking about that Voltage meter you had on the bamboo covered mixer. It looked like it was showing the output audio level. How did you do that?
ash_DJ says: Jun 20, 2012. 3:03 AM
I think he's referring to your original project in your Youtube video, the one where you have the MIDI out and thru connections...
mongin2010 says: Nov 7, 2012. 8:40 PM
Has anyone jumped into setting up LED's yet?
balduin-kowalski says: Apr 22, 2012. 3:51 PM
Hi great Fuzzy,
with your help I am finally done with building my own controller! But there are some minor coding-bugs left. The poti-levels are slightly jittering between two values when set to the middle. They never jitter when set to 0 or 126 and I even used the pots you recommended. At first I tried to change the analogThreshold value in your code, but that didn´t help. Did anyone have similar troubles? I Found an Arduino-Tutorial describing jittering-troubles with the analog-ins:

"The Atmega datasheet also cautions against switching analog pins in close temporal proximity to making A/D readings (analogRead) on other analog pins. This can cause electrical noise and introduce jitter in the analog system. It may be desirable, after manipulating analog pins (in digital mode), to add a short delay before using analogRead() to read other analog pins. " http://arduino.cc/en/Tutorial/AnalogInputPins

Do you know a solution? I am not good enough in coding to do it by my own.
1-40 of 229Next »
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!