Introduction: OpenChord.org V0 - Build a Real Guitar Guitar Hero/Rock Band Controller
This instructable will show you how to take a regular electric guitar and turn it into the OpenChord V0, a Guitar Hero / Rock Band controller that you play by actually playing notes on the guitar. Instead of pressing buttons, you'll be pressing strings, sliding up and down the fretboard to connect notes together. However, it still relies on the internals of a Guitar Hero controller to generate the proper signals to the console, and it uses the strum bar from the controller as well.
This project has been superseded by the OpenChord V1, which actually uses the real strings and generates real controller signals.
For a little more information about the project as a whole, visit OpenChord.org.
Step 1: Theory of Operation
The basic idea of this guitar is to use the strings and frets of the guitar as a circuit. When you play a note on the guitar, you press the string between two frets. If we connect the string to a voltage source and the frets to a ground, each time a note is held down, it creates a circuit. By connecting each fret to a microcontroller, we can then measure which frets the string is touching. Finally, we can do this process for each string on the guitar, measuring (almost) where every finger is.
Why almost? Once more than one string is involved, some ambiguous situations arise. For instance, electrically, holding two strings down at the second fret is no different from holding one finger down on the first fret and another on the second fret, because the fret connects everything together. Fortunately, we'll deal with this in software...
Step 2: Ingredients
In order to do this project, you'll need at least a basic idea of how to solder, and a little bit of experience with a microcontroller will be nice.
1 real guitar
- Electric is preferable, if you don't want to ruin the instrument's future playability
1 guitar hero controller
- It's important that it be a guitar hero/rock band controller, instead of just a regular dualshock. The playstation will know the difference, and so the playing experience will be somewhat different if you use a regular controller, since just pressing a button counts as a note played)
1 Arduino microcontroller
- I used an Arduino; if you know what you're doing, you can use something else. But you'll need at least 5 input and 12 output ports.
- Not strictly necessary, just super useful
Small Wire - I find network cable to be super-convenient
Laquered wire - This is the thin, coated wire you find in headphone cords
Small breadboard chunk - at least 6 x 6 holes big
Wooden beads - Read step 5 to get an idea of the right size
Plastic drinking straws
Step 3: Disassembly
The first step in building, ironically, is to tear everything apart.
To start with, the real guitar.
First, take off the strings and the neck of the guitar. This will probably be about the easiest thing you do: loosen the strings until you can take them out of the neck, and then unscrew the 4 screws holding the neck to the body of the guitar.
Next, remove the faceplate and pickups. The pickups should be attached to the faceplate, so you should be able to just unscrew all the screws on the faceplate and lift the whole assembly off. There will be a couple of wires that attach the pickups and other attached electronics to the output jack; they'll have to be cut, unfortunately. Hopefully, there will only be two or three, though, so with a little soldering, the guitar can be made whole again.
That's it for the real guitar. Now onto the fake one.
I'm using an Ashely Rock Axe guitar that I got on sale for its parts. Basically, the actual controller elements need to be removed from the body. In this case, it meant cutting and re-soldering the battery box wires, since they went through a hole from the front to the back of the guitar. Your guitar may be different, so I'm not going to give too detailed instructions for this part, only that you want to end up with everything electronic still together, but outside of the case it came in. For now, don't cut anything if you can avoid it; it most likely will come apart with some small screwdrivers.
Step 4: The Neck
To start actual construction, we'll wire up the neck so it's ready to be attached to the microcontroller.
Along the side of the neck, between the neck and the fretboard, use a circular cutting disk with the rotary tool to cut out a small groove, approximately 1/8" deep. Make sure you cut this on the side of the guitar that will face the ceiling; the model in the picture was accidentally cut on the wrong side. This will be used to carry the wires from the frets to the body of the guitar, so it's best to leave the side your fingers will be sliding along alone.
After the groove is cut, either with a drill bit and rotary tool or small screwdriver, dig away at the wood beneath the first 5 frets. The goal is to have access to each of these frets beneath the fretboard so you can solder wire to each fret without the solder or the wire sticking out from the neck of the guitar.
Now cut the lacquered wire into 5 strips, each long enough to reach at least the middle of the guitar body - it's good to have extra to make sure we can get everything in place. To remove the lacquer on the tip of the wire to be able to solder it, hold the tip of the wire over a cigarette lighter or match and burn off the lacquer, then scrape the ash off briefly with your fingernails. One at a time, solder the lacquered wires to the frets, making a tape flag at the other end of the wire identifying which fret each wire connects to. Finally, use tape or wood putty to cover up the wires.
Now the neck is basically ready. Reattach it to the guitar body.
Step 5: Insulate the Strings
While we're still working with the real guitar, we'll go ahead and insulate the strings.
Since the program figures out which note is played by putting a charge on each string in order, each string will need to be electrically isolated from every other string. Unfortunately, the all-metal bridge works against us. Also, the tension in a tuned guitar's strings tends to cut through a variety of possible insulators. But still, we persevere.
If you haven't already, remove each string from the body of the guitar. If you're not used to working with a guitar, it might make sense to work one string at a time, so that you don't wind up with a reverse-strung guitar.
Now slide a bead down the string. This bead must be large and strong enough to keep the brass ring on the end of the string from slipping down into the metal hole it normally rests in, insulating the brass ring from the metal bridge body. Extra points if the bead tapers, so that the bead rests in the metal hole.
In these pictures, I've soldered the strings to the diodes, although since then I've found it's easiest to attach the diode on the other end of the wire.
Now put the strings back into the body, but don't attach them to the neck just yet. The strings will still touch the top surfaces of the metal bridge, so they need to be insulated there too. Unfortunately, the tension in the strings tends to cut through a variety of materials.
The best solution I have found so far is plastic drinking straws. Cut an inch or so off a straw, then cut along it's side, so you have a rectangle of straw material. Holding the part of the string that is coming out of the front of the guitar, fold the straw piece over the string and wrap it as tightly as you can, the push it down into the hole in the bridge so that when you pull the string towards the neck, the straw covers both the area where the string comes out of the bridge and where it touches the bridge on the face of the guitar.
Now reattach the strings to the neck. Tighten the strings until they are firm, then use the multimeter to make sure that none of the wires are electrically connected to the others, fixing the insulation accordingly.
Step 6: Microcontroller, Solder, Wire
Now we start to get into the actual electronics of the project.
First, find somewhere inside the guitar to screw in your Arduino. However, make sure you can still plug in the USB cable, so only use one screw, and screw it it lightly, allowing the board a little freedom.
Moving back to the neck side of things, we'll get the frets connected first. The fret wires will be inputs into the microcontroller, so they'll need to be attached to pull-down resistors. These resistors drain any extra current out of the frets when they're not touching any strings; otherwise the microcontroller will get confused. Use resistors in the 1K - 50K range, any higher and you'll start getting issues with multiple button presses.
Burning the ends of the lacquered wires again, join each fret wire to a length of regular wire. If you're using network cable, keep the wires together in their sheath for convenience. Using the breadboard piece, solder all the resistors together to a ground wire on one side, then solder each fret wire to the non-ground end of a resistor. Attach this breadboard to the inside of the guitar body.
*Optional*, but recommended, solder the free ends of the new wires to some connected standard pins; this way, they won't fall out of the Ardunio. Better yet, get an Arduino you can solder directly onto.
Now attach the fret wires to pins 2 through 6 on the Ardunio, with pin 2 being the first fret, pin 6 being the 5th fret. Also, connect the ground wire to one of the ground pins on the Arduino.
Onto the back side, we'll need to wire up the strings. if there is no hole through from the rear to the front, drill one, watching out for the microcontroller package you already attached there. Now solder wires onto each string, put the wires through the hole, then solder the diodes to each wire, such that current is only allowed to flow into the microcontroller; i.e., the bands should be on the side away from the wire. Now push the diodes into pins 14-19, with 14 being the biggest string, 19 the smallest.
Step 7: Plug in the Microcontroller and Test
Now we need to load up the microcontroller. If you're using Arudino, the following code can be simply downloaded and entered into your Arudino IDE and ought to work. If you're feeling ambitious, though, the most recent version of the code will be here. If you're using a different microcontroller, the code should be easily adapted into C, something I'll work on soon. Since the Arduino IDE can also take in standard C, it's mostly the port mappings that need to be changed.
Anyhow, before we get ahead of ourselves, let's use the PC to test out the circuitry in the guitar. In the Arduino IDE, switch to the serial viewer. The program is set up to transmit a line of text data each time the state of the guitar string and fret "switches" changes. The lines that get printed tell you which strings are hitting which "buttons", so play around with different combinations of fingerings.
Step 8: Plug in the Controller
Now that the guitar part works, we can work on getting the guitar to talk to the Playstation.
On the controller, find the power and ground wires. If you're using a wireless controller, you're in luck, since they'll be the wires coming out of the battery pack. Things are more complicated if you have a wired controller, since the Playstation only provides 3.3 V of direct power, but hopefully there's a wire that goes to the vibration motor, which has a higher voltage that we can steal for the Arduino. Solder additional wires to these ground and source voltage wires, then connect these to your Arduino's 5V and GND pins, making sure to change the power jumper if the board is older and doesn't do it automatically. If you're using a wireless controller, solder the power wires at the power switch, that way the Arduino gets shut down when you turn the controller off.
Then figure out how the controller takes in button signals. Does a button press on the guitar connect a pin on the controller's chip to the source voltage or to ground? Again, if your controller isn't wireless, this might get more complicated, since if the chip is expecting 3.3V in, it's not going to be happy if it's being connected to 12V... But hopefully the buttons control paths to ground. This is the way the microcontroller is currently programmed; if the buttons instead connect the chip to source voltage, you'll need to change the code to reflect that the colorOut pins need to provide HIGH signals when a button is active
Next, find the cable that leads to the buttons. Write down or mark which wire goes to each button, remembering that there will be a wire that provides a common ground to all the buttons. Cut this cable, and again, you should solder it to a pin row. Connect these wires to pins 8-12, with 8 corresponding to green, 12 to orange.
Now plug it in and try it out, gently. You don't want to rip any wires out...
Step 9: Pack It Up, Pack It In
So it works! Now let's make things a little less likely to fall apart and break.
This is the part that is going to be the most variable, depending on what sort of cavity your guitar's body has. It's also the part I've spent the least time on, so if you're an enclosure master, let me know, and we can make this better.
If you're willing to cut into your real guitar's body, that will probably let you make the guitar look much nicer than mine. However, remember that even on an electric guitar, the size and shape of the body have an important impact on the sound of the guitar, so if you're going to want to play it for real again, you might not want to make any big cuts into your guitar.
You'll probably want to cut out the strum bar from the plastic guitar and mount that back onto the board the controller is on.
For now, since I'm not currently using their features, I cut out the whammy bar potentiometer, along with this switch that doesn't do anything for the controller. Then I found where things would kinda fit, and through a combination of wedging, cutting, and screwing, I fit things more or less into the body.
Step 10: Rock Out, Help Out
Congratulations! You should now have a complete, working Guitar Hero controller that you can play (almost) like a real guitar.
However, this project is only the start. Come visit us at OpenChord.org and find out what we're up to!
We have a be nice policy.
Please be positive and constructive.