Files
mobile_comm/luatos/air780epm/module/Air780EPM/demo/sensor/mpu6050
wangfq 173dd6874f init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
2026-08-31 08:53:49 +08:00
..

MPU6050 六轴姿态传感器演示

一、功能模块介绍

1.1 核心主程序模块

  1. main.lua - 主程序入口,负责项目初始化、版本定义和任务调度
  2. mpu6050_demo.lua - MPU6050 功能演示模块,包含数据读取、静态倾角、动态姿态解算、碰撞检测等所有功能的演示用例

1.2 扩展库模块

  1. exs_mpu6050 - MPU6050 扩展库,提供 I2C 初始化、三轴加速度/角速度数据读取、温度、倾角、姿态解算(互补滤波)、碰撞/敲击检测、自由落体检测、自动校准等 API

二、演示流程介绍

本 demo 按顺序演示 exs_mpu6050 扩展库的 4 项功能:HELLO → [1/4] → [2/4] → [3/4] → [4/4] → End

2.1 功能演示项说明

  1. [1/4] 初始化与数据读取 - 初始化 MPU6050 传感器并读取三轴加速度(X/Y/Z,单位 g)、三轴角速度(X/Y/Z,单位 °/s)、芯片温度
  2. [2/4] 静态倾角测量 - 通过加速度计推算俯仰角(Pitch)和横滚角(Roll),适用于静态姿态测量
  3. [3/4] 动态姿态解算(互补滤波) - 融合陀螺仪积分与加速度计数据,通过互补滤波输出动态姿态角
  4. [4/4] 碰撞检测与自由落体 - 演示敲击检测(detect_tap)和失重/自由落体检测(detect_freefall

三、演示硬件环境

3.1 硬件清单

  • Air780EPM 核心板

  • MPU6050 六轴姿态传感器模块 × 1

  • 母对母杜邦线 × 4

  • TYPE-C 数据线 × 1

3.2 接线配置

3.2.1 MPU6050 模块接线(硬件 I2C

Air780EPM 核心板
MPU6050 模块(GY-521
67 / I2C1_SCL
SCL
66 / I2C1_SDA
SDA
VDD_EXT
VCC
GND
GND

说明:接线时注意杜邦线不宜过长,以免通信不稳定。MPU6050 模块(GY-521)通常包含 3.3V 稳压器,可直接使用 VDD_EXT 供电。

四、演示软件环境

4.1 开发工具

4.2 内核固件

4.3 脚本文件

  • main.lua - 程序入口
  • mpu6050_demo.lua - 演示模块
  • exs_mpu6050 - 扩展库

五、演示核心步骤

5.1 硬件准备

  1. 按照接线表将 MPU6050 模块连接到核心板
  2. 确保电源连接正确,通过 TYPE-C USB 口供电
  3. 首次上电请将设备水平放置,以便自动校准
  4. 检查所有接线无误,避免短路

5.2 软件配置

main.lua 中加载对应的演示模块:

-- 加载 mpu6050_demo.lua 演示模块
require "mpu6050_demo"

5.3 软件烧录

  1. 使用 Luatools 选择最新内核固件
  2. 下载本项目所有脚本文件
  3. 将固件和脚本一起烧录到设备
  4. 烧录成功后设备自动重启后开始运行

5.4 功能测试

5.4.1 初始化与数据读取演示

  1. 设备启动后打印 "HELLO",随后自动进入 [1/4] 初始化与数据读取
  2. 观察日志输出,确认初始化成功
  3. 观察三轴加速度数据(X/Y/Z,单位 g)、角速度(°/s)、温度(℃)输出
  4. 静止水平放置时,加速度 Z 轴应接近 1.0g,X/Y 接近 0

5.4.2 静态倾角测量演示

  1. 自动进入 [2/4] 静态倾角测量
  2. 保持设备静止,观察俯仰角和横滚角
  3. 水平放置时倾角应接近 0°
  4. 可倾斜设备观察角度变化

5.4.3 动态姿态解算演示

  1. 自动进入 [3/4] 动态姿态解算(互补滤波)
  2. 缓慢转动设备,观察俯仰角和横滚角的变化
  3. 互补滤波融合了陀螺仪和加速度计数据,动态响应更好

5.4.4 碰撞检测演示

  1. 自动进入 [4/4] 碰撞检测与自由落体
  2. 5 秒检测窗口内,用手指轻轻敲击传感器
  3. 观察日志是否输出"检测到敲击!"
  4. 快速抛接设备可触发"失重/自由落体"检测

5.5 预期效果

  • 初始化与数据读取:MPU6050 初始化成功,自动校准完成,三轴加速度/角速度/温度数据正常输出
  • 静态倾角:水平放置时俯仰/横滚接近 0°,倾斜设备时角度准确响应
  • 动态姿态解算:转动设备时姿态角平滑跟踪,互补滤波有效抑制噪声
  • 碰撞检测:敲击传感器可被 detect_tap 捕获,自由落体可被 detect_freefall 捕获
  • 日志如下:
[2026-07-23 18:22:49.845][000000000.253] I/user.TEST === 1. 初始化 ===
[2026-07-23 18:22:49.846][000000000.253] I2C_MasterSetup 426:I2C1, Total 65 HCNT 22 LCNT 40
[2026-07-23 18:22:49.848][000000000.305] I/user.mpu6050 WHO_AM_I 0x68 addr 0x68
[2026-07-23 18:22:49.850][000000000.560] I/user.mpu6050 已加载校准 g:(-283,-72,239) a:(-1851,2252,-28738)
[2026-07-23 18:22:49.851][000000000.561] I/user.mpu6050 init 完成
[2026-07-23 18:22:49.858][000000000.561] I/user.TEST === 2. 温度 ===
[2026-07-23 18:22:49.860][000000000.562] I/user.TEST 芯片温度: 29.6°C
[2026-07-23 18:22:49.863][000000000.562] I/user.TEST === 3. 加速度 (单位g) ===
[2026-07-23 18:22:49.867][000000000.564] I/user.TEST accel  x=0.127  y=-0.077  z=1.112
[2026-07-23 18:22:49.870][000000000.564] I/user.TEST === 4. 陀螺仪 (单位°/s) ===
[2026-07-23 18:22:49.873][000000000.566] I/user.TEST gyro   x=1.9  y=9.1  z=3.6
[2026-07-23 18:22:49.876][000000000.566] W/user.TEST 陀螺零偏较大(期望≈0), 重新校准试试
[2026-07-23 18:22:49.879][000000000.566] I/user.TEST === 5. 倾角 (单位°) ===
[2026-07-23 18:22:49.883][000000000.568] I/user.TEST tilt   pitch=-3.7°  roll=6.4°
[2026-07-23 18:22:49.885][000000000.568] I/user.TEST === 6. 碰撞检测 ===
[2026-07-23 18:22:49.888][000000000.570] I/user.TEST 碰撞检测: NO (正常, 静止时不应触发)
[2026-07-23 18:22:49.891][000000000.570] I/user.TEST === 7. 自由落体检测 ===
[2026-07-23 18:22:49.894][000000000.572] I/user.TEST 自由落体: NO (正常)
[2026-07-23 18:22:49.897][000000000.572] I/user.TEST === 8. 校准状态 ===
[2026-07-23 18:22:49.900][000000000.572] I/user.TEST 已校准: true
[2026-07-23 18:22:49.903][000000000.572] I/user.TEST === 10. 持续读取 (10) ===
[2026-07-23 18:22:49.906][000000000.578] I/user.TEST a:( 0.12,-0.07, 1.09)g  p=-0.1° r=0.3°
[2026-07-23 18:22:49.945][000000000.783] I/user.TEST a:( 0.14,-0.09, 0.98)g  p=-0.3° r=0.7°
[2026-07-23 18:22:49.948][000000000.990] I/user.TEST a:( 0.14,-0.07, 0.98)g  p=-0.6° r=0.9°
[2026-07-23 18:22:49.950][000000001.195] I/user.TEST a:( 0.13,-0.05, 0.97)g  p=-1.9° r=2.7°
[2026-07-23 18:22:49.953][000000001.401] I/user.TEST a:( 0.13,-0.06, 0.97)g  p=-2.0° r=2.9°
[2026-07-23 18:22:49.990][000000001.607] I/user.TEST a:( 0.14,-0.06, 0.97)g  p=-2.0° r=3.1°
[2026-07-23 18:22:50.135][000000001.813] I/user.TEST a:( 0.13,-0.06, 0.98)g  p=-2.1° r=3.3°
[2026-07-23 18:22:50.341][000000002.019] I/user.TEST a:( 0.14,-0.06, 0.97)g  p=-3.4° r=1.9°
[2026-07-23 18:22:50.545][000000002.225] I/user.TEST a:( 0.13,-0.05, 0.98)g  p=-3.4° r=2.1°
[2026-07-23 18:22:50.752][000000002.431] I/user.TEST a:( 0.13,-0.05, 0.98)g  p=-3.4° r=2.3°
[2026-07-23 18:22:50.958][000000002.637] I/user.TEST a:( 0.13,-0.05, 0.98)g  p=-3.4° r=2.5°
[2026-07-23 18:22:51.162][000000002.843] I/user.TEST a:( 0.13,-0.05, 0.98)g  p=-3.3° r=2.7°
[2026-07-23 18:22:51.369][000000003.049] I/user.TEST a:( 0.13,-0.05, 0.97)g  p=-2.3° r=1.0°
[2026-07-23 18:22:51.575][000000003.255] I/user.TEST a:( 0.13,-0.06, 0.98)g  p=-2.4° r=1.3°
[2026-07-23 18:22:51.591][000000003.271] I/user.mpu6050 DMP固件加载中, 1929字节
[2026-07-23 18:22:51.783][000000003.461] I/user.TEST a:( 0.13,-0.05, 0.97)g  p=-2.4° r=1.6°
[2026-07-23 18:22:51.909][000000003.589] I/user.mpu6050 固件写入完成
[2026-07-23 18:22:51.989][000000003.667] I/user.TEST a:( 0.13,-0.06, 0.97)g  p=-2.4° r=1.8°
[2026-07-23 18:22:52.115][000000003.791] I/user.mpu6050 DMP 就绪
[2026-07-23 18:22:52.119][000000003.791] I/user.DMP_TEST DMP 就绪
[2026-07-23 18:22:52.121][000000003.800] I/user.DMP R:-173.1 P:0.2 Y:0.3
[2026-07-23 18:22:52.196][000000003.873] I/user.TEST a:( 0.13,-0.06, 0.98)g  p=-2.4° r=2.0°
[2026-07-23 18:22:52.400][000000004.079] I/user.TEST a:( 0.14,-0.05, 0.96)g  p=-0.8° r=2.4°
[2026-07-23 18:22:52.606][000000004.285] I/user.TEST a:( 0.13,-0.05, 0.98)g  p=-0.8° r=2.6°
[2026-07-23 18:22:52.813][000000004.491] I/user.TEST a:( 0.13,-0.05, 0.97)g  p=-0.9° r=2.8°
[2026-07-23 18:22:53.018][000000004.697] I/user.TEST a:( 0.13,-0.06, 0.98)g  p=-1.0° r=3.0°
[2026-07-23 18:22:53.220][000000004.903] I/user.TEST a:( 0.13,-0.05, 0.98)g  p=-1.0° r=3.2°
[2026-07-23 18:22:53.425][000000005.109] I/user.TEST a:( 0.13,-0.05, 0.98)g  p=0.5° r=3.8°
[2026-07-23 18:22:53.644][000000005.315] I/user.TEST a:( 0.13,-0.05, 0.97)g  p=0.4° r=3.9°
[2026-07-23 18:22:53.836][000000005.521] I/user.TEST a:( 0.13,-0.04, 0.98)g  p=0.3° r=4.1°
[2026-07-23 18:22:54.042][000000005.727] I/user.TEST a:( 0.12,-0.06, 0.99)g  p=0.2° r=4.2°
[2026-07-23 18:22:54.263][000000005.933] I/user.TEST a:( 0.13,-0.05, 0.98)g  p=0.1° r=4.4°
[2026-07-23 18:22:54.454][000000006.139] I/user.TEST a:( 0.13,-0.05, 0.97)g  p=1.6° r=5.0°
[2026-07-23 18:22:54.660][000000006.345] I/user.TEST a:( 0.13,-0.04, 0.98)g  p=1.5° r=5.1°
[2026-07-23 18:22:54.865][000000006.551] I/user.TEST a:( 0.13,-0.04, 0.99)g  p=1.3° r=5.2°
[2026-07-23 18:22:55.074][000000006.758] I/user.TEST a:( 0.13,-0.05, 0.98)g  p=1.2° r=5.3°
[2026-07-23 18:22:55.152][000000006.828] I/user.DMP R:0.0 P:-0.1 Y:-1.4
[2026-07-23 18:22:55.280][000000006.965] I/user.TEST a:( 0.13,-0.06, 0.99)g  p=1.0° r=5.4°
[2026-07-23 18:22:55.487][000000007.170] I/user.TEST a:( 0.13,-0.05, 0.98)g  p=2.4° r=6.0°
[2026-07-23 18:22:55.695][000000007.376] I/user.TEST a:( 0.14,-0.04, 0.97)g  p=2.3° r=6.1°
[2026-07-23 18:22:55.899][000000007.582] I/user.TEST a:( 0.14,-0.05, 0.99)g  p=2.1° r=6.2°
[2026-07-23 18:22:56.104][000000007.788] I/user.TEST a:( 0.14,-0.04, 0.97)g  p=1.9° r=6.2°
[2026-07-23 18:22:56.324][000000007.994] I/user.TEST a:( 0.13,-0.04, 0.98)g  p=1.7° r=6.3°
[2026-07-23 18:22:56.516][000000008.200] I/user.TEST a:( 0.13,-0.04, 0.98)g  p=3.5° r=6.7°
[2026-07-23 18:22:56.722][000000008.406] I/user.TEST a:( 0.13,-0.05, 0.97)g  p=3.2° r=6.8°
[2026-07-23 18:22:56.928][000000008.612] I/user.TEST a:( 0.14,-0.05, 0.97)g  p=3.0° r=6.8°
[2026-07-23 18:22:57.136][000000008.818] I/user.TEST a:( 0.14,-0.04, 0.97)g  p=2.8° r=6.9°
[2026-07-23 18:22:57.341][000000009.024] I/user.TEST a:( 0.13,-0.04, 0.98)g  p=4.7° r=7.4°
[2026-07-23 18:22:57.547][000000009.230] I/user.TEST a:( 0.14,-0.04, 0.96)g  p=4.4° r=7.4°
[2026-07-23 18:22:57.751][000000009.436] I/user.TEST a:( 0.14,-0.05, 0.98)g  p=4.2° r=7.4°
[2026-07-23 18:22:57.957][000000009.643] I/user.TEST a:( 0.14,-0.04, 0.97)g  p=3.9° r=7.5°
[2026-07-23 18:22:58.179][000000009.855] I/user.DMP R:0.0 P:-0.0 Y:-1.5
[2026-07-23 18:22:58.182][000000009.862] I/user.TEST a:( 0.14,-0.05, 0.97)g  p=3.7° r=7.5°
[2026-07-23 18:22:58.383][000000010.063] I/user.TEST 持续读取完成, 碰撞0
[2026-07-23 18:22:58.385][000000010.063] I/user.TEST ========== 所有测试完成 ==========