Ang magnetometer ay isang sensor na sumusukat sa lakas ng magnetic field ng Earth upang matukoy ang mga direksyon ng compass. Sa mga mobile device, ito ay gumagana bilang isang digital compass, na nagbibigay ng katumpakan hanggang 1–2 degrees na may tamang pagkakalibrate. Ayon sa Bosch Sensortec Application Note, 2024, ang mga modernong MEMS-magnetometer ay kumokonsumo lamang ng 0.5–2 mA at kasya sa isang casing na 1.5×1.5×0.7 mm.
Mga Pangunahing Punto
Ang magnetometer sa isang mobile device ay isang three-axis magnetic field sensor batay sa Hall effect. Sinusukat nito ang mga proyeksyon ng magnetic induction vector sa X, Y, at Z axes. Kasama ng accelerometer, pinapayagan ng magnetometer ang pagtukoy ng azimuth — ang anggulo sa pagitan ng direksyon ng hilaga at axis ng telepono.
Sa mga modernong smartphone, ginagamit ang MEMS-magnetometer batay sa anisotropic magnetoresistive effect (AMR) at Hall effect. Ang mga AMR sensor (AKM series mula sa Asahi Kasei Microdevices) ay nagbibigay ng sensitivity na 0.15 µT/LSB at saklaw na ±1200 µT — sapat na para sa pagsukat ng field ng Earth (25–65 µT).
| Parameter | Halaga |
|---|---|
| Teknolohiya | AMR / Hall effect |
| Saklaw | ±1200 — ±1300 µT |
| Konsumo | 0.5–2 mA |
| Sukat | 1.5×1.5×0.7 mm |
| Sensitivity | 0.15 µT/LSB |
Kung wala ang digital compass, hindi matutukoy ng mga navigation app ang direksyon ng paggalaw. Ginagamit ng Google Maps ang magnetometer upang ipakita ang oryentasyon ng mapa kaugnay sa direksyon ng tingin ng user. Kapag nabigo ang sensor, ang app ay nagpapakita lamang ng posisyon sa mapa na walang asul na arrow ng direksyon.
Ang Hall effect ay isang pisikal na penomenon ng paglitaw ng potensyal na pagkakaiba sa mga gilid ng isang conducting plate sa ilalim ng impluwensya ng magnetic field. Sa MEMS-magnetometer, ginagamit ang mga thin-film structure ng permalloy (NiFe), na ang resistensya ay nagbabago sa ilalim ng impluwensya ng panlabas na magnetic field (AMR effect).
Ang bawat isa sa tatlong channel (X, Y, Z) ay binubuo ng apat na magnetoresistor na konektado sa Wheatstone bridge. Binabago ng magnetic field ang resistensya ng mga resistor ng 2–3%, na ginagawang boltahe ng isang differential amplifier. Isang built-in na 16-bit ADC ang nagdi-digitize ng signal na may frequency hanggang 100 Hz.
Para sa pagsukat ng vertical component ng field, ginagamit ang integrated magnetic flux concentrator (IMC — Integrated Magnetic Concentrator). Ito ay isang thin-film structure ng NiFe na nagpapalihis ng horizontal field patungo sa vertical plane, na nagpapahintulot sa isang AMR bridge na sukatin ang lahat ng tatlong axis.
Ang magnetometer ay tumutukoy ng oryentasyon kaugnay sa magnetic field ng Earth (absolute reference), habang ang gyroscope ay sumusukat lamang ng pagbabago ng anggulo (relative data). Ang gyroscope ay nagbibigay ng tumpak na data sa maikling interval, ngunit nag-iipon ng drift error. Ang magnetometer ay hindi nagda-drift, ngunit madaling kapitan ng magnetic interference.
Pinagsasama ng Android ang data ng tatlong sensor sa pamamagitan ng SensorManager.getRotationMatrix. Ginagamit ang magnetometer para sa pagwawasto ng gyroscope drift sa mahabang interval. Kung walang magnetometer, ang gyroscope ay nag-iipon ng error na 10–20 degrees sa loob ng 5 minuto. Ayon sa Google ARCore (2024), ang fusion algorithm ay umaabot sa katumpakan na 1–3 degrees na may 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 sa radians
Hard Iron — patuloy na magnetic field na nilikha ng ferromagnetic na materyales sa loob ng telepono: mga magnet ng speaker, vibration motor, metal frame ng casing. Ang Hard Iron distortion ay lumilitaw bilang patuloy na paglilipat (bias) sa bawat axis. Soft Iron — pagbabago ng direksyon ng field dahil sa magnetically conductive na materyales na sumisira sa hugis ng mga field lines.
Ang karaniwang pamamaraan ng pagkakalibrate ng magnetometer ay ang pag-ikot ng telepono sa pattern ng figure-8. Sa prosesong ito, ang sensor ay nagtatala ng mga punto sa tatlong-dimensional na espasyo. Kung walang distortion, ang mga punto ay nasa isang sphere na may radius na 25–65 µT. Ang Hard Iron ay naglilipat sa gitna ng sphere, ang Soft Iron ay ginagawa itong ellipsoid. Ang algorithm ng pagkakalibrate ay kinakalkula ang mga parameter ng paglilipat at pag-scale.
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
)
}
Ang developer ay maaaring magpatupad ng sariling pagkakalibrate ng magnetometer sa pamamagitan ng pagkolekta ng data habang gumagalaw ang device. Ang algorithm ng ellipsoid fitting ay hinahanap ang mga parameter ng Hard Iron at Soft Iron sa pamamagitan ng pag-minimize ng kabuuan ng mga kwadrado ng mga paglihis mula sa sphere. Ang Apache Commons Math library ay nagbibigay ng implementation ng non-linear least squares method (Levenberg-Marquardt) para sa gawaing ito — ang katumpakan pagkatapos ng software calibration ay umaabot sa 0.5 degrees.
Para sa pag-minimize ng Hard Iron, inilalagay ng mga manufacturer ang magnetometer sa itaas na bahagi ng telepono, malayo sa speaker at vibration motor. Ang mga inhinyero ng Apple sa iPhone 16 Pro Max (2024) ay nag-apply ng shielding ng magnetometer gamit ang permalloy foil, na nagbawas ng impluwensya ng speaker ng 4 na beses. Sa Samsung Galaxy S24 Ultra, ginagamit ang karagdagang compensation circuit na sumusukat ng kasalukuyang sa speaker sa real-time upang ibawas ang induced field. Ang mga casing na may magnetic mounts (halimbawa, sa mga car holder) ay lumilikha ng malakas na distortion — pagkatapos gamitin, ang magnetometer ay maaaring magpakita ng maling direksyon hanggang sa muling pagkakalibrate.
Ang Android ay nagbibigay ng dalawang sensor: TYPE_MAGNETIC_FIELD (calibrated data sa µT) at TYPE_MAGNETIC_FIELD_UNCALIBRATED (raw data na may estimate ng distortion). Para sa mga navigation app, inirerekomenda ang paggamit ng calibrated sensor — awtomatikong inilalapat ng system ang built-in na pagkakalibrate batay sa huling figure-8 na paggalaw.
Ang pagkaantala ng SENSOR_DELAY_NORMAL (200 ms) ay sapat para sa compass, ang SENSOR_DELAY_FASTEST (0 ms) — para lamang sa mga espesyal na research app. Pagkatanggap ng mga halaga, maaari itong i-convert sa azimuth sa pamamagitan ng getRotationMatrix + getOrientation. Mahalagang suriin ang katumpakan ng sensor sa pamamagitan ng event.accuracy — ang halagang SENSOR_STATUS_UNRELIABLE ay nangangahulugang kailangan ng pagkakalibrate.
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)
}
}
Ang magnetometer ay hindi lamang ginagamit para sa compass. Ang mga AR app, kabilang ang Pokemon GO, ay gumagamit ng magnetometer para sa pagtukoy ng oryentasyon ng camera kaugnay sa totoong mundo. Kapag walang magnetometer, ang ARCore ay lumilipat sa Screen Axis mode — ang oryentasyon ay tinutukoy lamang ng gyroscope, na nagbabawas ng katumpakan.
Sa mga sistema ng nabigasyong pang-kotse batay sa Android Auto, ang magnetometer ay ginagamit para sa pagtukoy ng direksyon ng paggalaw kapag nawala ang GPS signal sa mga tunnel at siksik na urban na lugar. Kasama ng odometry data mula sa mga gulong ng sasakyan (nakukuha sa pamamagitan ng OBD-II), pinapayagan ng magnetometer ang pagpapatuloy ng nabigasyon hanggang 5 minuto nang walang GPS na may katumpakan ng positioning na 10–20 metro. Ayon sa Google Maps Engineering Blog (2024), ang hybrid algorithm ay nagbabawas ng porsyento ng pagkawala ng ruta sa urban canyons ng 40%.
Ang mga navigation app ay gumagamit ng magnetometer para sa pagtukoy ng azimuth ng paggalaw — ang anggulo sa pagitan ng direksyon ng hilaga at kasalukuyang direksyon ng user. Sa Google Maps, ang data ng magnetometer ay pinagsama sa GPS track at kasaysayan ng paggalaw upang ipakita ang asul na arrow ng direksyon. Kapag nawala ang GPS signal (sa mga tunnel, underground passage), ang magnetometer ay nananatiling tanging mapagkukunan ng impormasyon tungkol sa oryentasyon.
Ang bagong henerasyon ng 3-axis magnetometer na may integrated ASIC (BMM350 mula sa Bosch, 2024) ay kumokonsumo lamang ng 0.35 mA at sumusuporta sa frequency hanggang 200 Hz. Ang pag-unlad ng quantum magnetometer at NV centers sa brilyante para sa mga mobile device ay hindi pa lumalabas sa yugto ng laboratory experiments. Inaasahan na sa 2028, ang katumpakan ng mobile magnetometer ay aabot sa 0.01 µT.
Mga Madalas Itanong
Gumuhit ng figure-8 gamit ang telepono sa hangin — ito ang karaniwang galaw para sa pagkakalibrate ng digital compass. Kung mali pa rin ang ipinapakita ng compass, suriin ang casing: ang magnetic mounts at metal na elemento ay lumilikha ng malakas na Hard Iron distortion.
Mga pangunahing dahilan: magnetic interference mula sa mga speaker at vibration motor ng telepono, kawalan ng pagkakalibrate pagkatapos magpalit ng casing, impluwensya ng mga metal na bagay sa paligid. Sa mga silid na may reinforced concrete structures, ang magnetic field ay lalong malakas na na-distort.
Oo, ang mga metal detector app ay gumagamit ng built-in na magnetometer para sa pagtuklas ng mga anomalya ng magnetic field. Gayunpaman, ang lalim ng pagtuklas ay hindi lalampas sa 10–20 cm, at hindi nakikilala ng device ang mga uri ng metal — ito ay higit na isang pang-edukasyon na kasangkapan.
Ang TYPE_MAGNETIC_FIELD ay nagbabalik ng data pagkatapos ng pagkakalibrate na inilapat ng system. Ang TYPE_MAGNETIC_FIELD_UNCALIBRATED ay nagbibigay ng raw values kasama ang estimate ng bias, na nagpapahintulot sa developer na maglapat ng sariling pagkakalibrate.
Gamitin ang SensorManager.getRotationMatrix kasama ang data ng accelerometer at magnetometer, pagkatapos getOrientation — ang unang elemento ng array (azimuth) ay nasa radians. Para sa pagpapakita ng compass, i-convert sa degrees: Math.toDegrees(azimuth).
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din