在Android2.3 gingerbread系統(tǒng)中,,google提供了11種傳感器供應用層使用,。
#define SENSOR_TYPE_ACCELEROMETER 1 //加速度
#define SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力
#define SENSOR_TYPE_ORIENTATION 3 //方向
#define SENSOR_TYPE_GYROSCOPE 4 //陀螺儀
#define SENSOR_TYPE_LIGHT 5 //光線感應
#define SENSOR_TYPE_PRESSURE 6 //壓力
#define SENSOR_TYPE_TEMPERATURE 7 //溫度
#define SENSOR_TYPE_PROXIMITY 8 //接近
#define SENSOR_TYPE_GRAVITY 9 //重力
#define SENSOR_TYPE_LINEAR_ACCELERATION 10//線性加速度
#define SENSOR_TYPE_ROTATION_VECTOR 11//旋轉矢量
我們依次看看這十一種傳感器
1 加速度傳感器
加速度傳感器又叫G-sensor,,返回x,、y,、z三軸的加速度數(shù)值。
該數(shù)值包含地心引力的影響,,單位是m/s^2,。
將手機平放在桌面上,x軸默認為0,,y軸默認0,,z軸默認9.81。
將手機朝下放在桌面上,,z軸為-9.81,。
將手機向左傾斜,x軸為正值,。
將手機向右傾斜,,x軸為負值。
將手機向上傾斜,y軸為負值,。
將手機向下傾斜,,y軸為正值。
加速度傳感器可能是最為成熟的一種mems產(chǎn)品,,市場上的加速度傳感器種類很多,。
手機中常用的加速度傳感器有BOSCH(博世)的BMA系列,AMK的897X系列,,ST的LIS3X系列等,。
這些傳感器一般提供±2G至±16G的加速度測量范圍,采用I2C或SPI接口和MCU相連,,數(shù)據(jù)精度小于16bit,。
2 磁力傳感器
磁力傳感器簡稱為M-sensor,返回x,、y,、z三軸的環(huán)境磁場數(shù)據(jù)。
該數(shù)值的單位是微特斯拉(micro-Tesla),,用uT表示,。
單位也可以是高斯(Gauss),1Tesla=10000Gauss,。
硬件上一般沒有獨立的磁力傳感器,,磁力數(shù)據(jù)由電子羅盤傳感器提供(E-compass)。
電子羅盤傳感器同時提供下文的方向傳感器數(shù)據(jù),。
3 方向傳感器
方向傳感器簡稱為O-sensor,,返回三軸的角度數(shù)據(jù),方向數(shù)據(jù)的單位是角度,。
為了得到精確的角度數(shù)據(jù),,E-compass需要獲取G-sensor的數(shù)據(jù),
經(jīng)過計算生產(chǎn)O-sensor數(shù)據(jù),,否則只能獲取水平方向的角度,。
方向傳感器提供三個數(shù)據(jù),分別為azimuth,、pitch和roll,。
azimuth:方位,返回水平時磁北極和Y軸的夾角,,范圍為0°至360°,。
0°=北,90°=東,,180°=南,,270°=西,。
pitch:x軸和水平面的夾角,范圍為-180°至180°,。
當z軸向y軸轉動時,,角度為正值。
roll:y軸和水平面的夾角,,由于歷史原因,,范圍為-90°至90°。
當x軸向z軸移動時,,角度為正值,。
電子羅盤在獲取正確的數(shù)據(jù)前需要進行校準,通??捎?字校準法,。
8字校準法要求用戶使用需要校準的設備在空中做8字晃動,
原則上盡量多的讓設備法線方向指向空間的所有8個象限,。
手機中使用的電子羅盤芯片有AKM公司的897X系列,,ST公司的LSM系列以及雅馬哈公司等等。
由于需要讀取G-sensor數(shù)據(jù)并計算出M-sensor和O-sensor數(shù)據(jù),,
因此廠商一般會提供一個后臺daemon來完成工作,,電子羅盤算法一般是公司私有產(chǎn)權。
4 陀螺儀傳感器
陀螺儀傳感器叫做Gyro-sensor,,返回x,、y,、z三軸的角加速度數(shù)據(jù),。
角加速度的單位是radians/second。
根據(jù)Nexus S手機實測:
水平逆時針旋轉,,Z軸為正,。
水平逆時針旋轉,z軸為負,。
向左旋轉,,y軸為負。
向右旋轉,,y軸為正,。
向上旋轉,x軸為負,。
向下旋轉,,x軸為正。
ST的L3G系列的陀螺儀傳感器比較流行,,iphone4和google的nexus s中使用該種傳感器,。
5 光線感應傳感器
光線感應傳感器檢測實時的光線強度,,光強單位是lux,其物理意義是照射到單位面積上的光通量,。
光線感應傳感器主要用于Android系統(tǒng)的LCD自動亮度功能,。
可以根據(jù)采樣到的光強數(shù)值實時調(diào)整LCD的亮度,。
6 壓力傳感器
壓力傳感器返回當前的壓強,,單位是百帕斯卡hectopascal(hPa)。
7 溫度傳感器
溫度傳感器返回當前的溫度,。
8 接近傳感器
接近傳感器檢測物體與手機的距離,,單位是厘米。
一些接近傳感器只能返回遠和近兩個狀態(tài),,
因此,,接近傳感器將最大距離返回遠狀態(tài),小于最大距離返回近狀態(tài),。
接近傳感器可用于接聽電話時自動關閉LCD屏幕以節(jié)省電量,。
一些芯片集成了接近傳感器和光線傳感器兩者功能。
下面三個傳感器是Android2新提出的傳感器類型,,目前還不太清楚有哪些應用程序使用,。
9 重力傳感器
重力傳感器簡稱GV-sensor,輸出重力數(shù)據(jù),。
在地球上,,重力數(shù)值為9.8,單位是m/s^2,。
坐標系統(tǒng)與加速度傳感器相同,。
當設備復位時,重力傳感器的輸出與加速度傳感器相同,。
10 線性加速度傳感器
線性加速度傳感器簡稱LA-sensor,。
線性加速度傳感器是加速度傳感器減去重力影響獲取的數(shù)據(jù)。
單位是m/s^2,,坐標系統(tǒng)與加速度傳感器相同,。
加速度傳感器、重力傳感器和線性加速度傳感器的計算公式如下:
加速度 = 重力 + 線性加速度
11 旋轉矢量傳感器
旋轉矢量傳感器簡稱RV-sensor,。
旋轉矢量代表設備的方向,,是一個將坐標軸和角度混合計算得到的數(shù)據(jù)。
RV-sensor輸出三個數(shù)據(jù):
x*sin(theta/2)
y*sin(theta/2)
z*sin(theta/2)
sin(theta/2)是RV的數(shù)量級,。
RV的方向與軸旋轉的方向相同,。
RV的三個數(shù)值,與cos(theta/2)組成一個四元組,。
RV的數(shù)據(jù)沒有單位,,使用的坐標系與加速度相同,。
舉例:
sensors_event_t.data[0] = x*sin(theta/2)
sensors_event_t.data[1] = y*sin(theta/2)
sensors_event_t.data[2] = z*sin(theta/2)
sensors_event_t.data[3] = cos(theta/2)
GV、LA和RV的數(shù)值沒有物理傳感器可以直接給出,,
需要G-sensor,、O-sensor和Gyro-sensor經(jīng)過算法計算后得出。
算法一般是傳感器公司的私有產(chǎn)權,。