Accelerometers: Difference between revisions
imported>jaffa Expand on theoretical values and correct atan2 |
imported>jaffa Tidy up introduction and styling |
||
| Line 1: | Line 1: | ||
Fremantle | Fremantle provides an accelerometer API. Currently<ref>[https://bugs.maemo.org/show_bug.cgi?id=4724 #4724] ''Lack of official documentation on how to use the accelerometer''</ref> there are two interfaces available: | ||
# D-Bus | |||
# sysfs | |||
See also the [http://talk.maemo.org/showthread.php?p=288990 related thread] | See also the [http://talk.maemo.org/showthread.php?p=288990 related thread] at talk.maemo.org. | ||
== D-Bus == | == D-Bus == | ||
| Line 9: | Line 11: | ||
== sysfs == | == sysfs == | ||
Another way is to use the sysfs file information | Another way is to use the sysfs file information: | ||
/sys/class/i2c-adapter/i2c-3/3-001d/coord | /sys/class/i2c-adapter/i2c-3/3-001d/coord | ||
When reading that file you get 3 values X, Y and Z. Values are in mG (milli G). 1000 = 1 G | When reading that file you get 3 values X, Y and Z (provided on one line, separated by white space). Values are in mG (milli G). 1000 = 1 G | ||
{| class="wikitable" | {| class="wikitable" | ||
Revision as of 21:09, 29 July 2009
Fremantle provides an accelerometer API. Currently[1] there are two interfaces available:
- D-Bus
- sysfs
See also the related thread at talk.maemo.org.
D-Bus
Thomas Thurman (marnanel) has put together a simple demo of an application using accelerometers using the D-Bus interface. You can find sources and .deb up at http://people.collabora.co.uk/~tthurman/sandcastle/
sysfs
Another way is to use the sysfs file information:
/sys/class/i2c-adapter/i2c-3/3-001d/coord
When reading that file you get 3 values X, Y and Z (provided on one line, separated by white space). Values are in mG (milli G). 1000 = 1 G
| Position | X | Y | Z |
|---|---|---|---|
| Lying on table (back down) | 0 | 0 | -1000 |
| Lying on table (face down) | 0 | 0 | 1000 |
| Sitting on table (bottom edge down) | 0 | -1000 | 0 |
| Sitting on table (right edge down) | -1000 | 0 | 0 |
| Sitting on table (left edge down) | 1000 | 0 | 0 |
| Bottom right corner down (approx.) | -500 | -500 | 0 |
These are theoretical values. In real life your mileage will vary.
Using the data
The X and Y values can be used to calculate[2] the roll (that is, clockwise rotation) using the atan2 function (note the inverted sign of y):
angle_in_radians = atan2(x, -y)
Similar, Y and Z can be used to calculate the pitch.
Python
Using the sysfs interface:
def get_rotation():
f = open("/sys/class/i2c-adapter/i2c-3/3-001d/coord", 'r' )
coords = [int(w) for w in f.readline().split()]
f.close()
return coords
References
- ↑ #4724 Lack of official documentation on how to use the accelerometer
- ↑ Tom Pycke, Accelerometer to pitch and roll