介绍
MPU-6050 是一款低成本、高精度的 IMU,具有 6 个自由度。
今天我们将看看 MPU-6050 模块,看看它是如何工作的,以及如何将它与 Arduino 一起使用。我们还将建造一个非常灵敏的电子水平仪。尽管我们的关卡将在面包板上构建,但它也可以作为永久性项目的基础。
MPU-6050 惯性测量单元
MPU-6050 属于称为惯性测量单元或 IMU 的一类设备。这些设备可以测量加速度、惯性和许多其他参数,以便您确定它们的空间位置和速度。
像 MPU-6050 这样的 IMU 用于许多不同的应用:
- 无人机,如四轴飞行器和直升机。在这里,IMU 用于确定偏航、俯仰和滚动,并在飞行时调整设备水平。
- 机器人学。从平衡机器人到机器人手臂,通常使用 IMU 来确定位置和速度。
- 游戏控制器。像 Wii 这样的游戏使用 IMU 来检测水平和运动。
- 手机和平板电脑。通常在手机和平板电脑中找到 IMU,用于确定设备的方向以在纵向和横向模式之间切换。
- 硬盘驱动器。IMU 或加速度计包含在专为便携式使用而设计的硬盘驱动器中。他们可以检测驱动器是否正在掉落并采取适当的措施,例如停止盘片并锁定磁头。
加速度计
MPU-6050 的关键组件之一是加速度计。顾名思义,这是一种可以测量加速度的设备。
加速度被描述为物体速度的变化率。匀速运动的物体没有任何加速度。
加速度的常用单位是 G 力。地球上的一个 G 力是 9.9 米每秒平方,这就是这里的重力加速度。在其他行星上,这个数字是不同的。
加速度计在进行测量时需要考虑静态加速度,例如重力。
MPU-6050 中使用的加速度计是三轴加速度计,这意味着它可以感应 X、Y 和 Z 轴上的加速度。
陀螺仪
MPU-6050 的另一个关键组件是陀螺仪。
陀螺仪可以测量沿 X、Y 和 Z 轴的角动量或旋转。这些组件对于保持飞机和航天器的平衡至关重要。
机械陀螺仪由安装的轮子或圆盘组成,因此它可以围绕可以在任何方向自由移动的轴快速旋转。
MPU-6050 中使用的陀螺仪类型是“微机电系统”或 MEMS 陀螺仪。它由三个传感器组成,每个轴一个,旋转时会产生电压。该电压使用 16 位模数转换器在内部进行采样。
外部传感器
MPU-6050 还可以使用外部传感器。这些外部设备使用独立于主 I2C 总线的第二条 I2C 总线连接到 MPU-6050。
这种外部连接的一个常见用途是连接一个磁力计,它可以测量三个轴上的磁场。
这为传感器增加了额外的三个自由度或 DOF。MPU-6050 本身有 6 个自由度,加速度计和陀螺仪各三个。添加磁力计将使其具有 9 个自由度。
MPU-6050 还具有内部温度传感器。
DMP
来自加速度计、陀螺仪和任何第三方传感器的数据被传递到内部数字运动处理器或 DMP。
该设备关联数据并对其进行格式化以在 I2C 总线上使用。它本质上是一个专用于处理运动数据的高性能微处理器。
DMP 一词是由TDK 的一个部门Invensense创造的。这是开发 MPU-6050 以及许多其他 IMU 的公司。
引脚分配
MPU-6050 有多种不同的配置和多种不同的分线模块。
以下是我在这些实验中使用的模块的引脚分配图:
该模块有一个内部电压调节器,因此它提供 5 伏电源。MPU-6050 芯片本身使用 3.3 伏逻辑。该模块还具有将数据电平更改为 3.3 伏的电阻器。
模块引脚说明如下:
- VCC – 5 伏直流电源。
- GND – 接地
- SCL——这是 I2C 时钟线。
- SDA——I2C 数据线。
- XDA – 这是外部 I2C 数据线。外部 I2C 总线用于连接外部传感器。
- XCL——这是外部 I2C 时钟线。
- AD0 – 此行允许您更改 MPU-6050 模块的内部 I2C 地址。如果 hmodule 与另一个 I2C 设备发生冲突,或者您希望在同一 I2C 总线上使用两个 MPU-6050,则可以使用它。
- INT——这是中断输出。
如果您使用不同的模块,您仍然可以执行此处列出的实验。请注意模块的电源要求,因为有些模块没有内部稳压器并且在 3.3 伏逻辑上运行。
请注意,该模块还具有方向标记,以便您将其正确放置在设备中。
MPU-6050 与 Arduino
在我们构建电子水平仪之前,让我们使用 MPU-6050 进行实验。为了让事情变得更容易,我们将使用几个库并运行其中一个包含的演示草图
I2C 和 MPU-6050 库
我们将在演示中使用的库是 Jeff Rowberg 开发的库集合的一部分,用于处理 I2C 总线和一些常见的 I2C 传感器。您可以在 Github 上找到完整的库集。
这是一个广泛的库集合,不仅适用于 Arduino,还适用于许多其他常见的微控制器。
因为它有点让人不知所措,您可能会发现仅获取我们今天要使用的两个库——I2C 开发库和MPU-6050 库很有用。
如果您想了解有关这套优秀库的更多信息,请访问Jeff 的 I2C 开发网页。
这些库以 ZIP 格式提供。您可以将 ZIP 文件直接安装到您的 Arduino IDE 中。
- 打开 Arduino IDE。
- 从顶部菜单栏中选择草图菜单。
- 选择包括库。将打开一个子菜单。
- 选择添加 ZIP 库。
- 将打开一个对话框。导航到您保存库的位置并选择其中一个。
- 该库将安装到您的 Arduino IDE 中。
- 您需要对第二个库重复此步骤。
现在您已将两个库添加到您的 Arduino IDE,是时候将 MPU-6050 连接到 Arduino/
MPU-6050 和 Arduino 连接
这是我们将用于实验的连接:
连接非常简单,因为 MPU-6050 接口使用 I2C 总线。在 Arduino Uno 上,I2C 连接是使用模拟输入引脚进行的,A4 是 SDA 连接,A5 是 SCL。
我们还使用了 MPU-6050 的中断输出。这连接到 Arduino Uno 上的引脚 2,即中断号 0。
演示草图
一切就绪后,尝试运行我们刚刚安装的 MPU-6050 库中提供的演示草图之一。
- 打开 Arduino IDE。
- 从顶部菜单栏中选择文件菜单。
- 选择示例。将打开一个子菜单。
- 向下滚动子菜单到标题为“自定义库中的示例”的部分。
- 查找MPU6050条目并选择它。
- 将打开另一个子菜单,其中显示示例。选择它,将列出两个示例草图
- 选择MPU6050_DMP6草图。
草图很复杂,但评论很好。它将让您了解从 MPU-6050 传感器中提取有用信息所涉及的数学知识。
请注意,您需要将串行监视器的速度设置为 115200 波特才能尝试使用该草图。从 IMU 传回的数据很多,需要更高的速度才能显示。
当您打开带有加载到 Arduino 的草图的串行监视器时,您应该会看到一条消息,说明与 MPU-6050 的连接已成功建立。为了开始运行草图,您需要将光标放在串行监视器输入框中并输入一个字母,然后按发送(或直接按键盘上的Enter )。
您将看到大量显示 Yaw、Pitch 和 Roll 值的数据。试着移动你的传感器并注意数据是如何变化的。
电子水准仪项目
现在进入我们的电子水平仪项目。
我们将建立一个同时具有数字和 LED 显示的敏感级别。LED 显示屏会显示您是否在水平度范围内、是否敢靠近或偏离超过 2 度。
虽然我在无焊面包板上构建它作为实验,但它是永久项目的一个很好的候选者,因为它是一个真正有用的设备。如果您决定构建此设备的永久版本,您可能需要使用 Arduino Nano 或 Pro Mini 来节省空间。
电子水平仪连接
这是我们电子水平仪的连接图:
我使用的 LCD 显示器上有一个 I2C 适配器,以便于连接。它是一个 2 行 16 个字符的显示,非常常见的项目。
我使用绿色 LED 表示它处于水平状态,黄色 LED 表示您已接近,红色 LED 表示您偏离 2 度以上。您可以根据需要替换其他颜色,或者只使用 LED 条形图显示器。
我使用的降压电阻是 220 欧姆,但 150 到 470 欧姆之间的任何值都足够了。
电子水平仪草图
这是我用来制作电子水平仪的草图:
mini Mpu6050接线图
代码
代码效果