在这个项目中,我将向您展示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传感器
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,我们使用了一个普通的断线板,提供了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的SCL线和SDA线分别连接到Arduino对应的I2C pin (A4和A5)上,然后上传如下代码。
如果您打开串行终端,您将从加速计和陀螺仪获得原始值,并从温度传感器获得校准温度。数据大概是这样的。
正如您所看到的,从MPU6050传感器读取原始值很容易,但是这个数据,我们需要对这个数据执行额外的计算,以获得偏航,俯仰和横摇。
我已经提到过,在MPU6050传感器中,有一个特殊的处理器称为DMP或数字运动处理器,它嵌入到与加速计和陀螺相同的芯片上。这种DMP的用途是,它可以用固件编程,对来自传感器的数据执行复杂的计算。
但英维信方面没有关于DMP的明确文档,因此我们错过了直接在芯片上对传感器数据进行快速计算的机会。
Jeff Rowberg等人在从I2C信号分析中逆向工程DMP相关信息方面做了出色的工作。
上传代码到Arduino,测试MPU6050
在上传代码之前,我们需要下载Arduino的两个库。分别是I2Cdev和MPU6050。下载链接和官方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。
将此代码上传到Arduino(假设您已经按照电路图进行了连接),一旦代码上传到Arduino,打开串行终端。
将串口终端的波特率设置为115200,您将看到以下文本。
”初始化DMP……
初始化I2C设备……
测试设备连接…
MPU6050连接成功
发送任意字符开始DMP编程和演示:”
如果你没有得到任何数据或仍然得到垃圾数据,只需重置Arduino。如果你看最后一句,它说“发送任何字符开始DMP编程和演示”。所以,在串行显示器上输入任何字符,比如1或a,然后发送。一旦您按下回车键,您就可以开始在串行显示器上看到偏航、俯仰和滚转(ypr)值。
注意:在此期间,请将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_TEAPOT并通过删除双正斜杠取消注释。现在,可以上传代码了。我们在代码中修改的是,我们不是将数据发送到串行终端,而是将其转发到Processing IDE。
现在,打开Processing IDE并单击File -> open。现在,导航到为Arduino安装MPU6050库的文件夹。打开名称为“MPUTeapot”的Processing示例。
在我的例子中,这个例子的位置是C:\Program Files (x86)\Arduino\libraries\MPU6050\Examples\ MPU6050_DMP6\Processing\MPUTeapot。
该程序提供了自动选择Arduino连接到的端口号的功能。与此相关的代码行是
另外一种指定Arduino端口号的方法是手动输入COM端口号。为此,注释上面的行,取消注释下面的行,并用Arduino连接到的适当的COM端口号替换COM端口号。
在点击Processing中的run按钮之前,请确保Arduino IDE的Serial Monitor处于关闭状态。现在,在处理IDE中单击运行按钮。你会得到一个平面结构的窗户。等待10s后,再对MPU6050进行3D建模。
通过屏幕上的3D对象可以看到MPU6050所做的动作。
5的反应
我已经安装了CODE。在读取数据时,我只得到一个,即温度,大约是36.00,而在其他区域我得到1。
进入示例MPU 6050后,我的PC没有编译草图,显示“BOARD”错误。我用的是Arduino Uno。我卡住了。Plesea帮助!
Sudhish Gokhale
我也是,兄弟,你找到答案了吗
你好。我遇到了串行显示器显示的问题。它说:“DMP初始化失败(代码1)”,也就是说:初始内存加载失败。问题究竟出在哪里?
它为我编译,没有错误。我还没有在“处理”上尝试过
我已经尝试了上面写的代码,它是打印-1值为每次阅读。
请帮帮我。