Comment fonctionnent les applications de niveau: l'accéléromètre expliqué
Votre téléphone sait où se trouve le bas parce qu'il porte un minuscule capteur, l'accéléromètre MEMS. Ce capteur mesure la traction de la gravité sur le téléphone dans trois directions à la fois. Une application de niveau lit ces trois chiffres, fait un peu de trigonométrie et vous montre un angle. Elle le fait des centaines de fois par seconde, dans une puce que vous auriez du mal à voir à l'oeil nu. Cet article explique ce qui se passe vraiment.
- L'accéléromètre mesure comment la gravité se répartit sur trois axes. Il ne mesure pas le mouvement quand le téléphone est immobile.
- Le tangage et le roulis viennent de formules arctan appliquées à ces trois lectures de gravité.
- Spirit Level Pro passe les lectures brutes dans une moyenne mobile exponentielle (alpha=0.15) pour empêcher la bulle de trembler.
- Les capteurs MEMS dérivent avec la température, alors étalonnez là où vous travaillez.
- Pour un téléphone tenu immobile contre une surface, l'accéléromètre fait tout le travail. Le gyroscope n'est pas nécessaire.
Qu'est-ce qu'un accéléromètre MEMS?
MEMS veut dire systèmes micro-électro-mécaniques. L'élément qui capte, à l'intérieur d'un accéléromètre de téléphone, est minuscule: quelques centaines de microns de large, plus petit qu'un grain de sel. Il repose sur le même silicium que l'électronique ordinaire d'une puce, et il se fabrique de la même façon. C'est pour cela que ces capteurs sont bon marché et qu'on les retrouve dans presque tous les téléphones.
Le mécanisme est simple une fois qu'on se le représente. Une petite masse pend sur des ressorts en silicium gravés dans la puce. Quand vous inclinez la puce, la gravité tire la masse légèrement de côté. Ce mouvement change l'écart entre des doigts métalliques en forme de peigne, et ce changement d'écart change la capacité entre eux. La puce lit ce changement et le transforme en une valeur d'accélération, exprimée en g.
Voici la partie qui rend un niveau possible. Quand le téléphone est immobile, l'accéléromètre ne lit pas de mouvement. Il lit combien de gravité tire le long de chacun de ses trois axes. La gravité est une force fixe et connue. Une fois que vous savez comment elle se répartit entre les trois axes, vous pouvez trouver exactement comment le téléphone est incliné.
Comment un accéléromètre triaxial mesure-t-il l'inclinaison?
Un accéléromètre à trois axes donne au téléphone son propre jeu de directions: X va de gauche à droite, Y va de haut en bas, et Z va d'avant en arrière. Posez le téléphone à plat sur une table et la gravité tire presque entièrement le long de Z. Z lit alors environ 9.81 m/s² et X et Y lisent près de zéro. Inclinez le téléphone et la gravité se déplace: moins sur Z, plus sur X et Y, en proportion de l'angle.
Transformer ces trois lectures en angles relève de la trigonométrie de base. Le tangage est l'inclinaison avant-arrière, le roulis est l'inclinaison gauche-droite, et les deux viennent d'une tangente inverse:
Ces deux lignes sont tout le coeur mathématique d'une application de niveau. Entrez les trois valeurs brutes, lancez le calcul, et vous obtenez le tangage et le roulis en radians. Multipliez par 180/π pour avoir des degrés. C'est le nombre affiché à l'écran.
Vous vous demandez peut-être pourquoi le dénominateur utilise la racine carrée des deux autres axes plutôt qu'un seul. Cela garde la lecture stable sur une rotation complète. Si vous divisez par un seul axe, le calcul casse près de la verticale, parce que cet axe tombe à zéro et vous finissez par diviser par presque rien. Utiliser l'amplitude combinée des deux autres axes évite ce problème.
Spirit Level Pro affiche les angles de tangage et de roulis en direct, avec lissage EMA, cinq préréglages de tolérance et un étalonnage en un seul geste. Aucun téléchargement nécessaire.
Essayez Spirit Level Pro gratuitementPourquoi les données brutes du capteur sont-elles si bruitées?
La sortie brute de l'accéléromètre saute plus que vous ne l'imagineriez. Même un téléphone parfaitement immobile montre de petits tremblements dans ses lectures. Une partie vient du bruit électrique du capteur lui-même, une partie des vibrations qui remontent par la surface, et une partie de l'erreur d'arrondi quand le signal analogique devient des chiffres. Affichez ce flux brut à l'écran et la bulle s'agite sans arrêt, ce qui ne sert à rien pour un travail soigné.
Le bruit vient de quelques sources. Le bruit thermique est une fluctuation électrique aléatoire due à la chaleur. Vous ne pouvez pas l'enlever, et il fixe le plancher: le capteur ne sera jamais plus silencieux que ça. Le bruit de vibration vient de ce qui vous entoure: le compresseur d'un frigo, des pas, la circulation dehors. Et le point zéro du capteur dérive lentement de lui-même avec le temps. Chaque source demande une solution différente.
La solution logicielle habituelle est un filtre passe-bas. Il laisse passer les changements lents, comme une vraie inclinaison, et retient les rapides, comme une vibration. La façon courante de faire est une moyenne mobile exponentielle, ou EMA. Chaque nouvelle lecture compte pour une fraction, alpha, et le reste vient de la dernière valeur filtrée:
Spirit Level Pro utilise une EMA avec alpha=0.15. Nous avons retenu cette valeur après en avoir essayé plusieurs à la main. À alpha=0.05, la lecture était très lisse mais lente, et la bulle retardait sur le téléphone quand on le bougeait. À alpha=0.3, elle suivait bien mais s'agitait assez pour rendre une lecture précise difficile à saisir. Alpha=0.15 se situe entre les deux. La bulle semble vivante sans être nerveuse.
Quel rôle joue le gyroscope?
Le gyroscope mesure la vitesse à laquelle le téléphone tourne, en degrés par seconde. Il ne mesure pas la direction que pointe le téléphone. Cette différence compte. Seul, le gyroscope ne peut pas vous dire si le téléphone est de niveau. Il sait seulement s'il tourne et à quelle vitesse. Pour une lecture de niveau avec le téléphone tenu immobile, l'accéléromètre a déjà ce qu'il faut.
Le gyroscope gagne sa place quand le téléphone bouge, grâce à la fusion de capteurs. Les accéléromètres lisent bien l'inclinaison statique mais deviennent lents et bruités pendant un mouvement rapide. Les gyroscopes suivent bien une rotation rapide mais dérivent, car leurs petites erreurs s'additionnent avec le temps. Un filtre complémentaire ou de Kalman mélange les deux: le gyroscope gère le mouvement rapide, et l'accéléromètre ramène la lecture à long terme sur le juste.
La plupart des applications de niveau, Spirit Level Pro comprise, se passent de fusion de capteurs parce que la tâche est statique. Vous posez le téléphone, il se stabilise, vous lisez l'angle. L'accéléromètre s'en sort très bien tout seul. La fusion de capteurs compte davantage quand une chose est en vol, comme un drone qui suit son propre mouvement, que quand vous vérifiez une étagère.
Pourquoi l'étalonnage est-il si important?
Chaque capteur MEMS sort de l'usine avec un petit décalage intégré. C'est un biais fixé pendant la fabrication, et il est le même sur chaque lecture: une quantité fixe, dans une direction fixe. La puce peut donc lire un ou deux degrés de travers même quand le téléphone est vraiment à plat. C'est la première raison pour laquelle une application de niveau paraît fausse dès la sortie de la boîte.
L'étalonnage corrige cela en mesurant ce décalage sur une surface dont vous êtes sûr qu'elle est plate, puis en le mémorisant. Spirit Level Pro enregistre les valeurs dans localStorage sous calibrationPitch et calibrationRoll. Ensuite, chaque lecture soustrait ces chiffres mémorisés avant d'arriver à l'écran. Le décalage disparaît.
La différence est grande. Sautez l'étalonnage et un téléphone avec un biais de 1.5° lit 1.5° de travers sur tout. Il peut afficher 0.0° alors qu'il repose sur une vraie pente de 1.5°. Étalonnez le même téléphone et il tombe à quelques dixièmes de degré. C'est le plus grand gain de précision que vous puissiez obtenir d'un coup, et il ne coûte que quelques secondes.
Comment la température affecte-t-elle la précision?
Les capteurs MEMS réagissent à la température. Les ressorts en silicium qui tiennent la masse se dilatent et se contractent quand la puce chauffe et refroidit, ce qui décale le point zéro. Passez un téléphone d'une voiture chaude à un garage froid et la lecture dérive un peu avant que le capteur se stabilise à la nouvelle température. Ce n'est pas un écart énorme, mais il est réel.
La leçon pratique est simple: étalonnez à la température à laquelle vous comptez travailler. Un étalonnage fait dans un bureau chaud ne tiendra pas tout à fait dans un garage froid. Pas besoin de s'en soucier à chaque tâche. Pour accrocher des cadres ou vérifier une étagère, la dérive est trop petite pour se voir. Pour un travail serré à quelques dixièmes de degré, laissez au téléphone une minute ou deux pour se stabiliser après un gros changement de température, puis étalonnez.
iPhone contre Android: le matériel du capteur est-il différent?
Oui, et cela se sent dans la façon dont l'application se comporte. Apple construit sa propre chaîne de traitement du mouvement. Les iPhone à partir du 6s embarquent un coprocesseur de mouvement Apple qui gère les données du capteur à part du processeur principal. Les Galaxy haut de gamme de Samsung s'appuient sur des composants de STMicroelectronics qui réunissent un accéléromètre à trois axes et un gyroscope à trois axes sur une seule puce. Les téléphones Google Pixel ont utilisé des capteurs Bosch et TDK InvenSense selon les années.
Après étalonnage, un iPhone haut de gamme et un Android haut de gamme se valent à peu près. L'écart qui compte vraiment est entre le haut de gamme et l'Android d'entrée de gamme. Les téléphones bon marché utilisent des MEMS moins chers, de résolution plus faible, et leur sortie brute est plus bruitée. L'étalonnage les rapproche quand même bien, et pour la plupart des travaux de bricolage le résultat est correct.
Ce qui distingue l'iPhone dans une application de niveau, c'est moins l'accéléromètre que ce coprocesseur de mouvement. Il continue de collecter les données du capteur à un rythme élevé même quand l'application n'est pas au premier plan, si bien que le filtre de lissage a plus d'échantillons à traiter. C'est en grande partie pour cela que les iPhone paraissent si fluides ici, même face à des Android dont les capteurs sont sur le papier tout aussi bons.
Questions fréquemment posées
Comment fonctionnent les applications de niveau sur un téléphone?
Elles lisent l'accéléromètre MEMS du téléphone, qui mesure comment la gravité tire le long de trois axes (X, Y, Z). Inclinez le téléphone et la gravité se déplace entre ces axes. L'application applique des formules arctan pour obtenir le tangage et le roulis, lisse le résultat pour calmer le bruit du capteur, et l'affiche sous forme de bulle de niveau ou de chiffre. Le tout tourne des centaines de fois par seconde.
Quelle est la précision d'un accéléromètre de téléphone pour un usage de niveau?
Un téléphone haut de gamme étalonné lit à quelques dixièmes de degré près. Les Android d'entrée de gamme lisent moins bien sans étalonnage, parce que leurs capteurs sont moins chers et varient plus d'un appareil à l'autre. Le facteur le plus important, de loin, est l'étalonnage: il enlève le décalage d'usine et rapproche presque n'importe quel téléphone du juste. Pour la plupart des travaux de bricolage et de métier, un téléphone de milieu de gamme étalonné est assez précis.
Une application de niveau utilise-t-elle le gyroscope?
Pour un téléphone immobile, non. L'accéléromètre vous donne l'angle d'inclinaison à lui seul. Le gyroscope mesure la vitesse de rotation, pas la position, donc il ne peut pas vous dire si le téléphone est de niveau, seulement à quelle vitesse il tourne. Certaines applications mélangent les deux capteurs pour des lectures plus douces en mouvement, mais pour presser un téléphone contre un mur et lire l'angle, l'accéléromètre fait tout le travail.
Pourquoi mon application de niveau lit-elle légèrement de travers, même sur une surface plate?
C'est en général le décalage d'usine. Chaque puce MEMS a un petit biais intégré qui la fait lire une valeur non nulle même quand le téléphone est à plat. Étalonner sur une surface dont vous êtes sûr efface ce biais. Les autres causes sont la dérive de température, un étui qui soulève un bord sur la surface, ou de la poussière sous le téléphone. Étalonner sur une table en verre propre après tout gros changement de température règle l'essentiel.
Le tableau complet
Les applications de niveau fonctionnent parce que la physique derrière elles est fiable. La gravité est constante, l'accéléromètre la mesure tout le temps, et la trigonométrie transforme trois nombres en angle. Le chemin de l'élément capteur à la bulle est du calcul fixe d'un bout à l'autre. Il n'y a pas de devinette là-dedans.
Ce qui rend une application de niveau meilleure qu'une autre, ce n'est pas le matériel. Chaque téléphone haut de gamme est déjà livré avec des capteurs largement assez bons. La différence est dans le logiciel: à quel point le flux brut est bien filtré, comment l'étalonnage est mémorisé et appliqué, comment les préréglages de tolérance collent aux vraies tâches. Réussissez cela et une puce MEMS bon marché tient tête à des outils dédiés qui coûtent bien plus cher.
Savoir comment le capteur travaille vous rend aussi meilleur pour vous en servir. Étalonnez à la température de travail. Enlevez l'étui pour les lectures précises. Laissez le chiffre se stabiliser une seconde avant de lui faire confiance. Chacune de ces habitudes vient tout droit de la compréhension de ce que fait le matériel.