Logo sheen.bot

← Approfondimenti

Perché il tuo micro:bit chiede di calibrare la bussola a ogni singola lezione

28 set 2026·Sheen Robotics
Perché il tuo micro:bit chiede di calibrare la bussola a ogni singola lezione

Il micro:bit impone il suo minigioco di calibrazione perché gli offset del magnetometro svaniscono allo spegnimento, mentre i banchi scolastici con telaio in acciaio distorcono istantaneamente il campo magnetico locale. Ecco come risolvere il problema in MakeCode e MicroPython.

Il micro:bit richiede la calibrazione all'inizio di una lezione per due motivi concomitanti: i dati di calibrazione del magnetometro sono memorizzati esclusivamente nella memoria volatile (RAM), che si azzera nel momento stesso in cui la scheda viene scollegata, e il runtime interrompe automaticamente l'esecuzione per avviare la routine di calibrazione la prima volta che il codice richiede un orientamento da un sensore non calibrato. In un ambiente scolastico, la situazione è aggravata dagli arredi dell'aula: i normali banchi di scuola con telaio in acciaio e le apparecchiature informatiche adiacenti distorcono il campo geomagnetico locale, facendo sì che qualsiasi lettura non calibrata sia del tutto imprecisa.

Perché i banchi di scuola alterano le letture del magnetometro

Il micro:bit utilizza un chip combinato con accelerometro e magnetometro (come l'LSM303 o l'FXOS8700 sulle schede v1, oppure l'LSM303AGR sulle v2). Un magnetometro misura l'intensità e la direzione dei campi magnetici lungo tre assi ortogonali. In un campo sportivo all'aperto, il campo principale misurato è il campo geomagnetico terrestre (all'incirca tra 30 e 60 microtesla).

In una tipica aula sudafricana, tuttavia, gli studenti siedono a banchi realizzati in tubolare di acciaio dolce, spesso posizionati direttamente sopra solette in cemento armato contenenti tondini di acciaio. Computer portatili, alimentatori di monitor e carrelli di ricarica nelle vicinanze generano campi elettromagnetici attivi. Tutto ciò produce due tipi di distorsione magnetica:

  • Distorsione da ferro duro (hard iron distortion): Magneti permanenti o oggetti in acciaio magnetizzato nelle vicinanze producono un offset costante che sposta l'intero cerchio magnetico rispetto all'origine (0, 0, 0).
  • Distorsione da ferro dolce (soft iron distortion): I materiali ferromagnetici (come il telaio in acciaio dolce del banco) deformano e comprimono le linee di campo magnetico terrestre, trasformando quello che dovrebbe essere un tracciato di misurazione sferico in un ellissoide asimmetrico.

Quando il micro:bit viene avviato da zero, la sua matrice di calibrazione interna è vuota. Non appena una riga di codice richiede compass heading o compass.heading(), il runtime del micro:bit verifica la presenza di una matrice di calibrazione valida. Non trovandone alcuna, blocca l'esecuzione dello script e avvia la routine obbligatoria di inclinazione (in cui bisogna tracciare un cerchio o riempire la matrice di 5x5 LED) per calcolare gli offset di compensazione per ferro duro e ferro dolce.

Il problema del ciclo di alimentazione in aula

Poiché il runtime predefinito memorizza i dati di calibrazione esclusivamente nella RAM, ogni volta che uno studente scollega il proprio micro:bit da una porta USB o spegne e riaccende il portabatterie, gli offset svaniscono. Se la lezione prevede che 30 studenti modifichino ripetutamente il codice, eseguano il flash via USB e lo testino, la scheda si riavvia a ogni operazione di flashing. Ciò può innescare fino a trenta sequenze di calibrazione per studente in una singola sessione di 45 minuti.

Come se non bastasse, se uno studente completa la calibrazione muovendo il micro:bit a mezz'aria all'altezza del petto e poi ripone la scheda a 5 centimetri dal montante in acciaio del banco, il campo magnetico cambia drasticamente. Il micro:bit non si accorge automaticamente dello spostamento della linea di base, a meno che il runtime non rilevi un vettore di campo del tutto non valido, con conseguenti rilevamenti errati o aghi della bussola instabili.

Aggirare e controllare la calibrazione in MakeCode

In Microsoft MakeCode, il blocco compass heading (°) contiene un controllo integrato: se il magnetometro non è calibrato, richiama automaticamente input.calibrateCompass(). Esistono tre modi per gestire questo comportamento in base agli obiettivi della lezione.

1. Se la direzione assoluta NON è necessaria: usa l'accelerometro

Se stai insegnando gli input di base, i controlli di inclinazione o una navigazione semplice (ad esempio sterzare un buggy a sinistra o a destra), quasi sicuramente il magnetometro non serve. Spesso gli insegnanti usano compass heading quando in realtà vorrebbero rilevare l'inclinazione o l'imbardata (yaw). L'uso di rotation (pitch/roll) o acceleration evita del tutto il sottosistema della bussola e non attiva mai la schermata di calibrazione.

2. Calibra una sola volta esplicitamente in `on start`

Se il tuo progetto richiede effettivamente una bussola (come nell'orienteering o nella navigazione), richiama la calibrazione in modo esplicito all'interno del blocco on start anziché lasciarla scattare in modo imprevisto nel mezzo di un ciclo:

input.calibrateCompass()

Spiega agli studenti di alzarsi in piedi, tenere il micro:bit lontano dal corpo e completare la routine di inclinazione a mezz'aria prima di sedersi. Ciò impedisce che il gioco di calibrazione interrompa il ciclo logico principale durante i test.

Gestire la calibrazione in MicroPython

In MicroPython si ha un controllo molto più granulare sul ciclo di vita del sensore. È possibile verificare lo stato della calibrazione, calibrare in modo non interattivo o persino inserire offset impostati manualmente nel codice.

Evitare la schermata di calibrazione bloccante

Per impostazione predefinita, chiamare compass.heading() in MicroPython avvia la routine di calibrazione se compass.is_calibrated() restituisce False. Puoi evitare blocchi imprevisti verificando esplicitamente lo stato:

import compass

if not compass.is_calibrated():
    compass.calibrate()

while True:
    heading = compass.heading()
    # Logica del progetto qui

Fornire manualmente i dati di calibrazione

Se gli studenti lavorano in una configurazione di laboratorio fissa e si desidera eliminare del tutto il gioco di inclinazione durante le fasi di programmazione iterativa, è possibile determinare gli offset di base una sola volta, scriverli nella memoria non volatile (il file system flash interno del micro:bit) e caricarli all'avvio. MicroPython fornisce accesso a basso livello tramite compass.get_field_strength() e metodi di configurazione della calibrazione per impostare direttamente i valori di offset, saltando del tutto la sequenza di inclinazione.

Protocollo pratico per l'aula

Per svolgere una lezione di robotica o programmazione senza intoppi e senza perdere dieci minuti a inclinare le schede:

  • Tenere le schede lontane dai telai dei banchi: Mantenere almeno 15-20 cm di distanza tra il micro:bit e qualsiasi gamba strutturale in acciaio, supporto per scrivania o base del monitor.
  • Non calibrare appoggiando la scheda sul tavolo: Se un micro:bit viene calibrato mentre è appoggiato su un banco in acciaio, si calibrerà sull'anomalia magnetica del banco. Nel momento in cui lo studente lo solleverà per muoversi, l'orientamento risulterà errato. Calibrare sempre a mezz'aria all'altezza della vita o del petto.
  • Valutare se il Nord assoluto è davvero necessario: Per l'80% delle attività didattiche introduttive (come inseguimento di linea [line following], evitamento ostacoli o giochi controllati dall'inclinazione), il magnetometro non è il sensore adatto. Utilizzare invece l'unità di misura inerziale (accelerometro).

Per moduli di robotica strutturati, progetti hardware di riferimento e kit di lezione configurati per le condizioni delle aule sudafricane, esplora le guide didattiche su Sheen Canvas o consulta i nostri workshop di sviluppo professionale su Sheen Academy.

#microbit#magnetometro#makecode#micropython#insegnamento della robotica

Altri post in Approfondimenti