在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>電子元器件>傳感器>

淺談Android傳感器 III-磁傳感器

2018年10月07日 15:37 網絡整理 作者:工程師譚軍 用戶評論(0
?
  磁傳感器是把磁場、電流、應力應變、溫度、光等外界因素引起敏感元件磁性能變化轉換成電信號,以這種方式來檢測相應物理量的器件。
?
  磁傳感器廣泛用于現代工業電子產品中以感應磁場強度來測量電流、位置、方向等物理參數。在現有技術中,有許多不同類型的傳感器用于測量磁場和其他參數。
?
  磁傳感器是把磁場、電流、應力應變、溫度、光等外界因素引起敏感元件磁性能變化轉換成電信號,以這種方式來檢測相應物理量的器件。磁傳感器分為三類:指南針、磁場感應器、位置傳感器。指南針:地球會產生磁場,如果你能測地球表面磁場就可以做指南針。電流傳感器:電流傳感器也是磁場傳感器。電流傳感器可以用在家用電器、智能電網、電動車、風力發電等等。位置傳感器: 如果一個磁體和磁傳感器相互之間有位置變化,這個位置變化是線性的就是線性傳感器,如果轉動的就是轉動傳感器。
?
  大生活中用到很多磁傳感器,比如說指南針,電腦硬盤、家用電器等等。
?
  在傳統產業改造中的應用及市場
?
  據報道,1995年僅工業過程控制傳感器的全球市場已達到260億美元;2001年計算機HDD用SV-GMR磁頭的市場超過了4000億日元(約合34億美元)。若采用新型微型磁傳感器,既使操作更簡便,又提高了可靠性,增長了器件壽命,降低了成本。
?
  使用新型磁傳感器可以顯著提高測量和控制精度,如使用GMI(巨磁阻抗)磁場傳感器,檢測分辨率和常用磁通門磁強計一樣,而響應速度卻快了一倍,消耗功率僅為后者的1%;若用霍爾器件,其分辨率僅4A/m,而所需外場比前者高300余倍;在應力檢測中,SI 傳感器的靈敏度是常用電阻絲的2000倍高,是半導體應變規的20~40倍。工業機床的油壓或氣壓汽缸活塞位置檢測,廣泛采用套在活塞桿上的永磁環和AMR元件組成的磁傳感器,檢測精度達0.1mm,檢測速度可在0~500mm/s內以高低速度變換;改用GMI或SV-GMR傳感器后,測量精度至少可以提高1個數量級。在機床數控化時代,數字磁尺幫助設計師們實現了閉環控制。使用絕對信號輸出的磁尺,則不受噪聲、電源電壓波動等干擾,也不必原點復位。使用工作狀態磁敏開關,還可以完成手動與數控之間的轉換。
?
  旋轉磁編碼器在旋轉量的檢測控制中起關鍵作用,它在數控機床、機器人、工廠自動化設備的位置檢測、傳輸速度控制,磁盤、打印機之類的自動化設備通訊設備的旋轉量檢測中都是不可缺少的重要部件。其檢測對象是光磁圖形,不受油霧粉塵的影響,因此比目前最先進的光編碼器的可靠性高壽命長,尤其適合于自動焊接、油漆機器人和與鋼鐵有關的位置檢測以及各種金屬、木材、塑料等加工行業的應用。而仍大量使用光編碼器,由于這種器件易受粉塵、油污和煙霧的影響,用在自動焊接、油漆機器人、紡織和鋼鐵、木料、塑料等的加工中,可靠性極差。應用AMR、GMR 、GMI敏感元件構成的旋轉磁編碼器,就不存在上述缺點,因此,它們的市場需求年增長率在30%以上。在家用電器和節能產品中也也有其廣泛的應用潛力,在節能環保產品中也大有用武之地。若使用微型磁編碼器和控制微機一體化,更有利于簡化控制系統結構,減少元件數和占空體積,這在精密制造和加工業中意義十分重大。
?
  在環境監測中的應用
?
  環境保護的前提是對各個環境參數(溫度、氣壓、大氣成份、噪聲。..。..。)的監測,這里需要使用多種大量的傳感器。采用強磁致伸縮非晶磁彈微型磁傳感器,可以同時測量真空或密閉空間的溫度和氣壓,而且不用接插件,可以遙測和遠距離訪問。在食品包裝、環境科學實驗等方面,應用前景廣闊。
?
  在交通管制中的應用
?
  交通事故和交通阻塞是城市中和城市間交通存在的一個大問題。國內外都在加強高速公路行車支持道路系統(AHS)、智能運輸系統(ITS)和道路交通信息系統(VICS)等的開發與建設。在這些新系統中,高靈敏度、高速響應微型磁傳感器大有用武之地。例如,用分辨率可達1nT的GMI和SI傳感器,可構成ITS傳感器(作高速路上的道路標志,測車輪角度,貨車近接距離),汽車通過記錄儀(測通行方向、速度、車身長度、車種識別),停車場成批車輛傳感器,加速度傳感器(測車輛通過時路橋的振動等)。
?
  磁傳感器在電子羅盤中的應用
?
  幾個世紀以來,人們在導航中一直使用磁羅盤。有資料顯示早在二千多年前中國人就開始使用天然磁石-一種磁鐵礦來指示水平方向。電子羅盤(數字羅盤,電子指南針,數字指南針)是測量方位角(航向角)比較經濟的一種電子儀器。如今電子指南針廣泛應用于汽車和手持電子羅盤,手表,手機,對講機,雷達探測器,望遠鏡,探星儀,穆斯林麥加探測器(穆斯林鐘),手持 GPS 系統,尋路器,武器/導彈導航( 航位推測 ),位置/方位系統,安全/定位設備,汽車、航海和航空的高性能導航設備,電子游戲機設備等需要方向或姿態顯示的設備。
?
  地球本身是一個大磁鐵,地球表面的磁場大約為0.5Oe,地磁場平行地球表面并始終指向北方。利用GMR薄膜可做成用來探測地磁場的傳感器。圖5顯示這種傳感器的具體工作原理。我們可以制出能夠探測磁場X和Y方向分量的集成GMR傳感器。此傳感器可作為羅盤并應用在各種交通工具上作為導航裝置。美國的NVE公司已經把GMR傳感器用在車輛的交通控制系統上。例如,放置在高速公路邊的GMR傳感器可以計算和區別通過傳感器的車輛。如果同時分開放置兩個GMR傳感器,還可以探測出通過車輛的速度和車輛的長度,當然GMR也可用在公路的收費亭,從而實現收費的自動控制。另外高靈敏度和低磁場的傳感器可以用在航空、航天及衛星通信技術上。大家知道,在軍事工業中隨著吸波技術的發展,軍事物件可以通過覆蓋一層吸波材料而隱蔽,但是它們無論如何都會產生磁場,因此通過GMR磁場傳感器可以把隱蔽的物體找出來。當然,GMR磁場傳感器可以應用在衛星上,用來探測地球表面上的物體和底下的礦藏分布。
?
  門磁傳感器在智能家居中的應用
?
  在智能家居門禁系統中門磁開關的作用是負責門磁通電否,通電帶磁(閉門),斷電消磁(開門),門磁安裝于門與門套上,開關安裝于屋內,配合自動閉門器使用,一般可承受150公斤的拉力。
?
  有線門磁為嵌入式安裝更加隱蔽,感應門窗的開合,適用于木質或鋁合金門窗發出有線常閉/常開開關信號。門磁是用來探測門、窗、抽屜等是否被非法打開或移動。它由無線發射器和磁塊兩部分組成。門磁系統其實和床磁等原理相同。

  Android平臺提供了兩種傳感器讓我們可以確定設備的位置: 地磁傳感器和方向傳感器。 Android還提供了一種傳感器讓我們可以決定人臉離手機多近的時候關閉屏幕(距離傳感器proximity sensor)。 地磁傳感器和距離傳感器都是基于硬件的。 大多數手持設備供應商都有提供一個地磁傳感器。 同樣, 手持設備制造商通常包含一個距離傳感器來在通話的時候決定何時關閉屏幕。 方向傳感器(orientation sensor)是基于軟件的, 它通過加速度傳感器和地磁傳感器來計算數據。 但是方向傳感器在Android2.2中已經不推薦使用。

  位置傳感器在確定設備在世界中所處的位置時會很有用。 比如我們可以使用地磁傳感器跟加速傳感器合作來決定設備相對于地磁北極的位置。 我們還可以使用方向傳感器(或者基于傳感器的方向方法)來確定設備相對于APP框架為參考的位置。 位置傳感器通常不用于監測設備移動或者運動, 比如搖動, 傾斜等。

  地磁傳感器和方向傳感器通過SensorEvent的多維數組返回數據。 栗如, 方向傳感器在每次返回傳感器事件的時候提供了地磁力在三維空間的強度值。 同樣方向傳感器則提供了方位角(Yaw偏航角), 俯仰角(pitch)和翻滾角(roll)。 下表提供了Android平臺各位置傳感器的信息

   SensorEvent.values[0]

  沿x軸旋轉矢量分量(x*sin(θ/2 ))。

  無單位

  SensorEvent.values[1]

  沿y軸旋轉矢量分量(y*sin(θ/2 ))。

  SensorEvent.values[2]

  沿z軸旋轉矢量分量(z*sin(θ/2 ))。

  TYPE_GEOMAGNETIC_ROTATION_VECTOR

  SensorEvent.values[0]

  沿x軸旋轉矢量分量(x*sin(θ/2 ))。

  無單位

  SensorEvent.values[1]

  沿y軸旋轉矢量分量(y*sin(θ/2 ))。

  SensorEvent.values[2]

  沿z軸旋轉矢量分量(z*sin(θ/2 ))。

  TYPE_MAGNETIC_FIELD

  SensorEvent.values[0]

  沿x軸的地磁強度

  μT

  SensorEvent.values[1]

  沿y軸的地磁強度

  SensorEvent.values[2]

  沿z軸的地磁強度

  TYPE_MAGNETIC_FIELD_UNCALIBRATED

  SensorEvent.values[0]

  沿x軸的地磁強度(無硬鐵校準hard iron calibration)

  μT

  SensorEvent.values[1]

  沿y軸的地磁強度(無硬鐵校準hard iron calibration)

  SensorEvent.values[2]

  沿z軸的地磁強度(無硬鐵校準hard iron calibration)

  SensorEvent.values[3]

  沿x軸鐵偏差校準(Iron bias estimation)

  SensorEvent.values[4]

  沿y軸鐵偏差校準(Iron bias estimation)

  SensorEvent.values[5]

  沿z軸鐵偏差校準(Iron bias estimation)

  TYPE_ORIENTATION①

  SensorEvent.values[0]

  方位角(繞z軸的角度)

  度

  SensorEvent.values[1]

  俯仰角(pitch) (繞x軸的角度)

  SensorEvent.values[2]

  翻滾角(roll) (繞y軸的角度)

  TYPE_PROXIMITY

  SensorEvent.values[0]

  與對象的距離②

  cm

  ① 該傳感器在Android2.2版本中不再推薦使用。 Sensor framework提供了備用的方法, 下文會有介紹。

  ② 一些距離傳感器只提供二進制數據代表遠和近。

  使用游戲旋轉矢量傳感器:

  游戲旋轉矢量傳感器跟旋轉矢量傳感器是相同的, 除了它不使用地磁場。 因此Y軸不指向北邊而是一些別的參考系。

  因為游戲旋轉矢量傳感器不使用地磁場, 相關的方向因不受磁場影響而更加準確。 如果不在意北邊在哪的話可以在游戲中使用該傳感器, 這時候普通的旋轉矢量就不合適了, 因為它依賴于磁場。 下面的代碼演示了如何獲取一個該傳感器的實例:

  private SensorManager mSensorManager;

  private Sensor mSensor;

  。..

  mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR);

  使用地磁旋轉矢量傳感器:

  地磁旋轉矢量傳感器跟旋轉矢量傳感器一樣, 但是它使用地磁代替陀螺儀。 所以它的精確度會比普通旋轉矢量傳感器要低, 但是功耗也降低了。 應該只有當需要在后臺獲取旋轉信息而不想要消耗太多電量的時候才使用它。 該傳感器當與批處理(batching)一起是最有用的。

  下面的代碼演示了如何獲取實例:

  private SensorManager mSensorManager;

  private Sensor mSensor;

  。..

  mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR);

  方向傳感器:

  方向傳感器讓我們可以監測設備相對于地球參考系的位置(特指地磁北極)。 下面代碼演示了如何獲取該傳感器實例:

  private SensorManager mSensorManager;

  private Sensor mSensor;

  。..

  mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

  方向傳感器通過使用設備的地磁場傳感器和設備的加速度計合作獲得它的數據。 通過使用這倆硬件傳感器, 方向傳感器可以提供這三個維度的數據:

  l 方位角(繞z軸的角度)。 這個角度在地磁北極和設備的y軸之間。 比如如果設備的y軸對準地磁北極, 那么該值是0, 如果設備的y軸對準南極, 則該值為180. 同樣的, 當y軸指向東邊, 該值是90, 指向西邊則為270.

  l 俯仰角(pitch) (繞x軸的角度)。 處于z軸正方向和y軸正方向之間的時候該值是正的, z軸正方向和y軸負方向的時候, 該值是負的。 范圍是180度~-180度。

  l 翻滾角(roll) (繞y軸的角度)。 當處于z軸正方向和x軸正方向時該值為正。 Z軸正方向和x軸負方向的時候, 該值為負。 取值范圍是90~-90度。

  這個定義跟航空學中的方位角, 俯仰角和翻滾角是不一樣的, 航空學中x軸表示沿飛機的長邊(飛機尾部到頭部)。 此外由于歷史原因, 翻滾角在順時針方向為正(數學上講, 它應該在逆時針方向為正)。

  方向傳感器通過處理加速度計和地磁場傳感器的數據來得到它自己的數據。 因為涉及的處理任務比較繁重, 所以精度和準確度被減少(只有當翻滾角分量為0的時候它的數據才可靠)。 因此, 方向傳感器在Android2.2中就不推薦使用了。 官方推薦使用getRotationMatrix()方法和getOrientation()方法結合來計算方向值, 代替方向傳感器。 我們還可以使用remapCoordinateSystem()方法來映射方向值到APP參考框架。 下面的代碼演示了如何從方向傳感器直接獲得方向數據, 只有幾乎沒有翻滾角的時候才推薦這樣使用:

  public class SensorActivity extends Activity implements SensorEventListener {

  private SensorManager mSensorManager;

  private Sensor mOrientation;

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

  }

  @Override

  public void onAccuracyChanged(Sensor sensor, int accuracy) {

  // Do something here if sensor accuracy changes.

  // You must implement this callback in your code.

  }

  @Override

  protected void onResume() {

  super.onResume();

  mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_NORMAL);

  }

  @Override

  protected void onPause() {

  super.onPause();

  mSensorManager.unregisterListener(this);

  }

  @Override

  public void onSensorChanged(SensorEvent event) {

  float azimuth_angle = event.values[0];

  float pitch_angle = event.values[1];

  float roll_angle = event.values[2];

  // Do something with these orientation angles.

  }

  }

  我們并不會經常用到處理方向傳感器的原始數據。

  使用地磁場傳感器:

  地磁場傳感器讓我們可以監測地球磁場的變化。 下面的代碼展示如何獲取它的實例:

  private SensorManager mSensorManager;

  private Sensor mSensor;

  。..

  mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

  該傳感器提供了三維磁場的原始數據。 通常我們不需要直接使用該傳感器, 而是使用旋轉矢量傳感器來確定旋轉運動的原始數據, 或者我們還可以使用加速度計和地磁場傳感器跟getRotationMatrix()方法合作獲取旋轉矩陣和傾角矩陣。 然后可以使用這些矩陣同getOrientation()和getInclination()方法來獲得方位角和地磁傾角數據。

  使用未校正的磁力計:

  未校正的磁力計跟地磁場傳感器相似, 但是它沒有”硬鐵校正”(hard iron calibration)。 工廠校正和溫度校正依然應用于磁場。 未校正的磁力計在處理壞硬鐵估計(bad hard iron estimations)的時候有用。 通常geomagneticsensor_event.value[0]將會接近uncalibrated_magnetometer_event.values[0]- uncalibrated_magnetometer_event.values[3]。 也就是, calibrated_x ~= uncalibrated_x - bias_estimate_x.

  注意: 未校正傳感器提供更多的原始結果并可能包括一些偏差, 但是它們的測量值包含更少的校正導致的跳變。 一些APP可能會更想這些未校正的原始數據, 因為他們更加平滑和可靠。 比如當APP想要實現自己的傳感器合成, 則他們可能更喜歡沒有矯正過的數據。

  除了磁場, 未校正磁力計還會提供硬鐵校正在每個軸的估計值。 下面代碼演示了如何獲取該傳感器實例:

  private SensorManager mSensorManager;

  private Sensor mSensor;

  。..

  mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED);

  使用距離傳感器(Proximity Sensor):

  距離傳感器讓我們可以確定一個目標與設備的距離。 下面代碼演示了如何獲取它的實例:

  private SensorManager mSensorManager;

  private Sensor mSensor;

  。..

  mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);

  距離傳感器通常用來確定手持設備跟人臉的距離(比如用戶接到電話或者在打電話的時候)。 大多數距離傳感器返回絕對距離, 但是它們中的個別分子會返回”遠/近”這樣的信息。 下面的代碼展示給我們如何使用這玩意兒:

  public class SensorActivity extends Activity implements SensorEventListener {

  private SensorManager mSensorManager;

  private Sensor mProximity;

  @Override

  public final void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  // Get an instance of the sensor service, and use that to get an instance of

  // a particular sensor.

  mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);

  }

  @Override

  public final void onAccuracyChanged(Sensor sensor, int accuracy) {

  // Do something here if sensor accuracy changes.

  }

  @Override

  public final void onSensorChanged(SensorEvent event) {

  float distance = event.values[0];

  // Do something with this sensor data.

  }

  @Override

  protected void onResume() {

  // Register a listener for the sensor.

  super.onResume();

  mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL);

  }

  @Override

  protected void onPause() {

  // Be sure to unregister the sensor when the activity pauses.

  super.onPause();

  mSensorManager.unregisterListener(this);

  }

  }


非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

( 發表人:金巧 )

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 午夜影院免费版| 黑色丝袜美女被视频网站| 狠狠躁夜夜躁人人躁婷婷视频| 久久久鲁| 好男人社区www的视频免费| 狠狠激情五月综合婷婷俺| 国产日韩精品一区二区在线观看| 国产青草| 夜夜操天天| 成人毛片一区二区三区| 国产美女被艹| 91夜夜操| 一区视频在线| 欧美一区亚洲二区| 中文天堂最新版在线中文 | 国产精品怡红院永久免费| 丁香激情综合网| 亚洲综合色网站| 欧美另类图片亚洲偷| 最近高清免费观看视频| 日产精品卡二卡三卡四卡无卡乱码| 在线你懂的网址| 色批网站www| 一级做a爱免费观看视频| 热re久久精品国产99热| 成人国产精品一级毛片了| 天天性视频| 免费看黄色片的软件| 电影天堂在线观看三级| 天堂网www在线| 天天摸天天舔天天操| 中文在线天堂网www| 色综合天天| 欧美黄色大片免费观看| 看视频免费| 在线播放一区二区精品产| 色多多免费观看在线| 国产色秀视频在线观看| 国内在线观看精品免费视频| 夜夜艹天天干| 爱搞逼综合|