Accelerometers: Difference between revisions

From Maemo Wiki
Jump to navigationJump to search
imported>jaffa
Tidy up introduction and styling
imported>amigadave
fix double redirect
 
(25 intermediate revisions by 7 users not shown)
Line 1: Line 1:
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:
#REDIRECT [[N900 accelerometer]]
# D-Bus
# sysfs
 
See also the [http://talk.maemo.org/showthread.php?p=288990 related thread] at talk.maemo.org.
 
== D-Bus ==
 
Thomas Thurman ([http://twitter.com/marnanel 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
 
{| 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.
 
== 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 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:
<pre>
  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
</pre>
 
== References ==
 
<small>
<references/>
</small>
 
[[Category:Development]][[Category:Fremantle]]

Latest revision as of 14:12, 16 June 2010

Redirect to: