micro:bit 抽屉见光记录器:连续变亮才留痕,关回后仍保留提示

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

micro:bit 抽屉见光记录器:连续变亮才留痕,关回后仍保留提示 教程示意图

适用场景

想知道自己的收纳抽屉在某段时间内是否打开过,可以做一个简单的见光记录器:把 micro:bit 放进抽屉,关闭时进入监测,连续变亮约一秒后显示叉号;即使重新关上抽屉,叉号仍然保留,直到按键复位。

它适合学习传感器校准、连续采样和状态保存,不承担防盗或重要物品监控任务。开抽屉不一定带来足够的亮度变化,断电也会清除记录,因此结果必须结合实际环境解释。

原理

micro:bit 可以利用点阵中的发光二极管估计环境光,程序读到的是零到二百五十五的相对数值,并非照度单位。官方说明还指出,不同硬件版本参与感光的点阵位置不同,第二版主要使用顶部一排,安装时不能遮住它。相关原理见 micro:bit 官方感光说明。

程序先采集关闭状态和打开状态的亮度,取两者中点作为阈值。监测时,连续十次采样都高于阈值才认定见光;任意一次不满足就重新计数。触发后把记录变量设为真,后续变暗不会自动清除,这就是状态锁存。

准备工作

准备一块 micro:bit 第二版、可传输数据的连接线、官方规格的电池盒,以及通风、干燥且不会挤压电池盒的抽屉。只使用开发板规定的供电方式,不接裸露锂电池或外部高压电源。

打开 micro:bit Python 编辑器(Python Editor),新建程序。将开发板固定在绝缘底板上,点阵朝向抽屉打开后能够进光的位置,避免接触金属杂物。移动供电线或更换供电方式前先断电。

分步骤操作

第一步:理解两次校准的顺序

按下 A 键时采集暗处亮度。可以先按 A,再在两秒准备时间内关好抽屉,或用不接触电路的遮光罩模拟关闭状态。采集结束后显示字母 D。

然后打开抽屉,按下 B 键,保持开发板处于正常打开时的光线中。程序等待两秒再采集亮处亮度。两组数据差值太小时会显示叉号并停止,需要调整安装位置后重新启动。

第二步:写入完整程序

下面代码可作为完整主程序。变量 dark 和 light 分别保存暗处与亮处平均值,threshold 是判定阈值,latched 表示已经记录到见光事件,count 表示连续满足条件的次数;这些名称无需替换。

from microbit import *

def sample_light():
    display.clear()
    sleep(200)
    values = []
    for _ in range(20):
        values.append(display.read_light_level())
        sleep(50)
    return sum(values) // len(values)

display.show('A')
while not button_a.was_pressed():
    sleep(20)
display.clear()
sleep(2000)
dark = sample_light()

display.show('D')
while not button_b.was_pressed():
    sleep(20)
display.clear()
sleep(2000)
light = sample_light()

if light - dark < 10:
    display.show(Image.NO)
    while True:
        sleep(1000)

threshold = (dark + light) // 2
latched = False
count = 0

display.show(Image.YES)
sleep(5000)
display.clear()
button_a.was_pressed()

while True:
    if button_a.was_pressed():
        latched = False
        count = 0
        display.show(Image.YES)
        sleep(5000)
        display.clear()
        button_a.was_pressed()
        continue

    if not latched:
        level = display.read_light_level()
        if level > threshold:
            count += 1
        else:
            count = 0
        if count >= 10:
            latched = True
            display.show(Image.NO)

    sleep(100)

感光接口的数值范围和点阵操作可查阅 MicroPython 点阵文档。本程序在校准和监测期间清空点阵,触发后才持续显示记录。

第三步:下载并完成校准

保存源代码,再将编辑器生成的程序文件写入开发板。按前述顺序完成暗处、亮处校准。显示勾号后有五秒准备时间,把开发板放回原位并关闭抽屉。

五秒后程序开始采样。十次连续采样大约对应一秒,实际时间还包括接口调用开销,因此不能把它当作精密计时器。代码中的差值十只是本示例用于拒绝对比度过低环境的经验门槛,并非硬件保证的检测精度。

第四步:复位后再开始一轮

出现叉号后按 A,程序清除事件记录,并再次提供五秒关闭抽屉的准备时间。复位不会重新校准。如果摆放方向、室内灯光或安装位置明显变化,应重新启动并重新采集两种状态。

程序使用按键历史事件接口;读取一次就会清除该次按下记录,具体行为见 MicroPython 按键文档。

验证方法

先在桌面用遮光罩演练。完成校准并等待进入监测后,短暂揭开再盖回,若不足十次连续亮采样,不应锁存;持续揭开约两秒,应出现叉号。随后盖回,叉号应继续保留。按 A 并在五秒内重新遮光,确认新一轮可以再次触发。

再放入抽屉重复操作,分别验证白天和开灯时的效果。夜间开抽屉没有明显光线变化时,未触发属于感光方案的能力边界。

常见错误

一启动就出现叉号,先区分是校准失败还是正式触发。亮处值没有明显高于暗处值时,应改善位置,而不是不断降低门槛。外壳遮住顶部感光区域、手掌盖住点阵或改变板子朝向,都会影响结果。

按 A 后仍很快再次出现叉号,通常是五秒结束时抽屉还亮着。程序会把这视作新的见光事件,并非复位没有生效。

安全与回退

不要把电池盒塞进会挤压、夹线或潮湿的位置,也不要用于监视他人的私人空间。异常发热时立即断电检查。回退只需断电取出开发板,或写入之前保存的程序;断电后记录消失,本项目没有写入永久存储。

参考资料与转载说明

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

评论一下?

OωO
取消