Touch gesture recognition using body capacitance

For my final year project, I tried to replicate and possibly improve the Disney's touche device using much cheaper components than they did. It was a partial success, but a great learning experience nontheless. These days most touch sensitive devices are designed either to recognize where it has been touched or whether is touched or not. Many objects around us in everyday life can be potentially used as touch interactive surface providing they are made out of conductive material. With the conventional way it would only be possible to detect whether the object has been touched or not. However, by exciting the object with different frequencies it is possible to detect how much skin is touching it. Essentially the system could recognize whether the object is grabbed, pinched, touched by one or more fingers or any other gesture which have different amount of skin touching it. There are many surfaces, objects and liquids which can be transformed into touch sensitive devices without additional buttons or touchscreens like door handles, mobile phones, lamps, desks, walls etc. 

1.1       Outcomes and goals

Main goal of the project was to develop and design a device which would be able to do GD (gesture detection) on the objects connected to it. This would include designing and making the main PCB and writing software for the PC and Android smart phones. However, due to lack of time and unforeseen challenges it was infeasible.

As mentioned above one of the goals was designing and making the main PCB for learning purposes. This process includes:

  1. Designing the PCB in Eagle CAD software
  2. Etching the PCB in home environment
  3. Applying solder mask
  4. Soldering

For the software side of the project, the main goals were as following:

  1. Design PC side application in C++/Qt
  2. Learn LibSVM and write a wrapper to simplify user interactions with it
  3. Port the application mentioned in 1st point for smart phones


Most of the goals were successfully achieved, except for increasing the device sensitivity. One of the requirements was to develop a sensor which can be interfaced with human skin directly and used as touch interface. Unfortunately, the current design wasn’t able to excite the human body in different frequencies enough to detect change from the input signal. On the other hand, the GD system is able to sense the presence of human body and differentiate from multiple gestures when touching a conductive object, including liquids. As of now GD system could be used for detecting gestures on objects only, with some modification it can be potentially used as smart light switch, where different gestures enable different lighting in the room or by manufacturing a copper frame in a smart phone, the GD system could sense how is the phone being held in hand.

1.2       GD system architecture

Standard way of doing capacitive touch sensing is by using one fixed frequency. However GD system is using a technique called frequency sweep, which enables to do capacitive touch sensing in multiple frequencies. For example, in frequencies ranging from 100 kHz up to 50 Mhz.

For frequency sweep the micro-processor will generate AC signal in specific frequency range to excite the electrode. The electrode can be any surface connected to the ADC of the micro-processer. The micro-processor measures the amplitude of the specific frequency the electrode was excited. Essentially, constructing spectrum for different levels of excitement. By varying the capacitance the spectrum should in theory change. A human touch basically changes, in almost all cases increases, capacitance. The way human is touching the electrode, or the amount of skin contacted with the electrode will produce a different output.  In other words, electrical properties of human touch will change the excitement spectrum.  Then by using simple machine learning algorithms like SVM or neural network, for pattern recognition, the way of human touching the electrode can be detected.  In short, with frequency sweep technique it is not only possible to detect a touch, but as well how it was touched.  Interestingly this is all achieved through single electrode.  Please see Figure A‑1 for the basic architecture of the touch sensing technique

Figure A‑1 Touch sensing architecture

The technique of frequency sweep has already been used for various medical applications. For example, already in year 1979 it was proposed to be used for analysis of neuromuscular junction continuity[1].  As well it has been used for wireless communication and different kinds of proximity sensors.

The project is highly inspired by Disney’s research called touché[2]. More or less they are using exactly the same approach GD system is using.

There are two more articles (projects) which are using frequency sweep technique to do touch recognition.  Both of them have been highly inspired by touché and they constructed much cheaper version of the touché. Sprites [3]method involves using a standard AVR micro-controller to do frequency sweep from 0-3.5MHz. For recognition, just like touché Sprite is using SVM algorithm. And the other one by DZL [4] reconstructed touché using arduino, however for gesture recognition he is measuring the highest point of the frequency sweep. Which is very unreliable compared to pattern recognition using machine learning.

Even though both of the “cheap” implementations are using PWM for exciting the electrode, the GD system is using a proper sine wave generator, just like touché. More precisely it uses AD9850 function generator. This unit can generate up to 50MHz pure sine wave. The decision was made to use a proper sine wave generator because of the electrical properties of the human body. More than 99% of the human body’s resistance is at the skin on average which is about 1MΩ[5]. On the other hand AC signal can pass through the human skin and go through the least impedance in the corresponding phase and amplitude of AC signal. Internal human resistance is around 100Ω.



Download: final_year_project_report2.pdf (5.48M)

Download: (19.01M)