编写日期:2026-10-31。
适用场景
想做一个不用外接传感器的小作品,可以让 micro:bit 把倾斜变化显示成屏幕上的光点:向左右或前后倾斜时,光点离开中心;按 A 键记住一个摆放姿态,回到这个姿态并保持片刻后,屏幕显示对勾。
它适合练习传感器输入与二维显示,也可以用于桌面姿态重复摆放的教学演示。它不是经过校准的水平仪,不能用于施工、车辆控制或任何安全判断。保存的是相对于当前参考姿态的变化,不是地理朝向。
原理:从两个轴映射到两个坐标
加速度计返回 X、Y、Z 三个方向的加速度,单位为毫重力加速度,即千分之一标准重力加速度。板子静止倾斜时,重力在各轴上的分量发生变化;运动时,读数还包含运动造成的加速度。micro:bit 加速度计官方文档
本例先记住 X、Y 的参考值,再计算当前读数与参考值的差,将差值分成中心、内圈、外圈三个等级。为了减少轻微抖动,程序对读数做简单平滑。只有两个轴都进入更小的容差范围并持续六百毫秒,才显示确认,因此光点暂时位于中心不一定马上出现对勾。
准备工作
准备 micro:bit V2、一根可传数据的 USB 线和官方 Python 编辑器。保存板上原程序的源码或已有工程,再创建新项目。实验只用开发板自带按键、加速度计和显示屏,不连接边缘接口,也不需要额外焊接。
让板子显示面朝上,放在干燥、绝缘且稳定的表面。USB 线应留有余量,避免线材拉力改变姿态。如果选择电池供电,只使用厂商支持的电池盒,不向引脚或电池接口接入其他电压。
分步骤操作
第一步:理解屏幕坐标
micro:bit 屏幕有五行五列,左上角为坐标零、零,中心为二、二。像素亮度范围为零到九。显示屏官方文档
程序将中心点作为参考姿态,光点最远只能移动到屏幕边缘。这样的限幅可以避免大幅倾斜时产生超出屏幕范围的坐标。
第二步:输入完整程序
在编辑器中输入以下代码。所有数值都是本例的初始参数,可以先保持原样运行;代码中没有需要补填的硬件地址或连接参数。
from microbit import *
base_x = 0
base_y = 0
filtered_x = 0
filtered_y = 0
center_since = None
def save_reference():
while button_a.is_pressed():
sleep(20)
display.show('C')
sleep(300)
total_x = 0
total_y = 0
for _ in range(20):
x, y, z = accelerometer.get_values()
total_x += x
total_y += y
sleep(20)
return total_x // 20, total_y // 20
def offset(value):
magnitude = abs(value)
if magnitude < 150:
return 0
step = min(2, 1 + (magnitude - 150) // 250)
if value < 0:
return -step
return step
while True:
if button_a.was_pressed():
base_x, base_y = save_reference()
filtered_x = base_x
filtered_y = base_y
center_since = None
x, y, z = accelerometer.get_values()
filtered_x = (3 * filtered_x + x) // 4
filtered_y = (3 * filtered_y + y) // 4
dx = filtered_x - base_x
dy = filtered_y - base_y
close = abs(dx) < 100 and abs(dy) < 100
now = running_time()
if close:
if center_since is None:
center_since = now
else:
center_since = None
if center_since is not None and now - center_since >= 600:
display.show(Image.YES)
else:
display.clear()
display.set_pixel(2, 2, 2)
column = 2 + offset(dx)
row = 2 + offset(dy)
display.set_pixel(column, row, 9)
sleep(40)
第三步:保存参考姿态
将程序写入开发板后,把板子显示面朝上摆稳,短按 A 键并松手。出现 C 时不要移动,程序会等待片刻,再连续采集二十次读数求平均。等待松手的设计可以减少持续按压带来的干扰,但仍需要你在采样期间保持板子稳定。
按键检测方法会记录自上次读取以来发生的按下事件,读取后清除记录,因此无需通过持续按住来维持校准。按键官方文档
第四步:观察光点并返回中心
缓慢向左右、前后倾斜,观察光点分别沿两个方向移动。先用小角度找出当前拿板方向与屏幕方向的对应关系,不要预设它一定像手机屏幕那样旋转。
再把板子放回参考姿态,等待对勾出现。离开容差范围后,程序会清除持续计时;再次靠近时需要重新保持六百毫秒。参考数据只存在内存中,断电或复位后需要重新按 A 键保存。
验证方法
先在同一表面完成三次“保存参考、缓慢倾斜、返回原位”,观察两个轴是否都能使光点变化。然后故意只短暂经过中心,确认不会仅凭瞬间接近就立即显示对勾。
接着保持一个轻微倾斜姿态,按 A 键重新保存。若板子随后保持不动,也应能出现对勾,这说明它判断的是相对参考姿态,而不是绝对水平。最后重启开发板,重新保存参考,确认你没有把内存数据误认为永久配置。
常见错误
快速摇晃时光点移动不能解释为准确倾角,因为此时存在运动加速度。屏幕中心的显示范围比确认范围宽,看到中心光点却暂时没有对勾属于设计行为。若光点不断跳动,先检查桌面振动和 USB 线拉力,不要立即扩大容差掩盖问题。
如果代码出现缩进错误,应检查是否混用了空格与制表符。若希望调整灵敏度,可以逐次修改分档门槛,再重复同一组动作;每次只改一项,才能判断变化来自哪里。
安全与回退
不要把板子放在导电金属片上,也不要在通电时夹接不明导线。移动时握住边缘,避免拉扯 USB 插头。停止实验可以直接断开正常供电;恢复原用途时重新写入先前保存的程序。当前作品没有外部接线和永久校准写入,重新烧录即可移除其行为。
参考资料与转载说明
本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。
评论一下?