arduino 一次性读取serial_Arduino开发板使用MPU6050加速度计和陀螺仪的方法

942a01a93ea45411acb7b9ca19ad73cc.png

在本篇文章中,我们将主要介绍如何将MPU6050加速度计和陀螺仪传感器与Arduino开发板一起使用。首先,我们将介绍MPU6050是如何工作的以及如何从中读取数据,然后我们制作两个实际的例子。

概览

在第一个例子中,使用Processing开发环境,我们将对传感器方向进行三维可视化,在第二个例子中,我们将制作一个简单的自平衡平台或DIY万向节。基于MPU6050方向及其融合加速度计和陀螺仪数据,我们控制三个保持平台水平的伺服系统。

MPU6050的工作过程

MPU6050 IMU在单芯片上集成了一个3轴加速度计和一个3轴陀螺仪。

陀螺仪沿X、Y和Z轴测量角位置随时间的旋转速度或变化率。它使用MEMS技术和科里奥利效应进行测量。陀螺仪的输出以每秒度数为单位,因此为了获得角度位置,我们只需要对角速度进行积分。

ab21ce03cdcbf32e6853eaf2df4084f8.png
MPU6050 IMU 3轴加速度计和3轴陀螺仪

另一方面,MPU6050加速度计测量加速度的方式与ADXL345加速度传感器相同。简而言之,它可以测量沿3个轴的重力加速度,并使用一些三角学数学,我们可以计算传感器定位的角度。因此,如果我们融合或组合加速度计和陀螺仪数据,我们可以获得有关传感器方向的非常准确的信息。

MPU6050 IMU也称为六轴运动跟踪设备或6 DoF(六自由度)设备,因为它有6个输出,即3个加速度计输出和3个陀螺仪输出。

Arduino和MPU6050的连接方法

我们来看看如何使用Arduino连接和读取MPU6050传感器的数据。我们使用I2C协议与Arduino进行通信,因此只需要两条线进行连接,另外还有两条线用于供电。

dbd32a22c6b806bbc9832fbdcfee0604.png
Arduino和MPU6050连接电路图

MPU6050的Arduino代码

以下是用于从MPU6050传感器读取数据的Arduino代码。在代码下方,您可以找到它的详细说明。

/*

代码描述:首先我们需要包含用于I2C通信的Wire.h库,并定义一些存储数据所需的变量。

setup()函数部分,我们需要初始化wire库并通过电源管理寄存器复位传感器。 为此,我们需要查看传感器的数据手册,从中我们可以看到寄存器地址。

5820ad6970853576afed08fd4b38d87f.png
MPU6050电源管理寄存器0x6B

此外,如果需要,我们可以使用配置寄存器为加速度计和陀螺仪选择满量程范围。 对于这个例子,我们将使用加速度计的默认±2g范围和陀螺仪的250度/秒范围。

// Configure Accelerometer Sensitivity - Full Scale Range (default +/- 2g)

loop()函数部分,我们首先读取加速度计的数据。 每个轴的数据存储在两个字节或寄存器中,我们可以从传感器的数据手册中看到这些寄存器的地址。

e39528d1fe45c38ca41e116eb59fcfd9.png
MPU6050 imu加速度计数据寄存器

为了全部读取它们,我们从第一个寄存器开始,然后使用requiestFrom()函数,我们请求读取X、Y和Z轴的所有6个寄存器。 然后我们从每个寄存器读取数据,并且由于输出是二进制补码,我们将它们相应地组合以获得正确的值。

// === Read acceleromter data === //

为了获得-1g到+ 1g的输出值,适合计算角度,我们将输出除以先前选择的灵敏度。

daafb3990940c34b92a0fc005bb506e9.png
mpu6050加速度计灵敏度满量程范围

最后,使用这两个公式,我们从加速度计数据计算滚转角和俯仰角。

accAngleX 

接下来,使用相同的方法我们得到陀螺仪数据。

891c692ce2fbe12d1b17ac65a45c0067.png

我们读取了六个陀螺仪寄存器,适当地组合它们的数据并将其除以先前选择的灵敏度,以便以每秒的度数获得输出。

// === Read gyroscope data === //

6cc616398c438f5ca35d2529004b66f0.png

在这里你可以注意到我用一些小的计算误差值来校正输出值,我将在接下来解释它们是如何得到它们的。 因此,当输出以度/秒为单位时,现在我们需要将它们与时间相乘以得到度数。 使用millis()函数在每次读取迭代之前捕获时间值。

// Correct the outputs with the calculated error values

最后,我们使用互补滤波器融合加速度计和陀螺仪数据。在这里,我们采用96%的陀螺仪数据,因为它非常准确,不会受到外力的影响。陀螺仪的缺点是存在漂移,或者随着时间的推移在输出中引入误差。因此,从长远来看,我们使用来自加速度计的数据,本例为4%,足以消除陀螺仪的漂移误差。

// Complementary filter - combine acceleromter and gyro angle values

但是,由于我们无法从加速度计数据计算偏航,我们无法在其上实现互补滤波器。

在我们看一下结果之前,让我快速解释一下如何获得纠错值。为了计算这些错误,我们可以在传感器处于平坦静止位置时调用calculate_IMU_error()自定义函数。在这里,我们为所有输出做了200个读数,我们将它们相加并将它们除以200。由于我们将传感器保持在平坦静止位置,因此预期输出值应为0。因此,通过此计算,我们可以得到传感器的平均误差。

void 

我们只需在串行监视器上打印这些值,一旦我们知道它们,我们就可以在前面所示的代码中实现它们,用于滚动和俯仰计算,以及3个陀螺仪输出。

b71e149814910ba0103226f95456eb6e.png
MPU6050俯仰滚转和偏航输出

最后,使用Serial.print函数,我们可以在串行监视器上打印Roll、Pitch和Yaw值,看看传感器是否正常工作。

https://www.yiboard.com/thread-1212-1-1.html​www.yiboard.com

更多有关Arduino开发板的文章,请关注微信公众号“一板网电子技术论坛”。

404525fa0cded250972863fca45a1a41.png
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Arduino开发板连接MPU6050陀螺仪传感器,需要进行以下步骤: 1. 准备所需材料:Arduino开发板MPU6050陀螺仪传感器、跳线等。 2. 将MPU6050陀螺仪传感器与Arduino开发板进行连接。连接方式如下: MPU6050 VCC 应连接到Arduino的3.3V引脚,GND 应连接到Arduino的GND引脚,SCL 应连接到Arduino的A5引脚,SDA 应连接到Arduino的A4引脚。 注:如果使用的是Arduino Mega,SCL应连接到D21引脚,SDA应连接到D20引脚。 3. 在Arduino开发环境中导入I2Cdev和MPU6050库。可以在库管理器中搜索并下载这两个库。 4. 编写Arduino程序,以读取MPU6050陀螺仪传感器的数据。可以使用MPU6050库中提供的示例程序作为参考。以下是示例代码: ``` #include <Wire.h> #include <MPU6050.h> MPU6050 mpu; void setup() { Wire.begin(); Serial.begin(9600); while (!Serial); mpu.initialize(); Serial.println("MPU6050 initialization successful"); } void loop() { int16_t ax, ay, az, gx, gy, gz; mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); Serial.print("a/g:\t"); Serial.print(ax); Serial.print("\t"); Serial.print(ay); Serial.print("\t"); Serial.print(az); Serial.print("\t"); Serial.print(gx); Serial.print("\t"); Serial.print(gy); Serial.print("\t"); Serial.println(gz); delay(10); } ``` 5. 将Arduino开发板连接到计算机,并将程序上传到开发板中。 6. 打开串口监视器,即可看到MPU6050陀螺仪传感器的数据输出。 以上就是使用Arduino开发板实现与MPU6050陀螺仪传感器连接的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值