MPU6050的I2C接口测试
MPU6050三轴陀螺仪和三轴加速度仪是各种实验中用于定位的主要模块,通过陀螺仪和加速度仪可以很好地获取物体运动及位置的相关数据,配合磁力计和气压计、GPS等模块可以组成更加精确定位的部件。
MPU6050传感器简介
- 三轴加速度计
- 三轴陀螺仪
- 数字输出温度传感器
- 6个16位ADC(3个用于加速计,3个用于陀螺仪)
- 集成数字运动处理器(DMP)
- 1024B FIFO Buffer
购买地址:MPU6050
六轴MPU-6050是一种6自由度设备,因为它提供了6个输出值(3个来自加速度计,3个来自陀螺仪)。MPU-6050使用I2C接口协议与Arduino或者树莓派等开发板进行通信。数字运动处理器或DMP是一种嵌入式处理器,它就像Arduino一样可以获取并处理来自加速计、陀螺仪和外部磁力仪的数据,减少主机处理器的计算负载。MPU6050只支持I2C接口通信,因此它必须与Arduino或树莓派的I2C接口连接。Arduino的I2C接口被多路复用,其中的模拟输入接口 A4 和 A5 可连接 MPU6050 的 SDA 和 SCL 接口。
MPU6050测试
测试设备:Arduino Nano 、 MPU6050
上图是Arduino Nano连接 MPU6050 的电路连接图。正如之前提到的,MPU6050和Arduino之间的连接必须使用I2C接口协议实现。因此,Arduino Nano(A5)连接 MPU6050(SCL ),类似地Arduino Nano(A4)与MPU6050板(SDA Pin)连接。除此之外,当1024字节的FIFO缓冲区满时,我们将使用MPU6050的中断特性来中断Arduino。因此,需要将MPU6050的INT Pin连接到Arduino Nano的中断INT0 Pin,即数字接口 Pin 2。(注意:在I2C接口通信协议中,MPU-6050总是充当 Slave 设备。)
MPU6050测试代码
#include<Wire.h> const int MPU6050_addr=0x68; int16_t AccX,AccY,AccZ,Temp,GyroX,GyroY,GyroZ; void setup(){ Wire.begin(); Wire.beginTransmission(MPU6050_addr); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true); Serial.begin(9600); } void loop(){ Wire.beginTransmission(MPU6050_addr); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU6050_addr,14,true); AccX=Wire.read()<<8|Wire.read(); AccY=Wire.read()<<8|Wire.read(); AccZ=Wire.read()<<8|Wire.read(); Temp=Wire.read()<<8|Wire.read(); GyroX=Wire.read()<<8|Wire.read(); GyroY=Wire.read()<<8|Wire.read(); GyroZ=Wire.read()<<8|Wire.read(); Serial.print("AccX = "); Serial.print(AccX); Serial.print(" || AccY = "); Serial.print(AccY); Serial.print(" || AccZ = "); Serial.print(AccZ); Serial.print(" || Temp = "); Serial.print(Temp/340.00+36.53); Serial.print(" || GyroX = "); Serial.print(GyroX); Serial.print(" || GyroY = "); Serial.print(GyroY); Serial.print(" || GyroZ = "); Serial.println(GyroZ); delay(100); }
在上传代码之前,我们需要加载两个Arduino的库。它们是I2Cdev和MPU6050。下面给出了下载链接和官方的GitHub链接。
I2Cdev: GitHub LINK
MPU6050: GitHub LINK
上传代码后打开串口监视器,你可以从加速度计和陀螺仪中获得数据,并从温度传感器中获取温度,看起来是这样的。