Make the future you remember from your childhood, and recycle that glove that was just gathering dust!
I encourage you to do three things before starting:
1) Download the schematic, Arduino code, and sample reader code.
2) Download (or have on hand) the video I've made to go along with this Instructable. I explain some steps in more detail and there are additional visuals that complement the pictures here.
3) Watch the entire video and read this entire Instructable before starting! If there's conflicting information, this guide takes precedence.
For all download links to the video, code, etc, check my website.
Step 1: Design and Parts
1) Retain as much functionality from the original glove as possible. Sure, you could just plug in the guts from a wiimote, but those bend sensors are so fun!
2) Fit everything in the existing housings. Part of the Power Glove's awesomeness is its ludicrous, sleek, retro-futuristic look. I didn't want to spoil that with wires and gubbins sticking all out.
3) Make it wireless, and robust. No one wants to fake-punch if they're afraid of ripping their computer off their desk or breaking the device.
4) Reduce power consumption as much as possible. I hate wasting and/or constantly recharging batteries, so I picked components (like the accelerometer) that advertised low power consumption.
5) Reduce cost as much as possible, while retaining ease of creation. I've opted to use components sold with breakout boards instead of making a custom board, and I've cannibalized parts from either the original Power Glove or commonplace items (like old computers) where I can.
Here's the full list of parts I used to mod my Power Glove:
Original Nintendo Power Glove -- $40 (ebay)
Arduino Pro Mini 3.3V (8MHz) -- $18.95 (Sparkfun)
ADXL330 3-axis accelerometer with breakout board -- $34.95 (Sparkfun)
CD74HC4067 Analog/Digital MUX with breakout board -- $4.95 (Sparkfun)
BlueSMiRF Silver Bluetooth communications module -- $49.95 (Sparkfun)
Battery clip and battery. I used a rechargeable 3.7V 1100mAh battery (Sparkfun), but anything over 3.3V should work. 2x AA is insufficient.
100k ohm resistor (Brown-Black-Yellow-Gold)
Old computer ribbon cables (optional) for creating your own custom ribbon cables
Berg-style connectors (optional) for making removable sensor connectors (cannibalize these from an old PC)
Right-angle pin headers (optional) for making removable sensor connectors
You'll also need the following tools:
Jeweler's saw (or any other tool capable of making precision circuit board cuts)
Programming interface for the Arduino Pro Mini (such as Sparkfun's USB to Serial Breakout Board)
Dremel rotary tool (optional, but very useful)
Step 2: Creating Custom Ribbon Cables
To make a custom ribbon cable, simply take a ribbon cable from an old floppy or CD drive, cut it to the proper length, and carefully use a razor blade to cut the proper number of wires from the original ribbon. These are a very nice, easy way to keep wires from getting tangled and confused inside the housings.
Step 3: Disassembly
Using sidecuts, cut all the wires that attach to the wrist board, cutting as close to the board as possible. Discard the cable that originally connected to the game console. Cut all wires from the main wrist-palm bundle where they attach to the palm board, except the common output from the bend sensors (light blue in my model). DO NOT cut the wires that run from the palm board into the fingers. These connect to the bend sensors, and we'll keep them intact.
Desolder the wires that you cut from the palm board, as we'll be using these connections to connect the multiplexer outputs to the palm board.
Step 4: Cut the Original Boards
I've included photos of these boards with the cuts marked in pencil -- ensure you know where to make the cuts before you start cutting!
Now, cut the boards using a jeweler's saw, or your tool of choice. Remember that the cuts are small and precise, so if you aren't completely confident in the steadiness of your hands, it's probably better to use the saw than a power tool.
Step 5: Attach Leads to the Control Pad Board
Identify each of the relevant traces on the board. There is a common ground and one each for Up, Down, Left, Right, B, A, Start, and Select -- 9 traces total. For each trace, use the Dremel to drill a small hole next to the trace, near the edge of the board. Ideally the holes should just touch the edge of each trace. Use a razor blade to etch off some of each trace's protective coating near the holes, exposing the copper trace. Finally, insert a wire through each hole and solder it to the exposed trace.
I suggest using the aforementioned ribbon cables for these connections -- one ribbon cable for each half of the board, and the common ground as a single wire by itself. Leave the cables long for now, you can shorten them later once you have an idea of how everything will fit together.
Step 6: Insert and Connect the Accelerometer
I suggest Dremeling a single hole in the unused area of the breakout board, so you can insert a screw through it. Use the screw holes in the original palm board to find the proper sized bit. Otherwise, you can use double-sided adhesive foam after you solder the leads to the board.
Solder the VCC, ground, and 3 axes of the accelerometer to 5 of the wires in the main bundle that connects the palm housing to the wrist housing. I used the following colors:
Red - VCC
Black - GND
Yellow - X
Green - Y
Dark Blue - Z
If you use adhesive foam to secure the boards, DO NOT attach it yet! We still have two wires to solder to this board.
Step 7: Insert and Connect the Analog Multiplexer
Solder wires to short the S3 and S2 pins to the GND pin of the multiplexer. We only plan to use the first four outputs (for the four bend sensors), so we want the multiplexer's upper two select bits to always be 0.
Also short the SIG pin to the VCC pin. We'll use the same 3.3V signal to run the multiplexer and as the input voltage for the bend sensors.
Connect the first four multiplexer outputs (C0, C1, C2, C3) to the inputs for the four bend sensors on the cut palm board. I suggest using a ribbon cable for this, and try to maintain a sensible order -- the traces on the palm board are labeled with the fingers that they connect to. I used:
C0 -- Thumb ("T" on palm board)
C1 -- Index Finger ("I" on palm board)
C2 -- Middle Finger ("M" on palm board)
C3 -- Ring Finger ("R" on palm board)
Connect the remaining two select pins (S0 and S1) to two of the wires in the bundle that connects the palm housing to the wrist housing. I used:
S0 -- White
S1 -- Peach
Finally, connect the VCC and GND pins on the multiplexer to the VDD and GND pins on the accelerometer.
Step 8: Close the Palm Housing
Step 9: Solder Leads to the Bluetooth Module
Cut four wires (or better yet, a ribbon cable) and solder them to the VCC, GND, TX-O and RX-I pins of the BlueSMiRF. Again, you can leave these long and cut them to size later, when you get an idea for how much space you are working with.
Step 10: Test the Sensors and Buttons
Download my Arduino program (see link in intro) and make sure the pin definitions match what you're using. If you're unsure about which pins to connect anything to, take a look at the schematic (again linked in the intro).
First, prepare your board. If you have an Arduino Diecimilla or Duemilanove, these work great for prototyping. Otherwise, you can solder some test leads to the Arduino Pro Mini.
If you test using a 5V board (Diecimilla, Duemilanove, etc), connect the 3.3V pin to your breadboard's + rail. Then connect the + rail to the AREF pin on the Arduino, and change the line analogReference(DEFAULT) to analogReference(EXTERNAL) within the Arduino code.
If you test using a 3.3V board (Arduino Pro, Pro Mini, etc), connect any VCC pin to your breadboard's + rail.
Connect the GND pin on your test Arduino to the - rail on your breadboard.
Connect all the sensors in the palm to a prototyping breadboard. If you've been using the same colors as I, your main wire bundle should be:
White: Bend Select 0
Peach: Bend Select 1
Yellow: Accel X
Green: Accel Y
Dk. Blue: Accel Z
Lt. Blue: Bend Output
Grey, Pink, Brown, Orange: Unused
Connect the Red wire to the breadboard's + rail and the Black wire to the breadboard's - rail.
Connect the Yellow, Green, and Dk. Blue wires to analog inputs 0, 1, and 2 on the Arduino.
Connect the White wire to digital pin 12, and the Peach wire to digital pin 13.
Connect the 100k ohm resistor from the bend sensor output (Lt. Blue) to ground (- rail). Connect this junction (the Lt. Blue wire) to analog input 3 on the Arduino.
On the control pad assembly, connect the common ground wire to GND on the Arduino. Connect the Up, Down, Left, Right, B, A, Start, and Select wires to digital pins 2, 3, 4, 5, 6, 7, 8, and 9, respectively.
Upload the program to the Arduino. If using the Pro Mini, you'll need to use your USB-FTDI programmer. Check that you're getting good data by opening the Serial Monitor in the Arduino software (select the USB serial port under Tools -> Serial Port, 9600 baud). Type A into the box and press send -- you should see 8 numbers separated by tabs, which will change as you move the sensors around.
If everything seems to be working, disconnect power and connect the BlueSMiRF. Connect VCC to the + rail, GND to the - rail, RX-I to Arduino digital pin 0 (TX), and TX-O to Arduino digital pin 1 (RX). Disconnect your programmer or USB and connect an external power supply. Swap the appropriate jumper if you have an older Arduino board.
If you haven't yet paired your BlueSMiRF to the computer, do that now and set up a serial port. My BlueSMiRF identified as "Sparkfun-BT" by default.
Now select the serial port you just set up in the Arduino software (Tools -> Serial Port) and open the serial monitor. Again, type A into the box and press send. Verify that you've got a good data stream.
Step 11: Prepare the Wrist Housing
To prevent this, find a piece of strong, thin cardstock and cut it to cover the button backs. A postcard or Off-Road Velociraptor Safari promotional card should work. Punch three small holes where the screws went through the original PCB. Screw the cardstock in, as in the photo.
The control pad board will also work slightly better if it has some shims to press against. Cut two small pieces of layered cardstock or artboard and place them in the bottom corners of the wrist housing, as in the photo.
Cut a notch into the bottom half of the wrist housing's plastic, between the holes for the main wire bundle and the cable that connected to the console. Size this to fit your battery clip. I've included a photo of mine.
Step 12: Prepare the Arduino Pro Mini
Cut 9-pin right-angle header. There's not much vertical clearance in the wrist housing, so if they're very tall, you'll want to push the pins through somewhat (see image). Solder this header to pins GND, 2, 3, 4, 5, 6, 7, 8, 9, 10 on the Arduino Pro Mini.
Cut a second 9-pin right-angle header, again pushing the pins through if needed. Place the 100k ohm resistor's leads in the GND and A3 pins on the other side of the Mini, as in the photo. Now, push the 9-pin header into pins GND, RST, VCC, A3, A2, A1, A0, 13, and 12 and solder it into place. It will be a tight fit due to the resistor, but shouldn't give too much trouble.
If you're using an external battery clip, such as a 9V, knot the clip's wires about a centimeter from the clip. This will ensure that yanking the clip pulls only the knot and not the solder joints. Solder the battery clip with its positive lead into the RAW pin, and its negative lead into one of the GND pins (I used BLK, which is also connected to the board's ground plane).
If you haven't yet uploaded the program to the Mini, do so now. Make sure that you've changed back to analogReference(DEFAULT) and changed any pin definitions back to what they were.
Test the whole thing again with USB before soldering in the BlueSMiRF. I know, you don't want to. Do it anyway. You'll thank yourself later.
If everything is working, cut the BlueSMiRF's ribbon cable to length (see photos) and solder the wires into the top of the Mini. VCC to VCC, GND to GND, RX-I to TX(0) and TX-O to RX(1).
Use sidecuts to cut all the leads and header pins as flush as possible to the back of the board.
Step 13: Add Connectors to the Sensor and Button Wires
Don't cut the wires from the main wrist-palm bundle any shorter than they are already.
Insert the wires for each of the headers into appropriately-sized Berg connectors using a crimp tool and (optionally) solder. I grouped mine as follows (see photos as well):
Side 1 (Control Pad):
Up, Down, Left, Right
B, A, Start, Select
Side 2 (Main Palm-Wrist Wire Bundle):
Black, [space], Red, Lt. Blue
Dk. Blue, Green, Yellow
Step 14: Insert the Arduino Pro Mini and BlueSMiRF Into the Wrist Housing
Attach thin foam or other non-conductive material to the bottom of the Mini with tape or adhesive. Let the Mini float freely, but position it roughly where it will go (as in the photos).
Step 15: Connect the Sensors and Buttons to the Arduino
Test-fit the pieces of the wrist housing together. It will be a tight fit, but everything should fit into place. If it doesn't, re-tinker the connector placements and cable routing until it does.
Step 16: Close the Wrist Housing
Step 17: Secure and Connect the Battery (Rechargable Lithium-Polymer)
Connect the battery to the battery clip. Remember to unclip it when you're not using it!
Step 18: Secure the Battery (External Batteries, Such As 9V)
Cut a slit the width of your velcro strap into the rubber glove just above the existing slit for the wrist strap. Loop your velcro strap through this, and secure the battery on the outside of the glove (see photos).
Step 19: Write Some Games to Use Your New and Improved Power Glove!
For making games, I'd seriously recommend Unity3D. If it weren't for this one tool and how slick and easy it makes the process, I wouldn't be making games professionally or as a hobby right now.
In the downloads I linked in the intro, I've included a Java program that reads the serial data and spits it out as a text file. This way, if you tech doesn't support serial I/O but can read a text file, you can do that instead.
Next step: Off-Road Velociraptor Safari with the Power Glove?