6. 加速度计

在这里,您将学习如何使用 LED 状态(如向左倾斜和向右倾斜)读取加速度计和信号。

6.1. 使用加速度计

pyboard 有一个加速度计(微小弹簧上的微小质量),可用于检测板的角度和运动。每个 x、y、z 方向都有不同的传感器。要获取加速度计的值,请创建一个 pyb.Accel() 对象,然后调用 x() 方法。

>>> accel = pyb.Accel()
>>> accel.x()
7

这将返回一个值在 -30 到 30 之间的有符号整数。请注意,测量非常嘈杂,这意味着即使您保持电路板完全静止,您测量的数字也会有一些变化。因此,您不应使用 x() 方法的确切值,而应查看它是否在某个范围内。

我们将首先使用加速度计打开不平坦的灯。

accel = pyb.Accel()
light = pyb.LED(3)
SENSITIVITY = 3

while True:
    x = accel.x()
    if abs(x) > SENSITIVITY:
        light.on()
    else:
        light.off()

    pyb.delay(100)

我们创建 Accel 和 LED 对象,然后获取加速度计 x 方向的值。如果 x 的大小大于某个值SENSITIVITY,则 LED 亮起,否则熄灭。循环有一个小,pyb.delay() 否则当 x 的值接近时 LED 会烦人地闪烁 SENSITIVITY。尝试在 pyboard 上运行此程序并左右倾斜电路板以打开和关闭 LED。

练习:更改上述脚本,使 pyboard 倾斜得越多,蓝色 LED 就越亮。提示:您需要重新调整值,强度从 0 到 255。

6.2. 制作水平仪

上面的例子只对 x 方向的角度敏感,但如果我们使用这个y() 值和更多的 LED,我们可以把 pyboard 变成一个水平仪。

xlights = (pyb.LED(2), pyb.LED(3))
ylights = (pyb.LED(1), pyb.LED(4))

accel = pyb.Accel()
SENSITIVITY = 3

while True:
    x = accel.x()
    if x > SENSITIVITY:
        xlights[0].on()
        xlights[1].off()
    elif x < -SENSITIVITY:
        xlights[1].on()
        xlights[0].off()
    else:
        xlights[0].off()
        xlights[1].off()

    y = accel.y()
    if y > SENSITIVITY:
        ylights[0].on()
        ylights[1].off()
    elif y < -SENSITIVITY:
        ylights[1].on()
        ylights[0].off()
    else:
        ylights[0].off()
        ylights[1].off()

    pyb.delay(100)

我们首先为 x 和 y 方向创建一个 LED 对象元组。元组在 python 中是不可变的对象,这意味着它们一旦被创建就不能被修改。然后我们像以前一样继续,但为正负 x 值打开不同的 LED。然后我们对 y 方向做同样的事情。这不是特别复杂,但它可以完成工作。在你的 pyboard 上运行这个,你应该看到不同的 LED 亮起,这取决于你如何倾斜板。