Wednesday, 31 January 2018

Hacking a Powerglove using Arduino



























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.

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

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:

Step 3: Flex Sensors

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Show All 7 Items
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.

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);
}




 For more detail: Hacking a Powerglove using Arduino


No comments:

Post a Comment