适用场景
本文整理日期为 2026-10-23,面向 micro:bit V2 与对应的 MicroPython 固件。作品适合课堂互动、桌面小游戏或动作轮次演示:静置后轻摇一下记一轮,同一串连续动作不会快速累加,按 B 查看总数,按 A 清零。
它是教学用动作触发器,不是步数计、运动医疗设备或精密测量仪。程序根据加速度大小判断动作和静置条件,旋转、碰撞及某些特殊运动都可能影响判断,不能把计数直接等同于真实运动次数。
原理:触发以后,必须先满足重新解锁条件
加速度传感器在静止时也会测到重力,合成加速度通常接近 1000 毫重力单位。不能用接近零作为静止的判断条件。
程序通过传感器的合成加速度接口读取数值,达到 1400 时触发一次计数,随后立即上锁。只有读数连续八百毫秒处于 850 到 1150 之间,才重新解锁。这样,一次摇动中的多个峰值不会全部变成新轮次。
接口单位与含义可查阅 micro:bit MicroPython 加速度文档。这个静置判断只观察加速度大小,是适合入门的近似条件,并不能证明板子绝对没有移动。
准备工作
准备 micro:bit V2、能够传输数据的 USB 线和电脑,使用面向 micro:bit 的 Python 编辑器。开始前下载保存原来的程序,避免覆盖后无法恢复。
本项目不需要外接电路。使用 USB 或厂商支持的电池盒低压供电,不接未知电源。如果之后扩展外部元件,必须断电接线,并为外接 LED 等器件配置合适的限流措施。
分步骤操作
第一步:写入完整程序
新建程序并粘贴以下内容,使用下载(Download)功能生成固件文件,再复制到设备对应的磁盘。写入期间等待设备完成,不要拔掉数据线。
from microbit import *
TRIGGER = 1400
QUIET_LOW = 850
QUIET_HIGH = 1150
QUIET_MS = 800
count = 0
armed = False
quiet_since = None
def show_count():
display.clear()
for index in range(min(count, 25)):
display.set_pixel(index % 5, index // 5, 7)
show_count()
while True:
if button_a.was_pressed():
count = 0
armed = False
quiet_since = None
show_count()
if button_b.was_pressed():
display.scroll(str(count))
armed = False
quiet_since = None
show_count()
now = running_time()
strength = accelerometer.get_strength()
if armed:
if strength >= TRIGGER:
count += 1
armed = False
quiet_since = None
show_count()
else:
if QUIET_LOW <= strength <= QUIET_HIGH:
if quiet_since is None:
quiet_since = now
elif now - quiet_since >= QUIET_MS:
armed = True
quiet_since = None
else:
quiet_since = None
sleep(20)
这里没有需要替换的设备地址或身份信息。TRIGGER 是触发阈值,QUIET_LOW 和 QUIET_HIGH 是重新解锁的加速度范围,QUIET_MS 是持续满足条件的时间,单位为毫秒。
第二步:理解显示和操作
每增加一次计数,屏幕多亮一个点,从左向右、从上向下排列。二十五次以后灯点全部亮起,但内部数字继续增加;按 B 会滚动显示完整总数。按 A 清零,重新静置后才能开始下一轮。
按钮使用按下事件读取接口,持续按住不会在每一轮循环里反复清零。接口会在读取后清除已记录的按下状态,具体语义见官方按钮文档。
第三步:完成第一轮动作
把板子放在平稳桌面至少一秒,再拿起轻摇一下,然后放回。程序起始处于锁定状态,避免刚上电、插线或拿取时立即计数。
不要用敲桌子、猛烈甩动或抛接的方式制造峰值。如果一次没有触发,先确认静置时间足够,再进行幅度稍大的轻摇,不要直接把灵敏度调到极端。
第四步:按观察结果调节
如果轻微拿取也经常计数,可以适当提高触发阈值;如果正常动作难以触发,可以小幅降低。一次只改一个参数,并记录修改前后的数值。
重新解锁时间越长,越不容易把一串动作拆成多次,但可接受的动作间隔也越长。调整到五百或一千二百毫秒时,应重新完成全部验证,不能只看一次成功就结束。
验证方法
先静置两秒,确认计数不自行增加。再进行一次轻摇并放回,观察增加一次。随后持续摇动一小段时间,检查没有因为多个峰值迅速累加;放稳超过八百毫秒后,再摇一次,应允许新增一轮。
接着按 B 查看总数,按 A 清零,验证显示与内部计数一致。滚动显示期间主循环暂停处理动作,因此查看数字时可能漏记。程序在滚动完成后重新上锁,要求再次静置,避免把查看过程中的动作残留用于解锁。
常见错误
把静止值理解成零,会使设备一直无法解锁。把延时直接放在触发分支里,虽然看起来能减少重复,却难以表达必须静置的条件。这里使用运行时间差判断持续时间,计时接口见官方基础模块文档。
灯点满屏不代表计数停止,完整总数需要按 B 查看。手持时一直不解锁,可能是动作使读数频繁离开范围,可以先放到桌上验证。只有供电没有磁盘出现,则应先检查数据线是否支持传输。
安全与回退
握住板边,远离水和金属杂物,避免触碰带电焊盘。移动时留意 USB 线长度,不要拉扯接口;使用电池盒前先断开电源并核对极性。
计数只保存在内存,断电或复位会归零。需要记录课堂结果时,应先查看并手动记下。回退时重新写入事先保存的程序;若修改阈值后难以使用,恢复本文参数,再从静置验证重新开始。
参考资料与转载说明
- micro:bit MicroPython:Accelerometer
- micro:bit MicroPython:Buttons
- micro:bit MicroPython:Microbit Module
本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。
评论一下?