一板网电子技术论坛

风筝
发表于: 2019-9-30 10:37:29 | 显示全部楼层

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


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


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


安装LSM9DS1 IMU库

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

search for IMU.png


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

  1. #include <Arduino_LSM9DS1.h>
复制代码

使用加速度计

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

accelerometer.jpg

Arduino的运动如何与加速度计的X轴、Y轴和Z轴相对应


为了测试加速度计,我编写了一个小的测试脚本,可以检测Arduino是放置在平坦的表面上还是倾斜到任一侧。如您所见,该脚本必须读取加速度计的Y轴来确定旋转角度。


将设备放在平坦表面上时,测量值为零。当Arduino倒置时,也是如此。以下代码段显示了loop方法的内容。

  1. float x, y, z, delta = 0.05;

  2.   if (IMU.accelerationAvailable())
  3.   {
  4.     IMU.readAcceleration(x, y, z);

  5.     if(y <= delta && y >= -delta)
  6.           Serial.println("flat");
  7.     else if(y > delta && y < 1 - delta)
  8.           Serial.println("tilted to the left");
  9.     else if(y >= 1 - delta)
  10.           Serial.println("left");
  11.     else if(y < -delta && y > delta - 1)
  12.           Serial.println("tilted to the right");
  13.     else
  14.           Serial.println("right");
  15. }
复制代码

如您所见,我不必连接任何外部硬件。对IMU的所有调用都很短,这有助于保持代码简洁。


我使用了增量值来适应读取传感器值时可能出现的最终误差。您可以调整该值,以使Arduino更早地对其方向变化做出反应。


该草图的输出如下所示:

output of this sketch.png


使用陀螺仪

如您所见,在Nano 33 BLE开发板上,连接IMU的加速度计是一个简单的过程。幸运的是,读取其他传感器值同样容易。例如,陀螺仪可用于实现手势检测:

  1. float x, y, z, delta = 400;

  2.   if (IMU.gyroscopeAvailable())
  3.   {
  4.     IMU.readGyroscope(x, y, z);

  5.     if(y < -delta)
  6.           Serial.println("Flicked down");
  7.     else if(y > delta)
  8.           Serial.println("Flicked up");
  9.   }
复制代码

此示例脚本检测何时快速向上或向下移动Arduino并做出相应的反应。在该示例中,delta值越小,Arduino对运动的反应就越早。


该程序的输出如下所示:

The output of this program.png


检测磁场

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

Detecting a Magnetic Field.png

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


内置IMU易于设置

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

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 377 | 回复: 685



手机版|

GMT+8, 2019-10-22 00:20 , Processed in 0.203128 second(s), 31 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表