A magnetométer egy érzékelő, amely a Föld mágneses terének erősségét méri a világtájak meghatározásához. Mobil eszközökben digitális iránytűként működik, megfelelő kalibrálással 1–2 fokos pontosságot biztosítva. A Bosch Sensortec Application Note, 2024 szerint a modern MEMS-magnetométerek mindössze 0,5–2 mA-t fogyasztanak és elférnek egy 1,5×1,5×0,7 mm-es házban.
Főbb pontok
A magnetométer egy mobil eszközben egy háromtengelyű mágneses tér érzékelő, amely a Hall-effektuson alapul. Méri a mágneses indukciós vektor vetületeit az X, Y és Z tengelyeken. Gyorsulásmérővel kombinálva a magnetométer lehetővé teszi az azimut — az északi irány és a telefon tengelye közötti szög — meghatározását.
A modern okostelefonokban anizotróp magnetorezisztív hatáson (AMR) és Hall-effektuson alapuló MEMS-magnetométereket használnak. Az AMR-érzékelők (AKM sorozat az Asahi Kasei Microdevices-től) 0,15 µT/LSB érzékenységet és ±1200 µT tartományt biztosítanak — ez elegendő a Föld terének (25–65 µT) méréséhez.
| Paraméter | Érték |
|---|---|
| Technológia | AMR / Hall-effektus |
| Tartomány | ±1200 — ±1300 µT |
| Fogyasztás | 0,5–2 mA |
| Méret | 1,5×1,5×0,7 mm |
| Érzékenység | 0,15 µT/LSB |
Digitális iránytű nélkül a navigációs alkalmazások nem tudják meghatározni a mozgás irányát. A Google Maps a magnetométert használja a térkép tájolásának megjelenítéséhez a felhasználó nézési irányához képest. Az érzékelő meghibásodása esetén az alkalmazás csak a pozíciót mutatja a térképen, kék iránynyíl nélkül.
A Hall-effektus egy fizikai jelenség, amikor potenciálkülönbség keletkezik egy vezető lemez szélein mágneses tér hatására. A MEMS-magnetométerekben permalloy (NiFe) vékonyréteg-szerkezeteket használnak, amelyek ellenállása külső mágneses tér hatására változik (AMR-effektus).
A három csatorna (X, Y, Z) mindegyike négy magnetorezisztorból áll, amelyek Wheatstone-hídba vannak kötve. A mágneses tér 2–3%-kal változtatja meg az ellenállások értékét, amit egy differenciálerősítő feszültséggé alakít. Egy beépített 16 bites ADC digitalizálja a jelet akár 100 Hz-es frekvenciával.
A tér vertikális összetevőjének méréséhez integrált mágneses fluxus koncentrátort (IMC — Integrated Magnetic Concentrator) használnak. Ez egy NiFe vékonyréteg-szerkezet, amely a vízszintes teret függőleges síkba tereli, lehetővé téve egyetlen AMR-híd számára mindhárom tengely mérését.
A magnetométer a Föld mágneses teréhez viszonyítva határozza meg a tájolást (abszolút referencia), míg a giroszkóp csak a szögváltozást méri (relatív adatok). A giroszkóp rövid időközönként pontos adatokat ad, de drift hibát halmoz fel. A magnetométer nem driftel, de érzékeny a mágneses interferenciára.
Az Android három érzékelő adatait a SensorManager.getRotationMatrix segítségével egyesíti. A magnetométert a giroszkóp driftjének korrigálására használják hosszú időközönként. Magnetométer nélkül a giroszkóp 5 perc alatt 10–20 fokos hibát halmoz fel. A Google ARCore (2024) szerint a fusion algoritmus magnetométer jelenlétében 1–3 fokos pontosságot ér el.
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] — azimut radiánban
Hard Iron — a telefon belsejében lévő ferromágneses anyagok által létrehozott állandó mágneses tér: hangszóró mágnesek, vibrációs motor, fém keret. A Hard Iron torzítás állandó eltolódásként (bias) jelenik meg minden tengelyen. Soft Iron — a térirány megváltozása mágnesesen vezető anyagok miatt, amelyek torzítják a térvonalak alakját.
A magnetométer szabványos kalibrációs eljárása a telefon nyolcas alakban történő forgatása (figure-8 pattern). A folyamat során az érzékelő pontokat rögzít a háromdimenziós térben. Torzítás nélkül a pontok egy 25–65 µT sugarú gömbön helyezkednek el. A Hard Iron eltolja a gömb középpontját, a Soft Iron ellipszoiddé alakítja. A kalibrációs algoritmus kiszámítja az eltolási és skálázási paramétereket.
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
)
}
A fejlesztő saját magnetométer kalibrációt implementálhat az eszköz mozgása során gyűjtött adatokkal. Az ellipszoid illesztési (ellipsoid fitting) algoritmus megtalálja a Hard Iron és Soft Iron paramétereket a gömbtől való eltérések négyzetösszegének minimalizálásával. Az Apache Commons Math könyvtár biztosítja a nemlineáris legkisebb négyzetek módszerének (Levenberg-Marquardt) implementációját erre a feladatra — a szoftveres kalibráció utáni pontosság eléri a 0,5 fokot.
A Hard Iron minimalizálásához a gyártók a magnetométert a telefon felső részébe helyezik, távol a hangszórótól és a vibrációs motortól. Az Apple mérnökei az iPhone 16 Pro Max-ben (2024) a magnetométer permalloy fóliával történő árnyékolását alkalmazták, ami 4-szer csökkentette a hangszóró hatását. A Samsung Galaxy S24 Ultra-ban egy kiegészítő kompenzációs áramkört használnak, amely valós időben méri a hangszóró áramát az indukált tér kivonásához. A mágneses rögzítős tokok (pl. autós tartókban) erős torzításokat okoznak — használat után a magnetométer az újrakalibrálásig rossz irányt mutathat.
Az Android két érzékelőt biztosít: TYPE_MAGNETIC_FIELD (kalibrált adatok µT-ban) és TYPE_MAGNETIC_FIELD_UNCALIBRATED (nyers adatok torzításbecsléssel). Navigációs alkalmazásokhoz a kalibrált érzékelő használata javasolt — a rendszer automatikusan alkalmazza a beépített kalibrációt az utolsó nyolcas mozgás alapján.
A SENSOR_DELAY_NORMAL késleltetés (200 ms) elegendő az iránytűhöz, a SENSOR_DELAY_FASTEST (0 ms) — csak speciális kutatási alkalmazásokhoz. Az értékek beérkezése után azok átszámíthatók azimuttá a getRotationMatrix + getOrientation segítségével. Fontos ellenőrizni az érzékelő pontosságát az event.accuracy segítségével — a SENSOR_STATUS_UNRELIABLE érték kalibrálás szükségességét jelzi.
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)
}
}
A magnetométert nem csak iránytűhöz használják. Az AR alkalmazások, beleértve a Pokemon GO-t, a magnetométert használják a kamera valós világhoz viszonyított tájolásának meghatározásához. Magnetométer hiányában az ARCore Screen Axis módba vált — a tájolást csak a giroszkóp határozza meg, ami csökkenti a pontosságot.
Az Android Auto-alapú autós navigációs rendszerekben a magnetométert a mozgás irányának meghatározására használják GPS-jel elvesztésekor alagutakban és sűrű városi beépítésben. A jármű kerekeiről származó odometriai adatokkal (OBD-II-n keresztül) kombinálva a magnetométer lehetővé teszi a navigáció folytatását akár 5 percig GPS nélkül, 10–20 méteres pozícionálási pontossággal. A Google Maps Engineering Blog (2024) szerint a hibrid algoritmus 40%-kal csökkenti az útvonalvesztés arányát városi kanyonokban.
A navigációs alkalmazások a magnetométert használják a mozgás azimutjának — az északi irány és a felhasználó aktuális iránya közötti szög — meghatározásához. A Google Maps-ben a magnetométer adatai GPS-trackkel és mozgástörténettel kombinálódnak a kék iránynyíl megjelenítéséhez. GPS-jel elvesztésekor (alagutakban, földalatti átjárókban) a magnetométer marad az egyetlen tájékozódási információforrás.
Az integrált ASIC-kel ellátott új generációs 3 tengelyes magnetométerek (BMM350 a Bosch-tól, 2024) mindössze 0,35 mA-t fogyasztanak és akár 200 Hz-es frekvenciát támogatnak. A kvantum-magnetométerek és a gyémánt NV-centrumok fejlesztése mobil eszközökhöz még nem hagyta el a laboratóriumi kísérletek fázisát. Várhatóan 2028-ra a mobil magnetométerek pontossága eléri a 0,01 µT-t.
Gyakran Ismételt Kérdések
Rajzoljon egy nyolcast a telefonnal a levegőben — ez a szabványos mozdulat a digitális iránytű kalibrálásához. Ha az iránytű továbbra is pontatlanul mutat, ellenőrizze a tokot: a mágneses rögzítők és fém elemek erős Hard Iron torzítást okoznak.
Fő okok: mágneses interferencia a telefon hangszóróiból és vibrációs motorjából, kalibrálás hiánya tokcsere után, közeli fémtárgyak hatása. Vasbeton szerkezetű helyiségekben a mágneses tér különösen erősen torzul.
Igen, a fémdetektor alkalmazások a beépített magnetométert használják a mágneses tér anomáliáinak észlelésére. Az észlelési mélység azonban nem haladja meg a 10–20 cm-t, és a készülék nem különbözteti meg a fémtípusokat — ez inkább oktatási eszköz.
A TYPE_MAGNETIC_FIELD a rendszer által alkalmazott kalibrálás utáni adatokat ad vissza. A TYPE_MAGNETIC_FIELD_UNCALIBRATED nyers értékeket plusz eltolásbecslést (bias) ad, lehetővé téve a fejlesztő számára saját kalibrálás alkalmazását.
Használja a SensorManager.getRotationMatrix függvényt a gyorsulásmérő és magnetométer adataival, majd a getOrientation-t — a tömb első eleme (azimut) radiánban lesz. Az iránytű megjelenítéséhez konvertálja fokokká: Math.toDegrees(azimuth).
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is