您的項目需要加速度計、陀螺儀或磁場傳感器嗎?內置的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
-
傳感器
+關注
關注
2551文章
51106瀏覽量
753617 -
陀螺儀
+關注
關注
44文章
784瀏覽量
98717 -
加速度計
+關注
關注
6文章
702瀏覽量
45897 -
Arduino
+關注
關注
188文章
6469瀏覽量
187094 -
磁場傳感器
+關注
關注
0文章
41瀏覽量
12038
發布評論請先 登錄
相關推薦
評論