Magnetometrul este un senzor care măsoară intensitatea câmpului magnetic terestru pentru determinarea punctelor cardinale. În dispozitivele mobile funcționează ca o busolă digitală, asigurând o precizie de până la 1–2 grade cu o calibrare corectă. Conform Bosch Sensortec Application Note, 2024, magnetometrele MEMS moderne consumă doar 0.5–2 mA și încap într-un carcasă de 1.5×1.5×0.7 mm.
Principalele
Magnetometrul dintr-un dispozitiv mobil este un senzor triaxial de câmp magnetic bazat pe efectul Hall. Acesta măsoară proiecțiile vectorului de inducție magnetică pe axele X, Y și Z. În combinație cu accelerometrul, magnetometrul permite determinarea azimutului — unghiul dintre direcția nord și axa telefonului.
În smartphone-urile moderne sunt utilizate magnetometre MEMS bazate pe efectul magnetorezistiv anizotrop (AMR) și efectul Hall. Senzorii AMR (seria AKM de la Asahi Kasei Microdevices) asigură o sensibilitate de 0.15 µT/LSB și o gamă de ±1200 µT — suficient pentru măsurarea câmpului terestru (25–65 µT).
| Parametru | Valoare |
|---|---|
| Tehnologie | AMR / Efectul Hall |
| Gamă | ±1200 — ±1300 µT |
| Consum | 0.5–2 mA |
| Dimensiune | 1.5×1.5×0.7 mm |
| Sensibilitate | 0.15 µT/LSB |
Fără busolă digitală, aplicațiile de navigație nu pot determina direcția de deplasare. Google Maps utilizează magnetometrul pentru afișarea orientării hărții în raport cu direcția privirii utilizatorului. La defectarea senzorului, aplicația arată doar poziția pe hartă fără săgeata albastră de direcție.
Efectul Hall este un fenomen fizic de apariție a diferenței de potențial pe marginile unei plăci conductoare sub acțiunea câmpului magnetic. În magnetometrele MEMS se utilizează structuri subțiri din permalloy (NiFe), a căror rezistență se modifică sub acțiunea câmpului magnetic extern (efect AMR).
Fiecare dintre cele trei canale (X, Y, Z) este format din patru magnetorezistoare conectate în puntea Wheatstone. Câmpul magnetic modifică rezistența rezistoarelor cu 2–3%, ceea ce este transformat de un amplificator diferențial în tensiune. Un convertor ADC încorporat de 16 biți digitizează semnalul cu o frecvență de până la 100 Hz.
Pentru măsurarea componentei verticale a câmpului se utilizează concentratorul integrat de flux magnetic (IMC — Integrated Magnetic Concentrator). Aceasta este o structură subțire din NiFe care deviază câmpul orizontal în plan vertical, permițând unei singure punți AMR să măsoare toate cele trei axe.
Magnetometrul determină orientarea față de câmpul magnetic terestru (referință absolută), iar giroscopul măsoară doar modificarea unghiului (date relative). Giroscopul oferă date precise pe intervale scurte, dar acumulează eroarea de derivă. Magnetometrul nu derivă, dar este susceptibil la interferențe magnetice.
Android combină datele a trei senzori prin SensorManager.getRotationMatrix. Magnetometrul este utilizat pentru corectarea derivei giroscopului pe intervale lungi. Fără magnetometru, giroscopul acumulează o eroare de 10–20 de grade în 5 minute. Conform Google ARCore (2024), algoritmul fusion atinge o precizie de 1–3 grade în prezența magnetometrului.
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] — azimut în radiani
Hard Iron — câmp magnetic constant creat de materiale feromagnetice din interiorul telefonului: magneții difuzoarelor, motorul de vibrații, rama metalică a carcasei. Distorsiunea Hard Iron se manifestă ca o deplasare constantă (bias) pe fiecare axă. Soft Iron — modificarea direcției câmpului din cauza materialelor magnetoconductoare care distorsionează forma liniilor de câmp.
Procedura standard de calibrare a magnetometrului constă în rotirea telefonului în formă de 8 (figure-8 pattern). În acest proces, senzorul înregistrează puncte în spațiul tridimensional. Fără distorsiuni, punctele se află pe o sferă cu raza de 25–65 µT. Hard Iron deplasează centrul sferei, Soft Iron o transformă într-un elipsoid. Algoritmul de calibrare calculează parametrii de deplasare și scalare.
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
)
}
Dezvoltatorul poate implementa propria calibrare a magnetometrului, colectând date în timpul mișcării dispozitivului. Algoritmul de potrivire a elipsoidului (ellipsoid fitting) găsește parametrii Hard Iron și Soft Iron, minimizând suma pătratelor abaterilor de la sferă. Biblioteca Apache Commons Math oferă implementarea metodei celor mai mici pătrate neliniare (Levenberg-Marquardt) pentru această sarcină — precizia după calibrarea software atinge 0.5 grade.
Pentru minimizarea Hard Iron, producătorii plasează magnetometrul în partea superioară a telefonului, departe de difuzor și motorul de vibrații. Inginerii Apple la iPhone 16 Pro Max (2024) au aplicat ecranarea magnetometrului cu folie de permalloy, reducând influența difuzorului de 4 ori. În Samsung Galaxy S24 Ultra se utilizează un circuit de compensare suplimentar care măsoară curentul în difuzor în timp real pentru a scădea câmpul indus. Husele cu prinderi magnetice (de exemplu, în suporturile auto) creează distorsiuni puternice — după utilizare, magnetometrul poate indica o direcție greșită până la recalibrare.
Android oferă doi senzori: TYPE_MAGNETIC_FIELD (date calibrate în µT) și TYPE_MAGNETIC_FIELD_UNCALIBRATED (date brute cu estimarea distorsiunii). Pentru aplicațiile de navigație se recomandă utilizarea senzorului calibrat — sistemul aplică automat calibrarea încorporată pe baza ultimei mișcări în formă de 8.
Întârzierea SENSOR_DELAY_NORMAL (200 ms) este suficientă pentru busolă, SENSOR_DELAY_FASTEST (0 ms) — doar pentru aplicații speciale de cercetare. După obținerea valorilor, acestea pot fi convertite în azimut prin getRotationMatrix + getOrientation. Este important să verificați precizia senzorului prin event.accuracy — valoarea SENSOR_STATUS_UNRELIABLE indică necesitatea calibrării.
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)
}
}
Magnetometrul este utilizat nu numai pentru busolă. Aplicațiile AR, inclusiv Pokemon GO, folosesc magnetometrul pentru determinarea orientării camerei față de lumea reală. În absența magnetometrului, ARCore trece în modul Screen Axis — orientarea este determinată doar de giroscop, ceea ce reduce precizia.
În sistemele de navigație auto bazate pe Android Auto, magnetometrul este utilizat pentru determinarea direcției de deplasare la pierderea semnalului GPS în tuneluri și zone urbane dense. În combinație cu datele de odometrie de la roțile vehiculului (obținute prin OBD-II), magnetometrul permite continuarea navigației până la 5 minute fără GPS cu o precizie de poziționare de 10–20 de metri. Conform Google Maps Engineering Blog (2024), algoritmul hibrid reduce procentul de pierdere a rutei în canioanele urbane cu 40%.
Aplicațiile de navigație folosesc magnetometrul pentru determinarea azimutului de deplasare — unghiul dintre direcția nord și cursul curent al utilizatorului. În Google Maps, datele magnetometrului sunt combinate cu traseul GPS și istoricul deplasărilor pentru afișarea săgeții albastre de direcție. La pierderea semnalului GPS (în tuneluri, pasaje subterane), magnetometrul rămâne singura sursă de informație despre orientare.
Noua generație de magnetometre 3-axiale cu ASIC integrat (BMM350 de la Bosch, 2024) consumă doar 0.35 mA și suportă o frecvență de până la 200 Hz. Dezvoltarea magnetometrelor cuantice și a centrelor NV în diamant pentru dispozitive mobile nu a ieșit încă din faza experimentelor de laborator. Se estimează că până în 2028, precizia magnetometrelor mobile va atinge 0.01 µT.
Întrebări frecvente
Desenați o cifră 8 cu telefonul în aer — acesta este gestul standard pentru calibrarea busolei digitale. Dacă busola tot arată incorect, verificați husa: prinderile magnetice și elementele metalice creează distorsiuni puternice Hard Iron.
Cauzele principale: interferențe magnetice de la difuzoare și motorul de vibrații al telefonului, lipsa calibrării după schimbarea husei, influența obiectelor metalice din apropiere. În încăperi cu construcții din beton armat, câmpul magnetic este distorsionat deosebit de puternic.
Da, aplicațiile detector de metale utilizează magnetometrul încorporat pentru detectarea anomaliilor câmpului magnetic. Cu toate acestea, adâncimea de detectare nu depășește 10–20 cm, iar dispozitivul nu diferențiază tipurile de metale — este mai degrabă un instrument educațional.
TYPE_MAGNETIC_FIELD returnează datele după calibrarea aplicată de sistem. TYPE_MAGNETIC_FIELD_UNCALIBRATED oferă valori brute plus estimarea deplasării (bias), permițând dezvoltatorului să aplice propria calibrare.
Utilizați SensorManager.getRotationMatrix cu datele accelerometrului și magnetometrului, apoi getOrientation — primul element al matricei (azimutul) va fi în radiani. Pentru afișarea busolei, convertiți în grade: Math.toDegrees(azimuth).
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și