📄 index1.html#
字号:
"Times New Roman";color:#666699;font-weight:normal;mso-bidi-font-weight:bold'>LCD. </span></u><span style='font-size:10.5pt;font-family:Arial;mso-fareast-font-family: "Times New Roman";color:#666699;font-weight:normal;mso-bidi-font-weight:bold'>In order to make the product a stand-alone produce, we used an LCD to interface with the user. The LCD is displays the teaching status in Teach mode and the finger positions of a certain letter in Learn mode. </span><span style='font-family:Arial;mso-fareast-font-family:"Times New Roman"; color:#666699'><o:p></o:p></span></h2> <h2 style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-family:Arial;mso-fareast-font-family:"Times New Roman"; color:#666699'>Things We Tried<o:p></o:p></span></h2> <p class=MsoNormal style='margin-top:0in;margin-right:-6.85pt;margin-bottom: 12.0pt;margin-left:0in;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; color:#666699'>1. <u>Sound.</u> We tried to use speaker to pronounce the sound of each letter. However, the sound requires a filtering circuit because the quality is bad. Furthermore, using TV as our speakers is a significant memory cost. <br> <br> 2. <u>Matching user hand position. </u>In addition to matching the user hand position to those of a specified letter, we also tried to match the user's hand position to all the letters of the ASL. So even if the user does not match the specified letter, we also tried to match it with any of the other letters. In doing so, the program is slowed because the algorithm is not optimized. <br> <br> 3. <u>LCD</u> We initially used a small LCD, which did not have enough space for our interface. As a result, we upgraded to a larger LCD 4x16. <br> <br> 4. <u>Movement</u> We need to detect the letter 慗' and 慫', which requires movement in addition to hand position. As a result, we added the accelerometer to detect the movement of the glove. </span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'> </p> <H2 style="MARGIN-RIGHT: -6.85pt; mso-line-height-alt: 10.5pt"><img src="line.jpg" width="550" height="30"></H2> <H2 style="MARGIN-RIGHT: -6.85pt; mso-line-height-alt: 10.5pt"><span class="MsoNormal"><a name="Result" id="Result"><img border=0 width=122 height=30 src="image014.jpg" v:shapes="_x0000_i1031"></a></span></H2> </SPAN> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><b style='mso-bidi-font-weight:normal'><span style='font-size:18.0pt;font-family: Arial;color:#666699'>Speed of Execution<o:p></o:p></span></b><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>The two modes of operation (<i style='mso-bidi-font-style:normal'>train</i> and <i style='mso-bidi-font-style:normal'>practice</i>) vary in execution speed.<span style='mso-spacerun:yes'> </span>In <i style='mso-bidi-font-style: normal'>train</i> mode, the system takes roughly ten seconds to properly calibrate each sign.<span style='mso-spacerun:yes'> </span>In learn/practice mode, the execution speed depends on the user's ability to correctly sign a letter.<span style='mso-spacerun:yes'> </span><o:p></o:p></span><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><b style='mso-bidi-font-weight:normal'><span style='font-size:18.0pt;font-family: Arial;color:#666699'>Train mode<o:p></o:p></span></b><b style='mso-bidi-font-weight:normal'><span style='font-size:10.5pt;font-family: Arial;color:#666699'><o:p></o:p></span></b></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>In program mode, the system waits three seconds for the user to adjust their hand to properly program a letter.<span style='mso-spacerun:yes'> </span>Then, the system collects six samples at a rate of 1 sample/second in order to properly calibrate a sign.<span style='mso-spacerun:yes'> </span>Programming each letter takes a total of roughly 10 seconds.<o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p> </o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><b style='mso-bidi-font-weight:normal'><span style='font-size:18.0pt;font-family: Arial;color:#666699'>Practice Mode<o:p></o:p></span></b><b style='mso-bidi-font-weight:normal'><span style='font-size:10.5pt;font-family: Arial;color:#666699'><o:p></o:p></span></b></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>The execution speed in practice mode depends on the user's ability.<span style='mso-spacerun:yes'> </span>Each time a user properly signs the prompted letter, a new letter is displayed on the LCD after two seconds.<span style='mso-spacerun:yes'> </span>Since our code is fairly optimized for speed, the time it takes the system to prompt a new sign mostly relies on how fast the user correctly signs the current prompted letter.<span style='mso-spacerun:yes'> </span><o:p></o:p></span><b style='mso-bidi-font-weight:normal'><span style='font-size:10.5pt;font-family: Arial;color:#666699'><o:p></o:p></span></b></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><b style='mso-bidi-font-weight:normal'><span style='font-size:18.0pt;font-family: Arial;color:#666699'>Issues Resolved to Optimize Code<o:p></o:p></span></b><b style='mso-bidi-font-weight:normal'><span style='font-size:10.5pt;font-family: Arial;color:#666699'><o:p></o:p></span></b></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>Several issues were resolved along the way in order to optimize the performance of the Sign Language Coach.<span style='mso-spacerun:yes'> </span>These issues were mainly related to the search algorithms we implemented in the code.<o:p></o:p></span><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>One piece of code we optimized was the search algorithm used to determine the letter that matches the current hand position.<span style='mso-spacerun:yes'> </span>Instead of checking to see that the current finger positions matched each of the programmed positions for all letters, we devised an improved scheme.<span style='mso-spacerun:yes'> </span>First, the current thumb position is checked against all of the stored thumb positions.<span style='mso-spacerun:yes'> </span>Only the letters with matching thumb positions are stored in an array called alpha_index.<span style='mso-spacerun:yes'> </span>Next, the index finger positions of the letters in alpha_index are parsed and checked against the current index positions.<span style='mso-spacerun:yes'> </span>Only the thumb and index finger positions that match are left in alpha_index.<span style='mso-spacerun:yes'> </span>This is done for all the fingers until the matched letter is found.<span style='mso-spacerun:yes'> </span>Using this methodology improved the processing speed of the search algorithm.<span style='mso-spacerun:yes'> </span><o:p></o:p></span><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>In <i style='mso-bidi-font-style:normal'>train</i> or <i style='mso-bidi-font-style: normal'>practice</i> mode, the user is prompted with a letter to sign.<span style='mso-spacerun:yes'> </span>This letter is randomly chosen from the array of letters programmed to the EEPROM.<span style='mso-spacerun:yes'> </span>The initial design of the unit stored each programmed letter to its mapped integer location in an array (letter A to 0, letter Z to 25).<span style='mso-spacerun:yes'> </span>The random letter, my_index, was always randomly generated to be between 0 and 25, inclusive.<span style='mso-spacerun:yes'> </span>If all 26 letters of the alphabet are not programmed, it is possible that my_index will correspond to an empty entry in the EEPROM letters array.<span style='mso-spacerun:yes'> </span>If this is the case, then a new my_index needs to be generated.<span style='mso-spacerun:yes'> </span>This creates a problem when only few letters are programmed to the EEPROM.<span style='mso-spacerun:yes'> </span>With few letters in the array, there is a low chance that the <i style='mso-bidi-font-style:normal'>first</i> generated my_index will correspond to a valid letter in EEPROM.<span style='mso-spacerun:yes'> </span>Regenerating my_index requires a lot of processing time and slows the execution of <i style='mso-bidi-font-style:normal'>train</i> mode.<span style='mso-spacerun:yes'> </span>The code for my_index and writing to EEPROM therefore needed to be modified.<span style='mso-spacerun:yes'> </span>Now, the programmed letters are stored in an ordered list.<span style='mso-spacerun:yes'> </span>My_index is randomly generated out of the number of letters written to EEPROM instead of 26.<span style='mso-spacerun:yes'> </span>This ensures that my_index will only need to be generated once, therefore reducing unnecessary processing time.<o:p></o:p></span><i style='mso-bidi-font-style:normal'><span style='font-size:10.5pt;font-family: Arial;color:#666699'><o:p></o:p></span></i></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>We also removed the i style='mso-bidi-font-style:normal'>Looks like</i>functionality from our code to enhance speed.<span style='mso-spacerun:yes'> </span>This functionality displays what letter the current hand position looks like.<span style='mso-spacerun:yes'> </span>Implementing this feature requires continuous searching and updating to the LCD.<span style='mso-spacerun:yes'> </span>With only a few letters programmed to the EEPROM, the 搇ooks likefeature is doable since only a small matrix of finger positions and letters needs to be searched.<span style='mso-spacerun:yes'> </span>However, when the entire alphabet is programmed, the feature noticeably slows down the execution of practice mode.<span style='mso-spacerun:yes'> </span>For now, the i style='mso-bidi-font-style:normal'>looks like</i>function is removed.<span style='mso-spacerun:yes'> </span><o:p></o:p></span><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><b style='mso-bidi-font-weight:normal'><span style='font-size:18.0pt;font-family: Arial;color:#666699'>Accuracy<o:p></o:p></span></b><b style='mso-bidi-font-weight:normal'><span style='font-size:10.5pt;font-family: Arial;color:#666699'><o:p></o:p></span></b></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>The issue of accuracy came into calibrating hand positions, calculating finger percentage differences, and determining hand movement.<span style='mso-spacerun:yes'> </span>When calibrating hand positions, we needed to account for the time required to set up a sign.<span style='mso-spacerun:yes'> </span>The user is given three seconds to adjust their hand, and then six samples of finger positions are collected in six seconds.<span style='mso-spacerun:yes'> </span>The first of these six samples is discarded in case it takes a bit longer for the user to adjust his or her hand.<span style='mso-spacerun:yes'> </span>The next five samples are averaged in order to eliminate any finger variation during program time. <span style='mso-spacerun:yes'> </span>The average finger values are what are stored in the EEPROM for each letter.<span style='mso-spacerun:yes'> </span>This way, all letters need to only be programmed once.<span style='mso-spacerun:yes'> </span>They can be reprogrammed if the person training has made a mistake.<o:p></o:p></span><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>Since it is difficult to sign a letter the exact same way from time to time, we specified a range of acceptable values for a match.<span style='mso-spacerun:yes'> </span>Each finger position can vary anywhere from 10 (almost fully bent) to 65 (almost straight).<span style='mso-spacerun:yes'> </span>We specified our RANGE value to be 5, meaning that if the current finger positions for a letter are all within +/- 5 of the programmed positions, then a match will be recorded.<span style='mso-spacerun:yes'> </span><o:p></o:p></span><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>The percentages comparing the current hand position against the prompted letter are also calculated in task1() which runs every 10ms.<span style='mso-spacerun:yes'> </span>Since the percentages are constantly being calculated, the percentages updated to the LCD seem reasonable enough to guide the user how to adjust his or her hand.<span style='mso-spacerun:yes'> </span>Any percentage that is calculated to be greater than 100% is written to be a double dash.<o:p></o:p></span><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>In order to distinguish letters with movement (j, z) from similar letters without movement (i, d), we checked to see if there was <i style='mso-bidi-font-style: normal'>any</i> hand movement while signing.<span style='mso-spacerun:yes'> </span>This limits our device to only be compatible with American Sign Language.<span style='mso-spacerun:yes'> </span>We did not check for the specific curvy movement required to sign 搄or the zig-zag movement required to sign 搝<span style='mso-spacerun:yes'> </span>So, if the user were to sign the correct hand position for 搄but were to make the zig-zag movement for 搝 the sign would still register as a match for the letter 搄<span style='mso-spacerun:yes'> </span>Though we realize that this approach is not very accurate, we were unable to perfect it due to time constraints.<span style='mso-spacerun:yes'> </span><o:p></o:p></span><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><b style='mso-bidi-font-weight:normal'><span style='font-size:18.0pt;font-family: Arial;color:#666699'>Safety<o:p></o:p></span></b><b style='mso-bidi-font-weight:normal'><span style='font-size:10.5pt;font-family: Arial;color:#666699'><o:p></o:p></span></b></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span lang=ES-PR style='font-size:10.5pt;font-family:Arial;color:#666699; mso-ansi-language:ES-PR'>The circuitry on the board and the CPU have no possiblity of shocking the user. The only safety concern is the glove because it is the only component that directly interfaces with the users. The glove has five flex sensors attached to each finger. Because the connections are on the outside, there is never a direct electrical path that contacts the human skin. In a professional application, the glove would be made out of special material that insulates and provides electrical resistance from the sensors. However, as the project's budget is constrained to $50, we could only afford a regular glove. Still, the glove is sufficient to isolate the skin from the exterior electronic components, thereby preventing a direct electrical path to the human body.</span><b style='mso-bidi-font-weight:normal'><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></b><b style='mso-bidi-font-weight:normal'><span style='font-size:10.5pt;font-family: Arial;color:#666699'><o:p></o:p></span></b></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><b style='mso-bidi-font-weight:normal'><span style='font-size:18.0pt;font-family: Arial;color:#666699'>Interference<o:p></o:p></span></b><b style='mso-bidi-font-weight:normal'><span style='font-size:10.5pt;font-family: Arial;color:#666699'><o:p></o:p></span></b></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.5pt;font-family:Arial;color:#666699'>There seems to be no interference of our unit with other designs.<span style='mso-spacerun:yes'> </span>The hardware does not include any circuitry that would generate interference, and the CPU generates little noise.<span style='mso-spacerun:yes'> </span>All the communication is done through wires, therefore there is little information that can be lost or corrupted.<o:p></o:p></span><span style='font-size:10.5pt;font-family:Arial;color:#666699'><o:p></o:p></span></p> <p class=MsoNormal style='margin-right:-6.85pt;tab-stops:list .5in left 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><b style='mso-bidi-font-weight:normal'><span style='font-size:18.0pt;font-family: Arial;color:#666699'>Usability<o:p></o:p></span></b><b style='mso-bidi-font-weight:normal'><span style='font-size:10.5pt;font-family: Arial;color:#666699'><o:p></o:p></span></b></p> <p class=MsoNormal style='margin-right
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -