La bussola (compass) in uno smartphone è un sensore digitale basato su un magnetometro che determina la direzione verso i poli magnetici della Terra. La tecnologia consente alle applicazioni di navigazione, cartografia e realtà aumentata di determinare con precisione l’orientamento del dispositivo nello spazio. Secondo STMicroelectronics, 2025, i moderni magnetometri MEMS forniscono una precisione di determinazione della direzione fino a 1–2 gradi.
Punti chiave
La bussola digitale in uno smartphone è un sensore basato su un magnetometro che misura l’intensità del campo magnetico terrestre e determina l’azimut (angolo rispetto al nord magnetico). A differenza di una bussola meccanica, la bussola digitale utilizza sistemi microelettromeccanici (MEMS) per rilevare il campo magnetico. Il magnetometro misura il campo lungo tre assi, consentendo di determinare correttamente la direzione con qualsiasi inclinazione dello smartphone.
Un magnetometro MEMS moderno è un microchip di dimensioni 2×2×1 mm integrato nel corpo dello smartphone insieme a un accelerometro e un giroscopio (come parte di un IMU a 9 assi). Il sensore misura non solo la direzione ma anche l’intensità del campo magnetico terrestre (25–65 µT a seconda della latitudine). La presenza di oggetti metallici e campi magnetici parassiti degli altoparlanti, del motore di vibrazione e della fotocamera crea distorsioni, pertanto è necessaria una correzione software delle letture per un funzionamento preciso.
Le prime bussole digitali nei telefoni cellulari sono apparse nel 2009 con il lancio dell’iPhone 3GS — il primo smartphone con magnetometro integrato. Oggi i magnetometri sono installati nella stragrande maggioranza degli smartphone, inclusi i modelli economici. Secondo Yole Group, il mercato dei magnetometri MEMS per dispositivi mobili supera 1,5 miliardi di unità all’anno, confermando la domanda per questa tecnologia.
Il cuore di un magnetometro MEMS è un elemento sensibile che modifica le sue caratteristiche elettriche sotto l’influenza di un campo magnetico esterno. Gli smartphone moderni utilizzano l’effetto Hall o l’effetto magnetoresistivo (AMR — Anisotropic Magneto-Resistance). Il principio si basa sul fatto che un materiale percorso da corrente cambia la sua resistenza quando esposto a un campo magnetico e il vettore del campo magnetico viene calcolato dalla variazione di tensione.
I sensori ad effetto Hall rilevano le variazioni di tensione ai bordi di una piastra semiconduttrice causate dalla forza di Lorentz sulle cariche in movimento. I sensori magnetoresistivi (AMR) utilizzano una pellicola di permalloy (NiFe) la cui resistenza dipende dalla direzione del campo magnetico. I sensori AMR forniscono dimensioni ridotte e maggiore sensibilità rispetto ai sensori Hall, motivo per cui dominano negli smartphone moderni.
| Tipo | Sensibilità | Consumo energetico | Dimensioni |
|---|---|---|---|
| Hall | Media | Basso | Medio |
| AMR | Alta | Basso | Piccolo |
| GMR | Molto alta | Medio | Piccolo |
I dati del magnetometro vengono combinati con le letture dell’accelerometro per correggere l’inclinazione e determinare la direzione del nord nel piano orizzontale. L’algoritmo di fusione dei sensori utilizza il filtro di Madgwick o il filtro di Kalman per combinare i dati del magnetometro, del giroscopio e dell’accelerometro. Ciò fornisce un azimut stabile e preciso anche durante rotazioni rapide e scuotimenti del dispositivo.
Nell’industria mobile vengono utilizzati tre tipi principali di magnetometri MEMS: a effetto Hall, magnetoresistivi anisotropi (AMR) e magnetoresistivi giganti (GMR). I magnetometri AMR sono i più diffusi negli smartphone grazie al loro equilibrio ottimale tra sensibilità, consumo energetico e costo. I produttori leader sono AKM (Asahi Kasei Microdevices), STMicroelectronics e Bosch Sensortec.
La sensibilità di un magnetometro AMR in uno smartphone tipico è di 0,3–1 µT con un range dinamico di ±1000 µT (±8 Gauss), sufficiente per misurare con precisione il campo terrestre (30–65 µT) e compensare i campi parassiti. La frequenza di campionamento del sensore può raggiungere 100–200 Hz, ma la maggior parte delle applicazioni utilizza 10–50 Hz per risparmiare energia. La compensazione automatica della temperatura e delle deformazioni del telaio è implementata a livello del driver del sensore.
La calibrazione della bussola è il processo di compensazione dei campi magnetici parassiti creati dai componenti dello smartphone: altoparlanti, motore di vibrazione, fotocamera e batteria. Senza calibrazione, le letture del magnetometro possono deviare dalla direzione reale di 10–30 gradi. Il sistema di calibrazione determina la matrice di offset (hard-iron bias) lungo tre assi e la applica per correggere tutte le misurazioni successive.
Il metodo standard di calibrazione della bussola è disegnare un “8”: l’utente ruota lo smartphone seguendo una traiettoria che ricorda la cifra 8. Durante il movimento, il sensore registra il campo magnetico in tutti gli orientamenti possibili e l’algoritmo accumula punti e approssima una sfera con centro spostato rispetto allo zero. Il raggio della sfera corrisponde all’intensità del campo magnetico terrestre e il centro rappresenta il vettore di offset parassita. Dopo l’approssimazione, il sistema calcola i coefficienti di correzione per ogni asse.
I moderni algoritmi di calibrazione di Qualcomm e MediaTek eseguono una calibrazione continua in background senza intervento dell’utente. Analizzano i cambiamenti del campo magnetico durante le rotazioni del dispositivo e aggiornano automaticamente i parametri di correzione. Se il sensore rileva un nuovo campo parassita (ad esempio, quando si applica una custodia magnetica), il sistema avvia la ricalibrazione entro 1–2 secondi di movimento continuo del dispositivo.
La bussola digitale viene utilizzata in un’ampia gamma di applicazioni mobili. L’uso principale è nei servizi di navigazione e cartografia (Google Maps, Yandex.Maps, 2GIS), che determinano l’orientamento del dispositivo sulla mappa per visualizzare correttamente la direzione di spostamento dell’utente. Nelle applicazioni di realtà aumentata (AR), la bussola garantisce il posizionamento corretto degli oggetti virtuali rispetto ai punti cardinali.
Nelle applicazioni astronomiche (Star Walk, SkySafari), la bussola combinata con un accelerometro determina la direzione verso cui è puntato lo smartphone e mostra l’area corrispondente del cielo notturno. Le app di pesca e turismo utilizzano la bussola per segnare punti di interesse sulla mappa con riferimento all’azimut. Il fitness tracking con GPS utilizza le letture della bussola per determinare la direzione di corsa o ciclismo, migliorando la precisione della visualizzazione del percorso.
Per accedere alla bussola digitale su Android, viene utilizzato il sensore TYPE_MAGNETIC_FIELD dell’API Sensor. Gli sviluppatori registrano un listener per i cambiamenti delle letture del magnetometro e ricevono un array di valori dell’intensità del campo magnetico lungo tre assi in microtesla. Per determinare l’azimut, i dati del magnetometro vengono combinati con i dati dell’accelerometro attraverso una matrice di rotazione mediante fusione dei sensori.
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
class CompassManager(
private val sensorManager: SensorManager
) : SensorEventListener {
private val magnetometer = FloatArray(3)
private val accelerometer = FloatArray(3)
private val rotationMatrix = FloatArray(9)
private val orientation = FloatArray(3)
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type == Sensor.TYPE_MAGNETIC_FIELD) {
event.values.copyInto(magnetometer)
} else if (event.sensor.type == Sensor.TYPE_ACCELEROMETER) {
event.values.copyInto(accelerometer)
}
SensorManager.getRotationMatrix(
rotationMatrix, null,
accelerometer, magnetometer
)
SensorManager.getOrientation(rotationMatrix, orientation)
val azimuth = Math.toDegrees(orientation[0].toDouble())
// azimut: 0 = nord, 90 = est, 180 = sud, 270 = ovest
}
fun start() {
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_UI)
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI)
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {}
}
L’azimut ottenuto tramite getOrientation viene misurato in radianti e può assumere valori da -π a π, dove 0 corrisponde al nord magnetico. Per la visualizzazione sullo schermo, i valori vengono convertiti in gradi (Math.toDegrees) normalizzati nell’intervallo 0–360. È importante considerare la declinazione magnetica — l’angolo tra il nord magnetico e il nord vero (geografico), che dipende dalla posizione geografica e cambia nel tempo. Google Maps regola automaticamente la declinazione tramite l’API GeomagneticField.
Domande frequenti
La bussola digitale utilizza un magnetometro MEMS — un chip di 2×2 mm che misura il campo magnetico terrestre lungo tre assi. I dati del magnetometro vengono combinati con le letture dell’accelerometro per determinare l’azimut — l’angolo tra la direzione del nord e l’orientamento del dispositivo.
Le letture errate della bussola sono più spesso causate da mancanza di calibrazione, interferenze magnetiche dagli altoparlanti o dal motore di vibrazione, nonché da custodie magnetiche. La soluzione è eseguire un movimento di calibrazione a “8” o rimuovere gli accessori magnetici. Per errori persistenti, potrebbe essere necessario controllare il sensore.
Sì, la calibrazione della bussola è necessaria per compensare i campi magnetici parassiti all’interno dello smartphone. Nella maggior parte dei dispositivi moderni, la calibrazione viene eseguita automaticamente in background. Per la calibrazione manuale, disegna un “8” con lo smartphone in aria — il sistema raccoglierà dati da tutte le angolazioni e correggerà le letture.
Su Android, l’accesso alla bussola avviene tramite l’API Sensor con il sensore TYPE_MAGNETIC_FIELD. L’azimut viene calcolato tramite SensorManager.getRotationMatrix() e getOrientation(), che combinano i dati del magnetometro e dell’accelerometro. L’azimut risultante può essere adattato per la visualizzazione sullo schermo.
Le bussole più precise sono installate negli smartphone con sensore IMU triplo (magnetometro + giroscopio + accelerometro) e sistema di calibrazione attivo. I leader sono i modelli flagship Google Pixel, Samsung Galaxy S-series e iPhone Pro — utilizzano magnetometri AKM e Bosch con sensibilità di 0,3 µT e correzione automatica.
Riepilogo
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.
Leggi anche