Accelerometers

(Expand on theoretical values and correct atan2)
(Tidy up introduction and styling)
Line 1: Line 1:
-
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.
+
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] in talk.maemo.org.
+
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:

  1. D-Bus
  2. sysfs

See also the related thread at 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 (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

  1. #4724 Lack of official documentation on how to use the accelerometer
  2. Tom Pycke, Accelerometer to pitch and roll