Android sensor介绍
收藏
http://mylifewithandroid.blogspot.com/
Ever since I heard that Android devices come with a wide array of
sensors, I have been excited about the possibilities. I am a firm
believer of the ubiquitous computing vision and all the consequences it
brings, including sensors that can be accessed wirelessly. Some parts of
the vision (e.g. self-powering microsensors embedded into wallpaint)
are still futuristic but mobile phones can be equipped with such sensors
easily. Google has a strategy about sensor-equipped mobile devices
.
As I did not have an Android device before, I could not play with those
sensors. Not anymore! (again, many thanks to those gentle souls who
managed to get this device to me).
Sensors are integral part of
the Android user experience. Acceleration sensor makes sure that the
screen layout changes to landscape when you turn the device (open an
application that supports landscape layout, e.g. the calendar, keep the
device in portrait mode, move the device swiftly sideways to the right
and if you do it quick enough, you can force the display to change to
landscape mode). Proximity sensor blanks the screen and switches on the
keylock when the user makes a phonecall and puts the device to his or
her ear so that the touchscreen is not activated accidentally. In some
devices, temperature sensor monitors the temperature of the battery. The
beauty of the Android programming model is that one can use all these
sensors in one's application.
.
A
very similar application called SensorDump can be found on Android
Market. Our example program is inferior to SensorDump in many respect
but has a crucial feature: it can log sensor values into a CSV file that
can be analysed later on (use the menu to switch the capture feature on
and off).
Update: from the 0.2.0 version of SensorDump, sensor data logging into CSV file is available.
This is not much important with e.g. the proximity sensor which
provides binary data but I don't believe one can understand at a glance,
what goes on with the e.g. accelerator sensor during a complex movement
just by looking at the constantly changing numbers on the device
screen.
I can see the following sensors on my Nexus One.
BMA150 - 3-axis accelerometer
AK8973 - 3-axis Magnetic field sensor
CM3602 - Light sensor
Some
sensors are projected as more than one logical sensor, for example the
AK8973 is also presented as an orientation sensor and the CM3602 as the
proximity sensor. This is just software, however, these duplicate
logical sensors use the same sensor chip but present the sensor data in
different format.
Let's start with the most popular sensor, the
accelerometer. This measures the device's acceleration along the 3 axis.
A logical but somewhat unintuitive property of this sensor is that the
zero point is in free fall - otherwise the Earth's gravity acceleration
is always present. If the device is not subject to any other
acceleration (the device is stationary or moves with constant speed),
the sensor measures the gravity acceleration that points toward the
center of the Earth. This is commonly used to measure the roll and the
pitch of the device, try the excellent Labyrinth Lite game on Android
Market if you want a demonstration.
The graph below shows sensor
data in two scenarios (note that all the data series can be found in the
download bundle under the /measurements directory). The red dots show
the value of the accelerometer when the device was turned from
horizontal position to its side, right edge pointing to the Earth. The
green dots show the sensor values when the device was tilted toward its
front edge so that at the end the upper edge pointed toward the Earth.
This
is all beautiful but don't forget that the acceleration sensor
eventually measures acceleration. If the device is subject to any
acceleration other than the gravity acceleration (remember the
experiment with the portrait-landscape mode at the beginning of the
post), that acceleration is added to the gravity acceleration and
distorts the sensor's data (provided that you want to measure the
roll-pitch of the device). The following graph shows the accelerometer
values when the device was laying on the table but I flicked it. The
device accelerated on the surface of the table and the smaller blue dot
shows the value the accelerometer measured when this happened. As if the
device was tilted to the right.
The
second sensor is the magnetic field sensor, the compass. As far as I
know, this sensor is not used for anything by the base Android
applications, it is all the more popular for all sorts of compass
applications. The magnetic sensor measures the vector of the magnetic
field of the Earth, represented in the device's coordinate system. In
3D, this points toward the magnetic north pole, into the crust of the
Earth. The following graph shows the scenario when the device was laying
on the table but was rotated in a full circle on the surface of the
table.
Even
though the magnetic sensor is not subject to some unwanted acceleration
like the accelerometer, it is subject to the influence of metal
objects. The following graph shows the values of the magnetic sensor
when the device was laying on the table but after a while I put a small
pair of scissors on top of the device. You can see that there are two
clusters of sensor values: one with the scissors, one without.
The
third sensor is the light sensor that doubles as proximity detector.
The light sensor is more evident but the proximity detector deserves
some explanation. The proximity detector is really a light sensor with
binary output. If blocked, it emits 0.0, otherwise it emits 1.0. The
photo belows demonstrates the location of the sensor and how to block
it.
阅读(676) | 评论(0) | 转发(0) |