Почему micro:bit требует калибровать компас на каждом уроке

micro:bit запускает мини-игру калибровки из-за того, что смещения магнитометра стираются при отключении питания, а школьные парты со стальным каркасом искажают магнитное поле. Рассказываем, как решить эту проблему в MakeCode и MicroPython.
micro:bit требует калибровки в начале урока по двум взаимосвязанным причинам: данные калибровки магнитометра хранятся только в энергозависимой памяти (ОЗУ), которая очищается в момент отключения платы от питания, а среда выполнения автоматически приостанавливает работу программы для запуска процедуры калибровки при первом же запросе направления от некалиброванного датчика. В школьных условиях ситуация усугубляется мебелью: стандартные парты на стальном каркасе и расположенная рядом компьютерная техника искажают местное геомагнитное поле, из-за чего любые некалиброванные показания оказываются совершенно неточными.
Почему школьные парты искажают показания магнитометра
В micro:bit используется комбинированный чип акселерометра и магнитометра (например, LSM303 или FXOS8700 на платах v1 либо LSM303AGR на v2). Магнитометр измеряет силу и направление магнитных полей по трем ортогональным осям. На открытом спортивном поле основным измеряемым полем является геомагнитное поле Земли (примерно от 30 до 60 микротесла).
Однако в стандартном южноафриканском классе ученики сидят за партами из мягкой трубчатой стали, часто прямо над железобетонными перекрытиями со стальной арматурой. Находящиеся рядом ноутбуки, блоки питания мониторов и зарядные тележки создают активные электромагнитные поля. Все это вызывает два типа магнитных искажений:
- Искажения от твердого железа (Hard iron distortion): постоянные магниты или намагниченные стальные предметы поблизости создают постоянное смещение, сдвигающее всю магнитную окружность относительно начала координат (0, 0, 0).
- Искажения от мягкого железа (Soft iron distortion): ферромагнитные материалы (например, каркас парты из мягкой стали) искривляют и сжимают силовые линии магнитного поля Земли, превращая то, что должно быть сферическим графиком измерений, в асимметричный эллипсоид.
При включении micro:bit его внутренняя матрица калибровки пуста. Как только строка кода запрашивает compass heading или compass.heading(), среда выполнения micro:bit проверяет наличие корректной матрицы калибровки. Не обнаружив ее, она приостанавливает выполнение программы и запускает обязательную процедуру наклонов (рисование круга или заполнение матрицы светодиодов 5x5) для расчета компенсационных смещений жесткого и мягкого железа.
Проблема перезапуска питания в классе
Поскольку стандартная среда выполнения хранит данные калибровки только в оперативной памяти, каждый раз, когда ученик отключает micro:bit от USB-порта или переключает батарейный блок, значения смещения исчезают. Если на уроке 30 учеников постоянно редактируют код, прошивают его по USB и запускают, плата перезагружается при каждой прошивке. Это может вызвать до тридцати процедур калибровки на одного ученика за один 45-минутный урок.
Что еще хуже: если ученик выполняет калибровку, вращая micro:bit в воздухе на уровне груди, а затем кладет плату обратно в 5 сантиметрах от стальной опоры парты, магнитное поле резко меняется. micro:bit не способен автоматически понять, что базовая линия сместилась (если только среда выполнения не зафиксирует заведомо недопустимый вектор поля), что приводит к неточным азимутам или хаотичному поведению стрелки компаса.
Обход и контроль калибровки в MakeCode
В Microsoft MakeCode блок compass heading (°) содержит встроенную проверку: если магнитометр не откалиброван, автоматически вызывается input.calibrateCompass(). В зависимости от целей урока у вас есть три способа управлять этим поведением.
1. Если абсолютный азимут НЕ требуется: используйте акселерометр
Если вы объясняете базовые принципы ввода, управление наклоном или простое определение направления (например, поворот робота-тележки влево или вправо), магнитометр вам почти наверняка не нужен. Преподаватели часто используют compass heading, когда на самом деле им нужен наклон или рыскание. Использование rotation (pitch/roll) или acceleration полностью исключает обращение к подсистеме компаса и никогда не вызывает экран калибровки.
2. Выполняйте калибровку один раз явно в блоке `on start`
Если в вашем проекте действительно необходим компас (например, для ориентирования или навигации), вызовите калибровку явно внутри блока on start, а не позволяйте ей неожиданно запускаться посреди основного цикла:
input.calibrateCompass()Попросите учеников встать, держать micro:bit на расстоянии от тела и выполнить процедуру наклонов в воздухе, прежде чем сесть на место. Это предотвратит прерывание основного цикла программы мини-игрой калибровки во время тестирования.
Управление калибровкой в MicroPython
В MicroPython вы получаете гораздо более детальный контроль над жизненным циклом датчика. Вы можете проверять статус калибровки, выполнять ее в неинтерактивном режиме или даже задавать жестко закодированные смещения.
Предотвращение блокирующего экрана калибровки
По умолчанию вызов compass.heading() в MicroPython запускает процедуру калибровки, если compass.is_calibrated() возвращает False. Вы можете защититься от неожиданной блокировки, явно проверив статус:
import compass
if not compass.is_calibrated():
compass.calibrate()
while True:
heading = compass.heading()
# Логика проектаРучная передача данных калибровки
Если ученики работают в стационарном компьютерном классе и вы хотите полностью исключить игру с наклонами в процессе отладки кода, можно один раз определить базовые смещения, записать их в энергонезависимую память (внутреннюю файловую систему flash-памяти micro:bit) и загружать при старте. MicroPython предоставляет низкоуровневый доступ через compass.get_field_strength() и методы настройки калибровки, позволяя задавать значения смещения напрямую и полностью пропускать процедуру наклонов.
Практический регламент для занятий в классе
Чтобы занятия по робототехнике или программированию проходили слаженно и не тратилось по десять минут на вращение плат:
- Держите платы подальше от металлических элементов стола: сохраняйте расстояние не менее 15–20 см между micro:bit и любыми стальными ножками, креплениями парт или подставками мониторов.
- Не калибруйте плату лежащей на столе: если откалибровать micro:bit прямо на металлической парте, он подстроится под магнитную аномалию стола. Как только ученик возьмет его в руки, чтобы пройтись, показания компаса станут неверными. Всегда калибруйте плату в воздухе на уровне пояса или груди.
- Оцените, действительно ли вам нужен абсолютный север: в 80% вводных учебных задач — таких как движение по линии, объезд препятствий или игры с управлением наклоном — магнитометр попросту не нужен. Используйте вместо него инерциальный измерительный блок (акселерометр).
Структурированные модули по робототехнике, справочные схемы аппаратного обеспечения и учебные комплекты, адаптированные для южноафриканских школ, вы найдете в методических руководствах на Sheen Canvas или на курсах повышения квалификации на Sheen Academy.



