SL.pro
Blog · · 9 minuti di lettura

Come funzionano le app livella a bolla: gli accelerometri del telefono

Il tuo telefono sa da che parte è il basso perché contiene un piccolo sensore chiamato accelerometro MEMS. Quel sensore misura come la gravità tira il telefono lungo tre direzioni allo stesso tempo. Un'app livella legge quei tre numeri, fa un po' di trigonometria e ti mostra un angolo. Lo fa centinaia di volte al secondo, dentro un chip che a occhio nudo faresti fatica a vedere. Questo articolo spiega cosa succede davvero.

Punti chiave
  • L'accelerometro misura come la gravità si distribuisce su tre assi. Non misura il movimento quando il telefono sta fermo.
  • L'inclinazione avanti-indietro e sinistra-destra si ricava da formule con l'arcotangente applicate a quelle tre letture di gravità.
  • Spirit Level Pro fa passare le letture grezze attraverso una media mobile esponenziale (alpha=0,15) per evitare che la bolla vibri.
  • I sensori MEMS derivano con la temperatura, quindi calibra dove lavori.
  • Per un telefono tenuto fermo contro una superficie, l'accelerometro fa tutto il lavoro. Il giroscopio non serve.
Foto macro ravvicinata di un chip accelerometro MEMS a tre assi Kionix da un dispositivo mobile
Il chip accelerometro MEMS dentro il telefono è più piccolo di un chicco di riso, eppure misura la gravità con precisione.

Cos'è un accelerometro MEMS?

MEMS sta per Micro-Electro-Mechanical Systems, cioè sistemi micro-elettromeccanici. L'elemento sensibile dentro l'accelerometro di un telefono è minuscolo, poche centinaia di micron, più piccolo di un granello di sale. Si trova sullo stesso silicio dell'elettronica normale del chip e si fabbrica allo stesso modo. Per questo questi sensori costano poco e finiscono in quasi tutti i telefoni.

Il meccanismo è semplice, una volta che lo immagini. Una piccola massa è appesa a molle di silicio incise nel chip. Quando inclini il chip, la gravità sposta la massa un po' fuori centro. Quel movimento cambia la distanza tra dei sottili denti metallici a pettine, e cambiare quella distanza cambia la capacità elettrica tra loro. Il chip legge quella variazione e la trasforma in un valore di accelerazione, misurato in g.

Ecco la parte che rende possibile una livella. Quando il telefono sta fermo, l'accelerometro non sta leggendo un movimento. Sta leggendo quanta parte della gravità tira lungo ciascuno dei suoi tre assi. La gravità è una forza fissa e nota. Una volta che sai come si divide tra i tre assi, puoi calcolare esattamente come è inclinato il telefono.

Come misura l'inclinazione un accelerometro a 3 assi?

Un accelerometro a tre assi dà al telefono le sue direzioni: X va da sinistra a destra, Y va dall'alto in basso e Z va da davanti a dietro. Appoggia il telefono in piano su un tavolo e la gravità tira quasi tutta lungo Z, quindi Z legge circa 9,81 m/s² mentre X e Y leggono vicino a zero. Inclina il telefono e la gravità si sposta: meno su Z, di più su X e Y, in proporzione all'angolo.

Trasformare quelle tre letture in angoli è trigonometria di base. L'inclinazione avanti-indietro (pitch) e quella sinistra-destra (roll) vengono entrambe da un'arcotangente:

Pitch = arctan( Y / sqrt(X² + Z²) ) Roll = arctan( X / sqrt(Y² + Z²) )

Queste due righe sono tutto il cuore matematico di un'app livella. Metti dentro i tre valori grezzi, esegui il calcolo e ottieni pitch e roll in radianti. Moltiplica per 180/π per avere i gradi. È quel numero che vedi sullo schermo.

Ti chiederai perché il denominatore usa la radice quadrata degli altri due assi invece di uno solo. Serve a tenere stabile la lettura per tutta la rotazione. Se dividi per un solo asse, il calcolo si rompe vicino alla verticale, perché quell'asse scende a zero e finisci per dividere quasi per niente. Usare la grandezza combinata degli altri due assi evita il problema.

Scheda breakout con accelerometro MEMS a 3 assi Freescale Semiconductor su sfondo bianco
Un accelerometro a 3 assi misura la trazione della gravità sugli assi X, Y e Z nello stesso momento.
Guarda la fisica al lavoro in tempo reale

Spirit Level Pro mostra gli angoli di pitch e roll dal vivo, con lisciamento EMA, cinque preset di tolleranza e calibrazione con un tocco. Nessun download necessario.

Prova Spirit Level Pro gratuitamente

Perché i dati grezzi del sensore sono così rumorosi?

L'uscita grezza dell'accelerometro salta più di quanto ti aspetti. Anche un telefono fermissimo mostra piccole oscillazioni nelle letture. Una parte è rumore elettrico del sensore stesso, una parte è vibrazione che arriva dalla superficie, e una parte è errore di arrotondamento quando il segnale analogico viene trasformato in numeri. Mostra quel flusso grezzo sullo schermo e la bolla trema di continuo, il che è inutile per un lavoro accurato.

Il rumore arriva da poche fonti. Il rumore termico è una fluttuazione elettrica casuale dovuta al calore. Non lo puoi togliere, e fissa il limite minimo di quanto silenzioso può essere il sensore. Il rumore da vibrazione arriva dall'ambiente attorno: il compressore del frigo, i passi, il traffico fuori. E il punto di zero del sensore deriva lentamente da solo nel tempo. Ognuno di questi vuole un rimedio diverso.

Il rimedio software solito è un filtro passa-basso. Lascia passare i cambiamenti lenti, come un'inclinazione vera, e trattiene quelli rapidi, come la vibrazione. Il modo comune di farlo è una media mobile esponenziale, o EMA. Ogni nuova lettura conta per una frazione, alpha, e il resto arriva dall'ultimo valore filtrato:

filtrato = alpha × nuova_lettura + (1 - alpha) × filtrato_precedente

Spirit Level Pro usa una EMA con alpha=0,15. Ci siamo arrivati provando a mano una serie di valori. Con alpha=0,05 la lettura era liscissima ma lenta, e la bolla restava indietro rispetto al telefono quando lo muovevi. Con alpha=0,3 seguiva bene ma tremava abbastanza da rendere difficile cogliere una lettura precisa. Alpha=0,15 sta nel mezzo. La bolla sembra viva senza sembrare nervosa.

Il compromesso: un alpha più alto rende il display più pronto a seguire l'inclinazione vera, ma lascia passare anche più vibrazione. Un alpha più basso liscia di più ma aggiunge ritardo. Alpha=0,15 bilancia le due cose e si assesta in circa 150 ms.

Che ruolo ha il giroscopio?

Il giroscopio misura quanto velocemente il telefono sta ruotando, in gradi al secondo. Non misura da che parte è puntato il telefono. Questa differenza conta. Da solo, il giroscopio non può dirti se il telefono è in piano. Sa solo se sta girando e con che velocità. Per una lettura di livello con il telefono tenuto fermo, l'accelerometro ha già quello che serve.

Il giroscopio si guadagna il suo posto quando il telefono è in movimento, con la fusione dei sensori. Gli accelerometri leggono bene l'inclinazione statica, ma diventano lenti e rumorosi durante un movimento rapido. I giroscopi seguono bene le rotazioni veloci, ma derivano, perché i loro piccoli errori si accumulano nel tempo. Un filtro complementare o di Kalman unisce i due: il giroscopio gestisce il movimento rapido, e l'accelerometro riporta la lettura di lungo periodo al valore giusto.

La maggior parte delle app livella, Spirit Level Pro compreso, non usa la fusione dei sensori perché il compito è statico. Appoggi il telefono, si stabilizza, leggi l'angolo. L'accelerometro se la cava benissimo da solo. La fusione dei sensori conta di più quando qualcosa è in volo, come un drone che segue il proprio movimento, che quando controlli una mensola.

Perché la calibrazione conta così tanto?

Ogni sensore MEMS esce di fabbrica con un piccolo scostamento incorporato. È un bias impostato in produzione, ed è lo stesso su ogni lettura: una quantità fissa, in una direzione fissa. Così il chip può leggere un grado o due in più anche quando il telefono è davvero in piano. Questo è il motivo numero uno per cui un'app livella sembra sbagliata appena installata.

La calibrazione lo corregge misurando quello scostamento su una superficie di cui ti fidi come piana, poi salvandolo. Spirit Level Pro salva i valori in localStorage sotto calibrationPitch e calibrationRoll. Da lì in poi, ogni lettura sottrae quei numeri salvati prima di arrivare sullo schermo. Lo scostamento sparisce.

La differenza è grande. Salta la calibrazione e un telefono con un bias di 1,5° legge 1,5° sbagliati su tutto. Può mostrare 0,0° mentre sta su una pendenza reale di 1,5°. Calibra lo stesso telefono e scende a un paio di decimi di grado. È il maggiore guadagno di precisione singolo che puoi ottenere, e costa solo qualche secondo.

Come influisce la temperatura sulla precisione?

I sensori MEMS reagiscono alla temperatura. Le molle di silicio che tengono la massa di prova si dilatano e si contraggono man mano che il chip si scalda e si raffredda, e questo sposta il punto di zero. Così se porti un telefono da un'auto calda a un garage freddo, la lettura deriva un po' prima che il sensore si stabilizzi alla nuova temperatura. Non è uno spostamento enorme, ma è reale.

La conclusione pratica è semplice: calibra alla temperatura a cui pensi di lavorare. Una calibrazione fatta in un ufficio caldo non tiene del tutto in un garage freddo. Non serve farne un problema per ogni lavoro. Per appendere quadri o controllare una mensola, la deriva è troppo piccola per vederla. Per un lavoro fine, entro un paio di decimi di grado, lascia al telefono uno o due minuti per stabilizzarsi dopo un grosso cambio di temperatura, poi calibra.

Livella a bolla montata su una fotocamera che mostra come funziona la misura angolare
Più sensori lavorano insieme per determinare l'orientamento di un dispositivo in tre dimensioni.

iPhone contro Android: l'hardware del sensore è diverso?

Sì, e si vede in come si comporta l'app. Apple costruisce il proprio stack di movimento. Gli iPhone dal 6s in poi hanno un coprocessore di movimento Apple che gestisce i dati dei sensori separatamente dalla CPU principale. I top di gamma Samsung Galaxy si appoggiano a componenti STMicroelectronics che mettono un accelerometro a 3 assi e un giroscopio a 3 assi sullo stesso die. I telefoni Google Pixel hanno usato sensori Bosch e TDK InvenSense, a seconda dell'anno.

Dopo la calibrazione, un iPhone top di gamma e un Android top di gamma vengono più o meno uguali. Il divario che conta davvero è tra il top di gamma e l'Android economico. I telefoni economici usano MEMS più a buon mercato, con risoluzione più bassa, e la loro uscita grezza è più rumorosa. La calibrazione li avvicina comunque, e per gran parte del fai-da-te il risultato va bene.

Quello che distingue l'iPhone in un'app livella non è tanto l'accelerometro quanto quel coprocessore di movimento. Continua a raccogliere dati dai sensori a un ritmo alto anche quando l'app non è in primo piano, così il filtro di lisciamento ha più campioni con cui lavorare. È buona parte del motivo per cui gli iPhone qui sembrano così fluidi, anche contro telefoni Android con sensori sulla carta altrettanto buoni.

Domande frequenti

Come funzionano le app livella a bolla su un telefono?

Leggono l'accelerometro MEMS del telefono, che misura come la gravità tira lungo tre assi (X, Y, Z). Inclina il telefono e la gravità si sposta tra quegli assi. L'app esegue formule con l'arcotangente per ricavare pitch e roll, liscia il risultato per calmare il rumore del sensore, e lo mostra come bolla di livello o come numero. Tutto questo gira centinaia di volte al secondo.

Quanto è preciso l'accelerometro di un telefono come livella?

Un telefono top di gamma calibrato legge entro un paio di decimi di grado. I telefoni Android economici leggono peggio se non calibrati, perché i loro sensori costano meno e variano di più tra un esemplare e l'altro. Il fattore singolo più importante è la calibrazione: toglie lo scostamento di fabbrica e avvicina quasi ogni telefono. Per gran parte dei lavori fai-da-te e artigianali, un telefono di fascia media calibrato è abbastanza preciso.

Un'app livella usa il giroscopio?

Con il telefono fermo, no. L'accelerometro ti dà l'angolo di inclinazione da solo. Il giroscopio misura la velocità di rotazione, non la posizione, quindi non può dirti se il telefono è in piano, solo quanto velocemente sta girando. Alcune app uniscono i due sensori per letture più fluide in movimento, ma per premere il telefono contro un muro e leggere l'angolo, l'accelerometro fa tutto il lavoro.

Perché la mia app livella legge un po' sbagliato anche su una superficie piana?

Di solito è lo scostamento di fabbrica. Ogni chip MEMS ha un piccolo bias incorporato che lo fa leggere diverso da zero anche quando il telefono è in piano. Calibrare su una superficie di cui ti fidi lo azzera. Altre cause sono la deriva di temperatura, una custodia che alza un bordo sulla superficie, o polvere sotto il telefono. Calibrare su un tavolo di vetro pulito dopo un grosso cambio di temperatura risolve la maggior parte dei casi.

Il quadro completo

Le app livella funzionano perché la fisica dietro è affidabile. La gravità è costante, l'accelerometro la misura in continuazione, e la trigonometria trasforma tre numeri in un angolo. Il percorso dall'elemento sensibile alla bolla è matematica fissa per tutta la strada. Non c'è niente lasciato al caso.

Ciò che rende un'app livella migliore di un'altra non è l'hardware. Ogni telefono top di gamma ha già sensori più che sufficienti. La differenza è il software: quanto bene si filtra il flusso grezzo, come si salva e si applica la calibrazione, quanto i preset di tolleranza si allineano ai lavori veri. Fai bene queste cose e un chip MEMS economico se la gioca con strumenti dedicati che costano molto di più.

Sapere come funziona il sensore ti rende anche più bravo a usarlo. Calibra alla temperatura di lavoro. Togli la custodia per le letture precise. Lascia assestare il numero un secondo prima di fidarti. Ognuna di queste abitudini viene dritta dal capire cosa sta facendo l'hardware.

Prova Spirit Level Pro gratuitamente

Funziona su qualsiasi telefono o tablet. Nessun download richiesto. Funzioni Pro da $10 una tantum.

Apri Spirit Level Pro

Nessun account necessario · Funziona offline · 20 lingue