Arduino + MPU6050 姿态控制舵机:SG90 与 MG996R 精准跟随实战
组件与材料
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | |
| MPU6050 六轴传感器 (GY-521 模块) | 1 | I2C 接口,地址 0x68 |
| SG90 微型舵机 | 1 | 演示用;大扭矩场景可换 MG996R |
| 杜邦线若干 | 1 |
应用与在线服务
- Arduino IDE
项目简介
本项目演示如何利用 MPU6050 的加速度计/陀螺仪数据,实时控制舵机跟随姿态变化。通过映射 X/Y 轴角度到舵机 0~180°,可应用于云台稳定、机械臂姿态跟随、FPV 云台等场景。
接线说明
| MPU6050 引脚 | Arduino UNO 引脚 |
|---|---|
| VCC | 5V (或 3.3V) |
| GND | GND |
| SDA | A4 |
| SCL | A5 |
舵机信号线 → D9,电源另接 5V/外部供电(共地)。

库安装
需安装 GY6050 库(或常用 MPU6050_tockn/Wire 原生驱动)。库文件随项目提供,下载后在 Arduino IDE 中 草图 → 包含库 → 添加 .ZIP 库 导入。
核心代码
// hammadiqbal12@gmail.com
// https://www.youtube.com/watch?v=Cvtr3LKdqvk
#include // 陀螺仪库
#include
#include
Servo myservo;
int X = 0, Y = 0;
GY6050 gyro(0x68); // I2C 地址
void setup() {
Wire.begin();
gyro.initialisation();
delay(100);
myservo.attach(9); // 舵机信号线 D9
}
void loop() {
// 读取角度并映射到舵机范围
X = map(gyro.refresh('A', 'X'), -90, 90, 0, 180);
Y = map(gyro.refresh('A', 'Y'), -90, 90, 0, 180);
myservo.write(Y); // Y 轴倾斜控制舵机
delay(15);
}
关键点解析
- 映射范围:MPU6050 输出约 ±90°,`map()` 线性映射到舵机 0~180°。
- 轴向选择:代码演示 Y 轴控制单舵机;双舵机云台可分别用 X、Y 控制俯仰/偏航。
- 平滑滤波:实际应用建议加入互补滤波或卡尔曼滤波,抖动会显著降低。
- 供电:MG996R 等大扭矩舵机峰值电流大,必须外接供电,仅共地不可直连 Arduino 5V。
常见问题
- 舵机抖动剧烈 → 加装 470μF 电解电容跨接舵机电源正负极;或在代码中增加滑动平均滤波。
- 角度不准/漂移 → 上电静置 2 秒校准零点;长时间运行建议融合磁力计(MPU9250)修正偏航漂移。
- I2C 通信失败 → 检查 SDA/SCL 接线、上拉电阻(模块板载通常已有)、地址是否为 0x68/0x69。
制造工艺
- Satellite CCRMA 套件:构建传感器驱动的音频效果器
- 基于 Arduino 与 Python 的可靠 RFID 考勤系统
- DHT11 温湿度传感器项目:LED 指示与压电蜂鸣器报警
- Arduino Due 驱动 3.2″ TFT 实现温度监测与实时时钟
- 舵机驱动避障机器人:基于 Arduino 与 HC-SR04 构建
- Arduino + Android 蓝牙控制 Roomba Create 2 扫地机器人完整指南
- Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
- u-blox LEA-6H GPS 模块:Arduino 与 Python 集成指南
- 在 Arduino Due 上实现语音识别与语音合成 - BitVoicer Server 方案
- Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
- Arduino 智能咖啡机:蓝牙控制、温度曲线与自动启停
- 伺服电机深度解析:工作原理、分类与核心价值