IMU的使用
一、加速器概述
本节介绍如何在Wio Terminal上安装并使用内置3轴数字加速度计(LIS3DHTR)库。这将允许你访问Wio终端的加速度计信息,并将其用于运动控制等。
1、为 Wio Terminal 安装 3-Axis Digital Accelerometer(LIS3DHTR)库
1、访问Seeed_Arduino_LIS3DHTR仓库,并将整个仓库下载到您的本地驱动器上。
2、现在,3轴数字加速度计库可以安装到Arduino IDE中。请打开Arduino IDE,点击“项目”->“导入库”->“添加.ZIP库”,然后选择您刚刚下载的Seeed_Arduino_LIS3DHTR文件。
二、开始使用加速器
1、3轴数字加速度计初始化
在Wio Terminal上初始化加速计:
- 设置输出数据速率:lis.setOutputDataRate(), 1Hz 到 5kHz 范围.
- 设置量程: lis.FullScaleRange(), 2g 到 16g 范围.
#include"LIS3DHTR.h"
LIS3DHTR<TwoWire> lis;
void setup() {
...
lis.begin(Wire1);
lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); // 设置输出数据速率为 25Hz,可设置高达 5kHz。
lis.setFullScaleRange(LIS3DHTR_RANGE_2G); // 设置量程为 2g,可选范围为 2g、4g、8g、16g。
...
}
2、读取加速度计值
要读取 Wio Terminal 上每个轴的加速度计值,请遵循以下步骤:
void loop() {
float x_values, y_values, z_values;
x_values = lis.getAcceleratationX();
y_values = lis.getAcceleratationY();
z_values = lis.getAcceleratationZ();
delay(50); // 延迟以避免读取大量数据
...
}
注意:强烈建议添加延迟,以避免一次性读取大量数据。
3、示例
此示例将在串行监视器上打印加速度计的所有三个轴的值。
#include"LIS3DHTR.h"
LIS3DHTR<TwoWire> lis;
void setup() {
Serial.begin(115200);
lis.begin(Wire1);
if (!lis) {
Serial.println("ERROR");
while(1);
}
lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); //Data output rate
lis.setFullScaleRange(LIS3DHTR_RANGE_2G); //Scale range set to 2g
}
void loop() {
float x_values, y_values, z_values;
x_values = lis.getAccelerationX();
y_values = lis.getAccelerationY();
z_values = lis.getAccelerationZ();
Serial.print("X: "); Serial.print(x_values);
Serial.print(" Y: "); Serial.print(y_values);
Serial.print(" Z: "); Serial.print(z_values);
Serial.println();
delay(50);
}
三、Wio Terminal 感应敲击动作Demo
本节演示了如何使用 Wio Terminal 内置的加速度计来感应单击或双击的敲击动作!
1、3轴数字加速度计初始化
初始化参考 二、1。
2、敲击灵敏度配置
对于敲击的灵敏度,请根据IMU的量程范围调整阈值:
量程 | 2g | 4g | 8g | 16g |
---|---|---|---|---|
阈值 | 40-80 | 20-40 | 10-20 | 5-10 |
3、单击或双击
要使用点击功能,只需按照以下方式调用它,其中第一个参数用于确定感应单击还是双击(1 或 2),第二个参数是阈值。
void setup() {
...
lis.click(1,THRESHOLD);
// 当检测到敲击时触发的中断信号!
attachInterrupt(digitalPinToInterrupt(GYROSCOPE_INT1), count, RISING);
}
注意:GYROSCOPE_INT1 是加速度计的中断引脚 1。
4、完整代码
#include"LIS3DHTR.h"
LIS3DHTR<TwoWire> lis;
// 调整此阈值以改变点击的灵敏度
#define THRESHOLD 40
uint8_t cnt=0;
void count() {
cnt++;
Serial.print("Tap Count: ");
Serial.println(cnt);
}
void setup() {
Serial.begin(115200);
lis.begin(Wire1);
if (!lis) {
Serial.println("ERROR");
while(1);
}
lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); //Data output rate
lis.setFullScaleRange(LIS3DHTR_RANGE_2G); //Scale range set to 2g
// 1 单击, 2 双击
// 阈值越小,灵敏度越高
lis.click(1, THRESHOLD);
// 当检测到敲击时触发中断信号
attachInterrupt(digitalPinToInterrupt(GYROSCOPE_INT1), count, RISING);
}
void loop() {
}