在进入项目之前,您需要了解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
+关注
关注
187文章
6461浏览量
186566 -
MPU6050
+关注
关注
39文章
307浏览量
71127
发布评论请先 登录
相关推荐
评论