Компас (compass) у смартфоні — це цифровий датчик на основі магнітометра, що визначає напрямок на магнітні полюси Землі. Технологія дозволяє додаткам навігації, картографії та доповненої реальності точно визначати орієнтацію пристрою в просторі. За даними STMicroelectronics, 2025, сучасні MEMS-магнітометри забезпечують точність визначення напрямку до 1–2 градусів.
Головне
Цифровий компас у смартфоні — це датчик, заснований на магнітометрі, який вимірює напруженість магнітного поля Землі та визначає азимут (кут відносно магнітної півночі). На відміну від механічного компаса, цифровий компас використовує мікроелектромеханічні системи (MEMS) для реєстрації магнітного поля. Магнітометр вимірює поле за трьома осями, що дозволяє коректно визначати напрямок при будь-якому нахилі смартфона.
Сучасний MEMS-магнітометр являє собою мікрочіп розміром 2×2×1 мм, інтегрований у корпус смартфона разом з акселерометром і гіроскопом (у складі 9-осьового IMU). Датчик вимірює не тільки напрямок, але й інтенсивність магнітного поля Землі (25–65 мкТл залежно від широти). Наявність металевих предметів і паразитних магнітних полів від динаміків, вібромотора та камери створює спотворення, тому для точної роботи необхідна програмна корекція показників.
Перші цифрові компаси в мобільних телефонах з’явилися в 2009 році з виходом iPhone 3GS — першого смартфона з вбудованим магнітометром. Сьогодні магнітометр встановлюється в переважній більшості смартфонів, включаючи бюджетні моделі. За даними Yole Group, ринок MEMS-магнітометрів для мобільних пристроїв перевищує 1,5 млрд одиниць на рік, що підтверджує затребуваність технології.
Основу MEMS-магнітометра становить чутливий елемент, який змінює свої електричні характеристики під дією зовнішнього магнітного поля. У сучасних смартфонах використовується ефект Холла або магніторезистивний ефект (AMR — Anisotropic Magneto-Resistance). Принцип заснований на тому, що матеріал зі струмом змінює опір під впливом магнітного поля, і за зміною напруги обчислюється вектор магнітного поля.
Датчики на ефекті Холла реєструють зміну напруги на краях напівпровідникової пластини, що виникає під дією сили Лоренца на рухомі заряди. Магніторезистивні датчики (AMR) використовують плівку з пермалою (NiFe), опір якої залежить від напрямку магнітного поля. AMR-сенсори забезпечують менший розмір і більш високу чутливість порівняно з холловськими, тому вони домінують у сучасних смартфонах.
| Тип | Чутливість | Енергоспоживання | Розмір |
|---|---|---|---|
| Холловський | Середня | Низьке | Середній |
| AMR | Висока | Низьке | Малий |
| GMR | Дуже висока | Середнє | Малий |
Дані з магнітометра комбінуються з показниками акселерометра для коригування нахилу та визначення напрямку на північ у горизонтальній площині. Алгоритм сенсорного фюжна (sensor fusion) використовує фільтр Маджвіка або фільтр Калмана для обєднання даних магнітометра, гіроскопа та акселерометра. Це дозволяє отримати стабільний і точний азимут навіть при швидких поворотах і трясці пристрою.
У мобільній індустрії використовуються три основні типи MEMS-магнітометрів: на ефекті Холла, анізотропні магніторезистивні (AMR) та гігантські магніторезистивні (GMR). AMR-магнітометри отримали найбільше поширення в смартфонах завдяки оптимальному поєднанню чутливості, енергоспоживання та вартості. Провідні виробники — AKM (Asahi Kasei Microdevices), STMicroelectronics і Bosch Sensortec.
Чутливість AMR-магнітометра типового смартфона становить 0,3–1 мкТл при динамічному діапазоні ±1000 мкТл (±8 Гаус), що достатньо для точного вимірювання поля Землі (30–65 мкТл) та компенсації паразитних полів. Частота опитування датчика може досягати 100–200 Гц, але більшість додатків використовує 10–50 Гц для економії енергії. Автоматична компенсація температури та стресових деформацій корпусу реалізована на рівні драйвера датчика.
Калібрування компаса — це процес компенсації паразитних магнітних полів, створюваних компонентами смартфона: динаміками, вібромотором, камерою та акумулятором. Без калібрування показники магнітометра можуть відхилятися від реального напрямку на 10–30 градусів. Система калібрування визначає матрицю зміщень (hard-iron bias) за трьома осями та застосовує її для корекції всіх наступних вимірювань.
Стандартний метод калібрування компаса — малювання «вісімки»: користувач обертає смартфон за траєкторією, що нагадує цифру 8. Під час руху датчик реєструє магнітне поле у всіх можливих орієнтаціях, а алгоритм накопичує точки та апроксимує сферу з центром, зміщеним відносно нуля. Радіус сфери відповідає величині магнітного поля Землі, а центр — вектору паразитного зміщення. Після апроксимації система обчислює поправочні коефіцієнти для кожної осі.
Сучасні алгоритми калібрування від Qualcomm і MediaTek виконують безперервне фонове калібрування без участі користувача. Вони аналізують зміни магнітного поля при поворотах пристрою та автоматично оновлюють параметри корекції. Якщо датчик виявляє нове паразитне поле (наприклад, при встановленні магнітного чохла), система запускає перекалібрування за 1–2 секунди безперервного руху пристрою.
Цифровий компас використовується в широкому спектрі мобільних додатків. Основне застосування — навігаційні та картографічні сервіси (Google Maps, Яндекс.Карти, 2GIS), які визначають орієнтацію пристрою на карті для коректного відображення напрямку руху користувача. У додатках доповненої реальності (AR) компас забезпечує правильне розташування віртуальних обєктів відносно сторін світу.
В астрономічних додатках (Star Walk, SkySafari) компас у поєднанні з акселерометром визначає напрямок, у який спрямований смартфон, і показує відповідну область зоряного неба. Рибальські та туристичні додатки використовують компас для позначки точок інтересу на карті з привязкою до азимуту. Фітнес-трекінг з GPS використовує показники компаса для визначення напрямку бігу або велосипедної поїздки, що підвищує точність відображення маршруту.
Для доступу до цифрового компаса на Android використовується датчик TYPE_MAGNETIC_FIELD із Sensor API. Розробники реєструють слухач змін показників магнітометра та отримують масив значень напруженості магнітного поля за трьома осями в мікроТеслах. Для визначення азимуту дані магнітометра комбінуються з даними акселерометра через матрицю обертання 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())
// азимут: 0 = північ, 90 = схід, 180 = південь, 270 = захід
}
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) {}
}
Азимут, отриманий через getOrientation, вимірюється в радіанах і може приймати значення від -π до π, де 0 відповідає магнітній півночі. Для відображення на екрані значення перетворюються в градуси (Math.toDegrees) з нормалізацією до діапазону 0–360. Важливо враховувати магнітне схилення — кут між магнітною та істинною (географічною) північчю, який залежить від географічного положення та з часом змінюється. Google Карти автоматично коригують схилення через GeomagneticField API.
Часті запитання
Цифровий компас використовує MEMS-магнітометр — чіп розміром 2×2 мм, що вимірює магнітне поле Землі за трьома осями. Дані магнітометра комбінуються з показниками акселерометра для визначення азимуту — кута між напрямком на північ та орієнтацією пристрою.
Неправильні показники компаса найчастіше викликані відсутністю калібрування, магнітними перешкодами від динаміків або вібромотора, а також магнітними чохлами. Рішення — виконати калібрування рухом «вісімкою» або прибрати магнітні аксесуари. При постійних помилках може знадобитися перевірка датчика.
Так, калібрування компаса необхідне для компенсації паразитних магнітних полів всередині смартфона. У більшості сучасних пристроїв калібрування виконується автоматично у фоні. Для ручного калібрування намалюйте смартфоном «вісімку» в повітрі — система збере дані з усіх ракурсів і скоригує показники.
На Android доступ до компаса здійснюється через Sensor API з датчиком TYPE_MAGNETIC_FIELD. Азимут обчислюється через SensorManager.getRotationMatrix() та getOrientation(), які комбінують дані магнітометра та акселерометра. Отриманий азимут можна адаптувати для відображення на екрані.
Найточніші компаси встановлені в смартфонах з потрійним IMU-датчиком (магнітометр + гіроскоп + акселерометр) та активною системою калібрування. Лідирують флагмани Google Pixel, Samsung Galaxy S-серії та iPhone Pro — вони використовують магнітометри AKM і Bosch з чутливістю 0,3 мкТл та автоматичною корекцією.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також