This interactive glove uses flex sensors, conductive fabric, and an accelerometer to sense hand orientation, bend of each finger, and fingertip touches. It also has a small motor in the palm of the hand for haptic feedback. The glove is intended to be a general I/O device, not tied to any particular application, so we created several application to demonstrate the possibilities.
This Instructable was made as part of the CS graduate course "Tangible Interactive Computing" at the University of Maryland, College Park taught by Professor Jon Froehlich. Please see http://cmsc838f-s15.wikispaces.com/ for more details.
This work was done in collaboration with Majeed Kazemitabaar.
Step 1: Materials
- Lilypad Arduino
- Lilypad accelerometer
- Lilypad vibe board
- 2.2" Flex sensor (3)
- Conductive thread
- Conductive fabric (just enough for the finger tips)
- Lilypad FTDI breakout (to connect to USB)
- Plain fabric to insulate glove layers
- Close-fitting gloves (or make your own)
- Resistors (7)
Note on resistors: We used 10k resistors for all seven, but depending on the specs of your flex sensors, you may want to replace the three resistors connected to them with a different value. The ones connected to the finger pads are used as pull-up resistors and so need to be a sufficiently large value, but the ones connected to flex sensors are voltage dividers - meaning you will want to find resistor values with a similar magnitude of resistance as your flex sensor. In our case, the flex sensors had a flat resistance of 10k, so we used 10k resistors. You can experiment to see what gives you the best range for reading values.
Step 2: Prep Materials and Glove
Before we get started, we need to prepare the glove and materials for sewing on. In this project, we opted to make our own glove, by tracing our hand on a piece of paper and using that as a template.
Next, we sewed on conductive patches to the fingertips of the glove.
Then, to keep the flex sensors in position, sew a casing (a narrow, open pocket just wide enough to slide the flex sensors in) to three fingers.
Finally, to make the resistors and flex sensors conductive thread-friendly, use a pair of needlenose pliers to curl the ends into loops.
Step 3: First Layer (Lilypad, Touchpads, Flex Sensors, Vibe Board, Resistors)
Using the placement diagram above, sew on the first layer of circuitry with the conductive thread. Make sure you have firm connections to the components by sewing several times through the loops. It's a good idea to test your circuit (using a multimeter or another device) after each layer before starting the next, to make sure you haven't stitched threads too close together or have loose connections.
Step 4: Second Layer (Flex Sensor Connections)
Cut two pieces of fabric to fit above the overlapping section of circuit, and tack them in place. Now, sewing the conductive thread only on the top layer (otherwise you'll short out the circuit!), add the connections from the flex sensors back to the Arduino.
Step 5: Layer 3 (Touch Sensor Connections)
Cut another two pieces of fabric to cover the overlap from the previous layers, and tack in place. Again, sewing only the top layer , make the connections from the touch pads on the fingers to the Arduino. In our prototype we made a mistake in circuit design - pin 13 was not a valid pin to use on the Lilypad, so as shown above we had to add an extra layer to reroute that connection. You can avoid this by simply shifting over the connections to pins 9 - 12 in order.
Step 6: Layer 4 (Accelerometer)
The last layer is the accelerometer. Tack two layers of fabric and sew the accelerometer in place. You're done with the glove!
Step 7: Calibrate
You'll need to calibrate your flex sensors and accelerometer before programming. We did this by simply writing the raw values from the Arduino out to serial and taking note of the values at particular positions.
To calibrate flex sensors:
- flex#Zero is the value "at rest" (when the sensor is flat)
- flex#Min is the value at maximum finger bend
To calibrate the accelerometer:
- xZero is the x value when the accelerometer is flat
- yZero is the y value when the accelerometer is flat
- zZero is the z value when the board is vertical
Step 8: Program
We developed a number of Processing programs to run with the glove that can be downloaded on Github:
- Asteroids: the classic game, now controlled by finger touches and hand orientation
- Cube in Control: a demo which uses all the sensors on the glove (good for checking your calibration). A 3D cube rotates with accelerometer, shrinks in each dimension with increased flex, changes color with finger touches, and buzzes the vibe motor with finger touch.
- Lines in Control: A music visualizer with colors and line field controlled by hand orientation and flex
- Pacman: Control a pacman character using accelerometer and flex sensors to change direction
- Presenter: Send keystrokes to a program (in this example, right/left key presses, suitable for something like a Powerpoint presentation). This could easily be extended to include other keys.
Once calibrated, it's relatively straightforward to adapt programs for the glove. Just replace keypresses or mouse clicks with values from the glove (either acccelerometer / flex sensor mappings or thresholds, or touch pad combinations).