Магнетометар је сензор који мери јачину магнетног поља Земље ради одређивања страна света. У мобилним уређајима ради као дигитални компас, обезбеђујући тачност до 1–2 степена уз правилну калибрацију. Према Bosch Sensortec Application Note, 2024, савремени MEMS-магнетометри троше само 0.5–2 mA и смештају се у кућиште од 1.5×1.5×0.7 mm.
Главно
Магнетометар у мобилном уређају је троосни сензор магнетног поља заснован на Холовом ефекту. Он мери пројекције вектора магнетне индукције на осе X, Y и Z. У комбинацији са акцелерометром, магнетометар омогућава одређивање азимута — угла између правца севера и осе телефона.
У савременим паметним телефонима користе се MEMS-магнетометри засновани на анизотропном магнетоотпорном ефекту (AMR) и Холовом ефекту. AMR-сензори (AKM серија од Asahi Kasei Microdevices) обезбеђују осетљивост од 0.15 μТ/LSB и опсег ±1200 μТ — довољно за мерење поља Земље (25–65 μТ).
| Параметар | Вредност |
|---|---|
| Технологија | AMR / Холов ефекат |
| Опсег | ±1200 — ±1300 μТ |
| Потрошња | 0.5–2 mA |
| Величина | 1.5×1.5×0.7 mm |
| Осетљивост | 0.15 μТ/LSB |
Без дигиталног компаса навигационе апликације не могу да одреде правац кретања. Google Maps користи магнетометар за приказ оријентације мапе у односу на правац погледа корисника. При отказу сензора, апликација приказује само положај на мапи без плаве стрелице правца.
Холов ефекат је физичка појава настанка разлике потенцијала на ивицама проводне плоче под утицајем магнетног поља. У MEMS-магнетометрима се користе танкослојне структуре од пермалоја (NiFe), чији отпор се мења под дејством спољашњег магнетног поља (AMR-ефекат).
Сваки од три канала (X, Y, Z) састоји се од четири магнетоотпорника повезаних у Витстонов мост. Магнетно поље мења отпор отпорника за 2–3%, што диференцијални појачавач претвара у напон. Уграђени 16-битни АДЦ дигитализује сигнал фреквенцијом до 100 Hz.
За мерење вертикалне компоненте поља користи се интегрисани концентратор магнетног флукса (IMC — Integrated Magnetic Concentrator). То је танкослојна структура од NiFe која одступа хоризонтално поље у вертикалну раван, омогућавајући једном AMR-мосту да мери све три осе.
Магнетометар одређује оријентацију у односу на магнетно поље Земље (апсолутна референца), а жироскоп мери само промену угла (релативни подаци). Жироскоп даје тачне податке на кратким интервалима, али акумулира грешку дрифта. Магнетометар не дрифтује, али је подложан магнетним сметњама.
Android обједињује податке три сензора преко SensorManager.getRotationMatrix. Магнетометар се користи за корекцију дрифта жироскопа на дугим интервалима. Без магнетометра, жироскоп за 5 минута акумулира грешку од 10–20 степени. Према Google ARCore (2024), fusion-алгоритам достиже тачност од 1–3 степена уз присуство магнетометра.
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] — азимут у радијанима
Hard Iron — стално магнетно поље које стварају феромагнетни материјали унутар телефона: магнети звучника, вибромотор, метални рам кућишта. Hard Iron изобличење се манифестује као стално померање (bias) по свакој оси. Soft Iron — промена правца поља услед магнетопроводних материјала који изобличују облик линија поља.
Стандардна процедура калибрације магнетометра је ротација телефона у облику осмице (figure-8 pattern). Током процеса сензор бележи тачке у тродимензионалном простору. Без изобличења, тачке леже на сфери полупречника 25–65 μТ. Hard Iron помера центар сфере, Soft Iron је претвара у елипсоид. Алгоритам калибрације израчунава параметре померања и скалирања.
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
)
}
Програмер може да имплементира сопствену калибрацију магнетометра прикупљањем података током кретања уређаја. Алгоритам елипсоидног прилагођавања (ellipsoid fitting) проналази параметре Hard Iron и Soft Iron, минимизирајући збир квадрата одступања од сфере. Библиотека Apache Commons Math пружа имплементацију нелинеарне методе најмањих квадрата (Levenberg-Marquardt) за овај задатак — тачност након програмске калибрације достиже 0.5 степени.
За минимализацију Hard Iron, произвођачи постављају магнетометар у горњи део телефона, далеко од звучника и вибромотора. Инжењери компаније Apple у iPhone 16 Pro Max (2024) применили су екранирање магнетометра пермалојском фолијом, смањивши утицај звучника 4 пута. У Samsung Galaxy S24 Ultra користи се додатни компензациони круг који мери струју у звучнику у реалном времену ради одузимања индукованог поља. Футроле са магнетним причвршћивачима (на пример, у аутомобилским држачима) стварају јака изобличења — након употребе магнетометар може показивати погрешан правац до поновне калибрације.
Android пружа два сензора: TYPE_MAGNETIC_FIELD (калибрисани подаци у μТ) и TYPE_MAGNETIC_FIELD_UNCALIBRATED (сирови подаци са проценом изобличења). За навигационе апликације препоручује се коришћење калибрисаног сензора — систем аутоматски примењује уграђену калибрацију на основу последњег покрета осмицом.
Кашњење SENSOR_DELAY_NORMAL (200 ms) је довољно за компас, SENSOR_DELAY_FASTEST (0 ms) — само за специјалне истраживачке апликације. Након добијања вредности, могу се претворити у азимут преко getRotationMatrix + getOrientation. Важно је проверити тачност сензора преко event.accuracy — вредност SENSOR_STATUS_UNRELIABLE значи потребу за калибрацијом.
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)
}
}
Магнетометар се користи не само за компас. AR апликације, укључујући Pokemon GO, користе магнетометар за одређивање оријентације камере у односу на реални свет. У одсуству магнетометра, ARCore прелази у режим Screen Axis — оријентација се одређује само жироскопом, што смањује тачност.
У аутомобилским навигационим системима заснованим на Android Auto, магнетометар се користи за одређивање правца кретања при губитку GPS сигнала у тунелима и густој градској изградњи. У комбинацији са подацима одометрије са точкова возила (добијеним преко OBD-II), магнетометар омогућава наставак навигације до 5 минута без GPS са тачношћу позиционирања од 10–20 метара. Према Google Maps Engineering Blog (2024), хибридни алгоритам смањује проценат губитка руте у градским кањонима за 40%.
Навигационе апликације користе магнетометар за одређивање азимута кретања — угла између правца севера и тренутног курса корисника. У Google Maps, подаци магнетометра се комбинују са GPS трагом и историјом кретања за приказ плаве стрелице правца. При губитку GPS сигнала (у тунелима, подземним пролазима) магнетометар остаје једини извор информација о оријентацији.
Нова генерација 3-осних магнетометара са интегрисаним ASIC (BMM350 од Bosch, 2024) троши само 0.35 mA и подржава фреквенцију до 200 Hz. Развој квантних магнетометара и NV центара у дијаманту за мобилне уређаје још није изашао из фазе лабораторијских експеримената. Очекује се да ће до 2028. године тачност мобилних магнетометара достићи 0.01 μТ.
Често постављана питања
Нацртајте осмицу телефоном у ваздуху — то је стандардни покрет за калибрацију дигиталног компаса. Ако компас и даље показује нетачно, проверите футролу: магнетни причвршћивачи и метални елементи стварају јака изобличења Hard Iron.
Главни разлози: магнетне сметње од звучника и вибромотора телефона, недостатак калибрације након промене футроле, утицај металних предмета у близини. У просторијама са армиранобетонским конструкцијама магнетно поље се изобличује посебно јако.
Да, апликације за детекцију метала користе уграђени магнетометар за откривање аномалија магнетног поља. Међутим, дубина детекције не прелази 10–20 cm, и уређај не разликује врсте метала — то је пре образовни алат.
TYPE_MAGNETIC_FIELD враћа податке након калибрације коју је применио систем. TYPE_MAGNETIC_FIELD_UNCALIBRATED даје сирове вредности плус процену померања (bias), омогућавајући програмеру да примени сопствену калибрацију.
Користите SensorManager.getRotationMatrix са подацима акцелерометра и магнетометра, затим getOrientation — први елемент низа (азимут) ће бити у радијанима. За приказ компаса претворите у степене: Math.toDegrees(azimuth).
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође