En magnetometer är en sensor som mäter styrkan på jordens magnetfält för att bestämma väderstrecken. I mobila enheter fungerar den som en digital kompass och ger en noggrannhet på upp till 1–2 grader vid korrekt kalibrering. Enligt Bosch Sensortec Application Note, 2024 förbrukar moderna MEMS-magnetometrar endast 0,5–2 mA och ryms i ett hölje på 1,5×1,5×0,7 mm.
Huvudpunkter
En magnetometer i en mobil enhet är en treaxlig magnetfältsensor baserad på Hall-effekten. Den mäter projektionerna av den magnetiska induktionsvektorn på X-, Y- och Z-axlarna. I kombination med en accelerometer gör magnetometern det möjligt att bestämma azimuten — vinkeln mellan nordriktningen och telefonens axel.
I moderna smartphones används MEMS-magnetometrar baserade på anisotropisk magnetoresistiv effekt (AMR) och Hall-effekten. AMR-sensorer (AKM-serie från Asahi Kasei Microdevices) ger en känslighet på 0,15 µT/LSB och ett område på ±1200 µT — tillräckligt för att mäta jordens fält (25–65 µT).
| Parameter | Värde |
|---|---|
| Teknik | AMR / Hall-effekt |
| Område | ±1200 — ±1300 µT |
| Strömförbrukning | 0,5–2 mA |
| Storlek | 1,5×1,5×0,7 mm |
| Känslighet | 0,15 µT/LSB |
Utan digital kompass kan navigeringsappar inte bestämma rörelseriktningen. Google Maps använder magnetometern för att visa kartans orientering i förhållande till användarens blickriktning. Vid sensorfel visar appen endast positionen på kartan utan den blå riktningspilen.
Hall-effekten är ett fysikaliskt fenomen där en potentialskillnad uppstår vid kanterna av en ledande platta under påverkan av ett magnetfält. I MEMS-magnetometrar används tunnfilmstrukturer av permalloy (NiFe), vars resistans ändras under påverkan av ett externt magnetfält (AMR-effekt).
Var och en av de tre kanalerna (X, Y, Z) består av fyra magnetoresistorer kopplade i en Wheatstone-brygga. Magnetfältet ändrar resistansen hos resistorerna med 2–3%, vilket omvandlas till spänning av en differentialförstärkare. En inbyggd 16-bitars ADC digitaliserar signalen med en frekvens på upp till 100 Hz.
För mätning av den vertikala komponenten av fältet används en integrerad magnetisk flödeskoncentrator (IMC — Integrated Magnetic Concentrator). Detta är en tunnfilmstruktur av NiFe som avleder det horisontella fältet till vertikalplanet, vilket gör att en enda AMR-brygga kan mäta alla tre axlarna.
En magnetometer bestämmer orienteringen i förhållande till jordens magnetfält (absolut referens), medan ett gyroskop endast mäter vinkelförändringen (relativa data). Gyroskopet ger exakta data över korta intervall men ackumulerar driftfel. Magnetometern driftar inte men är känslig för magnetiska störningar.
Android kombinerar data från tre sensorer via SensorManager.getRotationMatrix. Magnetometern används för korrigering av gyroskopdrift över långa intervall. Utan magnetometer ackumulerar gyroskopet ett fel på 10–20 grader på 5 minuter. Enligt Google ARCore (2024) uppnår fusion-algoritmen en noggrannhet på 1–3 grader med närvaro av 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] — azimut i radianer
Hard Iron — konstant magnetfält skapat av ferromagnetiska material inuti telefonen: högtalarmagneter, vibrationsmotor, metallram. Hard Iron-störning visar sig som en konstant förskjutning (bias) på varje axel. Soft Iron — förändring av fältriktningen på grund av magnetiskt ledande material som distorderar fältlinjernas form.
Standardkalibreringsproceduren för magnetometern är att rotera telefonen i en åttas form (figure-8 pattern). Under processen registrerar sensorn punkter i det tredimensionella rummet. Utan störningar ligger punkterna på en sfär med en radie på 25–65 µT. Hard Iron flyttar sfärens centrum, Soft Iron förvandlar den till en ellipsoid. Kalibreringsalgoritmen beräknar parametrarna för förskjutning och skalning.
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
)
}
En utvecklare kan implementera egen kalibrering av magnetometern genom att samla in data under enhetens rörelse. Ellipsoid-anpassningsalgoritmen (ellipsoid fitting) hittar Hard Iron- och Soft Iron-parametrarna genom att minimera summan av kvadrerade avvikelser från sfären. Apache Commons Math-biblioteket tillhandahåller en implementering av den olinjära minsta-kvadratmetoden (Levenberg-Marquardt) för denna uppgift — noggrannheten efter programvarukalibrering når 0,5 grader.
För att minimera Hard Iron placerar tillverkare magnetometern i den övre delen av telefonen, långt från högtalaren och vibrationsmotorn. Apple-ingenjörer i iPhone 16 Pro Max (2024) använde avskärmning av magnetometern med permalloyfolie, vilket minskade högtalarens påverkan 4 gånger. I Samsung Galaxy S24 Ultra används en extra kompensationskrets som mäter strömmen i högtalaren i realtid för att subtrahera det inducerade fältet. Fodral med magnetiska fästen (till exempel i bilhållare) skapar kraftiga störningar — efter användning kan magnetometern visa fel riktning tills omkalibrering.
Android tillhandahåller två sensorer: TYPE_MAGNETIC_FIELD (kalibrerade data i µT) och TYPE_MAGNETIC_FIELD_UNCALIBRATED (rådata med uppskattning av störning). För navigeringsappar rekommenderas att använda den kalibrerade sensorn — systemet tillämpar automatiskt den inbyggda kalibreringen baserat på den senaste åttarörelsen.
Fördröjning SENSOR_DELAY_NORMAL (200 ms) är tillräcklig för kompass, SENSOR_DELAY_FASTEST (0 ms) — endast för speciella forskningsappar. Efter att ha mottagit värden kan de omvandlas till azimut via getRotationMatrix + getOrientation. Det är viktigt att kontrollera sensorns noggrannhet via event.accuracy — värdet SENSOR_STATUS_UNRELIABLE innebär behov av kalibrering.
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)
}
}
Magnetometern används inte bara för kompass. AR-appar, inklusive Pokemon GO, använder magnetometern för att bestämma kamerans orientering i förhållande till den verkliga världen. Utan magnetometer växlar ARCore till Screen Axis-läge — orienteringen bestäms endast av gyroskopet, vilket minskar noggrannheten.
I bilnavigeringssystem baserade på Android Auto används magnetometern för att bestämma färdriktningen vid förlust av GPS-signal i tunnlar och tät stadsbebyggelse. I kombination med odometridata från fordonets hjul (erhållna via OBD-II) gör magnetometern det möjligt att fortsätta navigeringen i upp till 5 minuter utan GPS med en positioneringsnoggrannhet på 10–20 meter. Enligt Google Maps Engineering Blog (2024) minskar den hybrida algoritmen andelen ruttförlust i stadskanyoner med 40%.
Navigeringsappar använder magnetometern för att bestämma azimut — vinkeln mellan nordriktningen och användarens aktuella kurs. I Google Maps kombineras magnetometerdata med GPS-spår och rörelsehistorik för att visa den blå riktningspilen. Vid förlust av GPS-signal (i tunnlar, underjordiska passager) förblir magnetometern den enda källan till orienteringsinformation.
Den nya generationen 3-axliga magnetometrar med integrerad ASIC (BMM350 från Bosch, 2024) förbrukar endast 0,35 mA och stöder frekvenser upp till 200 Hz. Utvecklingen av kvantmagnetometrar och NV-centra i diamant för mobila enheter har ännu inte lämnat laboratorieexperimentstadiet. Det förväntas att noggrannheten hos mobila magnetometrar kommer att nå 0,01 µT år 2028.
Vanliga frågor
Rita en åttas med telefonen i luften — detta är standardrörelsen för att kalibrera den digitala kompassen. Om kompassen fortfarande visar felaktigt, kontrollera fodralet: magnetiska fästen och metallelement skapar kraftiga Hard Iron-störningar.
Huvudorsaker: magnetiska störningar från telefonens högtalare och vibrationsmotor, utebliven kalibrering efter byte av fodral, påverkan av närliggande metallföremål. I rum med armerad betongkonstruktioner distorderas magnetfältet särskilt kraftigt.
Ja, metalldetektorappar använder den inbyggda magnetometern för att upptäcka anomalier i magnetfältet. Detektionsdjupet överstiger dock inte 10–20 cm och enheten särskiljer inte metalltyper — det är snarare ett pedagogiskt verktyg.
TYPE_MAGNETIC_FIELD returnerar data efter kalibrering som tillämpats av systemet. TYPE_MAGNETIC_FIELD_UNCALIBRATED ger råvärden plus en uppskattning av förskjutningen (bias), vilket gör att utvecklaren kan tillämpa sin egen kalibrering.
Använd SensorManager.getRotationMatrix med data från accelerometer och magnetometer, sedan getOrientation — det första elementet i arrayen (azimut) kommer att vara i radianer. För att visa kompassen, konvertera till grader: Math.toDegrees(azimuth).
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också