摘要:本文主要介绍板载的九轴传感器系统IMU的使用方法,获取当前设备的IMU数据并且根据IMU数据,判断当前设备状态(俯仰、横滚、方位、运动),然后通过串口输出显示;
一、硬件介绍
产品特点
AtomS3R-CAM AI Chatbot 套件由控制器与语音底座两大核心部分组成;
控制器部分采用AtomS3R-CAM (集成0.3MP GC0308摄像头、9轴IMU、IR发射管等);
语音底座部分采用Atomic Voice Base (基于ES831音频编解码芯片);

主要特性
集成 ESP32-S3-PICO-1-N8R8 主控
0.3MP GC0308 摄像头
九轴传感器系统
8MB Flash 和 8MB PSRAM
集成红外发射管
可扩展的引脚与接口
全双工 I2S 语音
MEMS 数字麦克风
功能引脚示意图

二、功能实现
1、硬件介绍
AtomS3R-CAM开发板内置了三轴 BMM150 地磁传感器和六轴 BMI270 姿态传感器的九轴传感器系统;
BMM150 磁场干扰:带有磁铁的产品可能对BMM150磁场传感器造成干扰,导致读数异常;
当搭配含有磁铁的M5主控设备时,需拆除磁铁 同时避免 BMM150 传感器放置在强磁场附近;

引脚原理图
BMM150 挂载于 BMI270
通过 BMI270 的 Sensor Hub 辅助 I2C 接口接入 BMM150,实现统一的9轴传感数据采集;


特性

实物效果搭建

2、功能效果
获取当前设备的IMU数据并且根据IMU数据进行处理后,通过串口打印当前设备在空间中的姿态和指向(俯仰角、横滚角、方位角、运动状态);
俯仰角(Pitch):设备前后倾斜的角度
横滚角(Roll):设备左右倾斜的角度
方位角(Heading):设备指向的地理方向(类似指南针)
运动状态:设备是否在旋转运动中
加速度计 → 倾斜角度(设备相对于重力的姿态)
陀螺仪 → 旋转速度(是否在转动)
磁力计 → 指南针方向(东南西北)
三、代码编写
俯仰状态:"上仰"、"下俯"、"水平"
横滚状态:"右倾"、"左倾"、"水平"
方位方向:"北"、"东"、"南"、"西"
运动状态:"运动中"、"静止"
主要相关代码
#include <M5Unified.h>
#include <math.h>
void setup() {
Serial.begin(115200);
while (!Serial);
M5.begin();
M5.Imu.init();
if (!M5.Imu.isEnabled()) {
Serial.println("IMU初始化失败");
while (1) { }
}
Serial.println("IMU初始化成功");
}
void loop() {
M5.update();
if (M5.Imu.update()) {
float ax, ay, az;
float gx, gy, gz;
float mx, my, mz;
M5.Imu.getAccel(&ax, &ay, &az);
M5.Imu.getGyro(&gx, &gy, &gz);
M5.Imu.getMag(&mx, &my, &mz);
// 计算姿态角
float pitch = atan2(-ax, sqrt(ay * ay + az * az)) * 180 / PI;
float roll = atan2(ay, az) * 180 / PI;
// 计算方位角
float heading = atan2(my, mx) * 180 / PI;
if (heading < 0) heading += 360;
// 判断运动状态
bool isMoving = (abs(gx) > 5) || (abs(gy) > 5) || (abs(gz) > 5);
Serial.printf("=== 设备方位信息 ===\n");
Serial.printf("俯仰角: %.1f° (%s)\n", pitch,
pitch > 45 ? "上仰" : pitch < -45 ? "下俯"
: "水平");
Serial.printf("横滚角: %.1f° (%s)\n", roll,
roll > 45 ? "右倾" : roll < -45 ? "左倾"
: "水平");
Serial.printf("方位角: %.1f° (%s)\n", heading,
heading < 45 ? "北" : heading < 135 ? "东"
: heading < 225 ? "南"
: heading < 315 ? "西"
: "北");
Serial.printf("运动状态: %s\n", isMoving ? "运动中" : "静止");
Serial.println();
}
delay(500);
}四、程序烧录
1、连接USB数据线至开发板;
2、选择端口号对应的开发板;
3、点击 上传 烧录程序到开发板上;

五、效果演示

我要赚赏金
