一、简介
MPU-6050集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP,预留用于从外部传感器读取数据的辅助I2C接口引脚,可以连接一个第三方的数字传感器。比如IIC接口三轴磁场传感器,从而组成9轴的姿态传感器系统。MPU-6050对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可编程测试范围为±250,±500,±1000,±2000dps,加速度计可测范围为±2,±4,±8,±16g。

现市场上流通的有两种的MPU-6050芯片的版本,一种是老款的ID是0x68的,一种是新款的ID是0x70。本实验中应用的是新版的。
二、原理图引脚说明

| 名称 | 描述 |
|---|---|
| VDD | DC+5v |
| GND | GND |
| SCL | IIC串行时钟线/SPI串行时钟端口 |
| SDA | IIC串行数据线/SPI串行数据输入 |
| XDA | 预留辅助SDA引脚,可接其他传感器 |
| XCL | 预留辅助SCL引脚,可接其他传感器 |
| AD0 | IIC器件地址选择位/SPI串行数据输出 |
| INT | 中断引脚 |
三、MPU-6050与ESP32开发板接线

| MPU6050 | ESP32 |
|---|---|
| VCC | 5V |
| GND | GND |
| SDA | 21 |
| SCL | 22 |
四、Arduino代码
安装相关依赖库


打开示例库所安装在的目录文件夹下的头文件,并把ID值改为0x70
打开示例程序
// Basic demo for accelerometer readings from Adafruit MPU6050
#include < Adafruit_MPU6050.h >
#include < Adafruit_Sensor.h >
#include < Wire.h >
Adafruit_MPU6050 mpu;
void setup(void) {
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("Adafruit MPU6050 test!");
// Try to initialize!
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
Serial.println("MPU6050 Found!");
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
Serial.print("Accelerometer range set to: ");
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;
}
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
Serial.print("Gyro range set to: ");
switch (mpu.getGyroRange()) {
case MPU6050_RANGE_250_DEG:
Serial.println("+- 250 deg/s");
break;
case MPU6050_RANGE_500_DEG:
Serial.println("+- 500 deg/s");
break;
case MPU6050_RANGE_1000_DEG:
Serial.println("+- 1000 deg/s");
break;
case MPU6050_RANGE_2000_DEG:
Serial.println("+- 2000 deg/s");
break;
}
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.print("Filter bandwidth set to: ");
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() {
/* Get new sensor events with the readings */
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
/* Print out the values */
Serial.print("Acceleration 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("Rotation 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("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" degC");
Serial.println("");
delay(500);
}
编译上传程序到ESP32开发板中,打开串口监视器,将打印显示出ESP32读取到MPU-6050传感器当前位置实时的三轴加速度、三轴角速度、传感器芯片内部温度数据。
五、总结
当拿到新版本的MPU-6050测试时,测试不通过,或程序报错,有可能就是程序中ID值没有更改过来,程序中含有ID检测语句,当读取到的ID不等于0x68的时候就会报错,因此要把宏定义中的ID值改过来,或去掉程序中有关的检测语句。
审核编辑 黄宇
-
传感器
+关注
关注
2579文章
55968浏览量
796266 -
ESP32
+关注
关注
27文章
1243浏览量
22873
发布评论请先 登录
BMA222数字三轴加速度传感器:特性、功能与应用全解析
BMA220:一款高性能的三轴加速度传感器
BMA150三轴数字加速度传感器:设计与应用的全面解析
BMA180数字三轴加速度传感器:高性能与灵活性的完美结合
BMA120数字三轴加速度传感器:低功耗消费市场的理想之选
BMA020数字三轴加速度传感器:特性、应用与设计要点
三轴冲击加速度传感器462系列:精准捕捉极端环境下的动态冲击--森瑟科技
ESP32驱动MPU-6050三轴加速度三轴陀螺仪传感器串口输出数据
评论