最終更新:
moonlight_aska 2012年10月09日(火) 22:50:24履歴
磁気センサーは, 電磁波の強さを測定するセンサーである.
Androidの磁気センサーでは, 以下のようにx, y, z軸の磁気強度[uT]を取得できる.


Androidの磁気センサーでは, 以下のようにx, y, z軸の磁気強度[uT]を取得できる.

- Sensor04.java
- センサーイベントを取得するために, SensorEventListenerインタフェースを実装する.
- onCreateメソッド
- getSystemServiceメソッドで, SENSOR_SERVICEを指定してSensorManagerのインスタンスを取得する.
- onStopメソッド
- SensorManager#unregisterListenerメソッドでリスナーの登録を解除する.
- onResumeメソッド
- SensorManager#getSensorListメソッドで, TYPE_MAGNETIC_FIELDを指定してセンサーのインスタンスの一覧を取得する.
- Sensor#getメソッドで, センサーのインスタンスを取得し, SensorManager#registerListenerメソッドでリスナーを登録する.
- SensorEventListener#onSensorChangedメソッド
- 磁気センサーの場合にSensorEvent.values[]の値を読み出す.
package com.moonlight_aska.android.sensor04;
import java.util.List;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
public class Sensor04 extends Activity implements SensorEventListener {
private SensorManager manager;
private TextView values;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
values = (TextView)findViewById(R.id.value_id);
manager = (SensorManager)getSystemService(SENSOR_SERVICE);
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
// Listenerの登録解除
manager.unregisterListener(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
// Listenerの登録
List<Sensor> sensors = manager.getSensorList(Sensor.TYPE_MAGNETIC_FIELD);
if(sensors.size() > 0) {
Sensor s = sensors.get(0);
manager.registerListener(this, s, SensorManager.SENSOR_DELAY_UI);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
String str = "";
if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
str = "X軸:" + event.values[0]
+ "\nY軸:" + event.values[1]
+ "\nZ軸:" + event.values[2];
values.setText(str);
}
}
}
- 動作例

このページへのコメント
askaです.
磁気センサは, 磁場(磁界)の大きさや方向を計測するセンサで, 大きく2種類に分けられます.
1) 磁場と電流の相互作用で電流にローレンツ力が加わり
起電力が発生する素子(ホール素子)のホール効果を利用した「ホール素子センサ」
2) 磁界の強さに応じて電気抵抗値が変化する磁気抵抗素子(MR素子)を用いて
ホイートストン・ブリッジを構成する「MRセンサ」
Androidの磁気センサは, 地磁気(地球が持つ磁気)を計測し方位を測定する
ことができますが, Androidに金属や磁石を近づけるとその影響によりセンサ値が
変化します.
ラップタイムが測定できるアプリは, そのセンサ値の変化を利用している
のではないかと思いますが....
気になることがあります。
磁気センサーは磁気感知センサーと同じものなのか同課は未確認。
サーキット(レース)などに設備しているコントロールラインと呼ばれるところ(その下、中には磁気を埋め込まれていることは分かっている)を通過すると、ラップタイムが振出しに戻ってカウント出来ていたので、不思議に思いました。
不思議に思ったのはAndroid&アプリでラップタイムが出来たからです。
GPSなのか磁気センサーなのか不明です。
以上の事知りたく思い、コメントしました。