Android 開發(fā)筆記十一

傳感器學習

通過手機來感受溫度、壓力、重力和光線等。

在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產品,市場上的加速度傳感器種類很多。

手機中常用的加速度傳感器有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)過計算生產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字晃動,

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

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

由于需要讀取G-sensor數(shù)據(jù)并計算出M-sensor和O-sensor數(shù)據(jù),

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

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ù)值實時調整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)過算法計算后得出。

如何使用傳感器

1、獲取SensorManager對象

2、獲取Sensor對象

3、注冊Sensor對象


SersorManager提供的注冊傳感器的方法為registerListener(SensorListener listener, Sensor sensor, int rate)該方法中三個參數(shù)說明如下:

listener:監(jiān)聽傳感器事件的監(jiān)聽器

sensor:傳感器對象

rate:指定獲取傳感器數(shù)據(jù)的頻率

rate可以獲取傳感器數(shù)據(jù)的頻率,支持如下幾個頻率值:

SENSOR_DELAY_FASTEST:最快,延遲最小。

SENSOR_DELAY_GAME:適合游戲的頻率。

SENSOR_DELAY_NORMAL:正常頻率

SENSOR_DELAY_UI:適合普通用戶界面的頻率。

4、重寫onAccuracyChanged,onSensorChanged兩個方法

5、注銷Sensor對象


檢測傳感器


或者在配置文件中加入過濾器:

注意事項:

不要忘記注銷(消耗電量);不要再模擬器上測試代碼;不要阻塞onSensorChanged()方法;避免使用過時的方法和傳感器類型;在使用的時候先驗證傳感器;謹慎選擇傳感器延時。


LBS定位學習

LBS基于位置的應用:簽到、定位、導航、路線圖等。。。。。

如何應用百度地圖:注冊--申請密鑰--配置環(huán)境及發(fā)布,按照下面的網(wǎng)址去配置開發(fā):

http://lbsyun.baidu.com/index.php?title=androidsdk/guide/hellobaidumap

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容