首页

开始使用Arduino和MPU6050

在这个项目中,我将向您展示MPU6050传感器是如何工作的,以及如何将Arduino与MPU6050连接。我们将连接一个MPU-6050断接板与Arduino UNO,并从加速度计和陀螺仪读取值。

(adsense1)

在进入项目之前,您需要了解MPU6050传感器的一些基本知识。MPU-6050是一种IMU传感器,在单个芯片上包含一个MEMS(微机电系统)加速度计和MEMS陀螺仪。

这里的IMU传感器,IMU代表惯性测量单元,是一种使用加速度计测量比力,使用陀螺仪测量角速率,使用磁强计测量磁场的设备。

IMU传感器用于自平衡机器人、飞机、手机、平板电脑、航天器、卫星、无人机、无人机等,用于制导、位置检测、方向检测、运动跟踪和飞行控制。

两种常用的imu是ADXL 335 Accelerometer和MPU-6050。ADXL 335包含一个3轴加速度计。

以MPU-6050为例,它是在单芯片上结合3轴加速度计和3轴陀螺仪的6轴运动跟踪装置。我们将在下一节中了解关于MPU6050的更多细节。

MPU6050图1

介绍MPU6050传感器

MPU-6050是InvenSense开发的六轴运动跟踪装置。MPU6050的主要特性如下所示。

  • 三轴加速度计
  • 三轴陀螺仪
  • 数字输出温度传感器
  • 6个16位ADC(3个用于加速计,3个用于陀螺)
  • 综合数字运动处理器(DMP)
  • 1024 b FIFO缓冲

六轴MPU-6050有时被称为6自由度(6个自由度)设备,因为它提供6个输出值(3个来自加速度计,3个来自陀螺)。主控板-6050支持I2C协议通信。

数字运动处理器(DMP)是一种嵌入式处理器,通过从加速度计、陀螺仪和外部磁强计获取和处理数据,可以减少来自主机处理器的计算负载,就像Arduino一样。

(adsense2)

MPU6050与Arduino接口

如前所述,MPU6050只支持I2C通信因此,它必须只连接到Arduino的I2C引脚。Arduino的I2C引脚与模拟输入引脚A4和A5进行复用,即A4为SDA, A5为SCL。

MPU6050图像分离板

对于MPU6050,我们使用了一个普通的断线板,提供了8个引脚。上图是MPU6050断接板的示意图。

在这里,我们将使用SCL, SDA和INT引脚连接Arduino。

组件的要求

硬件

  • Arduino UNO [在这里买
  • MPU6050突破董事会
  • 连接电线

软件

  • Arduino IDE
  • 处理(用于3D可视化)

线路图

下图为MPU6050与Arduino UNO接口的电路图。如前所述,MPU6050与Arduino之间的接口必须采用I2C协议实现。

因此,Arduino (A5)的SCL Pin连接到MPU6050的SCL Pin上。同理,Arduino (A4)的SDA Pin与MPU6050单板的SDA Pin相连。

此外,当1024字节FIFO缓冲区满时,我们将使用MPU6050的中断功能来指示(或中断)Arduino。因此,将MPU6050的INT引脚连接到Arduino UNO的外部中断0 (INT0)引脚上,即引脚2。

注意:在I2C通信中,MPU-6050一直充当从机的角色。

MPU6050图像电路图

从MPU6050读取原始值

在上传实际的程序之前,我们将首先看到一个简单的程序,从加速度计,陀螺仪和温度传感器读取原始值。只需将MPU6050的SCL线和SDA线分别连接到Arduino对应的I2C pin (A4和A5)上,然后上传如下代码。

如果您打开串行终端,您将从加速计和陀螺仪获得原始值,并从温度传感器获得校准温度。数据大概是这样的。

MPU6050图2

正如您所看到的,从MPU6050传感器读取原始值很容易,但是这个数据,我们需要对这个数据执行额外的计算,以获得偏航,俯仰和横摇。

我已经提到过,在MPU6050传感器中,有一个特殊的处理器称为DMP或数字运动处理器,它嵌入到与加速计和陀螺相同的芯片上。这种DMP的用途是,它可以用固件编程,对来自传感器的数据执行复杂的计算。

但英维信方面没有关于DMP的明确文档,因此我们错过了直接在芯片上对传感器数据进行快速计算的机会。

Jeff Rowberg等人在从I2C信号分析中逆向工程DMP相关信息方面做了出色的工作。

上传代码到Arduino,测试MPU6050

在上传代码之前,我们需要下载Arduino的两个库。分别是I2Cdev和MPU6050。下载链接和官方GitHub链接如下所示。

I2Cdev:下载I2CDEV库或者访问GitHub链接

MPU6050:下载MPU6050库或者访问GitHub链接

下载MPU6050库,并通过解压缩下载的文件解压内容。您将得到一个名为“MPU6050”的文件夹。复制此文件夹并粘贴到Arduino的libraries文件夹中。

在我的情况下,它位于“C:\Program Files (x86)\Arduino\libraries”。对I2Cdev库做同样的事情。

如果一切正常,打开Arduino IDE,在以下路径中浏览:File -> Examples -> MPU6050 -> Examples -> MPU6050_DMP6,打开样例代码MPU6050_DMP6。

MPU6050图片3

将此代码上传到Arduino(假设您已经按照电路图进行了连接),一旦代码上传到Arduino,打开串行终端。

将串口终端的波特率设置为115200,您将看到以下文本。

初始化DMP……

初始化I2C设备……

测试设备连接…

MPU6050连接成功

发送任意字符开始DMP编程和演示:

如果你没有得到任何数据或仍然得到垃圾数据,只需重置Arduino。如果你看最后一句,它说“发送任何字符开始DMP编程和演示”。所以,在串行显示器上输入任何字符,比如1或a,然后发送。一旦您按下回车键,您就可以开始在串行显示器上看到偏航、俯仰和滚转(ypr)值。

MPU6050图片4

注意:在此期间,请将MPU6050放置在稳定的水平面上。另外,等待10秒,让MPU6050的值稳定下来。

基于Arduino和MPU6050接口值的三维建模处理

在项目的下一步中,我们将研究使用Processing IDE对MPU6050传感器进行3D建模,在那里您可以查看来自传感器的数据的3D表示。Processing是一种为电子艺术和视觉设计而开发的编程语言和集成开发环境。事实上,Arduino IDE也是基于Processing的编程语言。

要下载Processing IDE,请访问这里链接.使用给定的链接下载和安装Processing IDE。

下载并安装Processing IDE之后(只需从下载的zip文件中解压内容),您需要为Processing下载一个名为“Toxi”的库。您可以从这里下载Toxi库链接

我选择了"毒物检测-完整-0020 "文件。下载此文件后,将内容解压缩到名为“toxiclib -complete-0020”的文件夹中。

复制此文件夹并将其粘贴到Processing的libraries文件夹中。在我的例子中,它是“C:\Users\Ravi\Documents\Processing\libraries”。

复制文件夹后,现在就可以进行3D建模了。首先,您需要上传之前的Arduino代码(MPU6050_DMP6),并进行少量修改。

在Arduino IDE中打开MPU6050_DMP6(我们之前上传的示例程序)。向下滚动到表示以下内容的行。

#定义OUTPUT_READABLE_YAWPITCHROLL

通过在该行前面添加双正斜杠来注释该行。

/ / #定义OUTPUT_READABLE_YAWPITCHROLL

另外,找到这一行/ / #定义OUTPUT_TEAPOT并通过删除双正斜杠取消注释。现在,可以上传代码了。我们在代码中修改的是,我们不是将数据发送到串行终端,而是将其转发到Processing IDE。

现在,打开Processing IDE并单击File -> open。现在,导航到为Arduino安装MPU6050库的文件夹。打开名称为“MPUTeapot”的Processing示例。

在我的例子中,这个例子的位置是C:\Program Files (x86)\Arduino\libraries\MPU6050\Examples\ MPU6050_DMP6\Processing\MPUTeapot。

该程序提供了自动选择Arduino连接到的端口号的功能。与此相关的代码行是

portName = Serial.list()[0];

另外一种指定Arduino端口号的方法是手动输入COM端口号。为此,注释上面的行,取消注释下面的行,并用Arduino连接到的适当的COM端口号替换COM端口号。

//String portName = " COM4 ";

在点击Processing中的run按钮之前,请确保Arduino IDE的Serial Monitor处于关闭状态。现在,在处理IDE中单击运行按钮。你会得到一个平面结构的窗户。等待10s后,再对MPU6050进行3D建模。

通过屏幕上的3D对象可以看到MPU6050所做的动作。

5的反应

  1. 我已经安装了CODE。在读取数据时,我只得到一个,即温度,大约是36.00,而在其他区域我得到1。
    进入示例MPU 6050后,我的PC没有编译草图,显示“BOARD”错误。我用的是Arduino Uno。我卡住了。Plesea帮助!

    Sudhish Gokhale

  2. 你好。我遇到了串行显示器显示的问题。它说:“DMP初始化失败(代码1)”,也就是说:初始内存加载失败。问题究竟出在哪里?

留下一个回复

您的电邮地址将不会公布。

Electronicshub图标
Baidu
map