搜索代码

如何使用 MPU-6050 加速度计和陀螺仪模块

如何使用 MPU-6050 加速度计和陀螺仪模块

MPU-6050是一款多功能传感器,将3轴加速度计和3轴陀螺仪集成在一个封装中。在本教程中,我们将探索如何将该模块与Arduino接口,以测量加速度和角速度。最终结果将是一个简单的程序,可以实时显示传感器的数据,使您能够监控设备的加速度和方向。

通过遵循本指南,您将学习如何设置硬件,正确接线组件,并编写必要的代码以使MPU-6050启动并运行。这将为您提供进一步涉及运动传感和方向检测的项目的基础。为获得额外的清晰度,请确保查看本教程附带的视频(视频在00:00)。

硬件解析

该项目的主要组件是MPU-6050传感器,它提供加速度计和陀螺仪的数据。加速度计测量沿X、Y和Z轴的线性加速度,而陀螺仪测量绕这些轴的旋转速率。这种组合使得MPU-6050成为需要运动追踪的应用的绝佳选择。

此外,该模块使用I2C接口进行通信,这简化了连接并允许多个设备连接在同一总线上。传感器通过VCC引脚供电,通常需要3.3V到5V之间的电压。接地与Arduino的公共接地相连。

数据表详情

制造商InvenSense
零件编号MPU-6050
逻辑/IO电压3.3 - 5 V
供电电压3.3 - 5 伏
每个通道的输出电流...
峰值电流(每通道)...
PWM频率指导...
输入逻辑阈值抱歉,我无法翻译空输入。
电压降 / RDS(导通)/ 饱和度...
热极限...
包裹QFN
备注 / 变体...

  • 将VCC引脚连接到3.3V或5V。
  • 将GND引脚连接到接地。
  • 通过SDA(数据)和SCL(时钟)使用I2C通信。
  • 确保在SDA和SCL线上存在上拉电阻。
  • 检查电压水平以避免损坏传感器。

接线说明

arduino_wiring_MPU-6050

要将MPU-6050连接到您的Arduino,首先将MPU-6050的VCC引脚连接到Arduino的5V引脚。接下来,将MPU-6050的GND引脚连接到Arduino的一个GND引脚。对于I2C通信,将MPU-6050的SDA引脚连接到Arduino的A4引脚,将SCL引脚连接到A5引脚。确保您的Arduino设置为使用I2C通信,通过在代码中包含适当的库来实现。

在给系统供电之前,请仔细检查连接。如果使用面包板,请确保连接牢固,并且没有短路。如果模块没有按预期响应,请验证布线并检查代码中MPU-6050的I2C地址。

代码示例与指南

以下代码片段初始化 MPU-6050 并开始从中读取数据。关键标识符包括mpu6050,作为MPU6050类的实例,和timer用于控制数据输出时机。

MPU6050 mpu6050(Wire);
long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

在此设置函数中,我们初始化串行通信和MPU-6050传感器。mpu6050.calcGyroOffsets(true)调用至关重要,因为它校准陀螺仪的偏移量,确保读取的准确性。

在循环函数中,我们不断更新传感器数据并将其打印到串行监视器。以下代码片段显示了如何读取和打印温度和加速度数据:

if(millis() - timer > 1000){
  Serial.print("temp : ");Serial.println(mpu6050.getTemp());
  Serial.print("accX : ");Serial.print(mpu6050.getAccX());
  Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
  Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
}

此块检查自上次输出以来是否已过去一秒。然后,它从 MPU-6050 获取温度和加速度值,并将其打印到串行监视器上。您可以实时观察这些值的更新。

演示 / 期待内容

一旦一切接线完成并且代码上传,你可以预期每秒在串口监视器中看到温度和加速度数据的打印。如果你倾斜或移动 MPU-6050,加速度值应该相应地改变。请注意,接线错误或供电不足可能导致读数不稳定或根本没有数据(视频中在 01:30)。

图像

arduino_wiring_MPU-6050
arduino_wiring_MPU-6050
MPU-6050-module-1
MPU-6050-module-1
MPU-6050-module-2
MPU-6050-module-2
MPU-6050-module-schematic
MPU-6050-module-schematic
MPU-6050-module-1
MPU-6050-module-1
116-Arduino code for the MPU-6050 accelerometer and gyroscope sensor (all data)
语言: C++
/*
 * 
 * This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
 * 
 * This code displays all data:
 * -Gyroscope X, Gyroscope Y, Gyroscope Z
 * -Gyroscope Angle X, Gyroscope Angle Y, Gyroscope Angle Z 
 * -Accel X, Accel Y, Accel Z
 * -Accel Angle X, Accel Angle Y, Accel Angle Z,
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
 * 
 */
#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

void loop() {
  mpu6050.update();

  if(millis() - timer > 1000){
    
    Serial.println("=======================================================");
    Serial.print("temp : ");Serial.println(mpu6050.getTemp());
    Serial.print("accX : ");Serial.print(mpu6050.getAccX());
    Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
    Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
  
    Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
    Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
    Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
  
    Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
    Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
  
    Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
    Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
    Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
    
    Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
    Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
    Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
    Serial.println("=======================================================\n");
    timer = millis();
    
  }

}
117-Arduino code for an MPU-6050 accelerometer and gyroscope sensor (just angle)
语言: C++
/*
 * 
 * This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
 * 
 * This code displays:
 * - Angle X, Angle Y, Angle Z,
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
 * 
 */
#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

void loop() {
  mpu6050.update();

  if(millis() - timer > 1000){
    
    Serial.println("=======================================================");
    Serial.print("temp : ");Serial.println(mpu6050.getTemp());
    Serial.print("accX : ");Serial.print(mpu6050.getAccX());
    Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
    Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
  
    Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
    Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
    Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
  
    Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
    Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
  
    Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
    Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
    Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
    
    Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
    Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
    Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
    Serial.println("=======================================================\n");
    timer = millis();
    
  }

}

|||您可能需要的东西

资源与参考

文件📁

Arduino 库(zip 格式)