[Android] Magnetic Field sensor (Compass)

Sathittham (Phoo) Sangthong
SS Blog
Published in
1 min readFeb 14, 2014

Magnetic Field Sensor คืออะไร ?

Magnetic Field sensor หรือที่เรารู้จักกันดีในนานเข็มทิศ (compass) นั้นเองครับ
เป็นเซนเซอร์ที่ใช้วัดความเข้มของสนามแม่เหล็กโลกทั้ง 3 แกน (x,y,z) มีหน่วยเป็น μT (ไมโครเทสล่า)
โดยเจ้า Magnetic Field sensor จัดอยู่ในหมวดหมู่ของ Position Sensors เพราะว่า
ส่วนใหญ่แล้วเราจะใช่เป็นเข็มทิศในการหาตำแหน่ง ทิศทางนั้นเองครับ

  • ระบบ Sensor Coordinate
  • ใช้ระบบเดียวกับ Accelerometer และ Gyroscope

การใช้งาน Magnetic Field sensor

เซนเซอร์ Magnetic Field นี้้ช่วยให้เราสามารถตรวจสอบความเปลี่ยนแปลงของสนามแม่เหล็กโลกได้
โดยเริ่มจากโด๊ดตัวอย่างนี้ครับ

private SensorManager mSensorManager;
private Sensor mSensor;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
  • การอ่านค่า Raw Data

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/mag_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Magnetometer Raw Data (μT)" />
<TextView
android:id="@+id/mag_x"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="X:" />
<TextView
android:id="@+id/mag_y"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Y:" />
<TextView
android:id="@+id/mag_z"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Z:" />
</LinearLayout>MainActivity.javapackage sathittham.sangthong.mymagnetometer;import android.app.Activity;
import android.content.Context;
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 MainActivity extends Activity implements SensorEventListener{private SensorManager mSensorManager;
private Sensor mMagnetometer;
private TextView axisX, axisY, axisZ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
axisX = (TextView) findViewById(R.id.mag_x);
axisY = (TextView) findViewById(R.id.mag_y);
axisZ = (TextView) findViewById(R.id.mag_z);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mMagnetometer= mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// Do something here if sensor accuracy changes.
}
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
axisX.setText("X: "+x);
axisY.setText("Y: "+y);
axisZ.setText("Z: "+z);
}
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
}
อ้างอิงhttp://developer.android.com/guide/topics/sensors/sensors_position.htmlhttp://stackoverflow.com/questions/16371777/how-to-detect-a-metal-using-magnetic-sensor-in-android-phone

--

--

Sathittham (Phoo) Sangthong
SS Blog

Hi! It's me Phoo! I’m a Software Developer 👨‍💻 , a Startup Entrepreneur 📱 and a Runner 🏃 . Currently, I’m a Co-Founder and CTO of a Startup name “Urbanice”.