Only a year late getting around to this, but here are a couple videos of it in action:
The goal here is to build something similar to a Zendrum, basically, a guitar-shaped controller for electronic drums. The controller senses finger-taps and translates them into MIDI note data, which is then sent to a synthesizer which generates the sounds. For example, if I hit the "snare" trigger, it might generate C#4. My keyboard (running in drum kit mode) would play whatever drum sound is assigned to key C#4 (probably a snare drum sound, but it could be anything I want).
My goals for the project are:
Because it's the electric version of the Acoustic Funkatron, silly. While conceptually much older (I first dreamed it up in college about 15 years ago), the Acoustic Funkatron exists only in my head....for now. Muahahaha!
Which reminds me...anyone got an old banjo they'll let go for cheap? Closed-back preferred; does not need to be functional!
My intended design is more like a Zendrum than the Drumitar. The Drumitar itself has no digital logic and does not generate MIDI data -- it's simply a collection of triggers that are routed to an off-controller drum module. It's a design that works VERY well and Future Man has done some awesome things with it. I wanted to learn Arduino, however, so I'm moving the MIDI interface on-controller (like the Zendrum). Further, this was somewhat a design of necessity since I already have a regular MIDI keyboard for my sound module, not a drum module with trigger inputs. I *have* to generate MIDI data from the controller, otherwise I'd have to shell out for a drum module.
Since I just got my camera working again (apparently via "percussive maintenance") after 2 years of no-go, I'm now able to post some pictures of the build-in-progress.
I spent most of my time up to this point working through issues with the electronics, since, frankly, I'm new to practical electronics. I have a freaking PhD in Electrical Engineering, but haven't actually done circuits and stuff since undergrad, so it's slow going. Much of the electronics is based on this design. I'll post my expanded PDE file when the project's complete.
The core of the system is an Arduino MEGA. I settled on the more-expensive MEGA because I hoped to make my drum triggers velocity-sensitive, meaning I needed the 16 analog inputs it provides. (You can use digital inputs for the triggers but you don't get velocity sensitivity -- it's either "on" or "off".) The 6 analog inputs of the Arduino Duemilanove just weren't enough -- I wanted LOTS of triggers. Plus, I can't pronounce "Duemilanove." That alone was worth the extra 40 bucks.
15 of the MEGA's analog inputs are connected to piezo transducers (Radio Shack 273-073). A 5-V zener diode and a 1 M-ohm resister are connected in parallel between each input and ground to protect the MEGA from over-voltage/current.
The MEGA is powered by a 9V battery wired to a center-positive plug and connected to the MEGA through the wall-wart adapter socket.
My wife and I are scavengers, hitting up thrift stores, flea markets, yard sales, Craigslist, etc., for interesting and cheap stuff. Lots of it is for project fodder. Usually I don't have much luck at Goodwill, but today was different. In addition to a couple of Xbox games, a couple of Ghost in the Shell DVDs, and a cool toy robot for my EVIL ROBOT ARMY, I found an old Guitar Hero guitar for $11. Perfect! This is exactly what I need to house this project.
Once I got the screws out and opened it up, this is what I saw.
The left body piece is the front, the right is the back. On the back half, you can see the battery compartment (sized for two AA's) in the lower left and the whammy bar on the lower-center. My plan is to re-purpose the battery compartment for the 9-V (the sizing is close...) and maybe keep the whammy bar for something fun. It's just a variable resistor, so I could hook it up to an analog input on the MEGA and...maybe...use it for DJ scratching FX. We'll see....
This is the back half after I cut out part of the batter compartment. The fit was a little too shallow for the 9-V battery, so I cut the back out and filed the edges a bit.
The battery assembly, adapted from this idea. Just underneath you can see the battery cover. If this works I'll be able to change the battery without cracking the case. Obviously a useful thing...
In addition to the Arduino MEGA and the battery (and maybe the whammy bar, if I end up using it), the other big space-eater is a break-out board I soldered up to provide a resistor and zener diode for each input. You can see it here:
Yes, it's a mess. I thought I was being good by putting everything on a break-out board, but the wiring turned into a nightmare. I really, REALLY wanted some surface-mount screw-terminals so I wouldn't have to solder the wires on, but the local Radio Shacks weren't coming through. I finally found some today at Fry's (not close, so I don't go there often) and bought all they had. Too late for my poor hacked-up board, though.
And here is all the electronics, laid out in their most-likely locations:
Once again, forgive my poor cabling. I'm learning this as I go. In this pic you can see the break-out board (11 o'clock), whammy bar (12:30), Arduino MEGA (center), MIDI out (3:00), and battery (6:00). Nothing has been attached yet, but this seems the best solution so far. Everything here (except the whammy bar) is lower than the walls of this (back) half of the body, meaning they shouldn't get in the way of the piezo sensors which will (mostly) be in the front half. Space is a bigger issue than I expected!
I'll probably work on positioning the sensors next.
Realized last night I should paint the guitar shell before I go putting triggers on it. The stock body is black and the triggers are black, meaning the triggers would be hard to see while I'm playing. So I primed and spray-painted the shell this morning. The body is a nice blue and the neck is white; hopefully those will provide some contrast and look nice.
Did a little work installing some of the guts inside the case. Got the MEGA, the breakout board, and the MIDI out installed. May put up a pic or two later.
Found out the 1-1/8" hole saw I bought yesterday for cutting holes for the sensors is just a fuzz too small. Grrr.
If I have time tomorrow I hope to get a couple of sensors installed and hooked up so I can run some tests. I'm still worried about cross-talk (i.e., tapping one sensor and another picking up the vibrations and firing).
Got the battery pack installed and mounted the on/off switch to the case. Hot-glued some piezo triggers to the shell and connected everything to test the triggers out. My fears are realized: cross-talk all over the place. :( I'll try tomorrow with some mouse-pad material underneath.
The back half of the body, with several components installed: Arduino MEGA (blue board), breakout board (tan/yellow board), and 9-V battery. Also, on the right, near the yellow alligator clip, is a 2-position switch for powering on/off. The white board near the top is a loose breadboard; it's being used to connect two triggers and the MIDI out to the MEGA.
The front half, with two test sensors attached (gray squares). I had been hoping to get away with unmodified off-the-shelf piezo transducers, but they didn't handle the cross-talk very well. Oddly, they also didn't pick up finger taps very well. In the above pic, I've pulled the piezo elements out of their housing and built a "sensor sandwich" in hopes of better isolating the triggers. Each one is, from top to bottom: foam, rigid plastic, piezo element, foam. The foam is from a mousepad, the plastic was originally from some polyethylene scraps.
My first pass at these was notably better than raw transducers glued to the case, but still not perfect. Some cross-talk and, worse, some "double tapping" on one the sensors -- in other words, I'd tap it once but it would trigger the sound several times (like a buzzing bee). I think the piezo element is vibrating and hitting the plastic too much; I've rebuilt the sensors such that everything is glued together flush. The glue is drying right now, so we'll see later if that helps. Bonus: cracking open the piezo transducers results in the piezo element itself, the cylindrical casing and a "lid" that seals it up. The lid turned out to be a perfect plastic layer, so if my latest sensor sandwich works, I'll use those. Re-use FTW!!!
I'm just now getting around to testing my home-made triggers. No change. :( Still lots of crosstalk, still a good bit of double-tapping. I've re-built them with the following modifications:
Houston, we have a WINNER. The trigger design I posted yesterday seems to be working fairly well, even with velocity-sensitivity enabled (though the response will probably require more software-tweaking in the velocity-sensitivity case).
Need to add a mousepad and more of those foam rubber feet to my shopping list.
Built 12 more triggers today, based on my Oct. 3rd design. When the glue is dry I'll test them individually.
Last night I bought a sheet of Lexan. I've never worked with it before so I'm a little uptight about it; it's not cheap. I really want that transparent case-front, though. :)
My first attempt at working with clear acrylic sheeting (i.e., Lexan). I cut it with a jigsaw, using a fine-toothed blade. I was pleasantly surprised with the results -- I expected more issues with the power tools melting as they cut.
I started by taping the faceplate (from the Guitar Hero guitar) to the Lexan and tracing around it with a Sharpie.
I then put blue tape over all the Sharpie lines. From what I've read, this helps keep the Lexan from melting while it's being cut. A melted edge is more likely to bind the blade, damaging the Lexan and, worse, creating an unsafe situation.
Note the big rectangle of tape near the top of the outline -- this is where I will cut a hole for the whammy bar.
I put the faceplate back on top of the tape so I could trace directly on the tape with a pencil. This gave me a better cut line than the Sharpie. I finished my prep by putting blue tape on the opposite side of the Lexan as well.
The Lexan clamped and supported, ready for cutting with the jigsaw. (My shop is currently a mess, so the only place I had to clamp was my radial arm saw's table -- you can see the blade on the left side of the picture. It is not being used for this job!)
The new Lexan faceplate, after cutting it out with the jigsaw. Still need to cut out the whammy bar hole.
I started the whammy bar hole by drilling two pilot holes on the drill press using a Forstner bit. The bit was two big to fit through the drill press table, so I put a sacrificial piece of scrap wood under the Lexan and set the drilling depth to just punch through the Lexan. That way it did not continue on through to the table, ruining my beloved Forstner!
I still need to sand the edges of the faceplate.
The whammy hole, after working on it with the drill press. I've put it in the vise so I can finish it off with rasps.
And the finished faceplate! I used a four-in-hand rasp/file and a thin round file to finish out the hole. It's a little rough; I'm sure a CNC machine could do better, but I'll work with what I have. :)
Spent a lot of time tweaking the faceplate so it would fit onto the guitar shell. "Tweaking" involved lots of shaping on the spindle sander plus a few adjustment cuts on the scroll saw.
Similarly, i used the scroll saw to cut large view-holes in the face of the plastic guitar shell itself.
Then I drilled & counter-sunk screw holes in the lexan and screwed it to what was left of the shell.
Started re-building the breakout board. The original version was shaping up to be a dead-end. The new version packs the resistor/zener diode input protectors in a smaller area and uses pin headers (instead of soldered-on wire) for connection points. Additionally it will have:
All of the above have pin-headers for easier connection. Here's my layout diagram (using a Radio Shack perfboard #275-150). (The layout template for the perfboard came from this page.)
Haven't updated in a while, though I've done a good bit of (mostly tedious) work. The break-out board and all connectors have been soldered and assembled:
I have the MIDI out and whammy bar wired in, as well as the stock neck buttons from the Guitar Hero controller. The buttons are attached to a long ribbon cable (routed through the neck to the body) which is terminated in a small breakout board:
Sorry the picture is not very good. The breakout board has eight terminal pads, to which I soldered extension wires. Looking at the board as shown in the picture above, the first, third, and fourth pads (left to right) on the bottom row are soldered to ground (red, green, and black wires, respectively), while the other five pads received hookup wires so I could plug them in as inputs to the Arduino MEGA. The second pad on the bottom row actually broke off, so I had to splice a hookup wire onto it's conductor in the ribbon cable.
As of today, I've tested everything so far connected (test files for each are attached at the end of this page):
This is what my office desk currently looks like:
That is the Funkatron, completely wired up for testing. Today it was time to test the trigger pads, which you can see strewn out on the left side of the guitar body. All pads worked, with the one weirdness that I had to move the pad connected to analog pin 15 to analog pin 2. Using pin 15 It was getting continuous readings, resulting in a nice buzz roll on a crash cymbol -- without me tapping the trigger pad. Presumably pin 15 is fried, but I need to check out other points along that circuit and see if I maybe have a transient short (or open).
In the upper-right corner of this picture is the keyboard (my old Alesis QS-7) I'm using as the sound source for the project. The cable coming out the front of the guitar and trailing back behind the multimeter is the MIDI cable connecting the two.