您的项目需要加速度计、陀螺仪或磁场传感器吗?内置的IMU传感器LSM9DS1包含这些功能!
您可能已经阅读了有关新的Arduino Nano 33系列及其实时和多线程功能的信息。但是,该开发板还有更多有用的功能!其中之一就是内置的LSM9DS1 IMU,它包含一个加速度计、一个陀螺仪和一个磁场传感器。
在本篇文章中,我们将向您展示如何在不使用任何其他硬件的情况下使用IMU。
安装LSM9DS1 IMU库
在开始之前,您需要为内置传感器安装官方的Arduino库。为此,导航到“Sketch”,在Arduino IDE中打开库管理器,然后单击“include library”,然后选择“manage libraries”。这将会弹出一个新窗口。在该窗口中,搜索IMU并安装下图高亮显示的软件包:
接下来,如果要使用IMU,请在Arduino草图中包括这个已安装的软件包:
#include
使用加速度计
IMU的加速度计可用于测量设备的方向。下图显示了Arduino的移动与加速度计的哪个测量轴相对应。
Arduino的运动如何与加速度计的X轴、Y轴和Z轴相对应
为了测试加速度计,我编写了一个小的测试脚本,可以检测Arduino是放置在平坦的表面上还是倾斜到任一侧。如您所见,该脚本必须读取加速度计的Y轴来确定旋转角度。
将设备放在平坦表面上时,测量值为零。当Arduino倒置时,也是如此。以下代码段显示了loop方法的内容。
float x, y, z, delta = 0.05;
if (IMU.accelerationAvailable())
{
IMU.readAcceleration(x, y, z);
if(y <= delta && y >= -delta)
Serial.println("flat");
else if(y > delta && y < 1 - delta)
Serial.println("tilted to the left");
else if(y >= 1 - delta)
Serial.println("left");
else if(y < -delta && y > delta - 1)
Serial.println("tilted to the right");
else
Serial.println("right");
}
如您所见,我不必连接任何外部硬件。对IMU的所有调用都很短,这有助于保持代码简洁。
我使用了增量值来适应读取传感器值时可能出现的最终误差。您可以调整该值,以使Arduino更早地对其方向变化做出反应。
该草图的输出如下所示:
使用陀螺仪
如您所见,在Nano 33 BLE开发板上,连接IMU的加速度计是一个简单的过程。幸运的是,读取其他传感器值同样容易。例如,陀螺仪可用于实现手势检测:
float x, y, z, delta = 400;
if (IMU.gyroscopeAvailable())
{
IMU.readGyroscope(x, y, z);
if(y < -delta)
Serial.println("Flicked down");
else if(y > delta)
Serial.println("Flicked up");
}
此示例脚本检测何时快速向上或向下移动Arduino并做出相应的反应。在该示例中,delta值越小,Arduino对运动的反应就越早。
该程序的输出如下所示:
检测磁场
LSM9DS1还可以检测磁场。您先前下载的库包含用于此目的的函数。您可以通过调用readMagneticField函数获得以微特斯拉(micro Tesla)单位测量的磁场。调用此函数可以生成显示测量值的图表。
显示来自readMagneticField函数的测量值的图表
内置IMU易于设置
内置的LSM9DS1 IMU具有许多不同的有用传感器,并且很容易进行连接。您唯一要做的就是安装官方库以利用传感器的功能。 IMU所配备的各种传感器不仅给我留下了深刻的印象,而且其准确性也给我留下了深刻的印象。陀螺仪和加速度计可以精确地检测甚至最小的运动。
编辑:hfy
-
传感器
+关注
关注
2550文章
51071浏览量
753341 -
陀螺仪
+关注
关注
44文章
784浏览量
98688 -
加速度计
+关注
关注
6文章
702浏览量
45896 -
Arduino
+关注
关注
188文章
6469浏览量
187012 -
磁场传感器
+关注
关注
0文章
41浏览量
12037
发布评论请先 登录
相关推荐
评论