Magnetometro negli smartphone — cos'è, tipi e principio di funzionamento

Autore: IT Sectr Pubblicato: 2026-03-22 Tempo di lettura: 10 min

Un magnetometro è un sensore che misura l'intensità del campo magnetico terrestre per determinare i punti cardinali. Nei dispositivi mobili, funziona come una bussola digitale, fornendo una precisione fino a 1–2 gradi con una calibrazione adeguata. Secondo Bosch Sensortec Application Note, 2024, i MEMS-magnetometri moderni consumano solo 0.5–2 mA e si inseriscono in un pacchetto di 1.5×1.5×0.7 mm.

Punti chiave

  • Magnetometro — sensore Hall che misura il campo magnetico su tre assi con un intervallo di ±1300 µT.
  • Bussola digitale basata su magnetometro richiede calibrazione — senza di essa, l'errore raggiunge 30–40 gradi.
  • Android API utilizza Sensor.TYPE_MAGNETIC_FIELD per accedere ai dati in microtesla (µT).
  • Sensor Fusion combina magnetometro con giroscopio e accelerometro per un orientamento preciso.
  • Hard Iron e Soft Iron — tipi di distorsioni magnetiche causate dalla scocca metallica e dagli altoparlanti del telefono.

Cos'è un magnetometro in uno smartphone

Il magnetometro in un dispositivo mobile è un sensore di campo magnetico a tre assi basato sull'effetto Hall. Misura le proiezioni del vettore di induzione magnetica sugli assi X, Y e Z. In combinazione con un accelerometro, il magnetometro determina l'azimut — l'angolo tra la direzione nord e l'asse del telefono.

Tipi di magnetometri nei dispositivi mobili

Gli smartphone moderni utilizzano MEMS-magnetometri basati sull'effetto magnetoresistivo anisotropo (AMR) e sull'effetto Hall. I sensori AMR (serie AKM di Asahi Kasei Microdevices) forniscono una sensibilità di 0.15 µT/LSB e un intervallo di ±1200 µT — sufficiente per misurare il campo terrestre (25–65 µT).

ParametroValore
TecnologiaAMR / Effetto Hall
Intervallo±1200 — ±1300 µT
Consumo0.5–2 mA
Dimensioni1.5×1.5×0.7 mm
Sensibilità0.15 µT/LSB

Perché il magnetometro è importante per uno smartphone

Senza una bussola digitale, le app di navigazione non possono determinare la direzione del movimento. Google Maps utilizza il magnetometro per visualizzare l'orientamento della mappa rispetto alla direzione dello sguardo dell'utente. Quando il sensore si guasta, l'app mostra solo la posizione sulla mappa senza la freccia blu di direzione.

Come funziona il sensore Hall

L'effetto Hall è un fenomeno fisico di comparsa di una differenza di potenziale ai bordi di una piastra conduttrice quando esposta a un campo magnetico. I MEMS-magnetometri utilizzano strutture a film sottile in permalloy (NiFe), la cui resistenza cambia sotto l'influenza di un campo magnetico esterno (effetto AMR).

Struttura del sensore AMR

Ciascuno dei tre canali (X, Y, Z) è costituito da quattro magnetoresistenze collegate in un ponte di Wheatstone. Il campo magnetico modifica la resistenza delle resistenze del 2–3%, che viene convertita in tensione da un amplificatore differenziale. Un ADC integrato a 16 bit digitalizza il segnale a una frequenza fino a 100 Hz.

Misurazione dell'asse Z

Per misurare la componente verticale del campo, viene utilizzato un concentratore magnetico integrato (IMC). Si tratta di una struttura a film sottile in NiFe che devia il campo orizzontale sul piano verticale, consentendo a un singolo ponte AMR di misurare tutti e tre gli assi.

Differenza tra magnetometro e giroscopio

Il magnetometro determina l'orientamento rispetto al campo magnetico terrestre (riferimento assoluto), mentre un giroscopio misura solo il cambiamento angolare (dati relativi). Il giroscopio fornisce dati accurati su brevi intervalli ma accumula errore di deriva. Il magnetometro non deriva ma è suscettibile a interferenze magnetiche.

Sensor Fusion con magnetometro

Android combina i dati di tre sensori tramite SensorManager.getRotationMatrix. Il magnetometro viene utilizzato per correggere la deriva del giroscopio su lunghi intervalli. Senza magnetometro, il giroscopio accumula un errore di 10–20 gradi in 5 minuti. Secondo Google ARCore (2024), l'algoritmo di fusione raggiunge una precisione di 1–3 gradi con un magnetometro.

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 in radianti

Distorsioni magnetiche: Hard Iron e Soft Iron

Hard Iron — un campo magnetico permanente creato da materiali ferromagnetici all'interno del telefono: magneti degli altoparlanti, motore di vibrazione, telaio metallico. La distorsione Hard Iron si manifesta come un offset costante (bias) su ciascun asse. Soft Iron — un cambiamento di direzione del campo causato da materiali magneticamente permeabili che distorcono le linee di campo.

Algoritmo di calibrazione

La procedura standard di calibrazione del magnetometro consiste nel ruotare il telefono a forma di otto. Durante il processo, il sensore registra punti nello spazio tridimensionale. Senza distorsioni, i punti giacciono su una sfera di raggio 25–65 µT. Hard Iron sposta il centro della sfera, Soft Iron la trasforma in un ellissoide. L'algoritmo di calibrazione calcola i parametri di offset e ridimensionamento.

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

Correzione software delle distorsioni

Lo sviluppatore può implementare la propria calibrazione del magnetometro raccogliendo dati mentre il dispositivo si muove. L'algoritmo di adattamento ellissoidale (ellipsoid fitting) trova i parametri di Hard Iron e Soft Iron minimizzando la somma dei quadrati degli scarti dalla sfera. La libreria Apache Commons Math fornisce un'implementazione dei minimi quadrati non lineari (Levenberg-Marquardt) per questo compito — la precisione dopo la calibrazione software raggiunge 0.5 gradi.

Raccomandazioni per la mitigazione delle interferenze

Per minimizzare Hard Iron, i produttori posizionano il magnetometro nella parte superiore del telefono, lontano dall'altoparlante e dal motore di vibrazione. Gli ingegneri Apple nell'iPhone 16 Pro Max (2024) hanno utilizzato una schermatura in foglio di permalloy per il magnetometro, riducendo l'influenza dell'altoparlante di 4 volte. Il Samsung Galaxy S24 Ultra utilizza un circuito di compensazione aggiuntivo che misura la corrente dell'altoparlante in tempo reale per sottrarre il campo indotto. Le custodie con supporti magnetici (ad esempio, nei supporti per auto) creano forti distorsioni — dopo l'uso, il magnetometro potrebbe mostrare la direzione sbagliata fino a una nuova calibrazione.

Accesso programmatico al magnetometro in Android

Android fornisce due sensori: TYPE_MAGNETIC_FIELD (dati calibrati in µT) e TYPE_MAGNETIC_FIELD_UNCALIBRATED (dati grezzi con stima della distorsione). Per le app di navigazione, si consiglia di utilizzare il sensore calibrato — il sistema applica automaticamente la calibrazione integrata basata sull'ultimo movimento a forma di otto.

Registrazione e elaborazione

SENSOR_DELAY_NORMAL (200 ms) è sufficiente per una bussola, SENSOR_DELAY_FASTEST (0 ms) — solo per applicazioni di ricerca specializzate. Dopo aver ricevuto i valori, è possibile convertirli in azimut tramite getRotationMatrix + getOrientation. È importante verificare la precisione del sensore tramite event.accuracy — SENSOR_STATUS_UNRELIABLE significa che è necessaria la calibrazione.

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

Applicazioni del magnetometro nelle app mobili

Il magnetometro non viene utilizzato solo per la bussola. Le applicazioni AR, incluso Pokemon GO, utilizzano il magnetometro per determinare l'orientamento della fotocamera rispetto al mondo reale. Senza magnetometro, ARCore passa alla modalità Screen Axis — l'orientamento è determinato solo dal giroscopio, riducendo la precisione.

  • Navigazione — determinazione dell'azimut di movimento in Google Maps, Yandex.Maps, MAPS.ME. La precisione della bussola influisce direttamente sulla qualità del percorso.
  • Rilevatori di metalli — le app per trovare oggetti metallici utilizzano il magnetometro per rilevare anomalie del campo magnetico.
  • Geofisica e istruzione — misurazione del campo magnetico per progetti educativi. Il sensore consente di studiare il campo magnetico terrestre nelle scuole.
  • VR e video 360 — l'orientamento della testa nei visori VR viene corretto dal magnetometro per compensare la deriva del giroscopio.

Magnetometro nella navigazione automobilistica

Nei sistemi di navigazione automobilistica basati su Android Auto, il magnetometro viene utilizzato per determinare la direzione del movimento quando il segnale GPS viene perso in gallerie e aree urbane dense. In combinazione con i dati di odometria dalle ruote dell'auto (ottenuti tramite OBD-II), il magnetometro consente di continuare la navigazione fino a 5 minuti senza GPS con una precisione di posizionamento di 10–20 metri. Secondo Google Maps Engineering Blog (2024), l'algoritmo ibrido riduce la perdita di percorso nei canyon urbani del 40%.

Magnetometro nelle app di navigazione

Le app di navigazione utilizzano il magnetometro per determinare l'azimut del movimento — l'angolo tra il nord e la direzione attuale dell'utente. In Google Maps, i dati del magnetometro vengono combinati con la traccia GPS e la cronologia degli spostamenti per visualizzare la freccia blu di direzione. Quando il segnale GPS viene perso (in gallerie, passaggi sotterranei), il magnetometro rimane l'unica fonte di informazioni sull'orientamento.

Futuro dei magnetometri

La nuova generazione di magnetometri a 3 assi con ASIC integrato (BMM350 di Bosch, 2024) consuma solo 0.35 mA e supporta fino a 200 Hz. Lo sviluppo di magnetometri quantistici e centri NV nel diamante per dispositivi mobili non è ancora uscito dalla fase di laboratorio. Si prevede che entro il 2028, la precisione dei magnetometri mobili raggiungerà 0.01 µT.

Domande frequenti

Come calibrare il magnetometro sul telefono?

Disegna un otto con il telefono in aria — questo è il gesto standard per calibrare la bussola digitale. Se la bussola mostra ancora erroneamente, controlla la custodia: i supporti magnetici e gli elementi metallici creano forti distorsioni Hard Iron.

Perché la bussola del telefono mostra la direzione sbagliata?

Cause principali: interferenze magnetiche dagli altoparlanti e dal motore di vibrazione del telefono, mancanza di calibrazione dopo il cambio della custodia, influenza di oggetti metallici vicini. In ambienti interni con strutture in cemento armato, il campo magnetico viene distorto particolarmente.

Posso usare il telefono come rilevatore di metalli?

Sì, le app rilevatrici di metalli utilizzano il magnetometro integrato per rilevare anomalie del campo magnetico. Tuttavia, la profondità di rilevamento non supera 10–20 cm e il dispositivo non distingue i tipi di metallo — è più uno strumento educativo.

Qual è la differenza tra TYPE_MAGNETIC_FIELD e TYPE_MAGNETIC_FIELD_UNCALIBRATED?

TYPE_MAGNETIC_FIELD restituisce i dati dopo la calibrazione applicata dal sistema. TYPE_MAGNETIC_FIELD_UNCALIBRATED fornisce valori grezzi più una stima del bias, consentendo allo sviluppatore di applicare la propria calibrazione.

Come ottenere l'azimut dai dati del magnetometro?

Usa SensorManager.getRotationMatrix con i dati dell'accelerometro e del magnetometro, poi getOrientation — il primo elemento dell'array (azimut) sarà in radianti. Per visualizzare la bussola, converti in gradi: Math.toDegrees(azimuth).

Riepilogo

  • Magnetometro — sensore di campo magnetico a tre assi che funge da bussola digitale nei dispositivi mobili.
  • Tecnologia AMR basata sull'effetto Hall consente di misurare il campo terrestre con una precisione di 0.15 µT/LSB.
  • Hard Iron e Soft Iron — distorsioni magnetiche causate dai componenti del telefono che richiedono calibrazione a forma di otto.
  • Android API fornisce TYPE_MAGNETIC_FIELD e TYPE_MAGNETIC_FIELD_UNCALIBRATED con dati in µT.
  • Sensor Fusion combina magnetometro con giroscopio e accelerometro per un orientamento preciso (1–3 gradi).
  • Applicazioni includono navigazione, app AR, rilevatori di metalli e correzione della deriva del giroscopio in VR.
  • Sensori moderni consumano da 0.35 mA a 200 Hz con dimensioni di 1.5×1.5 mm.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche