loading
Picture of Power Glove 20th Anniversary Edition
IMG_3270.JPG
I'm a video game programmer by day, and I love playing with custom input peripherals. I decided to mod a Nintendo Power Glove to work with some of the games I've worked on. It replaces the original Power Glove's ultrasonic sensors with an accelerometer, the microcontroller with an open-source Arduino, and the wired connection with Bluetooth. I'll show you how to mod your own Power Glove, so you can make it into something more than just a crappy controller for your NES!

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.
 
Remove these adsRemove these ads by Signing Up

Step 1: Design and Parts

I'll start with the goals I had in mind when designing the project and picking 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:

Soldering iron
Sidecuts
Utility knife
Wire strippers
Jeweler's saw (or any other tool capable of making precision circuit board cuts)
Prototyping breadboard
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

Picture of Creating Custom Ribbon Cables
There are a number of areas in this project where multiple wires are bundled together. Specifically, connecting the control pad wrist board to the Arduino, connecting the Bluetooth module to the Arduino, and connecting the multiplexer outputs to the palm board. I found it useful to use ribbon cables for each of these connections. Here's a way to make ribbon cables out of old computer cables. Nobody uses floppy drives anymore, so they're a plentiful source to cannibalize from.

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

Picture of Disassembly
IMG_3287.JPG
IMG_3327.JPG
IMG_3326.JPG
First, carefully disassemble the original Power Glove. There are four screws for the wrist housing, found on its underside, and four screws for the palm housing. Remove the interior screws holding the wrist and palm boards in place, and remove the boards.

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

Picture of Cut the Original Boards
IMG_3303.JPG
IMG_3314.JPG
IMG_3315.JPG
Mark the original palm and wrist boards where you will cut them. On the palm board, ensure that your cut keeps intact all of the traces related to the bend sensors. On the wrist board, make sure that the cut keeps intact all of the traces that connect to the contacts for the D-Pad, Start, Select, A, and B buttons, and leaves ample room on these traces to solder new leads.

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

Picture of Attach Leads to the Control Pad Board
IMG_3375.JPG
Now we'll attach wires to the Control Pad section that we cut from the wrist 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

Picture of Insert and Connect the Accelerometer
Place the accelerometer in the palm housing, orienting it so that its axes align roughly with the direction of the fingers. I placed it with X right, Y forward, and Z down, though these can be re-oriented in software later.

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

Picture of Insert and Connect the Analog Multiplexer
Place the MUX breakout board in the palm housing, testing it for fit. You may need to trim the plastic palm housing somewhat.

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

Picture of Close the Palm Housing
Replace all screws that held the original palm board in -- even if they aren't securing a board anymore. They help secure the palm housing to the glove. Replace the palm housing cover, ensuring that the main palm-wrist wire bundle is properly seated. Replace the four screws that hold the palm housing cover in place.

Step 9: Solder Leads to the Bluetooth Module

Picture of Solder Leads to the Bluetooth Module
Solder a length of wire between the CTS-I and RTS-O pins of the BlueSMiRF to short them. These are used for hardware flow control, which we don't need.

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

Picture of Test the Sensors and Buttons
IMG_3337.JPG
IMG_3351.JPG
Before you start soldering things to the Arduino, now is a good time to test that all the sensors and buttons are working. It's a pain but you'll thank yourself later.

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:
Red: VCC
Black: GND
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

Picture of Prepare the Wrist Housing
IMG_3386.JPG
IMG_3523.JPG
The original Power Glove had 12 programming buttons at the top of the wrist. I didn't have room (in the wrist housing or pins on the Arduino) to use these. However, since we cut the board out from behind them, they don't have anything to press against now, except the internal electronics, oh no!

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

Picture of Prepare the Arduino Pro Mini
IMG_3451.JPG
IMG_3382.JPG
IMG_3389.JPG
I suggest creating connectors for the sensors rather than just soldering them to the Arduino.

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

Picture of Add Connectors to the Sensor and Button Wires
Cut the ribbon cables and wires from the Control Pad Board to size now. You should be able to get a decent idea of how long they need to be now. Consult the photos if needed. Don't make them too long or the inside of the housing will end up crowded. Don't make them too short or you'll have to cut new ones!

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):
GND
Up, Down, Left, Right
B, A, Start, Select

Side 2 (Main Palm-Wrist Wire Bundle):
Black, [space], Red, Lt. Blue
Dk. Blue, Green, Yellow
Peach, White

Step 14: Insert the Arduino Pro Mini and BlueSMiRF into the Wrist Housing

Picture of Insert the Arduino Pro Mini and BlueSMiRF into the Wrist Housing
The BlueSMiRF fits snugly into the channel in the back of the wrist housing. Secure it in place with double-sided tape. Set the battery clip so it's poking out of the notch we cut for it, with the knot in its wires on the inside of the 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

Picture of Connect the Sensors and Buttons to the Arduino
Place the bottom of the wrist housing back on the wrist of the glove. Connect the sensors via the main wire bundle, clipping the Berg connectors into place. Connect the Control Pad buttons using their Berg connectors on the other side of 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

Picture of Close the Wrist Housing
Once the two halves of the wrist housing fit together snugly, connect them, ensuring that the main wire bundle is seated properly. Replace the strap anchor on the underside of the glove and screw the wrist housing back together.

Step 17: Secure and Connect the Battery (Rechargable Lithium-Polymer)

Picture of Secure and Connect the Battery (Rechargable Lithium-Polymer)
IMG_3523.JPG
IMG_3524.JPG
If you're using a rechargeable Lithium-Polymer battery, first cut a small slit into the glove's rubber, between the battery clip and the existing slit for the velcro strap. Wedge the battery into the plastic strap anchor on the glove's underside, with the battery leads sticking out through the slit you cut. If you used the same battery I did, it should fit snugly without the need for additional anchoring.

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)

Picture of Secure the Battery (External Batteries, Such as 9V)
If you used a large external battery like a 9V, it will be flopping around freely right now. You can solve this however you like, but I used a loop of velcro to hold the battery in place. This lets me easily remove it when I need to replace it, while holding it securely.

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!

Picture of Write Some Games to Use Your New and Improved Power Glove!
3409234056_969469d029.jpg
That's it! You now have a Power Glove that sends accelerometer orientation, bend values for 4 fingers, and a bitmask for pressed buttons via Bluetooth. Since you have a serial port set up, you can read these in with any language that has serial access. Remember that to start receiving data, you have to send the string A first.

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.

I've also included two sample Unity3D scripts (written in Unity Javascript, an ActionScript-alike) that are the input manager I use for the Power Glove. They show a simple way to use the raw data to get more human-usable information.

Next step: Off-Road Velociraptor Safari with the Power Glove?
1-40 of 62Next »
jgoings6 months ago
How possible would it be to mod one for general computer use? As a user of Photoshop and Lightroom (likely more to come), I'd like the ability to map its controls. With no experience in programming, I may have to lean on some friends of mine.

I'm curious as to what resistance ratings you got from your flex sensors. I am doing a similar project and am having trouble determining what resistor to use for each flex sensor.

Would this be a hard program for someone with no background in programming?
biphenyl (author)  avergara lopez1 year ago
The most difficult part of the programming was probably understanding the data stream itself – how the sensor information is packed into a few bytes and transmitted, and then how the host computer unpacks those bytes and translates them back into useful values. If you've done other arduino programming, those parts will be advanced but not impossible to understand, and I've provided source code so you can use it as a reference.

But there's also the question of what you do with the sensor information once you decide the data on the computer. This version of the glove doesn't work just like a normal joystick. So you'd either need to write a joystick driver (definitely not easy) or just hard-wire it into something you are already making (which is what I did). That part will definitely be hard without programming background.
LiveWire152 years ago
Is there any way I can tap into the finger data from the glove without butchering it? I'd like to use the glove as an Arduino input but still and be able to play PunchOut when I want to.
biphenyl (author)  LiveWire151 year ago
You could certainly make (or buy) a converter dongle to translate the NES datastream to USB (for example, USB NES RetroPort here http://www.retrousb.com/index.php?cPath=21&osCsid=9f97f8759941ee5256ea3e83d1b88da8).
The only hard part would be decoding the proprietary datastream that the Power Glove is sending over the wire. It's a complex peripheral with many sensors. As I understand it, it sends 12-byte packets with the format:
1: A0 [header byte]
2: X position
3: Y position
4: Z position
5: Rotation
6: Finger status
7: Button status
8: 00 [End data stream byte]
9-12: 00 3F FF FF [Unsure? Timing?]

I do not know how individual buttons/fingers are masked in bytes 6 and 7, but this info is probably buried in a forum somewhere, or you could pretty easily figure out, by printing the byte as a bitmask and looking at how it changes as you press things or move the fingers. FYI, I got the info about the datastream structure from these two sources:
http://arstechnica.com/civis/viewtopic.php?f=11&t=689680
https://github.com/OpenEmu/Nestopia-Core/blob/master/core/input/NstInpPowerGlove.cpp
biphenyl (author)  biphenyl1 year ago
Or even, since you want to use it with Arduino, just break out the NES port leads into the Arduino inputs.
builderkidj4 years ago
I love the power glove-avgn
a wise man once said:
I love the power glove! it is SO BAD.
TechDante4 years ago
brillinat rather than a standard gaming controller could this be used as a mouse in a minority report sort of way
Dude that was really awesome. You must have the coolest job. BTW Flashbang and specifically Blurst rocks. Love what you guys are doing in Unity.
technoguy945 years ago
Could you program it so Windows could read it as a standard game controller?
biphenyl (author)  technoguy945 years ago
 Absolutely -- while I have no idea of the details (haven't done Windows OS-specific programming in ~4 years), it should be as simple as writing a serial-joystick driver that decodes the bluetooth serial stream and translates it into joystick axes/buttons.
It would be great if you did, since then it could be used with pre-exisiting games that are compatible with standard gaming controllers.
ironsmiter6 years ago
That has got to be the most awesomest butchering of classic hardware I've ever seen! I DESPISE you for killing a working powerglove. i ADORE what you made from the carcass. I'm so conflicted. this sucks/is great! Keep up the good work!
i agree fully, he made it look like it isn't hacked up (too much), but then again, he destroyed a good PowerGlove.
Mine was for Sega. So I gutted the thing. I am still saying up for a wireless mouse to hook up to it. and I also have an NES zapper that I am going to attach a gyromouse to it to play in actual games.
 or you could use a reproduction zapper, and not destroy an old one.
It isn't necessarily 'destroyed'; all you need is another microcontroller and bluetooth module, and you can build yourself an adapter to plug into your NES, giving you back all the 'joy' and 'wonder' of the original powerglove functionality, but wireless to boot!
roychook5 years ago
is there any code example for the arduino and how do u get angle information from the accelerometers
Ward_Nox6 years ago
why why for the love of god hasen't Nintendo made a wii powerglove it would be the best selling peripheral yet
Well, they have, in a way. It is basically a pair of boxing gloves with sleeves on the back to hold the Wiimote and Nunchuck. Don't buy it. Just duct tape the controllers to real boxing gloves.
OMG I HEART DUCK TAPE
it's "duct" tape
actually it goes both ways. duct tape and duck tape. wow late reply, lol.
There is Duck brand duct tape. Duck tape is my duct tape of choice.
i prefer gorilla
the old power glove felt nasty so they need to think of a better version of the glove but it not be a good idea on the sweaty smelly side
use seat shirt material and attach the tech via Velcro and snaps you'd probably have to cannibalize a wiimote so you can make the buttons accessible
I should have read below me
CarpetGnome6 years ago
Yeah, well, uh, just keep your Power Gloves off her, pal, huh? Kidding, great project, looking good sporting the 'glove.
c-c-c-c-califorwnia
super cool to the homeless?
but....it's so bad....
jakebaldwin6 years ago
Holy cruddish you use Unity3D? Awesome! Have you joined the forums? and have I seen that boxing game????????? Post this on the Unity forums man, it's awesome!
biphenyl (author)  jakebaldwin6 years ago
Yeah I'm on the Unity forums. User biphenyl. We've been using Unity exclusively at Flashbang for a year and a half or so. The boxing game is Touch KO for the iPhone, developed by my brother Adam and I. It's not done yet, but we're shooting for a June release.
Zootch6 years ago
What the hell am I going to do with my R.O.B.?
biphenyl (author)  Zootch6 years ago
I was musing that the other day. He certainly ranks up there among useless peripherals!
Zootch biphenyl6 years ago
Certainly to get it to do anything you would need to get some better servos among other things. He'll have to be gutted considerably...
endolith6 years ago
And you can solder multi-filament ones so that they stick in the protoboard better
1-40 of 62Next »