Warum Ihr micro:bit in jeder einzelnen Unterrichtsstunde zur Kompass-Kalibrierung auffordert

Der micro:bit erzwingt sein Kalibrierungs-Minispiel, weil die Magnetometer-Offsets beim Ausschalten verloren gehen und stahlgerahmte Schultische das lokale Magnetfeld verzerren. So lösen Sie das Problem in MakeCode und MicroPython.
Der micro:bit verlangt zu Beginn einer Unterrichtsstunde aus zwei zusammenhängenden Gründen eine Kalibrierung: Die Kalibrierungsdaten des Magnetometers werden nur im flüchtigen Speicher (RAM) abgelegt, der gelöscht wird, sobald das Board von der Stromversorgung getrennt wird, und die Laufzeitumgebung unterbricht die Ausführung automatisch, um die Kalibrierungsroutine auszuführen, sobald Ihr Code zum ersten Mal eine Peilung von einem unkalibrierten Sensor anfordert. In einer Schulumgebung wird dies durch das Mobiliar im Klassenzimmer noch verschärft: Handelsübliche Schultische mit Stahlrahmen und benachbarte Computergeräte verzerren das lokale Erdmagnetfeld, sodass jeder unkalibrierte Messwert völlig ungenau ausfällt.
Warum Schultische die Magnetometermessungen verfälschen
Der micro:bit nutzt einen kombinierten Beschleunigungs- und Magnetometerchip (wie den LSM303 oder FXOS8700 auf v1-Boards oder den LSM303AGR auf v2). Ein Magnetometer misst die Stärke und Richtung von Magnetfeldern entlang dreier orthogonaler Achsen. Auf einem offenen Sportplatz ist das vorwiegend gemessene Feld das Erdmagnetfeld (ungefähr 30 bis 60 Mikrotesla).
In einem typischen südafrikanischen Klassenzimmer sitzen die Lernenden jedoch an Tischen aus Profilstahlrohr, häufig direkt über Stahlbetondecken mit Bewehrungsstahl. Laptops in der Nähe, Monitornetzteile und Ladewagen erzeugen aktive elektromagnetische Felder. Diese führen zu zwei Arten von magnetischen Verzerrungen:
- Hard-Iron-Verzerrung: Dauermagnete oder magnetisierte Stahlgegenstände in der Nähe erzeugen einen konstanten Offset, der den gesamten magnetischen Kreis vom Ursprung (0, 0, 0) weg verschiebt.
- Soft-Iron-Verzerrung: Ferromagnetische Materialien (wie der Tischrahmen aus Baustahl) verzerren und stauchen die magnetischen Feldlinien der Erde, wodurch aus einer eigentlich kugelförmigen Messwertverteilung ein asymmetrisches Ellipsoid wird.
Wenn der micro:bit neu startet, ist seine interne Kalibrierungsmatrix leer. Sobald eine Codezeile compass heading oder compass.heading() abfragt, prüft die Laufzeitumgebung des micro:bit, ob eine gültige Kalibrierungsmatrix vorhanden ist. Findet sie keine, friert sie das Skript ein und startet die obligatorische Neigungsroutine (einen Kreis zeichnen oder die 5x5-LED-Matrix füllen), um die Kompensations-Offsets für Hard- und Soft-Iron-Effekte zu berechnen.
Das Neustart-Problem im Klassenzimmer
Da die Standard-Laufzeitumgebung Kalibrierungsdaten nur im RAM speichert, gehen die Offsets jedes Mal verloren, wenn ein Lernender den micro:bit vom USB-Port trennt oder das Batteriefach ein- bzw. ausschaltet. Wenn in Ihrem Unterricht 30 Lernende wiederholt Code bearbeiten, per USB flashen und ausführen, durchläuft das Board bei jedem Flash-Vorgang einen Neustart. Das löst in einer einzigen 45-Minuten-Stunde bis zu dreißig Kalibrierungssequenzen pro Schüler aus.
Erschwerend kommt hinzu: Wenn ein Lernender die Kalibrierung abschließt, während er den micro:bit auf Brusthöhe durch die Luft bewegt, und das Board danach 5 Zentimeter neben einer Tischstrebe aus Stahl ablegt, ändert sich das Magnetfeld drastisch. Der micro:bit bemerkt diese Verschiebung der Ausgangsbasis nicht automatisch, es sei denn, die Laufzeitumgebung erkennt einen gänzlich ungültigen Feldvektor. Die Folge sind ungenaue Peilungen oder unberechenbar ausschlagende Kompassnadeln.
Kalibrierung in MakeCode umgehen und steuern
In Microsoft MakeCode enthält der Block compass heading (°) eine integrierte Prüfung: Ist das Magnetometer nicht kalibriert, ruft er automatisch input.calibrateCompass() auf. Je nach Lernziel haben Sie drei Möglichkeiten, dieses Verhalten zu steuern.
1. Wenn KEINE absolute Peilung erforderlich ist: Beschleunigungssensor verwenden
Wenn Sie grundlegende Eingaben, Neigungssteuerungen oder einfache Richtungsänderungen (z. B. das Steuern eines Roboters nach links oder rechts) vermitteln, benötigen Sie das Magnetometer mit an Sicherheit grenzender Wahrscheinlichkeit nicht. Lehrkräfte nutzen häufig compass heading, obwohl sie eigentlich Neigung oder Gierung meinen. Die Verwendung von rotation (pitch/roll) oder acceleration umgeht das Kompass-Subsystem vollständig und löst niemals einen Kalibrierungsbildschirm aus.
2. Einmalig explizit in `on start` kalibrieren
Wenn Ihr Projekt zwingend einen Kompass erfordert (wie beim Orientierungslauf oder bei der Navigation), rufen Sie die Kalibrierung explizit innerhalb des Blocks on start auf, anstatt zuzulassen, dass sie mitten in einer Schleife unerwartet ausgelöst wird:
input.calibrateCompass()Weisen Sie die Lernenden an, aufzustehen, den micro:bit vom Körper wegzuhalten und die Neigungsroutine im freien Raum abzuschließen, bevor sie sich wieder hinsetzen. Dies verhindert, dass das Kalibrierungsspiel die Hauptprogrammlogik während des Testens unterbricht.
Kalibrierung in MicroPython verwalten
In MicroPython haben Sie eine deutlich feinere Kontrolle über den Sensor-Lebenszyklus. Sie können den Kalibrierungsstatus prüfen, nicht-interaktiv kalibrieren oder sogar fest programmierte Offsets einspeisen.
Blockierenden Kalibrierungsbildschirm verhindern
Standardmäßig startet der Aufruf von compass.heading() in MicroPython die Kalibrierungsroutine, falls compass.is_calibrated() den Wert False zurückgibt. Sie können ein unerwartetes Blockieren verhindern, indem Sie den Status explizit abfragen:
import compass
if not compass.is_calibrated():
compass.calibrate()
while True:
heading = compass.heading()
# Projektlogik hierKalibrierungsdaten manuell bereitstellen
Wenn Ihre Lernenden an festen Laborarbeitsplätzen arbeiten und Sie das Neigungsspiel beim iterativen Programmieren vollständig vermeiden möchten, können Sie die Basis-Offsets einmalig ermitteln, im nichtflüchtigen Speicher (dem internen Flash-Dateisystem des micro:bit) ablegen und beim Booten laden. MicroPython bietet über compass.get_field_strength() und Methoden zur Kalibrierungskonfiguration hardwarenahen Zugriff, um die Offset-Werte direkt zu setzen und die Neigungssequenz komplett zu überspringen.
Praktische Regeln für den Unterricht
Damit der Robotik- oder Programmierunterricht reibungslos abläuft, ohne zehn Minuten durch das Schwenken von Boards zu verlieren:
- Boards von Tischgestellen fernhalten: Halten Sie einen Abstand von mindestens 15 bis 20 cm zwischen dem micro:bit und tragenden Stahlbeinen, Tischhalterungen oder Monitorfüßen ein.
- Nicht flach auf dem Tisch kalibrieren: Wird ein micro:bit kalibriert, während er auf einem Stahltisch liegt, gleicht er sich an die magnetische Anomalie des Tisches an. Sobald der Lernende das Board anhebt und umhergeht, stimmt die Peilung nicht mehr. Kalibrieren Sie immer auf Bauch- oder Brusthöhe im freien Raum.
- Prüfen, ob der absolute Norden wirklich benötigt wird: Bei 80 % der einführenden Aufgabenstellungen im Unterricht – wie Linienverfolgung, Hindernisvermeidung oder neigungsgesteuerten Spielen – ist das Magnetometer der falsche Sensor. Verwenden Sie stattdessen die Inertialeinheit (Beschleunigungssensor).
Strukturierte Robotikmodule, Hardware-Referenzdesigns und Unterrichtssets, die speziell auf die Bedingungen in südafrikanischen Klassenzimmern abgestimmt sind, finden Sie in den Leitfäden auf Sheen Canvas sowie in unseren Fortbildungsworkshops auf Sheen Academy.



