Circuit Playground Express车上有一个3轴LIS3DH加速度计,可以用于各种项目。这种芯片的优点是非常小,适合在电路游乐场板的中心。然而,有时“仅仅”是一个3轴加速度计是一个缺点。当你需要像指南针一样的能力时。一个加速度计只有告诉你棋盘如何移动(准确地说,是作用在它上面的力),但不告诉你它相对于你所在行星的磁北极的方向。为此,a磁强计是必要的。
磁力计确实是作为单独的芯片提供的(例如,BBC Micro:bit就有一个),但在分接板上似乎不那么容易找到它。然而,含有加速计和磁力计的单个芯片的爆发很容易被发现。特异性,有爆发包含LSM303在通常的矩形标题条格式以及Flora爆发。
在本指南中,我们将添加Flora LMS303 breakout到Circuit Playground Express,并使用它来构建指南针。
用C语言(Arduino)编码,您实际上可以使用任何breakout,其支持库符合Adafruit统一传感器库,并提供磁力计读数。该项目也在CircuitPython中可编程,并演示了加速度计的使用。
环路运动场快车上的NeoPixels将用于指示北方。
校准
在校准期间(当所有像素都是绿色时)以8字形移动方框,并围绕x轴和y轴旋转多次。
通过采样一系列的读数。我们可以得到期望值的范围。用它,我们可以计算出X轴和Y轴范围内的中心。从(0,0)到(0,0)的距离可用于校正后续读数,使其相对于(0,0)。
当从原始代码校准(即你没有调整最小/最大数组)或如果你要求重新校准(按下按钮a,直到像素变成绿色),结果将打印在控制台上。您可以复制这两行,并替换代码顶部附近的类似行。重新构建它(如果使用Arduino代码)并将其加载到指南针上。
操作
然后,我们可以将每个校正后的读数映射到-100到+100的范围内,并将这些规范化值传递给atan2函数,该函数为我们提供一个标题,角度显示在-Pi到Pi的范围内。
然后我们就会发现标题落在哪个30度的楔子上。从上面的角度加上180°开始,得到0到360°之间的值。我们加上15(因为最低的部分以0为中心),然后除以30。
这就是我们如何知道点亮哪个新像素。
对于这里描述的构建,您可能需要一个Circuit Playground Express的案例。如果你有3D打印机或有3D打印设备,本指南展示了如何制作一个漂亮的。