资讯详情

MPU6050 加速度计和陀螺仪传感器与 Arduino 连接

MPU6050 加速度计和陀螺仪传感器 Arduino 连接

    • 前言
    • MPU6050 模块引脚
    • MPU6050 模块组成
    • MPU6050陀螺仪传感器模块电路图
    • MPU如何工作6050模块?
    • MEMS如何工作加速度计?
    • MEMS陀螺仪怎么工作?
    • 常见问题
    • Arduino MPU6050 加速度计和陀螺仪传感器模块接口电路图
    • Arduino MPU6050 模块代码
    • MPU6050 连接Arduino 测试
    • Arduino代码

前言

MPU6050是一种非常流行的加速度计陀螺仪芯片,具有六轴感应和 16 位测量分辨率。在这种意义上,高精度和低成本使其处于 DIY 社区很受欢迎。甚至很多商业产品都配备了 MPU6050。陀螺仪和加速度计的组合通常称为惯性测量单元或 IMU。

IMU 传感器用于手机、平板电脑、卫星、航天器、无人机、无人机、机器人等各种应用。用于运动跟踪、方向和位置检测、飞行控制等。

MPU6050 模块引脚

MPU6050 模块共有 8 个引脚。至少需要。 4 用于连接的引脚。MPU管脚6050模块如下: 在这里插入图片描述VCC==》连接到模块提供电源Arduino的5V引脚。

GND==》连接到 Arduino 接地引脚。

SCL==》串行时钟 用于为 I2C 通信提供时钟脉冲。

SDA==》串行数据 用于通过 I2C 通信传输数据。

XDA==》辅助串行数据 - 可用于其他 I2C 模块与 MPU6050 连接。

XCL==》辅助串行时钟 - 可用于其他 I2C 模块与 MPU6050 连接。

ADD==》若使用多个 MPU6050 模块,地址选择引脚。

INT==》中断引脚指示数据 MCU 读取。

MPU6050 模块组成

MPU6050 模块由 TDK InvenSense 的 MPU6050 IMU 芯片组成。它采用 24 引脚 QFN 包装,尺寸为 4mm x 4mm x 0.9mm。该模块的组件数量很少,包括一个 AP2112K 3.3V 稳压器、I2C 上拉电阻和旁路电容。还有一个电源指示灯,指示模块的电源状态。

MPU6050陀螺仪传感器模块电路图

MPU6050模块原理图如下。如前所述,该板的组件数量非常少。功率部分围绕AP2112K-3.3.稳压器设计。钽电容器和多层电容器提供足够的滤波器。 LED 用作电源指示灯。 MPU6050 电路很简单。它是由的 MPU6050 芯片本身由旁路电容和上拉电阻组成。

MPU如何工作6050模块?

MPU6050 是微机电系统 (MEMS),内部包含一个 3 轴加速度计和 3 轴陀螺仪。这有助于我们测量系统或物体的加速度、速度、方向、位移和许多其他与运动相关的参数。模块内还有另一个 (DMP) 该处理器功能强大,能进行复杂的计算,从而腾出微控制器的工作量。 该模块还有两个辅助引脚,可用于连接外部 IIC 磁力计等模块是可选的。由于模块的 IIC 地址可以配置,可以使用 AD0 引脚将多个 MPU6050 传感器连接到微控制器。该模块还提供了有据可查和修改的库,因此很容易与之匹配 Arduino 等着名平台一起使用。所以,如果你在寻找控制遥控车、无人机、自平衡机器人、人形机器人的传感器,Biped 或者类似设备的运动,那么传感器可能是你的正确选择。

MEMS如何工作加速度计?

MEMS 加速度计用于需要测量线性运动(运动、冲击或振动)但没有固定基准的地方。它们测量附着在任何物体上的线性加速度。所有加速度计的工作原理都是弹簧上的质量。当附着物体加速时,由于其惯性,弹簧被拉伸或压缩,产生相应力施加的加速度。

在 MEMS 在加速度计中,两个正交轴上的精确线性加速度检测是通过弹簧保护质量形成的硅 MEMS 实现了检测器。由交错的指状结构阵列形成的可变电容移动板提供每个质量块。当传感器沿其敏感轴受到线性加速时,由于其惯性,检测质量往往会抵抗运动,因此质量及其手指相对于固定电极手指发生位移。手指之间的气体提供阻尼效果。这种位移与施加的加速度成正比,在移动和固定硅指之间产生差异电容。使用高分辨率 ADC 测量电容变化,然后根据电容变化率计算加速度。然后在 MPU6050 将其转换为可读值,然后传输到 I2C 主设备。

MEMS陀螺仪怎么工作?

MEMS 陀螺仪的工作是基于科里奥利效应。科里奥利效应指出,当质量块以一定速度沿特定方向移动并施加外角运动时,会产生力,导致质量块垂直位移。产生的力称为科里奥利力,这种现象称为科里奥利效应。位移速率将直接与角运动有关。

MEMS 陀螺仪包含一组四个质量块,并保持连续振荡运动。当施加角运动时,科里奥利效应会导致质量之间的电容变化,这取决于角运动的轴。感知电容器的变化,然后将其转换为读数。这是一个小动画,显示了这些质量块在使用不同轴的角运动时的运动。

常见问题

MPU6050 惯性测量单元或 IMU,三轴加速度计、三轴陀螺仪、数字运动处理器 (DMP) 和 16 位 ARC。

MPU6050 是围绕微机电技术构建的,也称为 MEM。

是的,我们可以用 MPU6050 测量倾斜角度。

Arduino MPU6050 加速度计和陀螺仪传感器模块接口电路图

下图显示了 MPU6050 与 Arduino 接口电路图。MPU6050 使用 I2C 通信模块。由于 I2C 引脚可承受 5V 因此,我们可以将它们与电压相结合 Arduino 在没有任何电平转换器的情况下。SCL 引脚连接到 Arduino 的 SCL 引脚 (A5)。同样,SDA 引脚连接到 Arduino 的 SDA 引脚(A4)。

Arduino MPU6050 模块代码

在这种情况下,我们将服从 MPU6050 读取加速度计、陀螺仪和温度数据,并将其打印到串行监视器上。首先,我们需要安装必要的库。要安装库,请在 Arduino IDE 打开仓库管理器。搜索并安装以下库:Adafruit MPU6050 库、Adafruit Unified Sensor Library和Adafruit Bus IO Library。完成后,创建新草图并粘贴代码。然后编译上传Arduino。上传后,打开串行监视器,读数将显示在那里。

一开始,我们已经包括了 Adafruit MPU6050 库、Adafruit Sensor 库和 wire 库,它们是和 MPU6050 通信和获取读数是必要的。然后我们创建了一个名字 mpu 从 MPU6050 IMU 获取读数。

#include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> #include <Wire.h> Adafruit_MPU6050 mpu; 

在setup在函数中,我们已经开始了了串口通信和 MPU6050 IMU。然后设置加速度计范围、陀螺仪范围和滤波器带宽参数。量程参数会影响读数的准确性。因此,如果需要,可以根据库值更改这些值。setFilterBandwidth 参数将改变低通滤波器的带宽。

void setup(void) { 
        
  Serial.begin(115200);
  // Initializethe MPU6050 IMU
  if (!mpu.begin()) { 
        
    Serial.println("Failed to find MPU6050 chip");
    while (1) { 
        
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");
  // set accelerometer range to +-8G
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  // set gyro range to +- 500 deg/s
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  // set filter bandwidth to 21 Hz
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
  delay(100);
}

在循环函数中,在 Adafruit 库的帮助下从 MPU6050 读取值,然后打印到串行监视器。这将每秒重复一次。

void loop() { 
        
  /* Get new sensor events with the readings */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);
  /* Print out the readings */
  Serial.print("Acceleration X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");
  Serial.print("Rotation X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" rad/s");
  Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println(" degC");
  Serial.println("");
  delay(1000);
}

MPU6050 连接Arduino 测试

下面的 GIF 显示了我们如何将 MPU6050 与 Arduino 连接。您可以看到,当模块旋转时,值的变化取决于旋转轴。

Arduino代码

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;
void setup(void) { 
        
  Serial.begin(115200);
  // Try to initialize!
  if (!mpu.begin()) { 
        
    Serial.println("Failed to find MPU6050 chip");
    while (1) { 
        
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");
  // set accelerometer range to +-8G
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  // set gyro range to +- 500 deg/s
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  // set filter bandwidth to 21 Hz
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
  delay(100);
}
void loop() { 
        
  /* Get new sensor events with the readings */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);
  /* Print out the readings */
  Serial.print("Acceleration X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");
  Serial.print("Rotation X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" rad/s");
  Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println(" degC");
  Serial.println("");
  delay(1000);
}

标签: 加速度倾斜度角度传感器芯片ap1509稳压芯片arduino中加速度传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台