Compass (kompas) w smartfonie to cyfrowy czujnik oparty na magnetometrze, określający kierunek do biegunów magnetycznych Ziemi. Technologia pozwala aplikacjom nawigacyjnym, mapowym i rzeczywistości rozszerzonej dokładnie określać orientację urządzenia w przestrzeni. Według danych STMicroelectronics, 2025, nowoczesne MEMS-magnetometry zapewniają dokładność określania kierunku do 1–2 stopni.
Najważniejsze
Cyfrowy kompas (compass) w smartfonie to czujnik oparty na magnetometrze, który mierzy natężenie pola magnetycznego Ziemi i określa azymut (kąt względem północy magnetycznej). W przeciwieństwie do mechanicznego kompasu, cyfrowy kompas wykorzystuje mikroelektromechaniczne systemy (MEMS) do rejestracji pola magnetycznego. Magnetometr mierzy pole w trzech osiach, co pozwala poprawnie określać kierunek przy dowolnym nachyleniu smartfona.
Nowoczesny MEMS-magnetometr to mikrochip o wymiarach 2×2×1 mm, zintegrowany w obudowie smartfona wraz z akcelerometrem i żyroskopem (w ramach 9-osiowego IMU). Czujnik mierzy nie tylko kierunek, ale także intensywność pola magnetycznego Ziemi (25–65 µT w zależności od szerokości geograficznej). Obecność metalowych przedmiotów i pasożytniczych pól magnetycznych od głośników, silnika wibracyjnego i aparatu powoduje zniekształcenia, dlatego do dokładnej pracy niezbędna jest programowa korekcja odczytów.
Pierwsze cyfrowe kompasy w telefonach komórkowych pojawiły się w 2009 roku wraz z premierą iPhone 3GS — pierwszego smartfona z wbudowanym magnetometrem. Dziś magnetometr jest instalowany w zdecydowanej większości smartfonów, w tym w modelach budżetowych. Według danych Yole Group, rynek MEMS-magnetometrów dla urządzeń mobilnych przekracza 1,5 mld sztuk rocznie, co potwierdza zapotrzebowanie na tę technologię.
Podstawę MEMS-magnetometru stanowi element czuły, zmieniający swoje charakterystyki elektryczne pod wpływem zewnętrznego pola magnetycznego. W nowoczesnych smartfonach wykorzystywany jest efekt Halla lub efekt magnetorezystywny (AMR — Anisotropic Magneto-Resistance). Zasada opiera się na tym, że materiał przewodzący zmienia rezystancję pod wpływem pola magnetycznego, a na podstawie zmiany napięcia wyznaczany jest wektor pola magnetycznego.
Czujniki oparte na efekcie Halla rejestrują zmianę napięcia na krawędziach płytki półprzewodnikowej, powstającą pod wpływem siły Lorentza działającej na poruszające się ładunki. Magnetorezystywne czujniki (AMR) wykorzystują warstwę z permalloju (NiFe), której rezystancja zależy od kierunku pola magnetycznego. Czujniki AMR zapewniają mniejszy rozmiar i wyższą czułość w porównaniu z czujnikami Halla, dlatego dominują w nowoczesnych smartfonach.
| Typ | Czułość | Pobór energii | Rozmiar |
|---|---|---|---|
| Hallowski | Średnia | Niski | Średni |
| AMR | Wysoka | Niski | Mały |
| GMR | Bardzo wysoka | Średni | Mały |
Dane z magnetometru są łączone z odczytami akcelerometru w celu korekcji nachylenia i określenia kierunku na północ w płaszczyźnie poziomej. Algorytm fuzji sensorów (sensor fusion) wykorzystuje filtr Madgwicka lub filtr Kalmana do połączenia danych z magnetometru, żyroskopu i akcelerometru. Pozwala to uzyskać stabilny i dokładny azymut nawet podczas szybkich obrotów i wstrząsów urządzenia.
W przemyśle mobilnym stosowane są trzy główne typy MEMS-magnetometrów: oparte na efekcie Halla, anizotropowe magnetorezystywne (AMR) i gigantyczne magnetorezystywne (GMR). Magnetometry AMR zyskały największe rozpowszechnienie w smartfonach dzięki optymalnemu połączeniu czułości, poboru energii i kosztów. Wiodący producenci — AKM (Asahi Kasei Microdevices), STMicroelectronics i Bosch Sensortec.
Czułość AMR-magnetometru typowego smartfona wynosi 0,3–1 µT przy zakresie dynamicznym ±1000 µT (±8 Gaussa), co wystarcza do dokładnego pomiaru pola Ziemi (30–65 µT) i kompensacji pól pasożytniczych. Częstotliwość odczytu czujnika może sięgać 100–200 Hz, ale większość aplikacji wykorzystuje 10–50 Hz w celu oszczędzania energii. Automatyczna kompensacja temperatury i odkształceń naprężeniowych obudowy jest zaimplementowana na poziomie sterownika czujnika.
Kalibracja kompasu to proces kompensacji pasożytniczych pól magnetycznych wytwarzanych przez komponenty smartfona: głośniki, silnik wibracyjny, aparat i akumulator. Bez kalibracji odczyty magnetometru mogą odbiegać od rzeczywistego kierunku o 10–30 stopni. System kalibracji określa macierz przesunięć (hard-iron bias) w trzech osiach i stosuje ją do korekcji wszystkich kolejnych pomiarów.
Standardowa metoda kalibracji kompasu — rysowanie „ósemki”: użytkownik obraca smartfon po trajektorii przypominającej cyfrę 8. Podczas ruchu czujnik rejestruje pole magnetyczne we wszystkich możliwych orientacjach, a algorytm gromadzi punkty i aproksymuje sferę ze środkiem przesuniętym względem zera. Promień sfery odpowiada wartości pola magnetycznego Ziemi, a środek — wektorowi przesunięcia pasożytniczego. Po aproksymacji system oblicza współczynniki korekcyjne dla każdej osi.
Nowoczesne algorytmy kalibracji od Qualcomm i MediaTek wykonują ciągłą kalibrację w tle bez udziału użytkownika. Analizują zmiany pola magnetycznego podczas obrotów urządzenia i automatycznie aktualizują parametry korekcji. Jeśli czujnik wykryje nowe pole pasożytnicze (np. przy założeniu magnetycznego etui), system uruchamia przekalibrowanie w ciągu 1–2 sekund ciągłego ruchu urządzenia.
Cyfrowy kompas jest używany w szerokim spektrum aplikacji mobilnych. Główne zastosowanie — serwisy nawigacyjne i mapowe (Google Maps, Yandex.Maps, 2GIS), które określają orientację urządzenia na mapie w celu poprawnego wyświetlania kierunku ruchu użytkownika. W aplikacjach rzeczywistości rozszerzonej (AR) kompas zapewnia prawidłowe umiejscowienie wirtualnych obiektów względem stron świata.
W aplikacjach astronomicznych (Star Walk, SkySafari) kompas w połączeniu z akcelerometrem określa kierunek, w którym skierowany jest smartfon, i pokazuje odpowiedni obszar gwiaździstego nieba. Aplikacje wędkarskie i turystyczne wykorzystują kompas do oznaczania punktów zainteresowania na mapie z odniesieniem do azymutu. Śledzenie aktywności fitness z GPS korzysta z odczytów kompasu do określania kierunku biegu lub jazdy rowerem, co zwiększa dokładność wyświetlania trasy.
Do dostępu do cyfrowego kompasu na Androidzie używany jest czujnik TYPE_MAGNETIC_FIELD z Sensor API. Programiści rejestrują nasłuchiwanie zmian odczytów magnetometru i otrzymują tablicę wartości natężenia pola magnetycznego w trzech osiach w mikroTeslach. Do określenia azymutu dane magnetometru są łączone z danymi akcelerometru przez macierz obrotu 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())
// azymut: 0 = północ, 90 = wschód, 180 = południe, 270 = zachód
}
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) {}
}
Azymut uzyskany przez getOrientation mierzony jest w radianach i może przyjmować wartości od -π do π, gdzie 0 odpowiada północy magnetycznej. Do wyświetlenia na ekranie wartości są konwertowane na stopnie (Math.toDegrees) z normalizacją do zakresu 0–360. Należy uwzględnić deklinację magnetyczną — kąt między północą magnetyczną a rzeczywistą (geograficzną), który zależy od położenia geograficznego i zmienia się w czasie. Mapy Google automatycznie korygują deklinację przez API GeomagneticField.
Często zadawane pytania
Cyfrowy kompas wykorzystuje MEMS-magnetometr — chip o wymiarach 2×2 mm mierzący pole magnetyczne Ziemi w trzech osiach. Dane magnetometru są łączone z odczytami akcelerometru w celu określenia azymutu — kąta między kierunkiem na północ a orientacją urządzenia.
Nieprawidłowe odczyty kompasu najczęściej są spowodowane brakiem kalibracji, zakłóceniami magnetycznymi od głośników lub silnika wibracyjnego, a także magnetycznymi etui. Rozwiązanie — wykonaj kalibrację ruchem „ósemki” lub usuń magnetyczne akcesoria. Przy stałych błędach może być konieczne sprawdzenie czujnika.
Tak, kalibracja kompasu jest niezbędna do kompensacji pasożytniczych pól magnetycznych wewnątrz smartfona. W większości nowoczesnych urządzeń kalibracja odbywa się automatycznie w tle. Do ręcznej kalibracji narysuj smartfonem „ósemkę” w powietrzu — system zbierze dane ze wszystkich kątów i skoryguje odczyty.
Na Androidzie dostęp do kompasu odbywa się przez Sensor API z czujnikiem TYPE_MAGNETIC_FIELD. Azymut oblicza się przez SensorManager.getRotationMatrix() i getOrientation(), łączące dane magnetometru i akcelerometru. Uzyskany azymut można dostosować do wyświetlenia na ekranie.
Najdokładniejsze kompasy są zainstalowane w smartfonach z potrójnym czujnikiem IMU (magnetometr + żyroskop + akcelerometr) i aktywnym systemem kalibracji. Prowadzą flagowce Google Pixel, Samsung Galaxy S-serii i iPhone Pro — wykorzystują magnetometry AKM i Bosch z czułością 0,3 µT i automatyczną korekcją.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również