Future Man , the percussionist for the jazz band Bela Fleck and the Flecktones , has a MIDI-based percussion controller, called the Synth-Axe Drumitar, that is worn like a guitar but uses finger-tap sensors for percussion. His version is completely one-of-a-kind, but there is also a commercial instrument, the Zendrum , that is similar in concept. I'd always thought the concept was fun, but since I didn't have the $1500 or so to buy a Zendrum, I thought I'd try to make my own version of the MIDI-drum-in-a-guitar package. The Electric Funkatron is the result.
This instrument has twelve velocity-sensitive percussion pads. When played, an Arduino MEGA converts the taps into MIDI note data which is sent to an external MIDI tone generator (I use a mid-90s Alesis QS7 keyboard synthesizer -- any synth that maps drum sounds to individual notes will work).
I built the instrument into a gutted Guitar Hero controller. The neck buttons are electrically-connected; currently the red button is used to cycle through all 16 MIDI channels and the orange button sends an "all notes off" command in case things get stuck. The others are not used, but could be by reprogramming the Arduino.
As a bonus, the whammy bar on the Guitar Hero controller is used to trigger a "turntable scratching" sound.
I originally built this from July to December 2010. This instructable is reconstructed from memory and my build notes .
Update 1/16/2012: Video added below
Step 1: Step 1: Parts and Tools
This is one of those projects that begs for you to give it your own personal touch, so these materials aren't hard-and-fast required they just happen to be the way I did it:
Arduino MEGA (chosen because it has 16 analog inputs, as opposed to 6 on the UNO)
12 Piezo Tranducers (Radio Shack # 273-073)
7-segment LED (for displaying current MIDI channel)
XBox360 Guitar Hero controller (PS3 version should work -- most of the guts are ripped out anyway). I found one at a Goodwill for about $15.
Sheet of Plexiglass, large enough to cover the guitar body
Foam mouse pad
small stick-on foam feet
9V battery holder
5-pin DIN jack
wire, resistors, zener diodes
Various sizes of screwdriver
Oscillating spindle sander
Step 2: Step 2: Build the Tap Sensors
I tried several approaches before I got these right. The piezo transducers are very sensitive; in particular, I had lots of trouble with "cross-talk": taps on one sensor would cause another to activate. The steps below build sensors that address this issue quite well.
1. Cut the mouse pad : Measure the size of the pads to your liking. I used the width of my ruler as a guide and made my pads square. Mark the lines in pencil on the mouse pad.
With the mouse pad on a hard cutting board, use the metal straightedge as a guide and cut the pad with a utility knife. Try to cut through the pad entirely in a single stroke.
2: Cut the Plastic Squares: Cut plastic squares (I used some scrap polyethylene) roughly the same size as the pads you cut in Step 1 above. They don't have to be exact -- in fact, a little smaller is preferred. I trimmed mine down using tin snips. Another useful technique here is to score the plastic along a straight line using a utility knife, then breaking the square off by bending along the score line.
3: Crack Open the Piezo Element: The piezo element comes housed in a protective plastic case. We need to set it free from its cold, plastic home. My preferred way to do this is to put it in a vise and squeeze the jaws until the lid pops off. Be VERY CAREFUL! Wear safety goggles -- the lids sometimes fly across the room. One of these popped straight into my eye; fortunately I *was* wearing safety goggles. Once you have the case open, gently remove the round piezo element within. Be careful not to break the wires away from the element.
4: Trim the Piezo Element to Size: Using tin snips, cut away most of the piezo element until just a small amount remains surrounding the soldered-on wires. The smaller footprint of the modified element means less chance of your finger tapping the element directly. They seem to work better if they pick up vibration from a little distance away.
5: Assemble the "Sandwich": Using silicon adhesive assemble the trigger in the following order (top to bottom):
Foam stick-on feet (3)
For the piezo element, try to keep it on a corner, away from the middle of the pad. For the stick-on feet, try to keep them away from the piezo element. This minimizes vibration from other triggers reaching the element.
Now that you've finished one, go make eleven more!
Step 3: Step 3: Prepare the Guitar Body
The guitar is held together with screws, so getting it apart is no problem. Be careful with the neck -- it has a a lever in the back to release it (I assume it shipped with the neck and body as separate pieces that snapped together; mine came from a thrift store so I don't know for certain).
Once open, remove all the electronics except the neck buttons and the little breakout board they attach to. Save the whammy bar for later -- it will fall out when the case is opened. Toss the remaining electronics (or use in other projects!).
Make note of posts in the body that are used to screw it back together. Leave these as they are. Otherwise, use a utility knife to cut out all the remaining plastic tabs (there are a bunch) inside the guitar body halves -- EXCEPT for the ones that hold the whammy bar in place. Try to free up as much flat space in the body as possible.
At this point I also primed and painted the body and neck pieces.
Now is the time to make cutouts for the MIDI jack (the 5-pin DIN jack) and the slide switch (for power on/off). I put mine near the strap holder opposite the neck. You may also need to tweak the battery compartment to fit a 9V battery.
Step 4: Step 4: Build the Clear Guitar Face
This step is optional. I originally wanted a clear front to show off the electronics inside. In the end it mostly shows my messy cabling, but it still adds a nice touch.
The front of the guitar body had a thin plastic faceplate. I taped this to a sheet of Plexiglass to use as pattern, then traced around it with a sharpie. Make sure you also trace the hole for the whammy bar. Once the tracing is on the plexiglass, put blue tape on the cut lines -- this will help with cutting.
Cut the plexiglass faceplate with a jigsaw, using a fine-toothed (metal-cutting) blade. Go slow -- plexiglass will melt to the blade if it gets too hot.
Use a drill to start the cutout for the whammy bar, then finish off with a file or, if you have one, a scrollsaw.
Use a spindle sander to smooth out the cut edges of the faceplate.
Lay the faceplate over the guitar body front and mark the position of the screw holes. Drill and countersink the holes
Carefully make cutouts (using a hacksaw, jigsaw, or scrollsaw) in the front half of the guitar body. Leave support for the whammy bar, neck, and screw holes. Sand the edges, then attach the plexiglass faceplate.
Step 5: Step 5: Make the Neck Buttons Usable
The neck buttons all feed into a ribbon cable that runs down the neck and ends in a small circuit board just inside the guitar body. The picture shows you what it looks like after lead wires have been added (sorry, I don't have a "before" pic).
With the board oriented as shown in the picture, number the pads 1, 2, 3, 4 left to right on the top row and 5, 6, 7, 8 left to right on the bottom row. Pads 1, 2, 3, 4, and 6 are the "signal" pads for the five neck buttons, so solder leads to them that can be connected to digital inputs on the Arduino. Pads 5, 7, and 8 are ground.
Step 6: Step 6: Electronics and Programming
1. Tap Sensors
The general idea for the tap sensors is based on a project on Tod Kurt's blog . You will need to build twelve of the piezo transducer/zener diode/resistor assemblies on that page (and shown again in the first picture) and connect one to each of the analog inputs 1 through 12 on the Arduino MEGA.
2. MIDI OUT
Also build a MIDI OUT as shown on that page and connect pin 5 of the jack to the TX1 pin on the Arduino MEGA. Connect pin 2 of the jack to ground and pin 5 to a 220-ohm resistor which is then connected to +5 V on the MEGA.
3. MIDI Channel Display
I use a single 7-segment LED to indicate the MIDI channel on which the Funkatron transmits. Since there are 16 channels total, I cheat a little -- I use the decimal point to indicate the "tens". In other words, channels 1 through 9 look normal on the 7-segment LED, while channels 10 through 16 look like .0, .1, .2, .3, .4, .5, and .6, respectively. I did this because I built a little breakout board with the 7-segment LED, resistors and zeners for the piezo transducers, and some extra colored LEDs (which I'll explain below). Space was tight on the board, so much I didn't want an extra 7-segment LED crowding things out.
Each pin on the 7-segment LED (A, B, C, D, E, F, G, and the RHDP ["right-hand decimal point"]) is connected to a digital pin on the Arduino MEGA:
A --> pin 44
B --> pin 45
C --> pin 43
D --> pin 40
E --> pin 41
F --> pin 38
G --> pin 39
RHDP --> pin 52
Don't forget to connect the ground pin!
4. Whammy Bar
The whammy bar is nothing more than a potentiometer with a spring to return it to center. Connect the middle lead to analog pin 0 (A0) on the Arduino MEGA. Connect one of the other leads to +5 and the remaining lead to GND. (You may need to reverse them later after testing.)
For power, I built a pigtail like this one , but with a switch wired in.
6. Neck Buttons
Connect the red button to pin 22 on the MEGA and the orange button to pin 24. Attach the other buttons (or not) to any available digital pin, if you wish. The code below doesn't use them, so figure out something useful for them!
The Arduino MEGA code for this project is attached to this page as a ZIP file. Note that it contains more than just a single .pde.
Step 7: 7: Finishing
Put the guitar, now with new electronics back together and place your tap sensors wherever makes most sense to you. Attach the sensors with hot glue so you can move them later if you want.
The code in the previous step should work with any MIDI device (keyboard synthesizer, drum machine, etc.) that assigns drum sounds to individual notes of the keyboard. I've configured the code to work with a General MIDI layout, so you should have some useful sounds without any tweaking -- in particular, the whammy bar is configured to trigger the turntable scratching sound common to many of these layouts. The picture gives some ideas of how to assign sounds to the triggers.