lijinlei 发表于 2024-12-3 09:53

【Follow me第二季第4期】IMU 传感器

# 【Follow me第二季第4期】IMU 传感器

IMU,即惯性测量单元(Inertial Measurement Unit),是一种用于测量和报告物体的三个基本线性运动(加速度)和三个基本角运动(角速度)的电子设备。



IMU 原理是采用惯性定律实现的。

IMU 通常包括一组加速度计和陀螺仪,他们是惯性系统的核心部件,是影响惯性系统性能的主要因素。

## 加速度计

加速度计是一种用于测量加速度的机电设备。

这些力可能是静态的,例如重力的连续力,或者像许多移动设备一样,动态的,用于感应运动或振动。



插图从左至右分别展示了上下、左右、前后加速度感知的情况。

快速移动开发板可在串口监视器中观察到 x, y, z 三个方向的数值曲线发生变化。

### 代码

```c++
#include <Arduino_LSM6DSOX.h>

void setup() {
Serial.begin(9600);
while (!Serial);

if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");

    while (1);
}

Serial.print("Accelerometer sample rate = ");
Serial.print(IMU.accelerationSampleRate());
Serial.println(" Hz");
Serial.println();
Serial.println("Acceleration in g's");
Serial.println("X\tY\tZ");
}

void loop() {
float x, y, z;

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

    Serial.print(x);
    Serial.print('\t');
    Serial.print(y);
    Serial.print('\t');
    Serial.println(z);
}
}
```

#### 流程图



### 效果





### 应用

#### 跌落检测

从实验结果可以看出,当开发板发生剧烈晃动时,其加速度发生明显改变,通过设定阈值,可以判断是否发生碰撞或跌落。

#### 步数检测

结合人体行走或奔跑时的曲线姿态,制定相应的步态检测方案,如设定曲线抖动间隔、抖动幅值,对可能的走路、跳跃、奔跑、慢跑等多场景状态进行反馈,实现步数统计。

## 陀螺仪

陀螺仪传感器是一种可以测量和保持物体的方向和角速度的设备。

陀螺仪比加速度计更先进,因为它们可以测量物体的倾斜和横向,而加速度计只能测量其线性运动。

陀螺仪传感器也称为“角速率传感器”或“角速度传感器”。角速度以 `度/秒` 为单位,是物体**单位时间内旋转角度的变化**。



插图从左至右分别描述了绕 z 轴、绕 x 轴、绕 y 轴旋转的情况。

旋转开发板可在串口监视器中观察到 x, y, z 三个数值曲线的变化。

### 代码

```c++
#include <Arduino_LSM6DSOX.h>

void setup() {
Serial.begin(9600);
while (!Serial);

if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");

    while (1);
}

Serial.print("Gyroscope sample rate = ");
Serial.print(IMU.gyroscopeSampleRate());
Serial.println(" Hz");
Serial.println();
Serial.println("Gyroscope in degrees/second");
Serial.println("X\tY\tZ");
}

void loop() {
float x, y, z;

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

    Serial.print(x);
    Serial.print('\t');
    Serial.print(y);
    Serial.print('\t');
    Serial.println(z);
}
}
```

#### 流程图



### 效果





### 应用

飞机俯仰角变化,游戏模拟器,游戏手柄等

## 温度计

温度会影响 IMU 采样数据的稳定性,因此 IMU 传感器中包含高精度温度传感器,用来对温漂进行校正。

**温度漂移** TAR(Temperature Accelerometer Random Walk)**:**

- 描述IMU在温度变化时性能的稳定性。温度漂移小的IMU在不同环境条件下能够提供更一致的性能。
- 单位:$$m/s^2/\sqrt{Hz}/^\circ C$$

### 代码

```c++
#include <Arduino_LSM6DSOX.h>

void setup()
{
Serial.begin(9600);
while (!Serial);

if (!IMU.begin())
{
    Serial.println("Failed to initialize IMU!");
    while (1);
}
}

void loop()
{
if (IMU.temperatureAvailable())
{
    int temperature_int = 0;
    float temperature_float = 0;
    IMU.readTemperature(temperature_int);
    IMU.readTemperatureFloat(temperature_float);

    Serial.print("LSM6DSOX Temperature = ");
    Serial.print(temperature_int);
    Serial.print(" (");
    Serial.print(temperature_float);
    Serial.print(")");
    Serial.println(" °C");
}
}
```

### 效果





### 应用

手势识别、手势控制、温漂校准等。

## Arduino Cloud

若使用 (https://app.arduino.cc/) 编译代码,则首先需要对开发板进行固件升级



若开发板出现问题需要重置或初始化,也可采用 Firmware Updater 对开发板进行重置。

注意该升级过程需要时间较长,五分钟左右,当固件下载进度条走完后,需要保持连接,等待窗口显示 Successful 字样时表明升级完成。之后下载并安装 Arduino Cloud Agent 可成功连接 Arduino Cloud .

lijinlei 发表于 2024-12-3 16:19

gtq 发表于 2024-12-3 16:02
哇塞,学到啦,超感谢!多多积累经验哈,盼着有那么一天能派上用场呢。

<p>这款开发板的板载传感器较多,文中提到的 IMU 传感器在智能手机、手表、手环等可穿戴设备中应用较多,得益于在保持精度的前提下器件微型化技术的更新,因此还是有很多可以拓展的应用场景,如步数统计、姿态检测、速度监测等。</p>

慕容雪花 发表于 2024-12-4 16:56

<p>大佬,流程图用啥软件画</p>

lijinlei 发表于 2024-12-4 19:22

慕容雪花 发表于 2024-12-4 16:56
大佬,流程图用啥软件画

<p>PowerPoint&nbsp;<img height="28" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smiling-face-with-open-mouth-and-cold-sweat_1f605.png" width="28" /></p>

<p> &nbsp;</p>
页: [1]
查看完整版本: 【Follow me第二季第4期】IMU 传感器