Download - Scissor Glove
-
7/31/2019 Scissor Glove
1/26
For our ECE4760 final design project, we designed and built a two player game system for
rock-paper-scissors. Our implementation involved the use of two sensor gloves (one for each
player) that tracked bends in the users fingers, to determine the symbol put out by each
player, as well as hand acceleration, to track the start and end of each game.
The game system connected to a computer through the use of a USB serial connection to print
game data and game statistics to the computer screen. An additional feature was
implemented to ensure that both players displayed their symbols at the same time and kept
the same pace to prevent cheating.
High Level Design
Game Rules
Rock-paper-scissors is a game typically played with 2 players in which each player must
display either the symbol for rock, paper, or scissors. The following list describes the hand
positions for each symbol:
Rock: represented by making a fist Paper: represented by an open hand, with the fingers kept together Scissors: represented by extending and separating only the index and middle fingers
To begin a game of rock-paper-scissors, both players make a fist with one hand and hit it
against their other hand which is open with the palm facing up (hand hit). After the players
have completed three hand hits together, they each display one of the three symbols. The
following rules are then used to determine the winner:
Rock defeats Scissors Scissors defeats Paper Paper defeats Rock
The rules for winning are also displayed in the following chart:
-
7/31/2019 Scissor Glove
2/26
-
7/31/2019 Scissor Glove
3/26
When going through the list of previous years projects, we discovered that another group had
implemented their own version ofrock-paper-scissors that used CMOS camerasto determine
the symbol put out by the player. While both projects had the same end goal, our method of
actively tracking finger bends with acceleration with hand sensors was significantly different
then their method of capturing an image of the players hand. In addition, our system also
focused on the interaction between two human players which introduced issues of timing
between the two players symbol displays to keep the game fair and ensure all game rules
were followed. As such, we believed our project was significantly different from any previous
project and was a worthwhile pursuit.
Logical Structure
Our project was structured so that the two sensor gloves were completely independent of each
other and interchangeable. As such, the hardware for each glove was kept separate from the
other. We found this organization to be extremely important as it allowed for easy tracking of
hardware problems to a specific glove as well as simpler circuit layout, construction, and
system setup. Each glove consisted of an accelerometer and two finger flex sensors directly
attached to the glove as well as three comparators on the base unit which served as analog to
digital converters for each of these components. Thus, each glove required three connections
to the microcontroller to send the hand motion data for analysis. Each glove was set up to
attach to a different port on the Mega644 microcontroller as each glove required the use of an
external interrupt to count the hand hits (the motion required to start the game). In addition,
this also helped when setting up the system for use as the sensor input pins for each player
were on different ends of the prototype board.
The signals from the two gloves were interpreted and analyzed in software. The
microcontrollers hardware timer0 was used to count milliseconds to serve as a reference time
for the system. All timing constraints and scheduling used software timers based off of the
millisecond count of timer0. The ISR for each accelerometer was triggered on each hand hit
and set up to track the number of times each player performed that motion (3 were required
by each player before the symbols were determined). The finger flex sensor signals were read
off the microcontroller ports after the system had detected the starting sequence of three
hand hits. The code was then responsible for determining the winner and sending the results
via serial connection to the computer to be printed in PuTTY.
The flowchart below shows the flow between subsystems in the design:
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2010/ll298_kt258/ll298_kt258/index.htmlhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2010/ll298_kt258/ll298_kt258/index.htmlhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2010/ll298_kt258/ll298_kt258/index.htmlhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2010/ll298_kt258/ll298_kt258/index.html -
7/31/2019 Scissor Glove
4/26
Project subsystem flow. [Full-size as PDF(96KB)]
Hardware/Software Tradeoff
Originally, we had decided to purchase variable resistive flex sensors in order to track the
finger positions of each player. However, due to the high price, we could not afford to put five
flex sensors into each sensor glove. As such, we determined that at a minimum, we needed
only two flex sensors, one for the index finger and one for the ring finger. By tracking just
those fingers, we could detect any of the three symbols involved in the game, assuming the
user actually displays one of the real symbols. Since the system does not track the thumb,
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/subsystemFlow.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/subsystemFlow.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/subsystemFlow.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/subsystemFlow.pdf -
7/31/2019 Scissor Glove
5/26
middle, or pinky fingers, the system may detect a legal symbol when the user does not
actually display one. In the end, we decided not to purchase the resistive flex sensors but to
make our own. We still decided, however, to stick with using only two flex sensors per hand in
order to simplify the design. Using a smaller number of sensors allows for easy repair and
replacement of the flex sensors. This, in turn, also simplified the software symbol detection
engine as only two fingers had to be analyzed to determine the symbol displayed by each
player
During the planning stages of the project, we realized that the sensor components that we
wanted to use in the sensor glove all contained analog outputs. As such, we needed a way to
convert all the sensor output signals into digital signals that could be used by the
microcontroller. Since each glove consisted of two flex sensors and an accelerometer, we
needed 6 total (3 for each glove) analog to digital converters. However, the Mega644 only
contains one dedicated analog to digital converter. Instead of using the built-in ADC, we
instead had to build 6 external ADCs using op amp comparators.
We could have used the microcontroller's internal ADC to read the flex sensor signals.
However, it would have been more difficult to have an adjustable threshold voltage when the
device was in use outside of the lab environment. As such, we decided to implement the
comparison in external hardware.
Standards
Our game implementation required a serial connection via RS232 in order to print game data
to the computer. The provided UART library and code from the course website handled all
issues related to this standard.
Patents, Copyrights, Trademarks
Microsoft Corporation holds a patent on a type of gesture detection system. In the patent
description, a rock paper scissors game is described. However, their detection system is
different from ours because their system uses gesture input from an optical and touch
sensitive device, while ours uses a glove with flex sensors. This patent can be reviewedhere.
To the best of our knowledge, there are no other directly relevant patents, copyrights, or
trademarks related to our implementation of our rock-paper-scissors game or sensor gloves.
Software
http://www.google.com/patents/about?id=4MWnAAAAEBAJhttp://www.google.com/patents/about?id=4MWnAAAAEBAJhttp://www.google.com/patents/about?id=4MWnAAAAEBAJhttp://www.google.com/patents/about?id=4MWnAAAAEBAJ -
7/31/2019 Scissor Glove
6/26
Program Description
The program portion of the project was divided up into three main stages: (1) preparing the
system for game play, (2) detecting the starting sequence of hand hits, and (3) reading the
players symbols and determining the winner. The flow through the game sequence is shown
in the flow chart below:
-
7/31/2019 Scissor Glove
7/26
-
7/31/2019 Scissor Glove
8/26
Game flow diagram. [Full-size as PDF(53KB)]
1. Preparing the system for game play
The preparation stage of the program was responsible for initializing all of the software timers
and game variables. The initialization statements involved in this portion of the code were all
grouped together in a function called resetGame() which would be called the first time the
system was turned on as well as after each round of the game. The organization into a single
reset function allowed for better organization of the code and was very convenient as the reset
function is called in multiple places throughout the code. The game variables that kept track of
the total number of wins for each player were not in this reset function as we wanted to
preserve these values for the entire time the system was on.
The system setup stage also involved setting up hardware timer0. In the program, timer0 was
used to create a 1 millisecond timer which served as the source to all of the software timers in
the program. As such, timer0 was set up with a prescalar to divide by 64 and to trigger an ISR
and clear when its count reached 249 (corresponding to 1 millisecond). The timer0 compare
match ISR was used to update all software timers that were currently operating. These timers
will be discussed in the subsequent sections.
Finally, the preparation code set up two external interrupts, one on int0 and the other on int2,
for the detection of the starting sequence and initialized the UART. The UART was used for
printing the results for each game to PuTTY on the computer.
2. Detecting the starting sequence of hand hits
The accelerometer from each players glove was connected to a comparator which returned
+5V when the glove was hit against the hand for the starting sequence and 0V otherwise. The
output from player 1s comparator was connected to external interrupt int0 (pin D.2) and the
output from player 2s was connected to external interrupt int2 (pin B.2). Both external
interrupts were set to trigger on the rising edge. As such, an ISR was triggered whenever a
player completed a hand hit.
Before the symbols could be evaluated for each player, each player needed to have completed
three hand hits. There were several rules that dictated how the players could increase their
hand hit counts in order to complete the game:
No players count can be more than 1 greater than the others. This was to preventone player from getting too far ahead of the other.
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/gameFlow.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/gameFlow.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/gameFlow.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/gameFlow.pdf -
7/31/2019 Scissor Glove
9/26
No players count can be greater than the others for 400 milliseconds otherwisethe game will timeout.This was to ensure the game was fair by making sure that the
players were on approximately on the same playing pace. This also prevented a
player from waiting to see the other players symbol before completing their set of
hand hits and displaying their symbol.
No player can increment his count within 50 milliseconds of a previousincrement. This was to prevent any double triggering caused by the accelerometer.
No players count can be greater than 3. Since only three hand hits are required foreach game, there is no reason to count any higher.
Each time a players hand hit ISR was triggered, a variable holding their total number of hand
hits in the current game was increment unless one of the above rules was violated.
After each registered hand hit for each player, a 50 millisecond timer would be started. During
this 50 millisecond period following a players hand hit, that player would not be able to
register another hand hit. This timer prevented multiple triggerings of the accelerometer
comparator on one hand hit from registering multiple times. Since this time was small
compared to human hand movement speed, it would most likely not be noticed by the players.
This timer was controlled in the timer 0 compare match ISR which was run every millisecond.
Whenever the timer count was greater than 0, it would be decremented every millisecond.
Once the timer had reached 0, the hand hit could be incremented once again. To start the
timer again, the timer count variable would simply be reset back to 50.
A variable was used to track when the hand hit counts of the players were equal (evenCount).
This variable would indicate when one player was ahead of the other in the game. In addition,
on the first hand hit (by either player), a flag variable was set to indicate that the game had
started. When the counts were not equal, the 400 millisecond game timeout timer was started.
If the counts were not even after 400 milliseconds, the game would end. When the counts
were even, the timer would be reset. The timeout timer was controlled in the timer0 compare
match ISR which was run every millisecond. If the game started flag was set and the count
was marked as being uneven, the timeout timer variable would be decremented. Once this
timer reached 0, a flag would be set to indicate that the game should be ended with no winner
and the timer would be reset for the next game. After this flag had been set, the reset
function would be called and the flag variable reset in preparation for the next game. A
timeout error would also be printed to PuTTY.
3. Reading the players symbols and determining the winner
-
7/31/2019 Scissor Glove
10/26
After both players had reached a hand hit count of 3, the system could proceed with symbol
recognition. Upon the hand hit counts for both players reaching 3, a 200 millisecond counter
was started. This time period gave time for the flex sensors to stabilize on the players
selected symbol. When the timer reached 0, the outputs from the flex sensors were read in
from the microcontrollers ports. Player 1s index and ring finger flex sensor readings were on
pins D.3 and D.4 respectively, and Player 2s index and ring finger flex sensor readings were
on pins B.3 and B.4 respectively. The two bits corresponding to each players flex sensor
readings were extracted and sent to the function determineWinner() to determine the winner
of the game.
The process of determining the winner was handled through a series of if statements which
covered all possible combinations of flex sensor outputs. After the symbol was determined for
each player, the users symbol choice would be printed to PuTTY. The following table details
the outcome of a game given the flex sensor outputs for each player:
Player 1 Player 2
Index Ring Symbol Index Ring Symbol
0 0 Rock 0 0 Rock
0 0 Rock 0 1 INVALID
0 0 Rock 1 0 Scissors
0 0 Rock 1 1 Paper
0 1 INVALID 0 0 Rock
0 1 INVALID 0 1 INVALID
0 1 INVALID 1 0 Scissors
0 1 INVALID 1 1 Paper
1 0 Scissors 0 0 Rock
1 0 Scissors 0 1 INVALID
1 0 Scissors 1 0 Scissors
1 0 Scissors 1 1 Paper
1 1 Paper 0 0 Rock
1 1 Paper 0 1 INVALID
-
7/31/2019 Scissor Glove
11/26
1 1 Paper 1 0 Scissors
1 1 Paper 1 1 Paper
(NOTE: the flex sensors are active low, meaning that a 0 corresponds to a finger being bent
and a 1 corresponds to a finger not being bent)
The determine winner function returned a "0" to indicate a game error (no winner), a "1" to
indicate that player 1 won, a "2" to indicate that player 2 won, or a "3" to indicate that the
game was a tie. Based on these results, a message would be printed to PuTTY indicating the
outcome of the game. Each player had a variable that contained the total number of wins for
each player. If the game had a winner, the corresponding players win total would be updated.
The total number of wins for each player would then be printed.
Program Troubleshooting
The most difficult part of the programming proved to be the coordination of the numerous
software timers used to make sure both players play at the same pace, to give the sensors
enough time to settle, and to prevent multiple triggerings of the accelerometer from a single
hand hit from counting more than once. The frequent setting and resetting of the timers
becomes difficult to trace throughout the program. The game rules and accuracy of the
readings from the sensors depend on accurate control of the timers. Since there are numerous
paths through the code that any given game could take, we need to trace out all of the paths
to make sure all necessary timers were being adjusted at the appropriate times. We ran into a
few problems due to software timer issues in which the system would be stuck in a given state
because it was waiting for a certain timer that was implemented incorrectly.
Hardware
Sensor Glove
The sensor glove was designed to be worn on the right hand of a player and track the
acceleration of the hand as well as the movement of the index and ring fingers. As such, each
glove consisted of an accelerometer and two flex sensors. A cloth pocket was stitched along
the ring and index fingers on the glove to hold the two flex sensors in place on the fingers. A
small piece of solder board was also stitched to the back of the hand on the glove to attach
the accelerometer. Long wires terminating in header pins were then connected to the flex
sensors, and accelerometer outputs, as well as +5V and ground. These wires were then run to
a base unit which contained filters and comparators for the signals from the glove.
-
7/31/2019 Scissor Glove
12/26
Rock symbol displayed on sensor glove. [Full-size]
Paper symbol displayed on sensor glove. [Full-size]
Scissors symbol displayed on sensor glove. [Full-size]
Accelerometers
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/rockGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/rockGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/rockGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/paperGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/paperGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/paperGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/scissorsGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/scissorsGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/scissorsGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/scissorsGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/paperGlove.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/rockGlove.jpg -
7/31/2019 Scissor Glove
13/26
Oscilloscope output from accelerometer and comparator. [Full-size]
The voltage on the output pin of the Motorola MMA3201D accelerometer was proportional to
the acceleration experienced by the chip. At zero G, the output would be equal to 2.5 V (when
Vdd is connected to +5V and Vss is connected to ground). When the acceleration becamepositive (an acceleration in the y direction), the voltage on the output would increase above
2.5 V. The datasheet for the device recommended a passive low pass filter using a 1 k
resistor and a 10 nF capacitor to reduce clock noise. The output from this filter was connected
to the non-inverting input terminal of an lm358 op-amp which was used to make a comparator
to serve as an analog to digital converter.
To produce a reference voltage for the comparator, a 10 k potentiometer was used. We
originally connected the two sides of the potentiometer to +5 V and ground. However,
because the accelerometer was rated at 40g, it produced very small voltage changes under
low accelerations. This made fine tuned voltage adjustment with the potentiometer difficult. To
reduce the range of voltages across the potentiometer, and to increase precision, a 10 k
resistor was inserted from +5 V to one side, and from ground to the other side (see high level
circuit diagram). This effectively lowered the range of voltages the potentiometer could
produce, but it significantly increased the precision. The potentiometers range was now
between 1.66 and 3.33, which meant that sliding the wiper all the way across would only
amount to a change in 1.66 V, where previously it would have been 5 V. With this increased
control, it was significantly easier to set a threshold voltage for the comparator to trigger on.
The wiper terminal of the potentiometer was connected to the inverting terminal of the op-
amp to provide the reference voltage to the comparator. The output of the accelerometer
comparator was sent to an external interrupt pin on the Mega644 to be used in counting the
hand hits for a given player.
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/accelscope.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/accelscope.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/accelscope.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/accelscope.jpg -
7/31/2019 Scissor Glove
14/26
The equations below show the calculations to find the range of voltages offered by the
potentiometer:
5*(10/30) = 1.665*(20/30) = 3.33
Flex Sensors
The flex sensors that we built had a range of 200 k when straight to around 5 when bent
at 90 degrees. To produce a variable voltage from this variable resistance, the sensor was put
in series with a 10 k resistor to create a voltage divider (see high level circuit diagram). The
output voltage from this configuration had a range of 0 to +5 V. When a finger was extended,
the voltage was around 5 V, and when completely bent, the voltage was almost 0 V. The
voltage dropped relatively linearly as the finger bent, but after one joint on the finger had
been bent more than 80 degrees, there was a sharp cutoff. The video below shows the signal
off of the flex sensor (upper signal on scope) and the flex sensor comparator (lower signal on
scope) when the finger is bent and extended:
A 100nF capacitor was connected between the voltage divider output and ground, in order to
reduce high frequency noise. This node was then connected to the non-inverting terminal of
an lm358 op-amp which was used as a comparator to convert the analog signal to a digital
signal. To produce an adjustable reference voltage to compare against, a 10k potentiometer
was used, with one end connected to +5 V and the other to ground. The control of the
reference voltage with this setup was sufficient. The range of 0 to 5 V was necessary, because
of the large range of the signal produced by the flex sensor.
The output of the comparator was configured to drive an LED whenever the flex sensor was
bent. This output was also directly connected to the input terminals of the Mega644 to provide
finger data to the program.
The potentiometers allowed for the comparators to be tuned based on the users preferences.
Setting a high reference voltage would mean that the finger would only need to be slightly
bent for the comparator to trigger. Setting a low reference voltage would mean the finger
would need to be bent all the way for the comparator to trigger. As the sensors get bumped
around, their resistive characteristics can change. Adjusting the potentiometer made it easy to
correct for these changes. Having the LEDs turn on whenever the comparator triggered made
it very easy and convenient to tune the device, since it was possible to set the exact angles at
-
7/31/2019 Scissor Glove
15/26
which a finger must bend to trigger the comparator. The video below shows the functionality
of the LEDs when the player bends their index and ring fingers:
Flex Sensor Construction
While we originally had planned to purchase variable resistive flex sensors, their high price
inspired us to build our own. An internet search on resistive flex sensors led us tothis website.
Using the instructions we found at this website as a guide, we made our own flex sensors.
Assembly of flex sensor. A strip of ESD foam is sandwiched between 2 strips of copper tape.
[Full-size]
Each flex sensor consisted of 2 strips of copper tape (5 inches long by 0.25 inches wide), 1
strip of electrostatic discharge (ESD) foam, 1 piece of heat shrink tubing (5 inches long with a
diameter of about 0.25 inches), 2 pieces of copper wire (6 inches long), and electrical tape.
The 2 pieces of copper wire were then stripped on either end, and 1 wire was soldered to the
end of each of the strips of copper tape. We then reinforced the solder joints by wrapping
them in electrical tape. To put the flex sensor together, we put the piece of ESD foam in
between the two pieces of copper tape with the copper sides both facing in toward the foam
and the ends with the attached wires on the same side. The layers were then connected
together with a piece of electrical tape on the end without the wires. This piece was then
inserted into the heat shrink tubing which provided a tight fit.
The flex sensor operated under the observation that the strip of ESD foam will conduct when
compressed. Therefore when the strip of ESD foam is put between the pieces of copper tape
and the combination is flexed or bent, a current can be passed between the two copper strips.
The more the sensor is bent, the greater the area of compressed foam and the lower the
resistance between the copper strips. The final flex sensor provided a resistance measure of
around 200 k with no bend and around 5 when bent at 90 degrees. This variable resistance
http://www.instructables.com/id/How-to-Make-Bi-Directional-Flex-Sensors/http://www.instructables.com/id/How-to-Make-Bi-Directional-Flex-Sensors/http://www.instructables.com/id/How-to-Make-Bi-Directional-Flex-Sensors/http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/flexsensorConstruction.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/flexsensorConstruction.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/flexsensorConstruction.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/flexsensorConstruction.jpghttp://www.instructables.com/id/How-to-Make-Bi-Directional-Flex-Sensors/ -
7/31/2019 Scissor Glove
16/26
of the flex sensor allowed us to tune the flex sensor comparator to trigger at different degrees
of bend. Another notable property of the flex sensor is that the sensor will also respond to
pressure as any force applied to the sensor will compress the ESD foam and lower the
resistance.
During our initial attempts to make flex sensors, we tried to use strips of a conductive poly
bag in between the pieces of copper as recommended by the tutorial we found. However, we
were unable to get the sensor to work using that material, and instead switched to using ESD
foam. The ESD foam not only provided reliable results, but was easy to find in the lab.
Base Unit
The 6 op-amp comparators with adjustable thresholds along with the LED circuits for the flex
sensors were all placed together on a solder board. This board served as the base unit and the
interface between the sensor glove and the microcontroller. The base unit was set up with
header socket pins for all inputs and outputs. This allowed for the sensor gloves and the
prototype board to be easily plugged into the base board.
The back of our base unit board. [Full-size]
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/baseboardback.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/baseboardback.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/baseboardback.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/baseboardback.jpg -
7/31/2019 Scissor Glove
17/26
The front of our base unit board. [Full-size]
Prototype Board
Our prototype board [Full-size]
In order to make our project portable, we decided to use the printed circuit board (PCB)
provided by Professor Bruce Land in our final implementation. On our board we put a Mega644
microcontroller, a 16 MHz crystal, and an RS232 chip with USB connection. We also decided to
use header pins for all port connections to the microcontroller to allow for easy connections
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/baseboardfront.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/baseboardfront.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/baseboardfront.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/protoboard.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/protoboard.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/protoboard.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/protoboard.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/baseboardfront.jpg -
7/31/2019 Scissor Glove
18/26
using jumper wires. The RS232 chip and USB connection provided the necessary serial
connection for sending data to the computer to be printed in PuTTY.
The LED on the board was extremely useful for debugging and testing the functionality of the
board after all soldering was complete. The on-board regulator was also helpful for testing as
we were able to use other power supplies from home to power the board and test the
functionality of our program outside of the lab.
We hope that the descriptions and schematics will make it possible for other enthusiasts
(geeks) to replicate our design, to potentially explore further possibilities with this technology.
The final product. [Full-size]
Results
Speed of Execution
During the design and construction process, we did not encounter any problems due to the
speed of our system. The microcontroller was able to handle all of the required operations,
interrupts, and timers required by our device. Delays were built in to the program to give the
sensors a chance to settle and prevent errors, but these delays are not very noticeable to
human users.
Accuracy
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/wholesetup.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/wholesetup.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/wholesetup.jpghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/img/wholesetup.jpg -
7/31/2019 Scissor Glove
19/26
The accuracy of the flex sensors and accelerometer in detecting finger and hand movements
was quite good once the system was set up and the comparator thresholds were adjusted.
Typically when the system was first set up, adjustments in the flex sensor thresholds were
necessary. However, we believe that this is mostly due to the storage of the gloves. When the
gloves and their connected wires are wrapped up to be stored, the flex sensors frequently
move around inside the glove. The sensors themselves are somewhat fragile and any pinching
of the sensor may require the sensor to be adjusted before it will operate properly. However,
once the sensors had been fully set up in a working state, we never had any problems with
the detection accuracy of any of the sensors.
Safety
We took many steps during the design and construction of our device to ensure that it would
be safe to use. To increase electrical safety, heat-shrink tubing was used to cover all exposed
wires. This prevented shorts from being created, and prevented sharp wire ends from harming
the user. In addition, the gloves were chosen to insure the users hands were protected from
any exposed circuits, and were found to not cause discomfort to the user. The flex sensors
were attached by sewing strips of a t-shirt onto the glove, ensuring that nothing sharp was
exposed to the user. The cables were drawn together by zip-ties, to prevent tangling. Finally,
the cable connections to the main circuit board were loose enough so if suddenly jerked, the
cables would disconnect from the circuit to prevent the circuit board from becoming airborne.
This would help protect both the user and the device if a user pulls on the cables accidentally.
Interference
Our Rock Paper Scissors System does not transmit any signals. As far as we can tell, it was
not affected by noise from other nearby projects, nor did it produce interference for nearby
projects.
Usability
The device is usable by anyone who is able to play a game of rock paper scissors ordinarily.
For people with different sized fingers and hands, or people who are unable to fully bend or
extend their fingers, the angle at which the device determines the finger is bent can be tuned
by adjusting the potentiometers. The LEDs will turn on when the device detects that the
respective finger is bent, allowing the user to set the level to their preference.
Video
-
7/31/2019 Scissor Glove
20/26
The following video shows our project in action. It demonstrates how the device is used and
the output returned to the computer after each game.
Conclusions
Expectations
Overall, our device met our expectations and fulfilled the goals outlined in our proposal. The
system was able to successfully detect when the index and ring fingers were bent to
determine the players displayed symbol and to detect the hand hit motion. We were very
happy with how the gloves and controller circuits came out, and we believe the
implementation was well organized, neat, and durable.
We had originally hoped that we would be able to get a more consistent range of resistances
on the flex sensors so that we would be able to track smaller and more precise movements of
the fingers. However, the flex sensors we built ourselves far exceeded our initial expectations.
While they appeared to be flimsy, they actually held together quite well and provided the
necessary functionality for our rock-paper-scissors game. Due to small differences during the
production of the sensors, each flex sensor turned out slightly different. The ability to tune the
flex sensor comparators helped compensate for this variance.
There were a few things that we would have liked to change if we were to redo this project.
One main problem in our circuit is the manner in which the sensor gloves connect to the base
unit containing the comparators. Long wires terminating in header pins run from the gloves
and plug in to individual pin sockets scattered over the base unit board. While all of the wires
are labeled to indicate which socket they must go in, there is a fair amount of crisscrossing of
wires. This makes the gloves more difficult to plug in than we wanted. In addition, having
individual pin sockets on the base unit board proved somewhat problematic as they were
easily bent and disconnected from the board. If we were to have had the outputs of the
sensors plug into one section of the board, the single pin weakness could be avoided as a
longer, connected string of socket pins could be used.
If we were to expand on this project in the future, we would like to add more flex sensors to
the sensor glove so that the bends in all 5 fingers could be tracked. Collecting position
information on all of the fingers opens up more possibilities for application of the sensor glove.
In addition, our current project treats a finger position as a binary value, either bent or not
bent. If we were better able to capture the analog values coming off the flex sensors, we may
be able to track the exact degree of bend in each finger. This, however, may require a more
-
7/31/2019 Scissor Glove
21/26
complicated setup as the microcontroller only has 1 built in analog to digital converter which
could be used to this affect.
Ethical Considerations
Throughout the course of the design project, we did our best to observe the IEEE Code of
Ethics and conduct ourselves in an ethical manner. In terms of safety, we took many
precautions to prevent as many user risks as possible. We covered all exposed wires and
attempted to isolate the user from any direct contact with a material or device that could
cause injury. When writing our report, we made sure to mention and credit the sources we
used for design and construction ideas. These acknowledgements can be found throughout the
report as well as in the acknowledgements section at the very bottom of the page. We
attempted to be candid when evaluating the successes and failures of our design process. As
we hope that in the future others may want to build on our findings, we tried to represent
what we did accurately. We tried particularly hard to make sure that we followed the lab rules
regarding lab materials and property. We always returned borrowed materials at the end of
each lab period to ensure that other groups had access to these shared resources as well.
Finally, during our work in the lab we attempted to seek honest opinions of our project design
and well as provide our opinions to other groups that asked. In this manner, our class created
an environment that was conducive to helpfulness and respect which we believed facilitated
the many incredible and amazing projects we saw being built.
Applicable Standards
Since our code communicated game data to the computer via a serial connection, the UART
needed to follow the standards for RS232 serial communication. However, the UART library
and code provided on the course website handled this data communication for printing to
PuTTY on the computer.
Intellectual Property
All code was designed and written by us with the exception of the UART library which was
used to print game data to PuTTY on the computer. The UART implementation was written by
Joerg Wunsch and was provided via the ECE 4760 course website.
All components used to build our circuit and gloves were either available in the ECE 4760 lab
or at the local hardware store. No products were sampled from companies.
Appendices
-
7/31/2019 Scissor Glove
22/26
A. Source Code
Source files
RockPaperScissors.c(10KB) full game functionality uart.c(5KB) UART library
Header files
uart.h(1KB) UART library header fileDownload all files:code.zip(6KB)
B. Schematics
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/RockPaperScissors.chttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/RockPaperScissors.chttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/uart.chttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/uart.chttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/uart.hhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/uart.hhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/code.ziphttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/code.ziphttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/code.ziphttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/CircuitboardschematicImg.pnghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/code.ziphttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/uart.hhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/uart.chttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/code/RockPaperScissors.c -
7/31/2019 Scissor Glove
23/26
Base Unit Board Layout [full-size layout as PDF(165KB)]
High Level Circuit Diagram [full-size circuit as PDF(116KB)].
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/Circuitboardschematic.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/Circuitboardschematic.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/Circuitboardschematic.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/HighLevelCircuit.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/HighLevelCircuit.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/HighLevelCircuit.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/HighLevelCircuitImg.pnghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/HighLevelCircuit.pdfhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/Circuitboardschematic.pdf -
7/31/2019 Scissor Glove
24/26
Prototype Board PCB [ExpressPCB Design File(19KB)].
C. Parts List
Item Quantity Unit Cost Total Cost Notes S
276-168B Solder Board 1 $2.50 $2.50 ECE 4760 l
Small Solder Boards 2 $1.00 $2.00 ECE 4760 l
Mega644 1 $8.00 $8.00 ECE 4760 l
Header/SIP Pin 100 $0.05 $5.0040 pins for accelerometers, 46 pins on the
target board, 14 pins on wires from glovesECE 4760 l
Header/SIP Socket 62 $0.05 $3.1040 sockets for accelerometers, 22 sockets
on the main boardECE 4760 l
Target Board 1 $4.00 $4.00 ECE 4760 l
RS232 Connector 1 $1.00 $1.00 ECE 4760 l
DIP socket 7 $0.50 $3.50 ECE 4760 l
2 pin flat jumper cables 8 $1.00 $8.00 ECE 4760 l
Accelerometer 2 $0.00 $0.00 ECE 4760 l
Flex Sensors 4 $0.00 $0.00 Built from scratch materials in lab ECE 4760 l
Gloves 2 $2.50 $5.00 Lowes
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/4760_rev11D_for_2011_ftdi.pcbhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/4760_rev11D_for_2011_ftdi.pcbhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/4760_rev11D_for_2011_ftdi.pcbhttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/PCB_layout.pnghttp://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2011/dsd65_cwf38/dsd65_cwf38/sch/4760_rev11D_for_2011_ftdi.pcb -
7/31/2019 Scissor Glove
25/26
Power Supply 1 $5.00 $5.00 MCU power supply ECE 4760 l
10 k resistor 10 $0.00 $0.00 ECE 4760 l
1 k resistor 6 $0.00 $0.00 ECE 4760 l
10 nF capacitor 2 $0.00 $0.00 ECE 4760 l
100 nF capacitor 4 $0.00 $0.00 ECE 4760 l
LM358 dual op amp 4 $0.00 $0.00 ECE 4760 l
Green LED 4 $0.00 $0.00 ECE 4760 l
10k pot 6 $0.00 $0.00 ECE 4760 l
Wire 30 Ft $0.00 $0.00 ECE 4760 l
Total Cost of Project: $47.10
D. Tasks
The following list details the tasks handled by a specific team member. All other tasks were
completed together.
David
Flex sensor assembly Prototype board soldering Software design - coding Base unit soldering Project websiteChris
Hardware schematics Sensor glove assembly
Video editing
White board prototypingReferences
This section contains a listings of the relevant datasheets and backgroup websites used
throughout the project.
-
7/31/2019 Scissor Glove
26/26
Datasheets
ATmega644(Microcontroller) LM358(Op Amp) MMA3201D(Accelerometer)Background Information
How to Make Bi-Directional Flex Sensors(For information about how to make flex sensors) Rock-paper-scissors(Wikipedia)Acknowledgements
We want to acknowledge Professor Bruce Land for teaching a fun and interesting class. We
greatly appreciated the extended lab hours and the time the TAs took out of their schedules to
keep the lab open. Our TA, Jeff Yates, gave us useful advice and feedback about our design,
and was helpful in keeping us on track. We also appreciated the help and advice we received
from other project groups in the lab, which contributed toward the productive and exciting
work environment.
http://www.atmel.com/dyn/resources/prod_documents/doc2593.pdfhttp://www.atmel.com/dyn/resources/prod_documents/doc2593.pdfhttp://www.national.com/ds/LM/LM158.pdfhttp://www.national.com/ds/LM/LM158.pdfhttp://www.datasheets.com.pl/M/MMA/MMA3201D.pdfhttp://www.datasheets.com.pl/M/MMA/MMA3201D.pdfhttp://www.instructables.com/id/How-to-Make-Bi-Directional-Flex-Sensors/http://www.instructables.com/id/How-to-Make-Bi-Directional-Flex-Sensors/https://secure.wikimedia.org/wikipedia/en/wiki/Rock_paper_scissorshttps://secure.wikimedia.org/wikipedia/en/wiki/Rock_paper_scissorshttps://secure.wikimedia.org/wikipedia/en/wiki/Rock_paper_scissorshttp://www.instructables.com/id/How-to-Make-Bi-Directional-Flex-Sensors/http://www.datasheets.com.pl/M/MMA/MMA3201D.pdfhttp://www.national.com/ds/LM/LM158.pdfhttp://www.atmel.com/dyn/resources/prod_documents/doc2593.pdf