micro:bit 摇动轮次计数牌:静置后解锁,避免一次动作连续加分

2026-10-23 / 0 评论 / 4 阅读

micro:bit 摇动轮次计数牌:静置后解锁,避免一次动作连续加分 教程示意图

适用场景

本文整理日期为 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 线长度,不要拉扯接口;使用电池盒前先断开电源并核对极性。

计数只保存在内存,断电或复位会归零。需要记录课堂结果时,应先查看并手动记下。回退时重新写入事先保存的程序;若修改阈值后难以使用,恢复本文参数,再从静置验证重新开始。

参考资料与转载说明

本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。

评论一下?

OωO
取消