I’m researching squeeze sensing as a mode of tactile interface. Here I will cover the process of developing a squeezeable sensor and the firmware/software concerns associated with interpreting the data from the sensor. This fulfills the “sensor project” for my class called Computational Principles in Media Arts taught in AME at ASU by Todd Ingalls and Hari Sundaram.
First off, how do we sense “squeeze?” People squeeze all kinds of things: lemons, steering wheels, loved ones, toothpaste and other toiletries, pimples, stress balls, hand exercisers. I would like to focus on the latter two, which provide a therapeutic activity for those with Repetitive Strain Injury (RSI). Using flex sensors arranged in a certain pattern on a spherical object, in this case a rubber dog toy, one can capture whenever the ball is squeezed. Here’s a sketch of the sensor layout:
There are three types of interactions I wish to sense with this setup. The first is how hard the user is squeezing. The second is whether or not that squeeze is sustained. The third is if the user is squeezing and releasing the sensor. With these three pieces of information, I believe it’s possible to create a software exercise program to prevent RSI symptoms by strengthening hand muscles.
In regards to sampling rate, I am inputting this data via analog-digital conversion using an Arduino board (Atmega168). My firmware samples the state of the each sensor ten times every second and delivers it via serial to the computer. The sampling rate has to be high enough to sense quick changes in the state of the sensor, such as quick squeezing and releasing, but not too fast as to overload the serial port receiving the data.
In the imagined scenario of an anti-RSI exercise software application, the routine would guide you through a program of motions and evaluate them in real time. For instance, a command might be given to say “squeeze the ball as hard as you can for 10 seconds,” then start timing when you start squeezing, showing you on screen how many seconds you had left to squeeze. In another exercise, you could be instructed to “squeeze and release the ball 20 times.” The software would then count how many discreet squeezes were performed and allow you to complete the routine when all 20 squeezes had been counted.
Another sensing concern is that of granularity of squeeze intensity. How can we tell how hard the ball is being squeezed? There is inherent noise in the signal. The typical incoming values of the two sensors at rest are between 96-103 and 116-124. The difference in these at-rest values can be attributed to the slightly non-spherical nature of the ball used (it has a raised portion, making one sensor slight less bent when applied flush to the ball’s surface). The values input when the sensors are bent as much as is possible given the flexibility of the ball are about 200. We can therefore assume a noise level of +/- 8 on any signal reading, limiting the accuracy of our sensing. We can, however, tell the difference between a squeeze at 150 and a squeeze at 180 with relative confidence. This allows us to evaluate, on a qualitative level, whether the squeeze is “none,” “soft,” “medium,” or “hard,” at the very least. For the purposes of the proposed anti-RSI application, this low-granularity data is sufficient.
Ideally this application would track your hand strength’s progress over time, but that’s probably more along the lines of this class’s “modeling” project. With the aid of consultation by a physical therapist, the data tracked over time by this device could aid in a treatment program. You’d think that I’m a student in the Biofeedback for Rehabilitation application group here at AME, but the real case is that I’ve been battling RSI since I first learned to type.
The two analog flex sensors are sewn into a form-fitting muslin skin on the outside of a rubber, squeezeable dog toy. The analog sensors are wired to two analog input ports on an Arduino board, by way of a circuit board shield. This shield covers the reset button on the Arduino board, but this board has been converted to allow for “diecimila” functionality (add a .1 micro Farad capacitor in just the right place, and you no longer have to press the reset button in order to load a new program).
The squeeze interface has many more applications than just an RSI exercise device. In the Reflective Living application group we’re currently investigating novel tactile interfaces such as squeeze, twist, pull, and various motion gestures to create everday experience-scapes as well as to navigate through digital media, thereby bringing it back out into the physical world.
A Flickr set of all the photos of the squeeze interface is available. So is the Arduino code for dealing with the sensor data.