Android操作系統11種傳感器介紹

Android2.3 gingerbread系統中,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//旋轉矢量

 

我們依次看看這十一種傳感器

加速度傳感器

加速度傳感器又叫G-sensor,返回xyz三軸的加速度數值。

該數值包含地心引力的影響,單位是m/s^2

將手機平放在桌面上,x軸默認爲0y軸默認0z軸默認9.81

將手機朝下放在桌面上,z軸爲-9.81

將手機向左傾斜,x軸爲正值。

將手機向右傾斜,x軸爲負值。

將手機向上傾斜,y軸爲負值。

將手機向下傾斜,y軸爲正值。

加速度傳感器可能是最爲成熟的一種mems產品,市場上的加速度傳感器種類很多。

手機中常用的加速度傳感器有BOSCH(博世)的BMA系列,AMK897X系列,STLIS3X系列等。

這些傳感器一般提供±2G±16G的加速度測量範圍,採用I2CSPI接口和MCU相連,數據精度小於16bit

磁力傳感器

磁力傳感器簡稱爲M-sensor,返回xyz三軸的環境磁場數據。

該數值的單位是微特斯拉(micro-Tesla),用uT表示。

單位也可以是高斯(Gauss),1Tesla=10000Gauss

硬件上一般沒有獨立的磁力傳感器,磁力數據由電子羅盤傳感器提供(E-compass)。

電子羅盤傳感器同時提供下文的方向傳感器數據。

方向傳感器

方向傳感器簡稱爲O-sensor,返回三軸的角度數據,方向數據的單位是角度。

爲了得到精確的角度數據,E-compass需要獲取G-sensor的數據,

經過計算生產O-sensor數據,否則只能獲取水平方向的角度。

方向傳感器提供三個數據,分別爲azimuthpitchroll

azimuth:方位,返回水平時磁北極和Y軸的夾角,範圍爲360°

0°=北,90°=東,180°=南,270°=西。

pitchx軸和水平面的夾角,範圍爲-180°180°

z軸向y軸轉動時,角度爲正值。

rolly軸和水平面的夾角,由於歷史原因,範圍爲-90°90°

x軸向z軸移動時,角度爲正值。

電子羅盤在獲取正確的數據前需要進行校準,通常可用8字校準法。

8字校準法要求用戶使用需要校準的設備在空中做8字晃動,

原則上儘量多的讓設備法線方向指向空間的所有8個象限。

手機中使用的電子羅盤芯片有AKM公司的897X系列,ST公司的LSM系列以及雅馬哈公司等等。

由於需要讀取G-sensor數據並計算出M-sensorO-sensor數據,

因此廠商一般會提供一個後臺daemon來完成工作,電子羅盤算法一般是公司私有產權。

陀螺儀傳感器

陀螺儀傳感器叫做Gyro-sensor,返回xyz三軸的角加速度數據。

角加速度的單位是radians/second

根據Nexus S手機實測:

水平逆時針旋轉,Z軸爲正。

水平逆時針旋轉,z軸爲負。

向左旋轉,y軸爲負。

向右旋轉,y軸爲正。

向上旋轉,x軸爲負。

向下旋轉,x軸爲正。

STL3G系列的陀螺儀傳感器比較流行,iphone4googlenexus s中使用該種傳感器。

光線感應傳感器

光線感應傳感器檢測實時的光線強度,光強單位是lux,其物理意義是照射到單位面積上的光通量。

光線感應傳感器主要用於Android系統的LCD自動亮度功能。

可以根據採樣到的光強數值實時調整LCD的亮度。

壓力傳感器

壓力傳感器返回當前的壓強,單位是百帕斯卡hectopascalhPa)。

溫度傳感器

溫度傳感器返回當前的溫度。

接近傳感器

接近傳感器檢測物體與手機的距離,單位是釐米。

一些接近傳感器只能返回遠和近兩個狀態,

因此,接近傳感器將最大距離返回遠狀態,小於最大距離返回近狀態。

接近傳感器可用於接聽電話時自動關閉LCD屏幕以節省電量。

一些芯片集成了接近傳感器和光線傳感器兩者功能。

下面三個傳感器是Android2新提出的傳感器類型,目前還不太清楚有哪些應用程序使用。

重力傳感器

重力傳感器簡稱GV-sensor,輸出重力數據。

在地球上,重力數值爲9.8,單位是m/s^2

座標系統與加速度傳感器相同。

當設備復位時,重力傳感器的輸出與加速度傳感器相同。

10 線性加速度傳感器

線性加速度傳感器簡稱LA-sensor

線性加速度傳感器是加速度傳感器減去重力影響獲取的數據。

單位是m/s^2,座標系統與加速度傳感器相同。

加速度傳感器、重力傳感器和線性加速度傳感器的計算公式如下:

加速度 重力 線性加速度

11 旋轉矢量傳感器

旋轉矢量傳感器簡稱RV-sensor

旋轉矢量代表設備的方向,是一個將座標軸和角度混合計算得到的數據。

RV-sensor輸出三個數據:

x*sin(theta/2)

y*sin(theta/2)

z*sin(theta/2)

sin(theta/2)RV的數量級。

RV的方向與軸旋轉的方向相同。

RV的三個數值,與cos(theta/2)組成一個四元組。

RV的數據沒有單位,使用的座標系與加速度相同。

舉例:

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)

GVLARV的數值沒有物理傳感器可以直接給出,

需要G-sensorO-sensorGyro-sensor經過算法計算後得出。

算法一般是傳感器公司的私有產權。

發佈了21 篇原創文章 · 獲贊 3 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章