Introduction: Hacking a Powerglove
First of all lets get this out of the way... It's so bad
This is going to be showing how to hack the Nintendo Powerglove. By hack I mean tap into the flex sensors and use the buttons and d pad and add anything you want. In my case I added an accelerometer.
I got mine from Ebay for around $40. These gloves have 4 flex sensors similar to these: http://www.sparkfun.com/products/8606
Now these are $12 a piece, it's way cheaper to buy a Powerglove for 4 sensors and get a bunch of other awesome things then buy 4 of these.
This is going to be showing how to hack the Nintendo Powerglove. By hack I mean tap into the flex sensors and use the buttons and d pad and add anything you want. In my case I added an accelerometer.
I got mine from Ebay for around $40. These gloves have 4 flex sensors similar to these: http://www.sparkfun.com/products/8606
Now these are $12 a piece, it's way cheaper to buy a Powerglove for 4 sensors and get a bunch of other awesome things then buy 4 of these.
Step 1: Materials
Materials:
Screwdriver
Wire
microcontroller (i used Arduino)
USB cable
4 - 10k resistors
Optional:
ABS sheets
Nuts and bolts
Accelerometer or whatever sensor
Xbee with shield
9v Battery
I also have an Ardumoto shield with a vibrating motor for a feedback system
Screwdriver
Wire
microcontroller (i used Arduino)
USB cable
4 - 10k resistors
Optional:
ABS sheets
Nuts and bolts
Accelerometer or whatever sensor
Xbee with shield
9v Battery
I also have an Ardumoto shield with a vibrating motor for a feedback system
Step 2: Take It Apart
This is kind of tricky if you don't know where the screws are. Don't loose them either!
Just fallow the pictures:
Just fallow the pictures:
Step 3: Flex Sensors
Now its time to tap into the flex sensors. Flex sensors are variable resistors which mean the more you flex the more the resistance. You can then read that and map that value to anything you want. There are two wires coming from each sensors so we have 8 wires.
This website shows a good wiring diagram and explanation for it all: http://www.makingthings.com/teleo/teleo/cookbook/bendsensor.htm
We want to open up the palm to expose the board. Once we have that find where the sensors attach to the board. There will be 4 diodes by there. We are going to desolder the diodes and replace those with the 10k resistors. We will be attaching the positive to one of the two wires of each sensor. We well then attach ground to the resistors and attach wires from the second sensor wire. Pictures will help explain this a lot better.
This website shows a good wiring diagram and explanation for it all: http://www.makingthings.com/teleo/teleo/cookbook/bendsensor.htm
We want to open up the palm to expose the board. Once we have that find where the sensors attach to the board. There will be 4 diodes by there. We are going to desolder the diodes and replace those with the 10k resistors. We will be attaching the positive to one of the two wires of each sensor. We well then attach ground to the resistors and attach wires from the second sensor wire. Pictures will help explain this a lot better.
Step 4: Attach Arduino (optional)
I made a custom extension coming off the glove to hold the arduino. I did this with an ABS sheet and a heat gun. Pretty much heat it up and form it around your arm to get the shape. Then drill holes and attach to the glove with some nuts and bolts. I also made a custom 9v battery holder out of this stuff too.
Step 5: Wire Management
I tried to make this look as nice as I could. What I did was run the wires from the palm board to the forearm board then out of that to the arduino. This worked the best for me and it was easy.
Step 6: Buttons [Extra]
I haven't tapped into the buttons yet but its just like any other button. Two wires and an on or off signal. There are plenty of tutorials out there for buttons with arduino. D-pad is the same way, Just four buttons.
Step 7: Code
All the code is is just analog read. From here you can map it to whatever to control servos or whatever you want
int Finger1 = 2;
int Finger2 = 3;
int Finger3 = 4;
int Finger4 = 5;
int Rotation = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int FingerV1 = analogRead(Finger1);
int FingerV2 = analogRead(Finger2);
int FingerV3 = analogRead(Finger3);
int FingerV4 = analogRead(Finger4);
int RotationV1 = analogRead(Rotation);
if (FingerV1 < 30) FingerV1 = 30;
else if (FingerV1 > 80) FingerV1 = 80;
if (FingerV2 < 45) FingerV2 = 45;
else if (FingerV2 > 69) FingerV2 = 69;
if (FingerV3 < 22) FingerV3 = 22;
else if (FingerV3 > 87) FingerV3 = 87;
if (FingerV4 < 12) FingerV4 = 12;
else if (FingerV4 > 62) FingerV4 = 62;
if (RotationV1 < 300) RotationV1 = 300;
else if (RotationV1 > 600) RotationV1 = 600;
int middle = map(FingerV1,30, 80, 0, 255);//middle
int thumb = map(FingerV2,69, 45, 0, 100);//thumb
int ring = map(FingerV3,87, 22, 0, 255);//ring
int pointer = map(FingerV4,12, 62, 0, 255);//pointer
int rotation = map(RotationV1,300, 600, 0, 255);//Rotation
Serial.println(middle);
Serial.println(thumb);
Serial.println(ring);
Serial.println(pointer);
Serial.println(rotation);
delay(10);
}
int Finger1 = 2;
int Finger2 = 3;
int Finger3 = 4;
int Finger4 = 5;
int Rotation = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int FingerV1 = analogRead(Finger1);
int FingerV2 = analogRead(Finger2);
int FingerV3 = analogRead(Finger3);
int FingerV4 = analogRead(Finger4);
int RotationV1 = analogRead(Rotation);
if (FingerV1 < 30) FingerV1 = 30;
else if (FingerV1 > 80) FingerV1 = 80;
if (FingerV2 < 45) FingerV2 = 45;
else if (FingerV2 > 69) FingerV2 = 69;
if (FingerV3 < 22) FingerV3 = 22;
else if (FingerV3 > 87) FingerV3 = 87;
if (FingerV4 < 12) FingerV4 = 12;
else if (FingerV4 > 62) FingerV4 = 62;
if (RotationV1 < 300) RotationV1 = 300;
else if (RotationV1 > 600) RotationV1 = 600;
int middle = map(FingerV1,30, 80, 0, 255);//middle
int thumb = map(FingerV2,69, 45, 0, 100);//thumb
int ring = map(FingerV3,87, 22, 0, 255);//ring
int pointer = map(FingerV4,12, 62, 0, 255);//pointer
int rotation = map(RotationV1,300, 600, 0, 255);//Rotation
Serial.println(middle);
Serial.println(thumb);
Serial.println(ring);
Serial.println(pointer);
Serial.println(rotation);
delay(10);
}