Compass (kompas) v chytrém telefonu je digitální senzor založený na magnetometru, který určuje směr k magnetickým pólům Země. Technologie umožňuje navigačním, kartografickým a rozšířené realitě aplikacím přesně určovat orientaci zařízení v prostoru. Podle údajů STMicroelectronics, 2025 poskytují moderní MEMS-magnetometry přesnost určení směru až 1–2 stupně.
Hlavní body
Digitální kompas (compass) v chytrém telefonu je senzor založený na magnetometru, který měří intenzitu magnetického pole Země a určuje azimut (úhel vůči magnetickému severu). Na rozdíl od mechanického kompasu využívá digitální kompas mikroelektromechanické systémy (MEMS) k registraci magnetického pole. Magnetometr měří pole podél tří os, což umožňuje správné určení směru při jakémkoli náklonu chytrého telefonu.
Moderní MEMS-magnetometr je mikročip o rozměrech 2×2×1 mm, integrovaný do těla chytrého telefonu spolu s akcelerometrem a gyroskopem (v rámci 9osého IMU). Senzor měří nejen směr, ale také intenzitu magnetického pole Země (25–65 µT v závislosti na zeměpisné šířce). Přítomnost kovových předmětů a parazitních magnetických polí od reproduktorů, vibračního motoru a fotoaparátu způsobuje zkreslení, proto je pro přesnou funkci nutná softwarová korekce údajů.
První digitální kompasy v mobilních telefonech se objevily v roce 2009 s uvedením iPhone 3GS — prvního chytrého telefonu s vestavěným magnetometrem. Dnes je magnetometr instalován v drtivé většině chytrých telefonů, včetně levných modelů. Podle údajů Yole Group trh s MEMS-magnetometry pro mobilní zařízení přesahuje 1,5 miliardy kusů ročně, což potvrzuje poptávku po této technologii.
Základ MEMS-magnetometru tvoří citlivý prvek, který mění své elektrické vlastnosti působením vnějšího magnetického pole. V moderních chytrých telefonech se využívá Hallův jev nebo magnetorezistivní jev (AMR — Anisotropic Magneto-Resistance). Princip je založen na tom, že materiál vedoucí proud mění svůj odpor působením magnetického pole, a ze změny napětí se vypočítá vektor magnetického pole.
Senzory založené na Hallově jevu registrují změnu napětí na okrajích polovodičové destičky, vznikající působením Lorentzovy síly na pohybující se náboje. Magnetorezistivní senzory (AMR) využívají vrstvu permalloye (NiFe), jejíž odpor závisí na směru magnetického pole. AMR senzory poskytují menší rozměr a vyšší citlivost ve srovnání s Hallovými senzory, proto dominují v moderních chytrých telefonech.
| Typ | Citlivost | Spotřeba energie | Rozměr |
|---|---|---|---|
| Hallův | Střední | Nízká | Střední |
| AMR | Vysoká | Nízká | Malý |
| GMR | Velmi vysoká | Střední | Malý |
Data z magnetometru jsou kombinována s údaji akcelerometru pro korekci náklonu a určení směru severu v horizontální rovině. Algoritmus fúze senzorů (sensor fusion) používá Madgwickův filtr nebo Kalmanův filtr ke kombinaci dat z magnetometru, gyroskopu a akcelerometru. To umožňuje získat stabilní a přesný azimut i při rychlých rotacích a otřesech zařízení.
V mobilním průmyslu se používají tři hlavní typy MEMS-magnetometrů: založené na Hallově jevu, anizotropní magnetorezistivní (AMR) a obří magnetorezistivní (GMR). AMR-magnetometry jsou v chytrých telefonech nejrozšířenější díky optimální kombinaci citlivosti, spotřeby energie a ceny. Přední výrobci — AKM (Asahi Kasei Microdevices), STMicroelectronics a Bosch Sensortec.
Citlivost AMR-magnetometru typického chytrého telefonu je 0,3–1 µT s dynamickým rozsahem ±1000 µT (±8 Gaussů), což stačí k přesnému měření zemského pole (30–65 µT) a kompenzaci parazitních polí. Frekvence dotazování senzoru může dosáhnout 100–200 Hz, ale většina aplikací používá 10–50 Hz pro úsporu energie. Automatická kompenzace teploty a deformací těla je implementována na úrovni ovladače senzoru.
Kalibrace kompasu je proces kompenzace parazitních magnetických polí vytvářených součástkami chytrého telefonu: reproduktory, vibračním motorem, fotoaparátem a baterií. Bez kalibrace se mohou údaje magnetometru odchylovat od skutečného směru o 10–30 stupňů. Kalibrační systém určuje matici posunu (hard-iron bias) podél tří os a aplikuje ji pro korekci všech následujících měření.
Standardní metoda kalibrace kompasu — kreslení osmičky: uživatel otáčí chytrým telefonem po trajektorii připomínající číslici 8. Během pohybu senzor registruje magnetické pole ve všech možných orientacích a algoritmus shromažďuje body a aproximuje kouli se středem posunutým vůči nule. Poloměr koule odpovídá velikosti magnetického pole Země a střed — vektoru parazitního posunu. Po aproximaci systém vypočítá korekční koeficienty pro každou osu.
Moderní algoritmy kalibrace od Qualcomm a MediaTek provádějí kontinuální kalibraci na pozadí bez účasti uživatele. Analyzují změny magnetického pole při otáčení zařízení a automaticky aktualizují parametry korekce. Pokud senzor detekuje nové parazitní pole (například při nasazení magnetického pouzdra), systém spustí rekalibraci během 1–2 sekund nepřetržitého pohybu zařízení.
Digitální kompas se používá v širokém spektru mobilních aplikací. Hlavní použití — navigační a mapové služby (Google Maps, Yandex.Maps, 2GIS), které určují orientaci zařízení na mapě pro správné zobrazení směru pohybu uživatele. V aplikacích rozšířené reality (AR) kompas zajišťuje správné umístění virtuálních objektů vůči světovým stranám.
V astronomických aplikacích (Star Walk, SkySafari) kompas v kombinaci s akcelerometrem určuje směr, kterým je chytrý telefon namířen, a zobrazuje odpovídající oblast hvězdné oblohy. Rybářské a turistické aplikace používají kompas k označení bodů zájmu na mapě s odkazem na azimut. Fitness tracking s GPS využívá údaje kompasu k určení směru běhu nebo jízdy na kole, což zvyšuje přesnost zobrazení trasy.
Pro přístup k digitálnímu kompasu na Androidu se používá senzor TYPE_MAGNETIC_FIELD ze Sensor API. Vývojáři registrují posluchač změn údajů magnetometru a dostávají pole hodnot intenzity magnetického pole podél tří os v mikroTeslech. Pro určení azimutu jsou data magnetometru kombinována s daty akcelerometru prostřednictvím rotační matice 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 = sever, 90 = východ, 180 = jih, 270 = západ
}
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) {}
}
Azimut získaný prostřednictvím getOrientation se měří v radiánech a může nabývat hodnot od -π do π, kde 0 odpovídá magnetickému severu. Pro zobrazení na obrazovce se hodnoty převádějí na stupně (Math.toDegrees) s normalizací do rozsahu 0–360. Je důležité vzít v úvahu magnetickou deklinaci — úhel mezi magnetickým a skutečným (geografickým) severem, který závisí na zeměpisné poloze a v čase se mění. Mapy Google automaticky korigují deklinaci prostřednictvím GeomagneticField API.
Často kladené dotazy
Digitální kompas využívá MEMS-magnetometr — čip o velikosti 2×2 mm měřící magnetické pole Země podél tří os. Data magnetometru se kombinují s údaji akcelerometru pro určení azimutu — úhlu mezi směrem k severu a orientací zařízení.
Nesprávné údaje kompasu jsou nejčastěji způsobeny chybějící kalibrací, magnetickým rušením od reproduktorů nebo vibračního motoru a také magnetickými pouzdry. Řešení — proveďte kalibraci pohybem osmičky nebo odstraňte magnetické příslušenství. Při trvalých chybách může být nutná kontrola senzoru.
Ano, kalibrace kompasu je nezbytná pro kompenzaci parazitních magnetických polí uvnitř chytrého telefonu. U většiny moderních zařízení probíhá kalibrace automaticky na pozadí. Pro ruční kalibraci nakreslete chytrým telefonem osmičku ve vzduchu — systém shromáždí data ze všech úhlů a opraví údaje.
Na Androidu se přístup ke kompasu provádí přes Sensor API se senzorem TYPE_MAGNETIC_FIELD. Azimut se vypočítá pomocí SensorManager.getRotationMatrix() a getOrientation(), které kombinují data magnetometru a akcelerometru. Získaný azimut lze přizpůsobit pro zobrazení na obrazovce.
Nejpřesnější kompasy jsou instalovány v chytrých telefonech s trojitým IMU senzorem (magnetometr + gyroskop + akcelerometr) a aktivním kalibračním systémem. Vedou vlajkové lodě Google Pixel, Samsung Galaxy S-series a iPhone Pro — používají magnetometry AKM a Bosch s citlivostí 0,3 µT a automatickou korekcí.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také