By using four Piezoelectric sensors you can create a Pressure Sensitive table top solution. This table top is able to read where the user pressed the table and translate this to X/Y coordinates.
- Virtual keyboards
- Virtual dashboards
- Pressure sensitive “reactables” with visual dials and touch-input
The total cost for a basic table top, on materials, including the Arduino board is about 50 euro. The piezoelectric sensors cost about 2 euro each (4 x 2 = ±8 euro total). Prototyping print boards around 4 euro each, an Arduino board approximately 30 euros, wires and cables around 6 euro (10 meters) and resistors about 1 euro max.
Concept sketches and practical notes: A “reactable” with touch-input
(work in progress)
The piezoelectric sensors are mountend underneath a straight surface. The surface itself rests on the piezoelectric sensors. Using these four piezoelectric sensors you can measure the pressure applied to each corner of the “table top” / panel / Touch surface when the user presses his or her finger on the table top. The distribution of pressure is quite lineair, so it is quite easy to determine where the pressure was applied from the sensor data.
The formula to get X and Y is quite simple:
X1 = rangeX * pressureB/(pressureA + pressureB)
X2 = rangeX * pressureD/(pressureC + pressureD)
X = (X1+X2)/2
Y1 = rangeY * pressureC/(pressureA + pressureC)
Y2 = rangeY * pressureD/(pressureB + pressureD)
Y = (Y1+Y2)/2
You take the pressure measured at two points, add them and divide one of the two by that sum to get the relative position (between zero and one). To translate the relative position to an absolute, multiply it by the amount of pixels, or a new ratio (100 or 1000).
To use the most of the sensor readings, I choose to use the average value between the readings of the top / bottom – X1 / X2 – and left / right – Y1 / Y2 sensor pairs.
Rule out vibrations: Damping + focus
You only need the pressure applied by the user. Mechanical vibrations will garble the readings. To rule out vibrations based on surface to surface contact, you sandwich each sensor in a pocked made from two soft tissues. Folded toilet paper suffices. More fancy is to use a material like felt.
The coin is required to focus the pressure to a specific area of the sensor. With this, the sensor becomes much more sensitive to light pressure as well, enabling you to make touch-sensitive surfaces responding to the slightest touch.
Virtual objects on table
As the table top returns X/Y coordinates, or X/Y ratios, you can start mapping objects and buttons to specific touch-areas. “A” can be a Querty-keyboard. “B” a numeric keyboard. “C” a remote control for the Audio player. Buttons on A, B and C can be detected (in Flash) by performing a HitTest on the “keys” or “buttons”.
The “virtual objects” can be simple sheets of printed paper, attached to the surface with tape. On this paper, key boards can be printed, remote controls and any other type of control. By printing a QR-code on the backside of the paper the system can recognize what the sheet of paper is representing. As the surface itself is registering the user actions via the pressure applied to it, the material you use for the virtual objects can be anything.
Registering the virtual objects
The image above shows a camera registering the underside of the table top (made from any type of transparent material).
Keeping it simple / cheap
On the table surface, no images are projected.
Understanding position, size and rotation
Marker = rotation, scale and location. The markers are placed on the underside of the virtual objects. Using the camera, the camera input, AR/FLAR-markers and AR/FLAR toolkit, you can determine from each virtual object their rotation, relative size and relative position. Using this information you can scale and rotate your virtual objects to reflect the objects on the table and then perform the hit-test to them.
Objects moved, still functional
Example of a FLAR marker
Using image / pattern recognition and math, a marker is recognized and rotation translated to information you can use in Flash or Java (if you use the AR-toolkit)
Ruling out horizontal movements
When you choose to make the Touch Surface more sensitive (by lowering the threshold where touch is accepted as input) you want to rule out horizontal movements as they influence the pressure registered by each of the four sensors, making the readings unreliable. The image describes a quick and dirty solution using pegs and holes. Better (but harder to display and harder to build) is where you have a second layer, with pins on the corners. The pins can only move down and press on the piezoelectric sensors.
Flexible surfaces: Moving objects around
The setup as described above makes it possible to create virtual input devices like keyboards and controls which you can slap on the table, move around, rotate, replace and combine.
Test results: reading X/Y coordinates from a Touch Surface
Test results on the first prototype show that:
- Featherlight touch: The Pressure Sensitive Touch Surface responds to featherlight touches and can return quite reliable data
- Sideways movement: You need to cancel out sideways movements as they influence the pressure on featherlight touches (see image below)
- More pressure = less errors: The more pressure you apply, the more accureate the readings become. The sideways movements are of less influence
- Dragging: The sensors do not read dragging movements. So you can only use it for point = click actions
- Placing objects on table: Only the relative change is measured by the sensors. So when you place an object on the table, the new balance of pressure will act as “point zero” for the next touch. This makes the table-readings stable for simple solutions.
- Shake / quakes: when there is tremors, the Touch Surface will definately fire “changes” to the reader and random data will occur. The Touch Surface is therefore only suitable for stable environments.
Sensor schematics and Arduino
Wiring / direction: push or release is registered
It matters how you connect the piezoelectric sensor. In this setup it will either register the pressure-in or release-pressure action. I have not tested a setup that reads both.