Een magnetometer is een sensor die de sterkte van het aardmagnetisch veld meet om de windstreken te bepalen. In mobiele apparaten werkt het als een digitaal kompas en biedt het een nauwkeurigheid tot 1–2 graden bij correcte kalibratie. Volgens Bosch Sensortec Application Note, 2024 verbruiken moderne MEMS-magnetometers slechts 0,5–2 mA en passen ze in een behuizing van 1,5×1,5×0,7 mm.
Belangrijkste punten
Een magnetometer in een mobiel apparaat is een drieassige magnetische veldsensor gebaseerd op het Hall-effect. Het meet de projecties van de magnetische inductievector op de X-, Y- en Z-assen. In combinatie met een accelerometer maakt de magnetometer het mogelijk om het azimut te bepalen — de hoek tussen de noordrichting en de as van de telefoon.
In moderne smartphones worden MEMS-magnetometers gebruikt op basis van het anisotrope magnetoresistieve effect (AMR) en het Hall-effect. AMR-sensoren (AKM-serie van Asahi Kasei Microdevices) bieden een gevoeligheid van 0,15 µT/LSB en een bereik van ±1200 µT — voldoende voor het meten van het aardveld (25–65 µT).
| Parameter | Waarde |
|---|---|
| Technologie | AMR / Hall-effect |
| Bereik | ±1200 — ±1300 µT |
| Stroomverbruik | 0,5–2 mA |
| Afmeting | 1,5×1,5×0,7 mm |
| Gevoeligheid | 0,15 µT/LSB |
Zonder digitaal kompas kunnen navigatie-apps de bewegingsrichting niet bepalen. Google Maps gebruikt de magnetometer om de oriëntatie van de kaart ten opzichte van de kijkrichting van de gebruiker weer te geven. Bij sensoruitval toont de app alleen de positie op de kaart zonder de blauwe richtingspijl.
Het Hall-effect is een natuurkundig verschijnsel waarbij een potentiaalverschil ontstaat aan de randen van een geleidende plaat onder invloed van een magnetisch veld. In MEMS-magnetometers worden dunne-filmstructuren van permalloy (NiFe) gebruikt, waarvan de weerstand verandert onder invloed van een extern magnetisch veld (AMR-effect).
Elk van de drie kanalen (X, Y, Z) bestaat uit vier magnetoweerstanden die zijn aangesloten in een Wheatstone-brug. Het magnetisch veld verandert de weerstand van de weerstanden met 2–3%, wat door een differentiaalversterker wordt omgezet in spanning. Een ingebouwde 16-bits ADC digitaliseert het signaal met een frequentie tot 100 Hz.
Voor het meten van de verticale component van het veld wordt een geïntegreerde magnetische fluxconcentrator (IMC — Integrated Magnetic Concentrator) gebruikt. Dit is een dunne-filmstructuur van NiFe die het horizontale veld naar het verticale vlak afbuigt, waardoor een enkele AMR-brug alle drie de assen kan meten.
Een magnetometer bepaalt de oriëntatie ten opzichte van het aardmagnetisch veld (absolute referentie), terwijl een gyroscoop alleen de hoekverandering meet (relatieve gegevens). De gyroscoop geeft nauwkeurige gegevens op korte intervallen, maar hoopt fouten door drift op. De magnetometer drif niet, maar is gevoelig voor magnetische interferentie.
Android combineert gegevens van drie sensoren via SensorManager.getRotationMatrix. De magnetometer wordt gebruikt voor correctie van gyroscoopdrift op lange intervallen. Zonder magnetometer hoopt de gyroscoop in 5 minuten een fout van 10–20 graden op. Volgens Google ARCore (2024) bereikt het fusion-algoritme een nauwkeurigheid van 1–3 graden met een 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 in radialen
Hard Iron — constant magnetisch veld gecreëerd door ferromagnetische materialen in de telefoon: luidsprekermagneten, trilmotor, metalen frame van de behuizing. Hard Iron-verstoring manifesteert zich als een constante verschuiving (bias) op elke as. Soft Iron — verandering van de veldrichting door magnetisch geleidende materialen die de vorm van de veldlijnen verstoren.
De standaard kalibratieprocedure voor een magnetometer is het draaien van de telefoon in een achtvorm (figure-8 pattern). Tijdens dit proces registreert de sensor punten in de driedimensionale ruimte. Zonder verstoringen liggen de punten op een bol met een straal van 25–65 µT. Hard Iron verplaatst het middelpunt van de bol, Soft Iron verandert het in een ellipsoïde. Het kalibratie-algoritme berekent de verschuivings- en schaalparameters.
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
)
}
Een ontwikkelaar kan zijn eigen magnetometerkalibratie implementeren door gegevens te verzamelen tijdens beweging van het apparaat. Het ellipsoïde-fitting-algoritme (ellipsoid fitting) vindt de Hard Iron- en Soft Iron-parameters door de som van kwadraten van afwijkingen van de bol te minimaliseren. De Apache Commons Math-bibliotheek biedt een implementatie van de niet-lineaire kleinste-kwadratenmethode (Levenberg-Marquardt) voor deze taak — de nauwkeurigheid na softwarematige kalibratie bereikt 0,5 graad.
Om Hard Iron te minimaliseren plaatsen fabrikanten de magnetometer in het bovenste deel van de telefoon, ver weg van de luidspreker en trilmotor. Apple-ingenieurs pasten in de iPhone 16 Pro Max (2024) afscherming van de magnetometer met permalloy-folie toe, waardoor de invloed van de luidspreker 4 keer werd verminderd. In de Samsung Galaxy S24 Ultra wordt een extra compensatiecircuit gebruikt dat de stroom in de luidspreker in realtime meet om het geïnduceerde veld weg te trekken. Hoesjes met magnetische bevestigingen (bijvoorbeeld in autohouders) creëren sterke verstoringen — na gebruik kan de magnetometer een verkeerde richting aangeven tot herkalibratie.
Android biedt twee sensoren: TYPE_MAGNETIC_FIELD (gekalibreerde gegevens in µT) en TYPE_MAGNETIC_FIELD_UNCALIBRATED (ruwe gegevens met schatting van verstoring). Voor navigatie-apps wordt het gebruik van de gekalibreerde sensor aanbevolen — het systeem past automatisch de ingebouwde kalibratie toe op basis van de laatste achtbeweging.
Vertraging SENSOR_DELAY_NORMAL (200 ms) is voldoende voor een kompas, SENSOR_DELAY_FASTEST (0 ms) — alleen voor speciale onderzoeksapps. Na het ontvangen van waarden kunnen deze worden omgezet in azimut via getRotationMatrix + getOrientation. Het is belangrijk om de nauwkeurigheid van de sensor te controleren via event.accuracy — de waarde SENSOR_STATUS_UNRELIABLE betekent dat kalibratie nodig is.
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)
}
}
De magnetometer wordt niet alleen voor het kompas gebruikt. AR-apps, waaronder Pokemon GO, gebruiken de magnetometer om de oriëntatie van de camera ten opzichte van de echte wereld te bepalen. Bij afwezigheid van een magnetometer schakelt ARCore over naar de Screen Axis-modus — de oriëntatie wordt alleen door de gyroscoop bepaald, wat de nauwkeurigheid vermindert.
In autonavigatiesystemen op basis van Android Auto wordt de magnetometer gebruikt om de rijrichting te bepalen bij verlies van GPS-signaal in tunnels en dichte stedelijke bebouwing. In combinatie met odometriegegevens van de wielen van het voertuig (verkregen via OBD-II) maakt de magnetometer het mogelijk om tot 5 minuten zonder GPS te navigeren met een positioneringsnauwkeurigheid van 10–20 meter. Volgens Google Maps Engineering Blog (2024) vermindert het hybride algoritme het percentage routerverlies in stedelijke canyons met 40%.
Navigatie-apps gebruiken de magnetometer voor het bepalen van het azimut — de hoek tussen de noordrichting en de huidige koers van de gebruiker. In Google Maps worden magnetometergegevens gecombineerd met GPS-track en bewegingsgeschiedenis om de blauwe richtingspijl weer te geven. Bij verlies van GPS-signaal (in tunnels, onderdoorgangen) blijft de magnetometer de enige bron van oriëntatie-informatie.
De nieuwe generatie 3-assige magnetometers met geïntegreerde ASIC (BMM350 van Bosch, 2024) verbruikt slechts 0,35 mA en ondersteunt frequenties tot 200 Hz. De ontwikkeling van kwantum-magnetometers en NV-centra in diamant voor mobiele apparaten is nog niet uit de laboratoriumfase gekomen. Naar verwachting zal de nauwkeurigheid van mobiele magnetometers in 2028 0,01 µT bereiken.
Veelgestelde vragen
Teken een acht met de telefoon in de lucht — dit is de standaard beweging voor het kalibreren van een digitaal kompas. Als het kompas nog steeds onjuist aangeeft, controleer dan het hoesje: magnetische bevestigingen en metalen elementen creëren sterke Hard Iron-verstoringen.
Belangrijkste oorzaken: magnetische interferentie van de luidsprekers en trilmotor van de telefoon, geen kalibratie na het verwisselen van het hoesje, invloed van metalen voorwerpen in de buurt. In ruimtes met gewapend betonconstructies wordt het magnetisch veld bijzonder sterk verstoord.
Ja, metaaldetector-apps gebruiken de ingebouwde magnetometer voor detectie van anomalieën in het magnetisch veld. De detectiediepte is echter niet meer dan 10–20 cm en het apparaat maakt geen onderscheid tussen metaalsoorten — het is meer een educatief hulpmiddel.
TYPE_MAGNETIC_FIELD retourneert gegevens na kalibratie door het systeem. TYPE_MAGNETIC_FIELD_UNCALIBRATED geeft ruwe waarden plus een schatting van de verschuiving (bias), waardoor de ontwikkelaar zijn eigen kalibratie kan toepassen.
Gebruik SensorManager.getRotationMatrix met accelerometer- en magnetometergegevens, vervolgens getOrientation — het eerste element van de array (azimut) is in radialen. Voor weergave van het kompas converteert u naar graden: Math.toDegrees(azimuth).
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook