Accelerometers
(→Python: Simpler example) |
(Expand on theoretical values and correct atan2) |
||
Line 15: | Line 15: | ||
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. Values are in mG (milli G). 1000 = 1 G | ||
- | + | {| class="wikitable" | |
- | + | |- | |
- | + | ! 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. | These are theoretical values. In real life your mileage will vary. | ||
Line 24: | Line 57: | ||
== Using the data == | == Using the data == | ||
- | The ''X'' and ''Y'' values can be used to calculate<ref>Tom Pycke, ''[http://tom.pycke.be/mav/69/accelerometer-to-attitude Accelerometer to pitch and roll]</ref> | + | The ''X'' and ''Y'' values can be used to calculate<ref>Tom Pycke, ''[http://tom.pycke.be/mav/69/accelerometer-to-attitude Accelerometer to pitch and roll]''</ref> the roll (that is, clockwise rotation) using the ''atan2'' function (note the inverted sign of ''y''): |
- | angle_in_radians = '''atan2'''(''x'', ''y'') | + | angle_in_radians = '''atan2'''(''x'', -''y'') |
Similar, ''Y'' and ''Z'' can be used to calculate the pitch. | Similar, ''Y'' and ''Z'' can be used to calculate the pitch. |
Revision as of 21:04, 29 July 2009
Fremantle offers the possibility to play with accelerometers. There is a plan to offer a proper interface for accelerometers in Maemo, but if you want to try out before there are a couple of ways to do it.
See also the related thread in talk.maemo.org.
Contents |
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. 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[1] 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
- ↑ Tom Pycke, Accelerometer to pitch and roll