Maqnitometr — Yerin maqnit sahəsinin gərginliyini ölçərək istiqamətləri müəyyən edən sensor. Mobil cihazlarda rəqəmsal kompas kimi işləyir, düzgün kalibrləmə ilə 1–2 dərəcəyə qədər dəqiqlik təmin edir. Bosch Sensortec Application Note, 2024-ə görə, müasir MEMS-maqnitometrlər cəmi 0.5–2 mA enerji sərf edir və 1.5×1.5×0.7 mm ölçülü korpusa yerləşir.
Əsas məqamlar
Maqnitometr mobil cihazda Hall effektinə əsaslanan üçoxlu maqnit sahəsi sensorudur. O, maqnit induksiya vektorunun X, Y və Z oxları üzrə proyeksiyalarını ölçür. Akselerometr ilə birlikdə maqnitometr azimutu — şimal istiqaməti ilə telefon oxu arasındakı bucağı təyin etməyə imkan verir.
Müasir smartfonlarda anizotrop maqniteresistiv effektə (AMR) və Hall effektinə əsaslanan MEMS-maqnitometrlər istifadə olunur. AMR-sensorlar (Asahi Kasei Microdevices-in AKM seriyası) 0.15 µT/LSB həssaslıq və ±1200 µT diapazon təmin edir — bu, Yer sahəsini (25–65 µT) ölçmək üçün kifayətdir.
| Parametr | Dəyər |
|---|---|
| Texnologiya | AMR / Hall effekti |
| Diapazon | ±1200 — ±1300 µT |
| Enerji sərfiyyatı | 0.5–2 mA |
| Ölçü | 1.5×1.5×0.7 mm |
| Həssaslıq | 0.15 µT/LSB |
Rəqəmsal kompas olmadan naviqasiya tətbiqləri hərəkət istiqamətini təyin edə bilməz. Google Maps xəritənin istifadəçinin baxış istiqamətinə nisbətən oriyentasiyasını göstərmək üçün maqnitometrdən istifadə edir. Sensor sıradan çıxdıqda, tətbiq xəritədə yalnız yeri göstərir, mavi istiqamət oxu olmur.
Hall effekti — maqnit sahəsinin təsiri altında keçirici lövhənin kənarlarında potensial fərqinin yaranması fiziki hadisəsi. MEMS-maqnitometrlərdə müqaviməti xarici maqnit sahəsinin təsiri altında dəyişən permalloydan (NiFe) nazik təbəqəli strukturlar istifadə olunur (AMR-effekti).
Üç kanalın (X, Y, Z) hər biri dörd maqniteresistordan ibarətdir, Wheatstone körpüsünə qoşulmuşdur. Maqnit sahəsi rezistorların müqavimətini 2–3% dəyişir, bu da diferensial gücləndirici tərəfindən gərginliyə çevrilir. Daxili 16-bitlik ADC siqnalı 100 Hz-ə qədər tezlikdə rəqəmləşdirir.
Sahənin şaquli komponentini ölçmək üçün inteqrasiya edilmiş maqnit axını konsentratoru (IMC — Integrated Magnetic Concentrator) istifadə olunur. Bu, üfüqi sahəni şaquli müstəviyə yönləndirən NiFe nazik təbəqəli strukturdur və tək AMR körpüsünə hər üç oxu ölçməyə imkan verir.
Maqnitometr Yerin maqnit sahəsinə nisbətən oriyentasiyanı təyin edir (mütləq istinad), giroskop isə yalnız bucaq dəyişikliyini ölçür (nisbi məlumatlar). Giroskop qısa intervallarda dəqiq məlumat verir, lakin drift xətasını toplayır. Maqnitometr drift etmir, lakin maqnit müdaxilələrinə məruz qalır.
Android üç sensorun məlumatlarını SensorManager.getRotationMatrix vasitəsilə birləşdirir. Maqnitometr uzun intervallarda giroskopun driftini korreksiya etmək üçün istifadə olunur. Maqnitometr olmadan giroskop 5 dəqiqə ərzində 10–20 dərəcə xəta toplayır. Google ARCore (2024) məlumatlarına görə, fusion alqoritmi maqnitometr olduqda 1–3 dərəcə dəqiqliyə çatır.
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] — radyanla azimut
Hard Iron — telefon daxilindəki ferromaqnit materialların yaratdığı sabit maqnit sahəsi: dinamik maqnitləri, vibrasiya mühərriki, korpusun metal çərçivəsi. Hard Iron təhrifi hər ox üzrə sabit yerdəyişmə (bias) kimi özünü göstərir. Soft Iron — sahə xətlərinin formasını təhrif edən maqnitkeçirici materiallar səbəbindən sahə istiqamətinin dəyişməsi.
Maqnitometrin standart kalibrləmə proseduru telefonu səkkiz rəqəmi ilə fırlatmaqdır (figure-8 pattern). Proses zamanı sensor üçölçülü fəzada nöqtələri qeyd edir. Təhrifsiz nöqtələr 25–65 µT radiuslu sferada yerləşir. Hard Iron sferanın mərkəzini dəyişir, Soft Iron onu ellipsoidə çevirir. Kalibrləmə alqoritmi yerdəyişmə və miqyaslama parametrlərini hesablayır.
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
)
}
Tərtibatçı cihazın hərəkəti zamanı məlumat toplayaraq öz maqnitometr kalibrləməsini həyata keçirə bilər. Ellipsoid uyğunlaşdırma (ellipsoid fitting) alqoritmi sferadan kənarlaşmaların kvadratları cəmini minimuma endirərək Hard Iron və Soft Iron parametrlərini tapır. Apache Commons Math kitabxanası bu tapşırıq üçün qeyri-xətti ən kiçik kvadratlar metodunun (Levenberg-Marquardt) tətbiqini təqdim edir — proqram kalibrləməsindən sonra dəqiqlik 0.5 dərəcəyə çatır.
Hard Iron-ı minimuma endirmək üçün istehsalçılar maqnitometri telefonun yuxarı hissəsində, dinamik və vibrasiya mühərrikindən uzaqda yerləşdirirlər. Apple mühəndisləri iPhone 16 Pro Max-də (2024) maqnitometrin permalloy folqa ilə ekranlaşdırılmasını tətbiq edərək dinamikin təsirini 4 dəfə azaldıblar. Samsung Galaxy S24 Ultra-da real vaxtda dinamikdə cərəyanı ölçən və induksiya olunmuş sahəni çıxan əlavə kompensasiya dövrəsi istifadə olunur. Maqnit bərkidicili qutular (məsələn, avtomobil tutacaqlarında) güclü təhriflər yaradır — istifadədən sonra maqnitometr təkrar kalibrləməyə qədər səhv istiqamət göstərə bilər.
Android iki sensor təqdim edir: TYPE_MAGNETIC_FIELD (µT ilə kalibrlənmiş məlumatlar) və TYPE_MAGNETIC_FIELD_UNCALIBRATED (təhrif qiymətləndirməsi ilə xam məlumatlar). Naviqasiya tətbiqləri üçün kalibrlənmiş sensordan istifadə tövsiyə olunur — sistem son səkkiz rəqəmi hərəkəti əsasında daxili kalibrləməni avtomatik tətbiq edir.
SENSOR_DELAY_NORMAL gecikməsi (200 ms) kompas üçün kifayətdir, SENSOR_DELAY_FASTEST (0 ms) — yalnız xüsusi tədqiqat tətbiqləri üçün. Dəyərlər alındıqdan sonra onları getRotationMatrix + getOrientation vasitəsilə azimuta çevirmək olar. Sensorun dəqiqliyini event.accuracy vasitəsilə yoxlamaq vacibdir — SENSOR_STATUS_UNRELIABLE dəyəri kalibrləmə ehtiyacını bildirir.
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)
}
}
Maqnitometr yalnız kompas üçün istifadə olunmur. AR tətbiqləri, o cümlədən Pokemon GO, kameranın real dünyaya nisbətən oriyentasiyasını təyin etmək üçün maqnitometrdən istifadə edir. Maqnitometr olmadıqda ARCore Screen Axis rejiminə keçir — oriyentasiya yalnız giroskopla təyin olunur ki, bu da dəqiqliyi azaldır.
Android Auto əsaslı avtomobil naviqasiya sistemlərində maqnitometr tunellərdə və sıx şəhər tikintisində GPS siqnalı itkisi zamanı hərəkət istiqamətini təyin etmək üçün istifadə olunur. Avtomobil təkərlərindən odometriya məlumatları (OBD-II vasitəsilə əldə edilən) ilə birlikdə maqnitometr GPS olmadan 5 dəqiqəyə qədər naviqasiyanı 10–20 metr dəqiqliklə davam etdirməyə imkan verir. Google Maps Engineering Blog (2024) məlumatlarına görə, hibrid alqoritm şəhər kanyonlarında marşrut itkisi faizini 40% azaldır.
Naviqasiya tətbiqləri hərəkət azimutunu — şimal istiqaməti ilə istifadəçinin cari kursu arasındakı bucağı təyin etmək üçün maqnitometrdən istifadə edir. Google Maps-də maqnitometr məlumatları GPS treki və hərəkət tarixçəsi ilə birləşdirilərək mavi istiqamət oxu göstərilir. GPS siqnalı itdikdə (tunellərdə, yeraltı keçidlərdə) maqnitometr oriyentasiya haqqında yeganə məlumat mənbəyi olaraq qalır.
İnteqrasiya edilmiş ASIC ilə yeni nəsil 3-oxlu maqnitometrlər (Bosch-dən BMM350, 2024) cəmi 0.35 mA enerji sərf edir və 200 Hz-ə qədər tezliyi dəstəkləyir. Mobil cihazlar üçün kvant maqnitometrlərinin və almazda NV mərkəzlərinin inkişafı hələ laboratoriya eksperimentləri mərhələsindən çıxmayıb. 2028-ci ilə qədər mobil maqnitometrlərin dəqiqliyinin 0.01 µT-ə çatacağı gözlənilir.
Tez-tez verilən suallar
Telefonla havada səkkiz rəqəmi çəkin — bu rəqəmsal kompası kalibrləmək üçün standart hərəkətdir. Kompas hələ də səhv göstərirsə, qutunu yoxlayın: maqnit bərkidicilər və metal elementlər güclü Hard Iron təhrifləri yaradır.
Əsas səbəblər: telefonun dinamiklərindən və vibrasiya mühərrikindən maqnit müdaxilələri, qutu dəyişikliyindən sonra kalibrləmənin olmaması, yaxınlıqdakı metal əşyaların təsiri. Dəmir-beton konstruksiyalı otaqlarda maqnit sahəsi xüsusilə güclü təhrif olunur.
Bəli, metal aşkarlayan tətbiqlər maqnit sahəsi anomaliyalarını aşkar etmək üçün daxili maqnitometrdən istifadə edir. Lakin aşkarlama dərinliyi 10–20 sm-dən çox deyil və cihaz metal növlərini fərqləndirmir — bu daha çox təhsil alətidir.
TYPE_MAGNETIC_FIELD sistem tərəfindən tətbiq edilmiş kalibrləmədən sonra məlumatları qaytarır. TYPE_MAGNETIC_FIELD_UNCALIBRATED xam dəyərləri üstəgəl yerdəyişmə (bias) qiymətləndirməsini verir, tərtibatçıya öz kalibrləməsini tətbiq etməyə imkan yaradır.
Akselerometr və maqnitometr məlumatları ilə SensorManager.getRotationMatrix istifadə edin, sonra getOrientation — massivin ilk elementi (azimut) radyanlarla olacaq. Kompası göstərmək üçün dərəcəyə çevirin: Math.toDegrees(azimuth).
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun