想让小车走直线、给云台做个平衡、或者让机械臂跟着手臂动,往往需要知道“自己现在倾斜了多少”。MPU6050就是干这个的:它集成了三轴加速度计和三轴陀螺仪,能同时测出重力加速度的方向和角速度,合起来就是姿态角。这篇文章把接线和读数讲清楚。

GY-521模块上的引脚一眼看懂
我们拿到手的通常是GY-521模块,上边焊着MPU6050芯片,还带稳压和上拉,可以直接接Arduino。模块引出的引脚有:VCC供电、GND地、SCL时钟、SDA数据、还有XDA、XCL(接其他传感器的辅助I2C,一般用不上)、ADO(地址选择)、INT(中断输出)。日常用前面四个就够了。
供电一般接5V(板上稳压会把5V降到3.3V给芯片),GND接地。SCL和SDA是它的I2C通信脚,分别接到Arduino的A5(SCL)和A4(SDA)。地址默认是0x68,把ADO接高电平就变成0x69,总线上能错开挂两片。

加速度计和陀螺仪各测什么
MPU6050的“六轴”指的就是三轴加速度加三轴陀螺仪:加速度计测的是三个方向上的比力,静止时能读出重力在xyz轴上的分量,由此能算出倾斜角(roll、pitch);陀螺仪测的是绕三个轴的角速度,拿来短时跟踪转动。
加速度计算角度反应快但容易抖,陀螺仪积分准但会漂移,所以通常要用卡尔曼滤波或互补滤波把两者融合,得到稳定又不漂的姿态角。这也是“姿态解算”的核心思路,网上现成的库很多,比如MPU6050_tockn、或成熟的DMP/滤波库。
实测流程:读到原始值再到角度
第一次跑,最稳妥是先读原始值:把传感器放平,串口打印加速度计和陀螺仪的三轴原始读数,确认数据在动。然后校正零点偏移——静止时陀螺仪应该读接近0,加速度在水平时z轴接近重力值。把偏移量量出来、在代码里减掉,数据就干净多了。
拿到角度后就能玩很多事:把某一轴的俯仰角映射成舵机角度,做一个“跟着手倾斜走”的云台;或者给小车的转向信号当输入,实现体感控制、自平衡的前期验证。关键是先让角度输出稳定,再去做控制。
供电、振动和三个高频坑
MPU6050对供电比较讲究,如果模块上电后读数乱跳、读不到,先看有没有供电问题。它工作时电流不大,但有些模块的稳压能力一般,从Arduino 5V供电通常没问题。
坑有三个。一是I2C地址写错(该0x68写成0x69),扫不到设备,先跑扫描确认;二是SCL/SDA接反;三是没做校正就急着读数,陀螺仪漂移和加速度零点偏导致角度一直不对。还有一个内存坑:以5V供电时某些3.3V核心板I2C电平不匹配,用带双向电平转换的模块更稳。
MPU6050是给DIY加“姿态感知”最经典的传感器。两根I2C信号线、一个库,从原始值到姿态角,再到云台、平衡、体感控制,一步步都能接上。


先读原始值看有没有动,这一步排错最快
做云台跟随手倾斜转,接上后很好玩
陀螺仪漂移确实要校正,零点偏移不减掉角度一直偏
加速度和陀螺仪融合才是关键,不滤波角度飘得没法看