Magnetometer adalah sensor yang mengukur intensitas medan magnet bumi untuk menentukan arah mata angin. Di perangkat seluler, ia berfungsi sebagai kompas digital, memberikan akurasi hingga 1–2 derajat dengan kalibrasi yang benar. Menurut Bosch Sensortec Application Note, 2024, MEMS-magnetometer modern hanya mengonsumsi 0,5–2 mA dan muat dalam casing 1,5×1,5×0,7 mm.
Poin Utama
Magnetometer di perangkat seluler adalah sensor medan magnet tiga sumbu yang didasarkan pada efek Hall. Sensor ini mengukur proyeksi vektor induksi magnetik pada sumbu X, Y, dan Z. Dengan kombinasi akselerometer, magnetometer memungkinkan penentuan azimuth — sudut antara arah utara dan sumbu telepon.
Di smartphone modern, MEMS-magnetometer digunakan berdasarkan efek magnetoresistif anisotropik (AMR) dan efek Hall. Sensor AMR (seri AKM dari Asahi Kasei Microdevices) memberikan sensitivitas 0,15 µT/LSB dan rentang ±1200 µT — cukup untuk mengukur medan bumi (25–65 µT).
| Parameter | Nilai |
|---|---|
| Teknologi | AMR / Efek Hall |
| Rentang | ±1200 — ±1300 µT |
| Konsumsi | 0,5–2 mA |
| Ukuran | 1,5×1,5×0,7 mm |
| Sensitivitas | 0,15 µT/LSB |
Tanpa kompas digital, aplikasi navigasi tidak dapat menentukan arah gerakan. Google Maps menggunakan magnetometer untuk menampilkan orientasi peta relatif terhadap arah pandangan pengguna. Saat sensor gagal, aplikasi hanya menunjukkan posisi di peta tanpa panah arah biru.
Efek Hall adalah fenomena fisika munculnya perbedaan potensial di tepi pelat konduktor di bawah pengaruh medan magnet. Di MEMS-magnetometer, digunakan struktur film tipis dari permalloy (NiFe), yang resistansinya berubah di bawah pengaruh medan magnet eksternal (efek AMR).
Masing-masing dari tiga saluran (X, Y, Z) terdiri dari empat magnetoresistor yang dihubungkan dalam jembatan Wheatstone. Medan magnet mengubah resistansi resistor sebesar 2–3%, yang diubah oleh penguat diferensial menjadi tegangan. ADC 16-bit internal mendigitalkan sinyal dengan frekuensi hingga 100 Hz.
Untuk mengukur komponen vertikal medan, digunakan konsentrator fluks magnetik terintegrasi (IMC — Integrated Magnetic Concentrator). Ini adalah struktur film tipis dari NiFe yang membelokkan medan horizontal ke bidang vertikal, memungkinkan satu jembatan AMR mengukur ketiga sumbu.
Magnetometer menentukan orientasi relatif terhadap medan magnet bumi (referensi absolut), sedangkan giroskop hanya mengukur perubahan sudut (data relatif). Giroskop memberikan data akurat pada interval pendek, tetapi mengakumulasi kesalahan drift. Magnetometer tidak mengalami drift, tetapi rentan terhadap interferensi magnetik.
Android menggabungkan data tiga sensor melalui SensorManager.getRotationMatrix. Magnetometer digunakan untuk koreksi drift giroskop pada interval panjang. Tanpa magnetometer, giroskop mengakumulasi kesalahan 10–20 derajat dalam 5 menit. Menurut Google ARCore (2024), algoritma fusion mencapai akurasi 1–3 derajat dengan keberadaan magnetometer.
val accelerometerReading = FloatArray(3)
val magnetometerReading = FloatArray(3)
val rotationMatrix = FloatArray(9)
val orientationAngles = FloatArray(3)
SensorManager.getRotationMatrix(
rotationMatrix, null,
accelerometerReading,
magnetometerReading
)
SensorManager.getOrientation(
rotationMatrix, orientationAngles
)
// orientationAngles[0] — azimuth dalam radian
Hard Iron — medan magnet konstan yang diciptakan oleh bahan feromagnetik di dalam telepon: magnet speaker, motor getar, bingkai logam casing. Distorsi Hard Iron muncul sebagai pergeseran konstan (bias) pada setiap sumbu. Soft Iron — perubahan arah medan karena bahan konduktif magnetik yang mendistorsi bentuk garis medan.
Prosedur kalibrasi standar magnetometer adalah memutar telepon dalam pola angka delapan (figure-8 pattern). Selama proses, sensor mencatat titik-titik dalam ruang tiga dimensi. Tanpa distorsi, titik-titik berada pada bola dengan radius 25–65 µT. Hard Iron menggeser pusat bola, Soft Iron mengubahnya menjadi ellipsoid. Algoritma kalibrasi menghitung parameter pergeseran dan penskalaan.
data class CalibrationParams(
val biasX: Float,
val biasY: Float,
val biasZ: Float,
val scaleX: Float,
val scaleY: Float,
val scaleZ: Float
)
fun applySoftIronCorrection(
raw: FloatArray, p: CalibrationParams
): FloatArray {
return floatArrayOf(
(raw[0] - p.biasX) * p.scaleX,
(raw[1] - p.biasY) * p.scaleY,
(raw[2] - p.biasZ) * p.scaleZ
)
}
Pengembang dapat mengimplementasikan kalibrasi magnetometer sendiri dengan mengumpulkan data selama pergerakan perangkat. Algoritma pemasangan ellipsoid (ellipsoid fitting) menemukan parameter Hard Iron dan Soft Iron dengan meminimalkan jumlah kuadrat deviasi dari bola. Pustaka Apache Commons Math menyediakan implementasi metode kuadrat terkecil non-linear (Levenberg-Marquardt) untuk tugas ini — akurasi setelah kalibrasi perangkat lunak mencapai 0,5 derajat.
Untuk meminimalkan Hard Iron, produsen menempatkan magnetometer di bagian atas telepon, jauh dari speaker dan motor getar. Insinyur Apple di iPhone 16 Pro Max (2024) menerapkan pelindung magnetometer dengan foil permalloy, mengurangi pengaruh speaker sebanyak 4 kali. Di Samsung Galaxy S24 Ultra, digunakan sirkuit kompensasi tambahan yang mengukur arus di speaker secara real-time untuk mengurangi medan induksi. Casing dengan pengikat magnetik (misalnya, di dudukan mobil) menciptakan distorsi kuat — setelah penggunaan, magnetometer dapat menunjukkan arah yang salah hingga kalibrasi ulang.
Android menyediakan dua sensor: TYPE_MAGNETIC_FIELD (data terkalibrasi dalam µT) dan TYPE_MAGNETIC_FIELD_UNCALIBRATED (data mentah dengan estimasi distorsi). Untuk aplikasi navigasi, disarankan menggunakan sensor terkalibrasi — sistem secara otomatis menerapkan kalibrasi bawaan berdasarkan gerakan angka delapan terakhir.
Penundaan SENSOR_DELAY_NORMAL (200 ms) cukup untuk kompas, SENSOR_DELAY_FASTEST (0 ms) — hanya untuk aplikasi penelitian khusus. Setelah menerima nilai, dapat dikonversi menjadi azimuth melalui getRotationMatrix + getOrientation. Penting untuk memeriksa akurasi sensor melalui event.accuracy — nilai SENSOR_STATUS_UNRELIABLE berarti perlunya kalibrasi.
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type == Sensor.TYPE_MAGNETIC_FIELD) {
val accuracy = event.accuracy
if (accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) {
showCalibrationHint()
return
}
System.arraycopy(event.values, 0,
magnetometerReading, 0, 3)
}
}
Magnetometer tidak hanya digunakan untuk kompas. Aplikasi AR, termasuk Pokemon GO, menggunakan magnetometer untuk menentukan orientasi kamera relatif terhadap dunia nyata. Tanpa magnetometer, ARCore beralih ke mode Screen Axis — orientasi hanya ditentukan oleh giroskop, yang mengurangi akurasi.
Dalam sistem navigasi mobil berbasis Android Auto, magnetometer digunakan untuk menentukan arah pergerakan saat kehilangan sinyal GPS di terowongan dan area perkotaan padat. Dalam kombinasi dengan data odometri dari roda kendaraan (diperoleh melalui OBD-II), magnetometer memungkinkan navigasi dilanjutkan hingga 5 menit tanpa GPS dengan akurasi posisi 10–20 meter. Menurut Google Maps Engineering Blog (2024), algoritma hibrida mengurangi persentase kehilangan rute di ngarai perkotaan sebesar 40%.
Aplikasi navigasi menggunakan magnetometer untuk menentukan azimuth gerakan — sudut antara arah utara dan arah saat ini pengguna. Di Google Maps, data magnetometer digabungkan dengan jejak GPS dan riwayat pergerakan untuk menampilkan panah arah biru. Saat kehilangan sinyal GPS (di terowongan, lorong bawah tanah), magnetometer tetap menjadi satu-satunya sumber informasi orientasi.
Generasi baru magnetometer 3-sumbu dengan ASIC terintegrasi (BMM350 dari Bosch, 2024) hanya mengonsumsi 0,35 mA dan mendukung frekuensi hingga 200 Hz. Pengembangan magnetometer kuantum dan pusat NV di berlian untuk perangkat seluler masih dalam tahap eksperimen laboratorium. Diperkirakan pada tahun 2028, akurasi magnetometer seluler akan mencapai 0,01 µT.
Pertanyaan yang Sering Diajukan
Gambar angka delapan dengan telepon di udara — ini adalah gerakan standar untuk kalibrasi kompas digital. Jika kompas masih menunjukkan tidak akurat, periksa casing: pengikat magnetik dan elemen logam menciptakan distorsi Hard Iron yang kuat.
Penyebab utama: interferensi magnetik dari speaker dan motor getar telepon, tidak ada kalibrasi setelah mengganti casing, pengaruh benda logam di sekitar. Di ruangan dengan konstruksi beton bertulang, medan magnet terdistorsi sangat kuat.
Ya, aplikasi detektor logam menggunakan magnetometer bawaan untuk mendeteksi anomali medan magnet. Namun, kedalaman deteksi tidak melebihi 10–20 cm, dan perangkat tidak membedakan jenis logam — ini lebih merupakan alat pendidikan.
TYPE_MAGNETIC_FIELD mengembalikan data setelah kalibrasi yang diterapkan oleh sistem. TYPE_MAGNETIC_FIELD_UNCALIBRATED memberikan nilai mentah ditambah estimasi pergeseran (bias), memungkinkan pengembang menerapkan kalibrasi sendiri.
Gunakan SensorManager.getRotationMatrix dengan data akselerometer dan magnetometer, kemudian getOrientation — elemen pertama array (azimuth) akan dalam radian. Untuk menampilkan kompas, konversikan ke derajat: Math.toDegrees(azimuth).
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga