亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

MPU-6050 六轴 IMU 入门指南:Arduino 接线、库安装与 DMP 姿态解算

元件清单

元件数量
Arduino UNO1
MPU-6050 模块(六轴:三轴加速度计 + 三轴陀螺仪)1
杜邦线若干

MPU-6050 核心特性

接线(I²C)

MPU-6050Arduino UNO
VCC5V 或 3.3V(模块自带 LDO 时接 5V,裸芯片板接 3.3V)
GNDGND
SDAA4
SCLA5
INTD2(外部中断 0)

库安装步骤

  1. 下载 I2Cdev 库(I2Cdev.zip)并解压到 Arduino libraries 目录。
  2. 下载 MPU6050 库(MPU6050.zip)同样放入 libraries。
  3. 重启 Arduino IDE,菜单 文件 → 示例 → MPU6050 → Examples → MPU6050_DMP6 打开例程。
  4. 确认例程开头已包含 #include "I2Cdev.h" 与 #include "MPU6050_6Axis_MotionApps20.h"。
  5. 编译上传,打开串口监视器,波特率设为 115200。

串口监视器操作

关键代码片段(MPU6050_DMP6 例程核心)

#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
  #include "Wire.h"
#endif

MPU6050 mpu;  // 默认地址 0x68
#define OUTPUT_READABLE_YAWPITCHROLL
#define LED_PIN 13

volatile bool mpuInterrupt = false;
void dmpDataReady() { mpuInterrupt = true; }

void setup() {
  Wire.begin();
  TWBR = 24; // 400kHz I2C
  Serial.begin(115200);
  while(!Serial);
  mpu.initialize();
  Serial.println(mpu.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
  Serial.println("Send any character to begin DMP programming and demo:");
  while(Serial.available() && Serial.read());
  while(!Serial.available());
  while(Serial.available() && Serial.read());
  devStatus = mpu.dmpInitialize();
  // 以下偏移值需按自校准结果修改
  mpu.setXGyroOffset(220);
  mpu.setYGyroOffset(76);
  mpu.setZGyroOffset(-85);
  mpu.setZAccelOffset(1788);
  if(devStatus == 0) {
    mpu.setDMPEnabled(true);
    attachInterrupt(0, dmpDataReady, RISING);
    dmpReady = true;
    packetSize = mpu.dmpGetFIFOPacketSize();
  }
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  if(!dmpReady) return;
  while(!mpuInterrupt && fifoCount < packetSize) { /* 可做其他任务 */ }
  mpuInterrupt = false;
  mpuIntStatus = mpu.getIntStatus();
  fifoCount = mpu.getFIFOCount();
  if((mpuIntStatus & 0x10) || fifoCount == 1024) {
    mpu.resetFIFO(); Serial.println("FIFO overflow!");
  } else if(mpuIntStatus & 0x02) {
    while(fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
    mpu.getFIFOBytes(fifoBuffer, packetSize);
    fifoCount -= packetSize;
    mpu.dmpGetQuaternion(&q, fifoBuffer);
    mpu.dmpGetGravity(&gravity, &q);
    mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
    Serial.print("ypr\t");
    Serial.print(ypr[0]*180/M_PI); Serial.print("\t");
    Serial.print(ypr[1]*180/M_PI); Serial.print("\t");
    Serial.println(ypr[2]*180/M_PI);
    blinkState = !blinkState;
    digitalWrite(LED_PIN, blinkState);
  }
}

常见问题与技巧

原理图

MPU-6050 六轴 IMU 入门指南:Arduino 接线、库安装与 DMP 姿态解算

制造工艺

  1. 优化Cat®机械:My.Cat.com终极指南
  2. 树莓派接 KY‑033 循迹/门状态传感器:简易 Python 实现
  3. 树莓派构建稳健传感器 API:基于 GY‑91 多功能模块的 Flask 实现
  4. 树莓派 PIR 运动传感器控制 LED 实战指南
  5. 掌握树莓派 GPIO:在 B+/Model 2 上接入 PIR 运动传感器
  6. HC‑SR501 PIR 运动传感器与树莓派接线、校准与 Python 编程全指南
  7. TJBot 入门指南:构建、配置与语音控制您的 AI 机器人
  8. 树莓派 3 部署 RAK 831 LoRa 网关分步指南
  9. 基于 RAK831 模块与树莓派 3 构建 LoRa 网关:分步指南
  10. Arduino入门教程01:开始你的第一个项目
  11. Eagle Group:从概念到成品的优质金属制造合作伙伴
  12. 保险业 AI 落地实战指南:从认知到规模化应用