micropython中的microbit指南针

microbit compass in micropython

我有一个 microbit 项目,其中 microbit 垂直插入 kiktronics 机器人。

我想获取机器人的航向,但是

compass.heading()

只有微位是水平的才有效。我尝试使用 get_x()、get_y()、get_z()

读取指南针的 x、y、z 坐标

但是我得到的数字范围在 z 轴和 x,y 轴上的比例不同。

有谁知道不同传感器的范围是多少?

我使用了下面的测试代码。如果我先 运行 compass_calibrate() 函数,即使磁力计垂直,我也可以获得准确的罗盘读数。

注释掉 compass_calibrate() 行后,当围绕 3 轴自由移动电路板时 space,我可以看到 z 值没有 x 和 y 变化那么大。所以我得到了一个小磁铁。在磁力计周围移动它会使 x、y、z 值似乎在大致相同的范围内变化——这是一个粗略的眼球实验。

查看 MAG3110 磁力计的数据 sheet,我看不到 3 个磁力计轴不同的任何迹象。那么,为什么没有外场时 z 读数会不同呢?我假设 PCB 中有一个地平面。这在 PCB 构造中很常见。这可以作为 z 轴的屏蔽。

from microbit import *

# compass.calibrate()
while True:
    sleep(250)
    # c = compass.heading()
    x = compass.get_x()
    y = compass.get_y()
    z = compass.get_z()
    print('x:{} y:{} z: {}'.format(x,y,z))