0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样将Arduino与MPU6050连接

454398 来源:工程师吴畏 2019-07-29 08:56 次阅读

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

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

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

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

对于MPU-6050,它是一个六轴运动跟踪设备,结合了3轴加速度计和3 -axis陀螺仪在一个芯片上。我们将在下一节中看到有关MPU6050的更多详细信息

简介到MPU6050传感器

MPU-6050是由InvenSense开发的六轴运动跟踪设备。 MPU6050器件的主要特性如下所述。

三轴加速度计

三轴陀螺仪

数字输出温度传感器

六个16位ADC(三个用于加速度计,三个用于陀螺仪)

集成数字运动处理器(DMP)

1024B FIFO缓冲区

六轴MPU-6050被称为6 DoF(六自由度)设备,因为它提供六个输出值(三个来自Accelerometer,三个来自Gyro)。 MPU-6050可以使用I2C协议进行通信

数字运动处理器或DMP是一种嵌入式处理器,可以减少来自主处理器的计算负载,如Arduino,从加速度计,陀螺仪和外部磁力计获取和处理数据。

将MPU6050与Arduino接口

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

来到MPU6050,我们使用了一个提供8个引脚的普通分线板。上图显示了MPU6050分线板的原理图。

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

所需组件

硬件

Arduino UNO [在此处购买]

MPU6050分组板[在此处购买]

连接线[在此处购买]

软件

Arduino IDE

处理(用于3D可视化)

电路图

下图显示了MPU6050与Arduino UNO接口的电路图。如前所述,MPU6050和Arduino之间的接口必须使用I2C协议实现。

因此,Arduino(A5)的SCL引脚连接到MPU6050的SCL引脚。同样,Arduino(A4)的SDA引脚连接到MPU6050板的SDA引脚。

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

注意:在I2C中通信时,MPU-6050始终充当从属设备。

阅读来自MPU6050的RAW值

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

如果打开串行终端,您将获得加速度计和陀螺仪的原始值以及温度传感器校准的温度。数据看起来像这样。

如您所见,阅读原始数据来自MPU6050传感器的数据很简单但是这些数据我们需要对这些数据进行额外的计算才能得到偏航,俯仰和俯仰。

我已经提到了MPU6050传感器,有一个特殊的处理器,称为DMP或数字运动处理器,与加速度计和陀螺仪嵌入在同一芯片上。此DMP的使用是可以使用固件对其进行编程,以便对来自传感器的数据执行复杂的计算。

但是没有关于InvenSense的DMP的明确文档因此我们错过了直接在芯片上快速计算传感器数据的方法。

Jeff Rowberg等人在DMP的逆向工程方面做得非常出色来自I2C信号分析的相关信息。

将代码上传到Arduino并测试MPU6050

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

I2Cdev:下载I2CDEV LIBRARY 或访问GitHub LINK

MPU6050:下载MPU6050 LIBRARY 或访问GitHub LINK

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

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

如果一切顺利,请打开Arduino IDE并浏览以下路径:文件 - 》示例 - 》 MPU6050 - 》示例 - 》 MPU6050_DMP6并打开示例代码MPU6050_DMP6。

将此代码上传到Arduino(假设您已根据电路图建立了连接)并且代码为上传,打开串口终端。

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

“初始化DMP 。..

初始化I2C设备。..。..

测试设备连接。..

MPU6050连接成功

发送任何字符以开始DMP编程和演示:“

如果您没有获得任何数据或仍然获取垃圾数据,只需重置Arduino。如果您查看最后一句,它会说“发送任何字符以开始DMP编程和演示”。因此,在串行监视器中键入任何字符,如1或a,然后发送它。只要您按Enter键,就可以开始在串行监视器上看到Yaw,Pitch and Roll(ypr)值。

注意:在此期间,请将MPU6050放在稳定的水平表面上。此外,等待MPU6050的值稳定10秒钟。

根据接口Arduino和MPU6050的值进行处理中的3D建模

在项目的下一步中,我们将使用Processing IDE查看MPU6050传感器的3D建模,您可以在其中查看传感器数据的3D表示。 Processing是一种为电子艺术和视觉设计开发的编程语言和IDE。实际上,Arduino IDE也基于Processing编程语言。

要下载Processing IDE,请访问 LINK 。使用给定链接下载并安装Processing IDE。

下载处理IDE并安装后(只需从下载的zip文件中解压缩内容),您需要下载一个库for Processing称为“Toxi”。您可以从 LINK 下载Toxi库。

我选择了“toxiclibs-complete-0020”文件。下载此文件后,将内容解压缩到名为“toxiclibs-complete-0020”的文件夹。

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

复制文件夹后,您就可以进行3D建模了。首先,您需要上传先前的Arduino代码(MPU6050_DMP6),只需稍加修改。

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

#define OUTPUT_READABLE_YAWPITCHROLL

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

//#define OUTPUT_READABLE_YAWPITCHROLL

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

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

在我的示例中,此示例的位置为C: Program Files(x86) Arduino libraries MPU6050 Examples MPU6050_DMP6 Processing MPUTeapot。

此程序可自动选择Arduino所连接的PORT编号。与此相关的代码中的行是

字符串portName = Serial.list()[0];

指定Arduino的PORT编号的另一种方法是手动输入COM端口号。为此,请注释以上行并取消注释以下行,并将COM端口号替换为Arduino所连接的相应COM端口号。

//String portName =“COM4”;

在点击Processing中的运行按钮之前,请确保Arduino IDE的串行监视器是关闭。现在,单击处理IDE中的运行按钮。您将获得一个具有类似结构的平面的窗口。在对MPU6050进行3D建模之前等待10秒。

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Arduino
    +关注

    关注

    184

    文章

    6426

    浏览量

    184794
  • MPU6050
    +关注

    关注

    38

    文章

    304

    浏览量

    69826
收藏 人收藏

    评论

    相关推荐

    ADXL345和MPU6050的区别

    ADXL345和MPU6050是两种常见的加速度计和陀螺仪传感器,用于测量物体的加速度和旋转速度。它们在设计、性能和应用方面有一些区别。在本文中,我们将对ADXL345和MPU6050的区别进行详细
    的头像 发表于 01-04 11:30 2641次阅读

    mpu6050mpu6500哪个性能好

    MPU6050MPU6500都是InvenSense公司生产的高性能六轴陀螺仪和加速度计传感器。它们被广泛应用于各种领域,如移动设备、虚拟现实、机器人、汽车等。虽然它们之间有一些区别,但是无法简单
    的头像 发表于 12-21 16:54 2769次阅读

    MPU-6000和MPU-6050产品说明书

    mpu6050模块介绍 
    发表于 11-30 09:17 0次下载

    mpu6050无法获取绝对角度吗?

    之前用ADXL345是可以获得相对于世界坐标的绝对倾角角度但用MPU6050(原子的例程),似乎只能获得相对于初始化时的角度。 也就是初始化时候如果不是水平,而是倾斜30度(比如拿俯仰角来说),那么
    发表于 11-06 08:02

    MPU6050能用来测试速度吗?

    MPU6050能用来测试速度么?
    发表于 10-25 08:15

    MPU6050的外部中断引脚是如何触发?

    想知道MPU6050的外部中断引脚是如何触发,我看有的程序设置的是5ms一次中断,找半天没找到在哪里设置的。是在dmp里边?
    发表于 10-23 07:01

    MCU\mpu6050 通信及电路原理图

    SPI\IIC\RS485通信动态图展示,MCU\mpu6050 通信及电路原理图
    发表于 10-17 16:36 2次下载

    mpu6050航向角偏移怎么解决?

    为什么mpu6050航向角会偏移,在四轴上怎么解决偏移问题
    发表于 10-08 06:07

    请教关于一个MPU6050的问题

    ,树莓派也能正常工作,但发现这个6050时有时无,程序读也报错,感觉像是在重启: 一直查不出原因,后来,把电源至了某宝上现成的DC-DC模块 发现,MPU6050工作一切正常。 于是怀疑到电源,用示波器
    发表于 10-04 21:09

    ArduinoMPU6050加速度计和陀螺仪教程

    自制云台相机不一定要很笨重,试用MPU6050加速计、陀螺仪传感器与Arduino就可以!同时解释MPU6050的工作原理以及如何从中读取数据,然后我们将给出两个实际例子。
    发表于 09-26 06:14

    MPU6050使用互补滤波与卡尔曼滤波算法进行姿态解算

    MPU6050使用互补滤波与卡尔曼滤波算法进行姿态解算
    发表于 08-07 15:46 2次下载

    ArduinoMPU6050控制伺服电机

    电子发烧友网站提供《用ArduinoMPU6050控制伺服电机.zip》资料免费下载
    发表于 07-03 10:59 0次下载
    用<b class='flag-5'>Arduino</b>和<b class='flag-5'>MPU6050</b>控制伺服电机

    MPU6050运动跟踪设备开源分享

    电子发烧友网站提供《MPU6050运动跟踪设备开源分享.zip》资料免费下载
    发表于 06-29 14:57 3次下载
    <b class='flag-5'>MPU6050</b>运动跟踪设备开源分享

    MPU6050教程开源分享

    电子发烧友网站提供《MPU6050教程开源分享.zip》资料免费下载
    发表于 06-25 15:18 7次下载
    <b class='flag-5'>MPU6050</b>教程开源分享

    MPU6050原始数据处理

    我用MPU6050接到小熊派开发版上读取到加速度原始数据,按照网上说的公式转换成加速度,加速度基本上都是在0附近,要大力快速晃动MPU6050传感器,加速度值才会变化。这是什么原因?
    发表于 05-17 19:28