Pourquoi votre micro:bit vous demande d'étalonner la boussole à chaque cours

La micro:bit impose son mini-jeu d'étalonnage car les décalages du magnétomètre s'effacent à l'extinction, tandis que les bureaux d'école à structure métallique faussent immédiatement le champ magnétique local. Voici comment y remédier dans MakeCode et MicroPython.
La micro:bit exige un étalonnage au début d'un cours pour deux raisons combinées : les données d'étalonnage du magnétomètre sont stockées uniquement dans la mémoire volatile (RAM), qui s'efface dès que la carte est débranchée, et l'environnement d'exécution (runtime) interrompt automatiquement le programme pour lancer la routine d'étalonnage dès que votre code demande un cap à un capteur non étalonné. En milieu scolaire, ce phénomène est amplifié par le mobilier : les bureaux traditionnels à structure en acier et le matériel informatique environnant faussent le champ géomagnétique local, rendant toute mesure non étalonnée totalement imprécise.
Pourquoi les bureaux de classe perturbent les mesures du magnétomètre
La micro:bit utilise une puce combinant accéléromètre et magnétomètre (comme la LSM303 ou la FXOS8700 sur les cartes v1, ou la LSM303AGR sur la v2). Un magnétomètre mesure l'intensité et la direction des champs magnétiques selon trois axes orthogonaux. Sur un terrain de sport en extérieur, le champ principal mesuré est le champ géomagnétique terrestre (environ 30 à 60 microteslas).
Dans une salle de classe sud-africaine classique, cependant, les élèves sont assis à des tables en tube d'acier doux, souvent situées juste au-dessus de dalles en béton armé contenant des fers à béton. Les ordinateurs portables à proximité, les blocs d'alimentation des écrans et les chariots de recharge créent des champs électromagnétiques actifs. Ceux-ci provoquent deux types de perturbations magnétiques :
- Perturbation de type « fer dur » (hard iron) : Des aimants permanents ou des objets métalliques aimantés situés à proximité génèrent un décalage constant qui translate l'ensemble de la sphère magnétique par rapport à l'origine (0, 0, 0).
- Perturbation de type « fer doux » (soft iron) : Les matériaux ferromagnétiques (comme la structure en acier doux de la table) déforment et resserrent les lignes du champ magnétique terrestre, transformant ce qui devrait être un tracé sphérique en un ellipsoïde asymétrique.
Lorsque la micro:bit démarre à neuf, sa matrice d'étalonnage interne est vide. Dès qu'une ligne de code appelle compass heading ou compass.heading(), le runtime de la micro:bit vérifie si une matrice d'étalonnage valide existe. En l'absence de données, il fige votre script et lance la procédure obligatoire d'inclinaison (dessiner un cercle ou remplir la matrice de 5x5 LED) afin de calculer les corrections nécessaires pour compenser les effets de fer dur et de fer doux.
Le problème du cycle d'alimentation en classe
Comme l'environnement d'exécution par défaut conserve les données d'étalonnage uniquement en RAM, ces décalages s'effacent chaque fois qu'un élève débranche sa micro:bit d'un port USB ou éteint son boîtier de piles. Si votre séance implique que 30 élèves modifient leur code à plusieurs reprises, le transfèrent via USB et l'exécutent, la carte redémarre à chaque téléversement. Cela peut déclencher jusqu'à trente séquences d'étalonnage par élève au cours d'une seule séance de 45 minutes.
Pire encore : si un élève effectue l'étalonnage en agitant la micro:bit en l'air à hauteur de poitrine, puis repose la carte à 5 centimètres d'un montant métallique de la table, le champ magnétique change radicalement. La micro:bit ne s'aperçoit pas automatiquement que la valeur de référence a changé (à moins que le système ne détecte un vecteur de champ totalement aberrant), ce qui entraîne des relèvements faux ou une aiguille de boussole instable.
Contourner et contrôler l'étalonnage dans MakeCode
Dans Microsoft MakeCode, le bloc compass heading (°) intègre une vérification automatique : si le magnétomètre n'est pas étalonné, il déclenche input.calibrateCompass() de lui-même. Vous disposez de trois méthodes pour gérer ce comportement selon les objectifs de votre cours.
1. Si le cap absolu n'est PAS nécessaire : utilisez plutôt l'accéléromètre
Si vous enseignez les entrées de base, le contrôle par inclinaison ou une orientation simple (par exemple diriger un robot vers la gauche ou la droite), vous n'avez presque certainement pas besoin du magnétomètre. Les enseignants utilisent souvent compass heading alors qu'ils souhaitent en réalité mesurer l'inclinaison ou le lacet. L'utilisation de rotation (pitch/roll) ou d'acceleration évite totalement le sous-système de la boussole et ne déclenche jamais l'écran d'étalonnage.
2. Étalonnez une seule fois explicitement dans `on start`
Si votre projet nécessite réellement une boussole (comme pour de la course d'orientation ou de la navigation), lancez explicitement l'étalonnage dans le bloc on start au lieu de le laisser se déclencher de manière inattendue en pleine boucle d'exécution :
input.calibrateCompass()Demandez aux élèves de se lever, de tenir la micro:bit à distance de leur corps et de réaliser la séquence d'inclinaison en l'air avant de se rasseoir. Cela évite que le mini-jeu d'étalonnage n'interrompe la boucle logique principale pendant les tests.
Gérer l'étalonnage dans MicroPython
Avec MicroPython, vous bénéficiez d'un contrôle bien plus fin sur le cycle de vie du capteur. Vous pouvez vérifier l'état de l'étalonnage, étalonner de manière non interactive ou même injecter des décalages prédéfinis.
Éviter le blocage par l'écran d'étalonnage
Par défaut, appeler compass.heading() en MicroPython lance la routine d'étalonnage si compass.is_calibrated() renvoie False. Vous pouvez vous prémunir contre un blocage inattendu en vérifiant explicitement l'état :
import compass
if not compass.is_calibrated():
compass.calibrate()
while True:
heading = compass.heading()
# Logique du projet iciFournir manuellement les données d'étalonnage
Si vos élèves travaillent sur une installation de laboratoire fixe et que vous souhaitez éliminer totalement le jeu d'inclinaison pendant les phases de programmation itérative, vous pouvez déterminer les décalages de référence une fois pour toutes, les enregistrer dans le stockage non volatil (le système de fichiers flash interne de la micro:bit) et les charger au démarrage. MicroPython offre un accès bas niveau via compass.get_field_strength() ainsi que des méthodes de configuration de l'étalonnage pour définir directement les valeurs de décalage, évitant ainsi toute la procédure d'inclinaison.
Protocole pratique pour la classe
Pour assurer le bon déroulement d'un cours de robotique ou de programmation sans perdre dix minutes à incliner des cartes dans tous les sens :
- Éloignez les cartes des armatures de bureau : Maintenez un dégagement d'au moins 15 à 20 cm entre la micro:bit et tout pied métallique, support de table ou pied d'écran.
- N'étalonnez pas la carte à plat sur la table : Si une micro:bit est étalonnée alors qu'elle repose sur un bureau métallique, elle s'étalonne sur l'anomalie magnétique du meuble. Dès que l'élève la soulèvera pour se déplacer, le cap sera erroné. Étalonnez toujours à hauteur de taille ou de poitrine, en l'air.
- Évaluez si vous avez réellement besoin du Nord absolu : Pour 80 % des activités d'initiation en classe (comme le suivi de ligne, l'évitement d'obstacles ou les jeux contrôlés par inclinaison), le magnétomètre n'est pas le capteur adéquat. Utilisez plutôt la centrale inertielle (accéléromètre).
Pour découvrir des modules de robotique structurés, des conceptions matérielles de référence et des kits pédagogiques adaptés aux réalités des classes sud-africaines, consultez les guides pédagogiques sur Sheen Canvas ou découvrez nos ateliers de formation continue sur Sheen Academy.



