浅谈Arduino Nano 33系列的IMU传感器

描述

您的项目需要加速度计、陀螺仪或磁场传感器吗?内置的IMU传感器LSM9DS1包含这些功能!

您可能已经阅读了有关新的Arduino Nano 33系列及其实时和多线程功能的信息。但是,该开发板还有更多有用的功能!其中之一就是内置的LSM9DS1 IMU,它包含一个加速度计、一个陀螺仪和一个磁场传感器。

在本篇文章中,我们将向您展示如何在不使用任何其他硬件的情况下使用IMU。

安装LSM9DS1 IMU库

在开始之前,您需要为内置传感器安装官方的Arduino库。为此,导航到“Sketch”,在Arduino IDE中打开库管理器,然后单击“include library”,然后选择“manage libraries”。这将会弹出一个新窗口。在该窗口中,搜索IMU并安装下图高亮显示的软件包:

Arduino

接下来,如果要使用IMU,请在Arduino草图中包括这个已安装的软件包:

#include

 

使用加速度计

IMU的加速度计可用于测量设备的方向。下图显示了Arduino的移动与加速度计的哪个测量轴相对应。

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更早地对其方向变化做出反应。

该草图的输出如下所示:

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对运动的反应就越早。

该程序的输出如下所示:

Arduino

检测磁场

LSM9DS1还可以检测磁场。您先前下载的库包含用于此目的的函数。您可以通过调用readMagneticField函数获得以微特斯拉(micro Tesla)单位测量的磁场。调用此函数可以生成显示测量值的图表。

Arduino

显示来自readMagneticField函数的测量值的图表

内置IMU易于设置

内置的LSM9DS1 IMU具有许多不同的有用传感器,并且很容易进行连接。您唯一要做的就是安装官方库以利用传感器的功能。 IMU所配备的各种传感器不仅给我留下了深刻的印象,而且其准确性也给我留下了深刻的印象。陀螺仪和加速度计可以精确地检测甚至最小的运动。
编辑:hfy

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分