Completed: December 2010
Only a year late getting around to this, but here are a couple videos of it in action:
A little late posting, but I finally got it fully assembled and playable a few days before Christmas. I hope to have video of it in action soon. Some notes:
- The final build has 12 triggers, much less than I'd originally hoped. Space, both on the breakout board and on the guitar body, made more triggers much more difficult.
- Yes, the whammy bar does turn-table scratching. I'm very happy about that.
- The red neck button cycles through the MIDI transmit channels, which are displayed on a 7-segment LED which, unfortunately, is not visible to anyone other than the operator.
- The orange button sends note-off messages for all triggers, just in case something gets gummed up.
- The yellow button appears to be not connected. The blue and green buttons *are* connected, but don't do anything yet. The plan is to have them turn "drones" (sustained notes) on and off. Alternately, one could be used to cycle through drum kit assignments.
- The USB jack on the Arduino MEGA is accessible through the back of the guitar, but it's a pain to use.
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:
- 14 or 15 velocity-sensitive trigger pads
- Ability to save trigger-to-note mappings ("presets") on-board, cycling through them as-needed. To make things easier, I'll allow the presets to be compiled into the microcontroller code instead of user-assignable from the Funkatron itself. Will probably go with about 5 to 10 presets to start off. In theory I'm only limited by the memory on the microcontroller, but in practice I'm not going to use that many (or want to set that many up!)
- Using on-board controls, have the ability to change the midi channel the controller transmits on
- 2-digit 7-segment display, for showing current MIDI channel or current preset
- Have one or two triggers optionally be "drones", i.e., assigned to non-percussion sound effects such that one tap turns on -- and sustains -- the sound until another tap turns it off. (I've seen Future Man do this in some of his solo work.)
- I want a DJ scratching controller. :)
- Blinky lights. Because they look cool.
- Lexan front cover, to show off the guts and any blinky lights.
- A complete end-to-end portable solution, including the controller, a small sound module (e.g., a Yamaha QY10), and a small amp (like this one). The latter two would be battery-powered and carried on a utility belt (like BATMAN!!!).
Why is it called an "Electric Funkatron"?
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.
Before the camera: Mid-July 2010 to Sept. 11, 2010
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.
Sept. 11, 2010: Wherein I Score Big at Goodwill
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.
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.
Sept. 12, 2010
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.
Sept. 17, 2010
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).
Sept. 18, 2010
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.
Sept. 19, 2010
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!!!
Oct. 2, 2010
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:
- Trimmed down the piezo element itself. I have no idea if this will adversely affect it or not. Rationale: get the element away from direct contact with my fingers -- I seem to get better response if it's off to the side a bit.
- Instead of a bottom layer of foam, used some very small foam rubber feet as stand-offs. Rationale: less contact with the guitar body means less chance to transmit vibration to other sensors (or to receive from other sensors).
Oct. 3, 2010
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.
Oct. 5, 2010
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. :)
Oct. 7, 2010
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!
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. :)
I still need to sand the edges of the faceplate.
Oct. 30, 2010
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.
Oct. 31, 2010
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:
- one 7-segment LED (with resistors) for selecting presets and/or midi channel
- 4 regular LEDs (with resistors) for blinky-light effects
- resistor for the midi-out
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.)
November 27, 2010
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):
- whammy bar (the Arduino can sense and report, via the Serial monitor, analog values produced by the whammy bar's potentiometer)
- the four colored LEDs on the breakout board (the Arduino can light them individually, in sequence)
- the MIDI Out: (the Arduino can send note on / note off messages and have an external synthesizer play the notes)
- the neck buttons (pressing a button prints a message to the Serial monitor)
- the 7-segment LED (it can display values from 1 to 16 [where 10 to 16 are represented as .0 to .6] and do so inverted, i.e, the decimal point is on top).
November 28, 2010: A Happy Mess
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.