Magnetometrul în smartphone-uri — ce este, tipuri și principiul de funcționare

Autor: IT Sectr Publicat: 2026-03-22 Timp de citire: 10 min

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 — senzor Hall care măsoară câmpul magnetic pe trei axe cu o gamă de ±1300 µT.
  • Busola digitală bazată pe magnetometru necesită calibrare — fără ea eroarea ajunge la 30–40 de grade.
  • Android API utilizează Sensor.TYPE_MAGNETIC_FIELD pentru acces la date în microtesla (µT).
  • Sensor Fusion combină magnetometrul cu giroscopul și accelerometrul pentru o orientare precisă.
  • Hard Iron și Soft Iron — tipuri de distorsiuni magnetice cauzate de metalul carcasei și difuzoarele smartphone-ului.

Ce este magnetometrul în smartphone

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.

Tipuri de magnetometre în dispozitivele mobile

Î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).

ParametruValoare
TehnologieAMR / Efectul Hall
Gamă±1200 — ±1300 µT
Consum0.5–2 mA
Dimensiune1.5×1.5×0.7 mm
Sensibilitate0.15 µT/LSB

De ce este important magnetometrul pentru smartphone

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.

Cum funcționează senzorul Hall

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).

Structura senzorului 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.

Măsurarea pe axa Z

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.

Cu ce se deosebește magnetometrul de giroscop

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.

Sensor Fusion cu magnetometru

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.

kotlin
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

Distorsiuni magnetice: Hard Iron și Soft Iron

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.

Algoritmul de calibrare

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.

kotlin
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
    )
}

Corecția software a distorsiunilor

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.

Recomandări pentru eliminarea interferențelor

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.

Accesul programatic la magnetometru în Android

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.

Înregistrare și procesare

Î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.

kotlin
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)
    }
}

Aplicarea magnetometrului în aplicațiile mobile

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.

  • Navigație — determinarea azimutului de deplasare în Google Maps, Yandex.Maps, MAPS.ME. Precizia busolei influențează direct calitatea rutei.
  • Detectoare de metale — aplicațiile pentru căutarea obiectelor metalice utilizează magnetometrul pentru detectarea anomaliilor câmpului magnetic.
  • Geofizică și educație — măsurarea câmpului magnetic pentru proiecte educaționale. Senzorul permite studierea câmpului magnetic terestru în școli.
  • VR și video 360 — orientarea capului în căștile VR este corectată de magnetometru pentru compensarea derivei giroscopului.

Magnetometrul în navigația auto

Î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%.

Magnetometrul în aplicațiile de navigație

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.

Viitorul magnetometrelor

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

Cum se calibrează magnetometrul pe telefon?

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.

De ce busola din telefon arată incorect?

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.

Se poate folosi telefonul ca detector de metale?

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.

Cu ce se deosebește TYPE_MAGNETIC_FIELD de TYPE_MAGNETIC_FIELD_UNCALIBRATED?

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.

Cum se obține azimutul din datele magnetometrului?

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

  • Magnetometrul — senzor triaxial de câmp magnetic care funcționează ca o busolă digitală în dispozitivele mobile.
  • Tehnologia AMR bazată pe efectul Hall permite măsurarea câmpului terestru cu o precizie de 0.15 µT/LSB.
  • Hard Iron și Soft Iron — distorsiuni magnetice cauzate de componentele telefonului care necesită calibrare prin mișcarea în formă de 8.
  • Android API oferă TYPE_MAGNETIC_FIELD și TYPE_MAGNETIC_FIELD_UNCALIBRATED cu date în µT.
  • Sensor Fusion combină magnetometrul cu giroscopul și accelerometrul pentru o orientare precisă (1–3 grade).
  • Aplicațiile includ navigația, aplicațiile AR, detectoarele de metale și corectarea derivei giroscopului în VR.
  • Senzorii moderni consumă de la 0.35 mA la o frecvență de 200 Hz și au dimensiunea de 1.5×1.5 mm.

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.

Discutați proiectul

Citiți și