Compass (kompas) in een smartphone is een digitale sensor op basis van een magnetometer die de richting naar de magnetische polen van de aarde bepaalt. De technologie stelt navigatie-, kaart- en augmented reality-toepassingen in staat om de oriëntatie van het apparaat in de ruimte nauwkeurig te bepalen. Volgens gegevens van STMicroelectronics, 2025 bieden moderne MEMS-magnetometers nauwkeurigheid bij het bepalen van de richting tot 1–2 graden.
Belangrijkste punten
Digitaal kompas (compass) in een smartphone is een sensor op basis van een magnetometer die de sterkte van het magnetisch veld van de aarde meet en het azimut (hoek ten opzichte van het magnetisch noorden) bepaalt. In tegenstelling tot een mechanisch kompas maakt een digitaal kompas gebruik van micro-elektromechanische systemen (MEMS) om het magnetisch veld te registreren. De magnetometer meet het veld langs drie assen, waardoor de richting bij elke helling van de smartphone correct kan worden bepaald.
Een moderne MEMS-magnetometer is een microchip van 2×2×1 mm, geïntegreerd in de behuizing van de smartphone samen met de accelerometer en gyroscoop (als onderdeel van een 9-assige IMU). De sensor meet niet alleen de richting, maar ook de intensiteit van het magnetisch veld van de aarde (25–65 µT afhankelijk van de breedtegraad). De aanwezigheid van metalen voorwerpen en parasitaire magnetische velden van luidsprekers, de trilmotor en de camera veroorzaakt vervormingen, daarom is softwarematige correctie van de metingen nodig voor nauwkeurige werking.
De eerste digitale kompassen in mobiele telefoons verschenen in 2009 met de introductie van de iPhone 3GS — de eerste smartphone met een ingebouwde magnetometer. Tegenwoordig wordt de magnetometer in de overgrote meerderheid van smartphones geïnstalleerd, inclusief budgetmodellen. Volgens Yole Group overschrijdt de markt voor MEMS-magnetometers voor mobiele apparaten 1,5 miljard eenheden per jaar, wat de vraag naar deze technologie bevestigt.
De basis van de MEMS-magnetometer wordt gevormd door een gevoelig element dat zijn elektrische kenmerken verandert onder invloed van een extern magnetisch veld. In moderne smartphones wordt het Hall-effect of het magnetoresistieve effect (AMR — Anisotropic Magneto-Resistance) gebruikt. Het principe is gebaseerd op het feit dat een stroomvoerend materiaal zijn weerstand verandert onder invloed van een magnetisch veld, en door de spanningsverandering wordt de vector van het magnetisch veld berekend.
Sensoren op basis van het Hall-effect registreren de spanningsverandering aan de randen van een halfgeleiderplaat, die ontstaat onder invloed van de Lorentzkracht op bewegende ladingen. Magnetoresistieve sensoren (AMR) gebruiken een laag permalloy (NiFe), waarvan de weerstand afhangt van de richting van het magnetisch veld. AMR-sensoren bieden een kleinere afmeting en een hogere gevoeligheid in vergelijking met Hall-sensoren, daarom domineren ze in moderne smartphones.
| Type | Gevoeligheid | Energieverbruik | Afmeting |
|---|---|---|---|
| Hall | Gemiddeld | Laag | Gemiddeld |
| AMR | Hoog | Laag | Klein |
| GMR | Zeer hoog | Gemiddeld | Klein |
Gegevens van de magnetometer worden gecombineerd met metingen van de accelerometer voor correctie van de helling en bepaling van de noordrichting in het horizontale vlak. Het sensor fusion-algoritme gebruikt het Madgwick-filter of het Kalman-filter om gegevens van de magnetometer, gyroscoop en accelerometer te combineren. Dit maakt het mogelijk om een stabiel en nauwkeurig azimut te verkrijgen, zelfs bij snelle rotaties en schudden van het apparaat.
In de mobiele industrie worden drie hoofdtypen MEMS-magnetometers gebruikt: op basis van het Hall-effect, anisotrope magnetoresistieve (AMR) en gigantische magnetoresistieve (GMR). AMR-magnetometers zijn het meest verspreid in smartphones dankzij de optimale combinatie van gevoeligheid, energieverbruik en kosten. Toonaangevende fabrikanten — AKM (Asahi Kasei Microdevices), STMicroelectronics en Bosch Sensortec.
De gevoeligheid van een AMR-magnetometer van een typische smartphone is 0,3–1 µT met een dynamisch bereik van ±1000 µT (±8 Gauss), wat voldoende is voor nauwkeurige meting van het aardveld (30–65 µT) en compensatie van parasitaire velden. De uitleesfrequentie van de sensor kan 100–200 Hz bereiken, maar de meeste toepassingen gebruiken 10–50 Hz om energie te besparen. Automatische compensatie van temperatuur en spanningsvervormingen van de behuizing is geïmplementeerd op het niveau van de sensorstuurprogramma.
Kalibratie van het kompas is het proces van compensatie van parasitaire magnetische velden die worden gegenereerd door componenten van de smartphone: luidsprekers, trilmotor, camera en accu. Zonder kalibratie kunnen de metingen van de magnetometer 10–30 graden afwijken van de werkelijke richting. Het kalibratiesysteem bepaalt de verplaatsingsmatrix (hard-iron bias) langs drie assen en past deze toe voor correctie van alle volgende metingen.
De standaardmethode voor kalibratie van het kompas — het tekenen van een „acht": de gebruiker draait de smartphone in een baan die lijkt op het cijfer 8. Tijdens de beweging registreert de sensor het magnetisch veld in alle mogelijke oriëntaties, en het algoritme verzamelt punten en benadert een bol met het centrum verschoven ten opzichte van nul. De straal van de bol komt overeen met de grootte van het magnetisch veld van de aarde, en het centrum — met de vector van parasitaire verplaatsing. Na benadering berekent het systeem correctiecoëfficiënten voor elke as.
Moderne kalibratie-algoritmen van Qualcomm en MediaTek voeren continue achtergrondkalibratie uit zonder tussenkomst van de gebruiker. Ze analyseren veranderingen in het magnetisch veld bij rotatie van het apparaat en werken automatisch de correctieparameters bij. Als de sensor een nieuw parasitair veld detecteert (bijvoorbeeld bij het plaatsen van een magnetische hoes), start het systeem binnen 1–2 seconden continue beweging van het apparaat een herkalibratie.
Digitaal kompas wordt gebruikt in een breed scala aan mobiele toepassingen. De belangrijkste toepassing — navigatie- en kaartdiensten (Google Maps, Yandex.Maps, 2GIS) die de oriëntatie van het apparaat op de kaart bepalen voor correcte weergave van de bewegingsrichting van de gebruiker. In augmented reality (AR)-toepassingen zorgt het kompas voor correcte plaatsing van virtuele objecten ten opzichte van de windstreken.
In astronomische toepassingen (Star Walk, SkySafari) bepaalt het kompas in combinatie met de accelerometer de richting waarin de smartphone wijst en toont het overeenkomstige gebied van de sterrenhemel. Vis- en reistoepassingen gebruiken het kompas om interessegebieden op de kaart te markeren met verwijzing naar het azimut. Fitness-tracking met GPS gebruikt kompasmetingen om de richting van hardlopen of fietsen te bepalen, wat de nauwkeurigheid van de routeweergave verhoogt.
Voor toegang tot het digitale kompas op Android wordt de sensor TYPE_MAGNETIC_FIELD uit de Sensor API gebruikt. Ontwikkelaars registreren een luisteraar voor veranderingen in magnetometermetingen en ontvangen een array van waarden van de magnetische veldsterkte langs drie assen in microTesla. Voor het bepalen van het azimut worden magnetometergegevens gecombineerd met accelerometergegevens via de rotatiematrix sensor fusion.
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
class CompassManager(
private val sensorManager: SensorManager
) : SensorEventListener {
private val magnetometer = FloatArray(3)
private val accelerometer = FloatArray(3)
private val rotationMatrix = FloatArray(9)
private val orientation = FloatArray(3)
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type == Sensor.TYPE_MAGNETIC_FIELD) {
event.values.copyInto(magnetometer)
} else if (event.sensor.type == Sensor.TYPE_ACCELEROMETER) {
event.values.copyInto(accelerometer)
}
SensorManager.getRotationMatrix(
rotationMatrix, null,
accelerometer, magnetometer
)
SensorManager.getOrientation(rotationMatrix, orientation)
val azimuth = Math.toDegrees(orientation[0].toDouble())
// azimut: 0 = noord, 90 = oost, 180 = zuid, 270 = west
}
fun start() {
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_UI)
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI)
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {}
}
Het azimut verkregen via getOrientation wordt gemeten in radialen en kan waarden aannemen van -π tot π, waarbij 0 overeenkomt met het magnetisch noorden. Voor weergave op het scherm worden de waarden omgezet naar graden (Math.toDegrees) met normalisatie naar het bereik 0–360. Het is belangrijk om rekening te houden met de magnetische declinatie — de hoek tussen het magnetische en het ware (geografische) noorden, die afhangt van de geografische positie en in de loop van de tijd verandert. Google Maps corrigeert de declinatie automatisch via de GeomagneticField API.
Veelgestelde vragen
Digitaal kompas maakt gebruik van een MEMS-magnetometer — een chip van 2×2 mm die het magnetisch veld van de aarde langs drie assen meet. Magnetometergegevens worden gecombineerd met accelerometermetingen om het azimut te bepalen — de hoek tussen de noordrichting en de oriëntatie van het apparaat.
Onjuiste metingen van het kompas worden meestal veroorzaakt door het ontbreken van kalibratie, magnetische interferentie van luidsprekers of de trilmotor, en ook door magnetische hoesjes. Oplossing — voer een kalibratie uit met een „acht"-beweging of verwijder magnetische accessoires. Bij voortdurende fouten kan controle van de sensor nodig zijn.
Ja, kalibratie van het kompas is noodzakelijk voor compensatie van parasitaire magnetische velden in de smartphone. In de meeste moderne apparaten wordt kalibratie automatisch op de achtergrond uitgevoerd. Voor handmatige kalibratie tekent u met de smartphone een „acht" in de lucht — het systeem verzamelt gegevens vanuit alle hoeken en corrigeert de metingen.
Op Android wordt toegang tot het kompas verkregen via de Sensor API met de sensor TYPE_MAGNETIC_FIELD. Het azimut wordt berekend via SensorManager.getRotationMatrix() en getOrientation(), die magnetometer- en accelerometergegevens combineren. Het verkregen azimut kan worden aangepast voor weergave op het scherm.
De meest nauwkeurige kompassen zijn geïnstalleerd in smartphones met een drievoudige IMU-sensor (magnetometer + gyroscoop + accelerometer) en een actief kalibratiesysteem. De koplopers zijn vlaggenschepen van Google Pixel, Samsung Galaxy S-serie en iPhone Pro — ze gebruiken AKM- en Bosch-magnetometers met een gevoeligheid van 0,3 µT en automatische correctie.
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