MPU6050六轴传感器
MPU6050 是 InvenSense 公司推出的整合性 6 轴运动处理组件,其内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个IIC 接口, 可用于连接外部磁力传感器,并利用自带的数字运动处理器(DMP: Digital Motion Processor) 硬件加速引擎,通过主 IIC 接口,向应用端输出完整的 9 轴融合演算数据。
InvenSense 公司提供了一套基于DMP的运动处理驱动库,可大大降低单片机对动处理运算的负荷,同时也大大降低了编程难度。该模块广泛运用于飞控、计步等电子产品中。
模块来源
规格参数
工作电压:3-5V(模块带有LDO)
工作电流:5MA
通信接口:I2C
硬件连接
- VCC:连接到开发板的3.3V输出。
- GND:连接到开发板的GND。
- SCL(时钟线):连接到开发板的A5(SCL)。
- SDA(数据线):连接到开发板的A4(SDA)。
- INT (可选):中断线,可以连接到开发板的数字引脚,用于中断请求(本例程为用到)。
使用方法
安装库
为了从MPU6050读取数据,我们可以使用MPU6050
库。可以通过Arduino IDE的库管理器来安装:打开Arduino IDE,选择 工具 管理库,然后搜索MPU6050
并安装Adafruit MPU6050
。
编写代码
c
/******************************************************************************
* 测试硬件:ColorEasyDuino开发板
* 版 本 号: V1.0
* 修改作者: www.lckfb.com
* 修改日期: 2024年04月09日
* 功能介绍:
*****************************************************************************
* 开发板软硬件资料与相关项目软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
******************************************************************************/
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;
void setup(void) {
Serial.begin(115200);
while (!Serial) delay(10); // 等待串行连接开启
Serial.println("Adafruit MPU6050 test!");
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
// 设置所需的传感器范围
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.println("MPU6050 Ready!");
delay(100);
}
void loop() {
sensors_event_t a, g, temp;
/* 读取加速度、陀螺仪、温度数据 */
mpu.getEvent(&a, &g, &temp);
/* 显示这些数据 */
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");
// 计算倾斜角度
double ax = a.acceleration.x, ay = a.acceleration.y, az = a.acceleration.z;
double roll = atan2(ay, az) * 180 / M_PI;
double pitch = atan2(-ax, sqrt(ay * ay + az * az)) * 180 / M_PI;
// 显示计算结果
Serial.print("Roll: "); //翻滚角
Serial.print(roll);
Serial.print(", Pitch: "); //俯仰角
Serial.println(pitch);
delay(500);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
使用验证
输出加速度/陀螺仪/温度/角度等数据。