适用场景
把 micro:bit 平放在桌面上,选定一个朝向后按 A 键记录。随后转动板子,屏幕会提示向左或向右转,接近记录方向时显示对勾。按 B 键可以查看当前朝向与目标之间的角度误差。它适合课堂演示、桌面方向小游戏以及学习环形数值处理。
这个项目利用板载电子罗盘,不需要外接传感器,适用于支持 MicroPython 罗盘接口的 micro:bit。它是教学小工具,不能用于道路导航、救援或任何依赖精确方向保证安全的活动。
原理
罗盘根据磁场得到方位角,磁北附近为零度,顺时针方向角度增加。直接用目标角减当前角会在零度附近出错:目标为 5 度、当前为 355 度时,直接相减得到负 350 度,但较短转动方向其实只需顺时针约 10 度。
程序先把差值平移 180 度,再对 360 取余,最后减去 180,得到负 180 到小于正 180 度的最短角度差。正值提示顺时针,也就是从上方看向右转;负值提示逆时针向左转。恰好相差 180 度时两个方向一样近,程序按计算结果选择左转。
目标附近设置正负 12 度容差,避免微小波动导致始终难以对准。这个范围只是小游戏的判断条件,不代表传感器具有相同的测量精度。
准备工作
准备 micro:bit、支持数据传输的 USB 线和官方 Python 编辑器。板子放在干燥、非导电的桌面上,远离扬声器、磁性工具、带磁吸结构的支架和大块金属。USB 线要有足够余量,不能拉扯板子或妨碍旋转。
在板子的 USB 接口一端贴一个纸质方向标记,后面始终以这一端作为朝向参考。程序启动时会进行罗盘校准,按照屏幕提示倾斜板子完成灯点图案。校准结束后再平放使用,不能一边大幅倾斜一边比较平面方向。
分步骤操作
第一步:写入完整程序
在官方编辑器中新建程序,输入以下代码,下载并复制生成的文件到 micro:bit 的 MICROBIT 磁盘,或使用编辑器支持的直接写入功能。不要把代码文件改名后当作固件复制。
from microbit import *
TOLERANCE = 12
compass.calibrate()
target = None
display.show('?')
while True:
if button_a.was_pressed():
target = compass.heading() % 360
display.show(Image.YES)
sleep(300)
if button_b.was_pressed():
if target is None:
display.show('?')
sleep(300)
else:
current = compass.heading() % 360
error = (target - current + 180) % 360 - 180
display.scroll(str(error))
if target is None:
display.show('?')
else:
current = compass.heading() % 360
error = (target - current + 180) % 360 - 180
if abs(error) <= TOLERANCE:
display.show(Image.YES)
elif error > 0:
display.show(Image.ARROW_E)
else:
display.show(Image.ARROW_W)
sleep(100)
代码可以完整使用,无需填写设备名称或网络参数。TOLERANCE 是容差角度,target 保存本次记录的目标,current 是当前读数,error 是最短转动误差。除非已经完成原始流程验证,否则先保留默认容差。
第二步:校准并记录方向
首次运行按照显示提示完成校准。看到问号说明还没有目标,属于正常状态。把板子平放,选一个容易辨认的方向,例如让纸质标记朝向桌面某条固定边线,然后按一次 A 键。
按键采用读取自上次调用以来是否按下的方法,持续按住不会在每轮循环中反复记录。记录后显示对勾,随后进入持续判断。再次按 A 会用当前朝向替换原目标,因此它也相当于重新开始一轮。
第三步:按照提示找回方向
先从上方观察,将板子缓慢顺时针转动一小段。离开容差范围后,预期出现提示向左转的箭头。再按提示反向转回,接近目标时应出现对勾。箭头表达的是板子需要转动的方向,不是磁北所在位置。
按 B 后滚动显示带正负号的角度误差。滚动文字期间程序会等待显示完成,因此箭头不会同时持续刷新。读数显示结束后会重新读取方向,不能把显示过程当成持续追踪模式。读数时尽量保持板子不动。
验证方法
用纸在桌面标出初始方向,连续进行三次“记录、转开、转回”的练习。检查每次回到标记附近是否显示对勾,并确认往反方向转动时,误差绝对值总体增大。不要要求每次数字完全一致。
要验证零度跨越计算,可以把目标设在接近磁北的一侧,再把板子稍微转到另一侧。预期误差仍为较小角度,而不是接近一整圈。若无法稳定读出方位,先改善环境并重新校准,不要靠扩大容差掩盖严重干扰。
常见错误
在金属桌面或磁性支架旁校准后,换到另一处读数可能明显变化。旋转时倾斜过大也会降低这个平面小游戏的一致性。把左右箭头理解为移动板子的位置,会发现平移不能可靠消除误差;应围绕竖直方向缓慢旋转。若显示一直是问号,先按 A 记录目标。
安全与回退
项目只使用开发板正规 USB 供电或配套电池盒,不接外部高电压,也不把裸板放在导电金属上。需要插拔电池线或增加外部接线时先断电。目标只保存在内存中,重启或断电后会丢失,并重新进入校准和等待记录流程。要撤销本程序,使用官方编辑器写入另一份已保存的简单程序即可;若只想更换目标,平放板子后重新按 A,无需反复刷写。
参考资料与转载说明
本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。
评论一下?