Difference between revisions of "S15: Hand Gesture Recognition using IR Sensors"
Proj user9 (talk | contribs) (→Application Logic =) |
Proj user9 (talk | contribs) (→Implementation) |
||
Line 490: | Line 490: | ||
=== Implementation === | === Implementation === | ||
==== Application Logic ==== | ==== Application Logic ==== | ||
+ | <table> | ||
+ | <tr> | ||
+ | <td valign="top" align="justify" width=1150px> | ||
+ | The below diagram shows the setup of the files used in the project.<br> | ||
+ | [[File:S15 244 Grp10 Ges code structure.png|center]]<br> | ||
+ | <center>Figure : Code Structure tree diagram</center><br><br> | ||
+ | The main function creates the tasks required for the application namely, SensorTask, WaitTask and ProcessSensor.<br> | ||
+ | [[File:S15 244 Grp10 Ges main.PNG|center]]<br> | ||
+ | <center>Figure : Main file snippet</center><br><br> | ||
+ | The tasks are declared in Hand_Gesture.hpp file.<br> | ||
+ | [[File:S15 244 Grp10 Ges gesturehpp.PNG|center]]<br> | ||
+ | <center>Figure: Header file snippet</center><br> | ||
+ | This file also includes the enumerations required in the program logic. | ||
+ | * sensorNo_t: This enumeration assigns numbers to the sensor from 0 through 8. | ||
+ | * portPins_t: This enumeration assigns the shifting logic to P2_0 through P2_5 for better readability. | ||
+ | |||
+ | Hand_Gesture.cpp file contains the definitions of all the functions as listed below.<br> | ||
+ | [[File:S15 244 Grp10 Ges gesturecpp.PNG|center]]<br> | ||
+ | <center>Figure : Source File snippet showing the function defined</center><br> | ||
+ | The WaitTask is used internally in ProcessSensor to wait for values of sensor to change while navigating through the above described algorithm. This task enables the system to wait for maximum of 5 seconds to receive any change of values in the sensor. If after 5 seconds, the sensor values are not as desired by the algorithm (to proceed to next stage), the sensor values are concluded to be false positives and further execution is skipped. | ||
+ | |||
+ | The constructor of SensorTask includes the initialization of pins for ADC and Port 2 pins used as select lines for the multiplexer.<br> | ||
+ | [[File:S15 244 Grp10 Ges pins init.png|center]]<br> | ||
+ | <center>Figure : Pin initialization</center><br> | ||
+ | UART 3 is initialized using the Singleton pattern.<br> | ||
+ | [[File:S15 244 Grp10 Ges Singleton.png|center]]<br> | ||
+ | <center>Figure : UART initialization using Singleton Pattern</center><br> | ||
+ | The init function of UART is used to initialize UART 3 to communicate at the baud rate of 9600. Since the application will only be sending values to the Qt application and not expecting any replies, the receive buffer is set to zero and the transmission buffer is set to 32 bytes.<br> | ||
+ | [[File:S15 244 Grp10 Ges UART init.png|center]]<br> | ||
+ | <center>Figure : UART driver initialization</center><br><br> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | ==== Qt Application Implementation ==== | ||
+ | |||
+ | <table> | ||
+ | <tr> | ||
+ | <td valign="top" align="justify" width=1150px> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
== Testing & Technical Challenges == | == Testing & Technical Challenges == |
Revision as of 02:03, 25 May 2015
Contents
Abstract
The aim of the project is to develop hand gesture recognition system using grid of IR proximity sensors. Various hand gestures like swipe, pan etc. can be recognized. These gestures can be used to control different devices or can be used in various applications. The system will recognize different hand gestures based on the values received from IR proximity sensors. We have used Qt to develop the application to demonstrate the working of the project.
Objectives & Introduction
We use various hand gestures in our day-to-day life to communicate while trying to explain someone something, direct them somewhere etc. It would be so cool if we could communicate with various applications running on the computers or different devices around us understand the hand gestures and give the expected output. In order to achieve this, we are using a 3-by-3 grid of analog IR proximity sensors and connecting these sensors via multiplexers to the ADC pins on SJOne Board. As a hand is moved in front of the sensors, the sensor values would in a particular pattern enabling us to detect the gesture and instruct the application to perform the corresponding action.
Team Members & Responsibilities
- Harita Parekh
- Implementing algorithm for gesture recognition
- Implementation of sensor data filters
- Shruti Rao
- Implementing algorithm for gesture recognition
- Interfacing of sensors, multiplexers and controller
- Sushant Potdar
- Implementation of final sensor grid
- Development of the application module
Schedule
Week# | Start Date | End Date | Task | Status | Actual Completion Date |
---|---|---|---|---|---|
1 | 3/22/2015 | 3/28/2015 | Research on the sensors, order sensors and multiplexers | Completed | 3/28/2015 |
2 | 3/29/2015 | 4/4/2015 | Read the data sheet for sensors and understand its working. Test multiplexers | Completed | 4/04/2015 |
3 | 4/05/2015 | 4/11/2015 | Interfacing of sensors, multiplexers and controller | Completed | 4/15/2015 |
4 | 4/12/2015 | 4/18/2015 |
|
Completed | 4/25/2015 |
5 | 4/19/2015 | 4/25/2015 |
|
Completed | 5/02/2015 |
6 | 4/26/2015 | 5/02/2015 |
|
Completed | 5/09/2015 |
7 | 5/03/2015 | 5/09/2015 | Testing and bug fixes | Completed | 5/15/2015 |
8 | 5/10/2015 | 5/16/2015 | Testing and final touches | Completed | 5/22/2015 |
9 | 5/21/2015 | 5/24/2015 | Report Completion | Completed | 5/24/2015 |
10 | 5/25/2015 | 5/25/2015 | Final demo | Scheduled | 5/25/2015 |
Parts List & Cost
SR# | Component Name | Quantity | Price per component | Total Price |
---|---|---|---|---|
1 | Sharp Distance Measuring Sensor Unit (GP2Y0A21YK0F) | 9 | $14.95 | $134.55 |
2 | STMicroelectronics Dual 4-Channel Analog Multiplexer/Demultiplexer (M74HC4052) | 3 | $0.56 | $1.68 |
3 | SJ-One Board | 1 | $80 | $80 |
4 | USB-to-UART converter | 1 | $7 | $7 |
Total (excluding shipping and taxes) | $223.23 |
Design & Implementation
Hardware Design
The image shows the setup of the project.
Proximity Sensor:
|
|
Multiplexer:
|
|
USB-to-UART converter:
|
|
Hardware Interface
Software Design
Initialization |
|
|
|
Filter Algorithm |
|
Gesture Recognition Algorithm |
Pattern 1: |
Here the three sensors present at the top left corner are monitored.
|
|
|
|
Pattern 2: |
Here the three sensors present at the top right corner are monitored.
|
|
|
|
Pattern 3: |
Here the three sensors present at the bottom left corner are monitored.
|
|
|
|
Pattern 4: |
Here the three sensors present at the bottom right corner are monitored.
|
|
|
|
Application Development
Qt applications are highly portable from one platform to other as Qt first runs a Qmake function before compiling the source code. It is very similar to ‘cmake’ which is used for cross platform compilation of any source code. The qmake auto generates a makefile depending on the operating system and the compiler used for the project. So if a project is to be ported from windows to linux based system then the qmake auto generated a new makefile with arguments and parameters that the g++ compiler expects. |
|
Gesture Recognition application on Qt The application opens up in a window that has 2 tabs, config and App. The config tab includes the fields required to open the COMM port and test the COMM port using a loopback connection. This tab has the following QObjects The App tab includes the objects required to change images and change the value in the vertical slider and lcd number display. This tab has the following Qobjects
|
Implementation
Application Logic
The below diagram shows the setup of the files used in the project. The main function creates the tasks required for the application namely, SensorTask, WaitTask and ProcessSensor. The tasks are declared in Hand_Gesture.hpp file. This file also includes the enumerations required in the program logic.
Hand_Gesture.cpp file contains the definitions of all the functions as listed below. The WaitTask is used internally in ProcessSensor to wait for values of sensor to change while navigating through the above described algorithm. This task enables the system to wait for maximum of 5 seconds to receive any change of values in the sensor. If after 5 seconds, the sensor values are not as desired by the algorithm (to proceed to next stage), the sensor values are concluded to be false positives and further execution is skipped. The constructor of SensorTask includes the initialization of pins for ADC and Port 2 pins used as select lines for the multiplexer. UART 3 is initialized using the Singleton pattern. The init function of UART is used to initialize UART 3 to communicate at the baud rate of 9600. Since the application will only be sending values to the Qt application and not expecting any replies, the receive buffer is set to zero and the transmission buffer is set to 32 bytes. |
Qt Application Implementation
Testing & Technical Challenges
Challenge #1:
The sensor produces many spikes giving false positive outputs.
Resolution:
In order to overcome spikes received and deal with false positive, normalization of the sensor output is done. A circular queue of size 5 is maintained for each sensor and each value received from the ADC is stored at the end on the queue. This queue is then sorted and only the median value is considered for computation. This reduces the false positives to a great extent.
Challenge #2:
Number of sensors used was far greater than the available ADC pins.
Resolution:
Even if we had 9 ADC pins converting values of 9 sensors, we would still be reading the each sensor one by one. Keeping this in mind, in order to overcome the deficit of ADC pins, we have used multiplexer which takes the input from 3 sensors at a time and gives the output of only the selected sensor. In this way, we could read the output of any sensor at any given point of time. The introduction of multiplexer introduces a lag but this lag is not long enough to hinder the operation of the application.
Challenge #3:
Qt being a new application for all the team members, it was a challenge to learn its programming style and use the objects.
Challenge #4:
Setting up the serial port communication in Qt.
Conclusion
Gesture recognition using IR sensors was a very interesting and challenging project. The main areas of where we enjoyed working were the development of the gesture recognition algorithm and sensor filter algorithm. This project increased our knowledge in:
- Developing filters for analog sensors
- Working with the sensor itself
- Reading datasheets for the multiplexer and sensor
- Hands-on experience in Qt application
- Using Singleton pattern for UART
This project was developed in a small scale. Further work can be done to integrate this project in devices, which would help blind people to use software, which require manual intervention, seamlessly.
Project Video
Gesture Recognition using IP Proximity Sensors
Project Source Code
References
Acknowledgement
All the components where procurred from Amazon, Adafruit and digikey. We are thankful to Preet for his continuous guidance during the project.
References Used
IR Sensor Data Sheet
LPC_USER_MANUAL
Multiplexer Data Sheet
QT Software
Filter code refered from Spring'14 project Virtual Dog