N900 accelerometer
The accelerometer detects orientation and movement of the phone.
Hardware
The accelerometer in the phone is a LIS302DL.
It is connected through the I2C bus.
It features:
- Low power consumption
- Dynamically selectable 2/8G full-scale.
- Programmable multiple interrupt generator
- Click and double click recognition
- Zero G detection
The click and double click functionality are not implemented in the current software.
The accelerometer is uncalibrated - the sensitivity may vary by around 10% plus or minus per-axis. Ideally this would be able to be calibrated by the user. It is possible to recover the bias and sensitivity by rotating the phone several times, and then finding the best mapping of the resulting ellipsoid to a sphere centered around zero.
The absolute resolution is poor - 18 mg (at 2 g sensitivity) typical. This is fine for detecting the orientation of the phone, but makes most uses that would attempt to integrate the acceleration for detection of position useless.
At the fastest sampling speed, the noise is enough to dither the output, so the resolution is somewhat higher.
Fundamental limitations
For example - with a 9 mg error - there is an accelleration error of 9 centimeters per meter per second.
This means that after 10 seconds, the velocity may be anywhere within a 1.8 m/s (around 4 MPH) band, and the position inaccurate by 4.5 m. After 100 s, the position inaccuracy is up to 450 m (this assumes the orientation of the phone is known exactly).
Software
The accelerometer is supported by the dbus/sysfs infrastructure Accelerometers, and the application rotation framework. It is used by much software, including N900Fly and a pedometer widget as well as all applications that support the screen rotating automatically to be up.