Android Sensor概述


Sensor就是傳感器,提供高精度的原始數據,比如操作系統,手勢,傾斜等動作就是利用重力傳感器的數據來判斷;磁力傳感器和加速度傳感器可以計算出方位。
本篇文章側重於學習基本的知識,包括sensor的功能,使用場景,工作原理,輸出數據含義。

Sensor分類

  • Motion Sensors:測量三軸的加速度和旋轉
    • accelerometers
    • gravity(g-sensor)
    • gyroscopes(陀螺儀)
    • ratational vector
  • Environment Sensors:測量環境參數
    • temperature
    • pressure
    • light
    • humidity(溼度)
  • Position Sensors:測量物理位置
    • proximity(距離)
    • orientation(方向)
    • magnetometers(磁力)

Sensor axes

Mobile device axes

在這裏插入圖片描述

Automative axes

在這裏插入圖片描述

Motion Sensor

在這裏插入圖片描述
Motion Sensor是判斷物體姿態和物體移動的傳感器,其應用也很廣泛:

  • 車輛姿態
  • 無人機
  • 穿戴設備
  • 手機重力感應

accelerometers/gravity

如下圖是Android對傳感器數值的定義,其單位是m/s2。這裏要注意accelerometer的值是包含了gravity的值,比如手機水平向上放置,其z軸的數值就是gravity的值(約等於9.81m/s2
在這裏插入圖片描述
在這裏插入圖片描述
線性加速度可以表示除掉gravity影響的accelerometer。
在這裏插入圖片描述
For example:

public void onSensorChanged(SensorEvent event){
    // In this example, alpha is calculated as t / (t + dT),
    // where t is the low-pass filter's time-constant and
    // dT is the event delivery rate.

    final float alpha = 0.8;

    // Isolate the force of gravity with the low-pass filter.
    gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
    gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
    gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

    // Remove the gravity contribution with the high-pass filter.
    linear_acceleration[0] = event.values[0] - gravity[0];
    linear_acceleration[1] = event.values[1] - gravity[1];
    linear_acceleration[2] = event.values[2] - gravity[2];
}

accelerometer和gravity芯片內部的工作原理可以看:MEMS加速度計陀螺儀磁力計的工作原理

如下圖所示:

  • 紅色的部分是可移動的。

  • 有加速度的時候的,放大如圖2,C1和C2兩側的電壓會產生微小的變化,電壓值可以反應加速度。

    在這裏插入圖片描述
    加速度計會輸出三個軸的加速度,測量的加速度包括物理加速度(速度變化)和重力加速度。所有值均採用國際單位制單位 (m/s^2),測量結果爲設備加速度減去沿 3 個傳感器座標軸的重力加速度。

  • 自由落體時,(x, y, z) 的範數應接近於 0。

  • 當設備平放在桌子上並從其左側向右推動時,x 軸加速度值爲正。

  • 當設備平放在桌子上時,z 軸上的加速度值爲 +9.81,相當於設備的加速度 (0 m/s^2) 減去重力加速度 (-9.81 m/s^2)。

  • 當設備平放在桌子上並向上擡起時,加速度值大於 +9.81,相當於設備的加速度 (+A m/s^2) 減去重力加速度 (-9.81 m/s^2)。

重力加速度和加速度計的聯繫與區別:

  • 座標系相同
  • 設備水平靜止的時候,數值相同
  • 加速度主要測試運動方向上速度的變化,重力傳感器主要測試設備和地球水平面的差異

gyroscope

gyroscope的單位是rad/s,繞軸順時針旋轉的方向是正值,逆時針旋轉的方向是負值。
在這裏插入圖片描述
For example:下面的代碼表示通過陀螺儀的值,計算物體旋轉角度。

private static final float NS2S = 1.0f / 1000000000.0f;
private float timestamp;

public void onSensorChanged(SensorEvent event)
{
    if (timestamp != 0)
    {
        // event.timesamp表示當前的時間,單位是納秒(1百萬分之一毫秒)
        final float dT = (event.timestamp - timestamp) * NS2S;
        angle[0] += event.values[0] * dT;
        angle[1] += event.values[1] * dT;
        angle[2] += event.values[2] * dT;
    }
    timestamp = event.timestamp;
}

工作原理是利用了科里奧利力:

  • 假設圓盤不動,從A往B點方向扔一個小球,會落在B點,其軌跡也是一條直線
  • 假設圓盤逆時針旋轉,角速度爲w,從A往B方向扔一個小球,從A的角度來看,還是落在B(實際是B’),但實際的B點已經偏移,而且A的運動軌跡是一條曲線AB’
    從B的角度來看,A是受到了側向的力,這個力就是科里奧利力。
    根據這個力,我們可以得到角速度。rad/s。
    在這裏插入圖片描述
    芯片內部工作原理:
  • 如左圖,沒有旋轉的時候,諧振器是水平方向高速振動。
  • 如右圖,有旋轉的時候,垂直方向會檢測到科里奧利力加速度。
    在這裏插入圖片描述

Position Sensor

magnetometers

磁力傳感器應用也很廣泛:

  • 汽車ABS
  • 里程錶
  • 指南針
  • 金屬探測

磁力傳感器是利用霍爾效應去測試磁場強度的。當電流通過一個位於磁場中的導體的時候,磁場會對導體中的電子產生一個垂直於電子運動方向上的作用力(洛倫茲力),從而在垂直於導體和磁感線的方向上產生電勢差。
在這裏插入圖片描述
磁場也是輸出3個方向的數值,單位是微特斯拉(uT)
在這裏插入圖片描述

proximity

距離傳感器,透過紅外線LED燈發射紅外線,被物體反射後由紅外線探測器接受,藉此判斷接收到紅外線的強度來判斷距離,有效距離大約在10米左右。它可感知手機是否被貼在耳朵上講電話,若是則會關閉屏幕來省電;距離傳感器也可以運用在部分手機支持的手套模式中,用來解鎖或鎖定手機。
在這裏插入圖片描述

Environment Sensor

環境傳感器主要是檢測環境的傳感器,Android支持包括溫度(環境溫度,設備溫度)光,壓力,溼度等傳感器。
在這裏插入圖片描述

light

  • 功能:控制屏幕亮度
  • 原理:光敏三極管,接收外界光線時,會產生強弱不等的電流,從而感知環境光亮度。
  • 單位:環境光的單位是lx

barometer/pressure

  • 功能:測量壓力
  • 原理:薄膜與變阻器或電容連接起來,氣壓變化導致電阻或電容的數值發生變化,從而獲得氣壓值。
  • 單位:hPa

temperature

  • 功能:測量溫度
  • 原理:熱敏電阻
  • 單位:攝氏度
    • TYPE_AMBIENT_TEMPERATURE:表示環境溫度
    • TYPE_TEMPERATURE:表示設備溼度
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章