MPU6050 6轴加速度和陀螺仪传感器的数据读取。

 一、MPU6050传感器介绍

MPU6050传感器是一个带3轴加速度计,3轴陀螺仪和带I2C接口的温度传感器的集成传感器。

名称描述
VCC正极
GND负极
SCLI2C时钟线
SDAI2C数据线
XDA闲置
XCL闲置
AD0地址选择引脚
INT中断

MPU6050

   *通常只需要连接VCC、GND、SCL、SDA引脚。

   *设备的I2C地址是0x68。可以通过将AD0引脚接到VCC来更改0x69的地址。

属性:

名称描述
X轴加速度X轴上的加速度。acceleration.x (g)
Y轴加速度Y轴上的加速度。acceleration.y (g)
Z轴加速度Z轴上的加速度。acceleration.z (g)
X轴旋转值在X轴上的旋转角度。gyro.x(rad/s)
Y轴旋转值在Y轴上的旋转角度。gyro.x(rad/s)
Z轴旋转值在Z轴上的旋转角度。gyro.x(rad/s)
温度温度测量数据。temperature(degc)

单位:

所有的速度值(x/y/z)都是用重力单位(g),其中1g=9.80665m/s^2。陀螺仪测量角旋转,并返回每秒的读数。

个人理解:

一个物体在无约束情况下有6个自由度,分别是3个沿着(x/y/z)轴平移的自由度,3个在(x/y/z)轴上旋转的自由度。加速度陀螺仪就是测量这6个自由度的传感器。

6个自由度,3个旋转和3个平移

二、代码:

这个代码把6个自由度和温度检测到的数据打印在串口监视器上。

// 基本示例:从 Adafruit MPU6050 读取加速度计数据
//在Arduino上使用MPU60506轴加速度陀螺仪传感器要包含3个库,分别是:

#include <Adafruit_MPU6050.h>   // 包含 MPU6050 库文件
#include <Adafruit_Sensor.h>    // 包含 Adafruit 传感器库文件
#include <Wire.h>               // 包含 I2C 通信库文件

//和舵机一样,都需要创建一个对象:

Adafruit_MPU6050 mpu;          // 创建 MPU6050 对象(mpu是创建的对象名,可以用其他的)

//只执行一次的设置
void setup() {
//初始化、检测是否初始话是否成功

  Serial.begin(115200);        // 初始化串口通信,波特率设为 115200
  while (!Serial) delay(10);  // 等待串口初始化完成(对于 Zero、Leonardo 等板子)

  Serial.println("Adafruit MPU6050 测试!");

  // 尝试初始化 MPU6050
  if (!mpu.begin()) {
    Serial.println("未能找到 MPU6050 芯片");
    while (1) delay(10);  // 初始化失败则循环等待
  }

  Serial.println("找到 MPU6050!");


//在setup中有3个参数要设置:分别为加速度计量程、陀螺仪量程和滤波器带宽。

  // 设置加速度计量程为 ±8G
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);//只有这一句是设置加速度计,其他都是显示信息
  Serial.print("加速度计量程设置为: ");
  switch (mpu.getAccelerometerRange()) {
    case MPU6050_RANGE_2_G:
      Serial.println("±2G");
      break;
    case MPU6050_RANGE_4_G:
      Serial.println("±4G");
      break;
    case MPU6050_RANGE_8_G:
      Serial.println("±8G");
      break;
    case MPU6050_RANGE_16_G:
      Serial.println("±16G");
      break;
  }

  // 设置陀螺仪量程为 ±2000°/s
  mpu.setGyroRange(MPU6050_RANGE_2000_DEG);//只有这一句是设置陀螺仪,其他都是显示信息
  Serial.print("陀螺仪量程设置为: ");
  switch (mpu.getGyroRange()) {
    case MPU6050_RANGE_250_DEG:
      Serial.println("± 250 度/秒");
      break;
    case MPU6050_RANGE_500_DEG:
      Serial.println("± 500 度/秒");
      break;
    case MPU6050_RANGE_1000_DEG:
      Serial.println("± 1000 度/秒");
      break;
    case MPU6050_RANGE_2000_DEG:
      Serial.println("± 2000 度/秒");
      break;
  }

  // 设置滤波器带宽为 21Hz
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);//只有这一句是设置带宽,其他都是显示信息
  Serial.print("滤波器带宽设置为: ");
  switch (mpu.getFilterBandwidth()) {
    case MPU6050_BAND_260_HZ:
      Serial.println("260 Hz");
      break;
    case MPU6050_BAND_184_HZ:
      Serial.println("184 Hz");
      break;
    case MPU6050_BAND_94_HZ:
      Serial.println("94 Hz");
      break;
    case MPU6050_BAND_44_HZ:
      Serial.println("44 Hz");
      break;
    case MPU6050_BAND_21_HZ:
      Serial.println("21 Hz");
      break;
    case MPU6050_BAND_10_HZ:
      Serial.println("10 Hz");
      break;
    case MPU6050_BAND_5_HZ:
      Serial.println("5 Hz");
      break;
  }

  Serial.println();
  delay(100);  // 稍作延迟
}

//到这就设置完了,接下来是实时读取数据的代码。

void loop() {
// 获取新的传感器事件数据
  //创建3个sensors_event_t类型的结构体变量,分别命名为a、g、temp
  //定义了用来存储传感器数据的结构体变量。
  sensors_event_t a, g, temp;

  //调用Adafruit_MPU6050类的getEvent()函数,从传感器获取最新的加速度、陀螺仪和温度数据
  //并将这些数据分别存储到对应的变量中。
  mpu.getEvent(&a, &g, &temp);

  // 打印出读数
  Serial.print("加速度 X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");

  Serial.print("旋转 X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" rad/s");

  Serial.print("温度: ");
  Serial.print(temp.temperature);
  Serial.println(" 度C");

  Serial.println();  // 打印空行
  delay(500);       // 每隔 500ms 读取一次数据
}

在loop中有几句代码可能需要解释一下,方便读者理解:

1、 sensors_event_t a, g, temp;

sensors_event_t是Adafruit Sensor库中的一个结构体类型,用于存储传感器事件的数据,包括但不限于加速度、角速度(陀螺仪)和温度等。


 2、 mpu.getEvent(&a, &g, &temp);

调用Adafruit_MPU6050类的getEvent()方法。这个方法从MPU6050模块中获取传感器事件的数据,并将结果存储到之前定义的变量中。分别指向sensors_event_t类型的变量a,g和temp的地址。通过传递指针。

getEvent()函数可以直接将读取到的加速度数据填充到a,角速度填充到g、温度填充到temp。

3、  

a.acceleration.x:结构体变量a的成员,存储了X轴加速度的值。

a.acceleration.y:结构体变量a的成员,存储了Y轴加速度的值。

a.acceleration.z:结构体变量a的成员,存储了Z轴加速度的值。

g.gyro.x:结构体变量g的成员,存储了X轴上旋转角速度的值。

g.gyro.y:结构体变量g的成员,存储了Y轴上旋转角速度的值。

g.gyro.z:结构体变量g的成员,存储了Z轴上旋转角速度的值。

temp.temperature:结构体变量temp的成员,存储了温度数据。

Serial.print();函数可以把以上数据打印在串口监视器上,具体使用方式可以参考这个链接对串口监视器的介绍:基于弯曲传感器的舵机控制,及LCD和串口监视器数据显示_舵机监视器-CSDN博客

MPU6050 6轴加速度和陀螺仪传感器的使用就介绍到这里了,祝大家好运~ 

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过以下步骤使用MPU6050传感器通过串口读取数据: 1. 硬件连接:将MPU6050传感器与你的微控制器(如Arduino)连接起来。确保连接正确,包括传感器的电源和地线,以及I2C数据和时钟线。 2. 引入库文件:在你的代码中引入MPU6050的库文件。你可以从Arduino的库管理器中搜索并安装合适的MPU6050库。 3. 初始化:在代码中初始化MPU6050传感器。使用库提供的函数设置传感器的配置和采样率等参数。 4. 读取数据:使用串口通信函数从MPU6050传感器读取数据。库文件通常提供了读取加速度计、陀螺仪和温度传感器数据的函数。 5. 串口通信:将读取到的数据通过串口发送到计算机。你可以使用串口通信函数(如Serial.print)将数据发送到计算机的串口监视器。 下面是一个简单的示例代码,演示了如何使用MPU6050传感器通过串口读取加速度计和陀螺仪数据: ```arduino #include <Wire.h> #include <MPU6050.h> MPU6050 mpu; void setup() { Serial.begin(9600); Wire.begin(); mpu.initialize(); } void loop() { int16_t accelerometerX, accelerometerY, accelerometerZ; int16_t gyroX, gyroY, gyroZ; mpu.getAcceleration(&accelerometerX, &accelerometerY, &accelerometerZ); mpu.getRotation(&gyroX, &gyroY, &gyroZ); Serial.print("Accelerometer: "); Serial.print(accelerometerX); Serial.print(", "); Serial.print(accelerometerY); Serial.print(", "); Serial.print(accelerometerZ); Serial.print(" | Gyroscope: "); Serial.print(gyroX); Serial.print(", "); Serial.print(gyroY); Serial.print(", "); Serial.println(gyroZ); delay(1000); } ``` 这个代码将每秒读取一次加速度计和陀螺仪数据,并通过串口发送到计算机。你可以在串口监视器中查看这些数据。 请注意,具体的代码可能因使用的库文件而有所不同。确保安装了正确的库文件,并根据库提供的文档进行配置和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值