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

2023-10-31

前言

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

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

MPU6050 模块引脚

MPU6050 模块共有 8 个引脚。其中至少需要 4 个引脚用于连接。MPU6050模块的管脚如下:
在这里插入图片描述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 芯片本身以及旁路电容和上拉电阻组成。

MPU6050模块如何工作?

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

MEMS加速度计如何工作?

MEMS 加速度计用于需要测量线性运动(运动、冲击或振动)但没有固定基准的地方。它们测量它们所附着的任何物体的线性加速度。所有加速度计的工作原理都是弹簧上的质量,当它们附着的物体加速时,质量由于其惯性而想要保持静止,因此弹簧被拉伸或压缩,产生一个被检测到并对应的力施加的加速度。
在这里插入图片描述

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

MEMS陀螺仪如何工作?

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

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

在这里插入图片描述

常见问题

问:什么是 MPU6050?

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

Q. MPU6050 采用什么技术?

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

Q. MPU6050可以倾斜测量角度吗?

是的,我们可以用 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MPU6050 加速度计和陀螺仪传感器与 Arduino 连接 的相关文章

  • Shell中表示数字跨度的几种方式

    在Shell脚本中 如果要输出数字为0 20中3的倍数 可以使用下面三种方式来完成 方式一 i 0 i lt 20 i 3 for i 0 i lt 20 i 3 do echo i done 方式二 0 20 3 for i in 0 2
  • ElasticSearch 评分排序

    背景 通过脚本改变评分 背景 近期有一个需求 需要对优惠券可用商品列表加个排序 只针对面值类的券不包括折扣券 需求是这样的 假设有一张面值券 50 块钱 可用商品列表 A 100 B 40 C 10 当用户查询当前券可用商品列表的时候优先将
  • RuntimeError: expected dtype Double but got dtype Float 损失求导出错

    求导出现问题 源代码 修改为 把损失修改为loss clone detach requires grad
  • 卫星通信的资源调度 vs 地面无线通信的资源调度

    以OFDM系统为例 考虑多个用户共用多个子载波的场景 一 两类资源 调整时频资源 即基站或卫星决定给各个用户在哪些时隙分配多少子载波 调整发射功率 即基站或卫星决定给每个用户在每个子信道上的功率是多大 用字母 P n k P n k Pn
  • 【TestNG】TestNG使用教程详解

    一 TestNG介绍 TestNG是Java中的一个测试框架 类似于JUnit 和NUnit 功能都差不多 只是功能更加强大 使用也更方便 详细使用说明请参考官方链接 https testng org doc index html 二 Te
  • anaconda 创建虚拟环境、激活及使用的基本方法

    1 查看当前存在的虚拟环境 conda env list 2 创建虚拟环境 环境名 conda create n 环境名 python X X 3 激活指定虚拟环境 activate 环境名 4 删除虚拟环境 conda remove n

随机推荐

  • c++ 鼠标控制

    windows下获得鼠标位置和控制鼠标 include
  • 使用nodejs开发一个markdown文档管理小系统(一)Using Nodejs to quickly develop a markdown management system...

    好多年没碰过前端jquery了 用一两天时间重温一下 刚好写个小工具 不递归取文件夹和文件 只写一层 保持足够简单 验证和参数判断暂不写 毕竟只写了几个小时而已 功能算完备了 添加一个简单的管理员权限管理修改的所有功能即可放出去了 看来还不
  • LaTeX各种算法排版

    1 首先在导言区加入语句 usepackage algorithm usepackage algorithmic 2 例1 begin algorithm caption A label alg A begin algorithmic ST
  • AUTOSEMO“恒以致远,共创共赢”主题研讨会圆满落幕

    2023年8月31日 中国汽车工业协会软件分会中国汽车基础软件生态标委会 简称 AUTOSEMO 与天津市西青区人民政府联合主办 北京经纬恒润科技股份有限公司承办的 恒以致远 共创共赢 主题研讨会在天津隆重召开 本次研讨会是AUTOSEMO
  • vue2.0使用less 创建全局的颜色变量,配置主题色

    1 使用场景 项目中需要统一配置前端的主题样式 我们可以使用less创建 theme colors rgba 54 174 149 1 变量 供全局调用 2 安装依赖 cnpm install less less loader save 安
  • 【Android】WebView控件最全使用解析

    WebView控件最全使用解析 一 WebView 概述 二 WebView使用基础篇 2 1添加方式 2 2 加载远程网页 2 3 加载本地网页 2 4 加载HTML片段 2 5 WebView 常用方法 三 WebView 进阶篇 3
  • Android--Recovery模块之恢复出厂设置

    一 在进行详细流程分析之前 先看一下几个重要概念 一 Recovery的工作需要整个软件平台的配合 从架构角度看 有三个部分 1 Main system 用boot img启动的Linux系统 Android的正常工作模式 2 Recove
  • 【MyBatis】自定义resultMap三种映射关系

    目录 一 一对一映射 One to One 1 1 表关系 1 2 resultMap设置自定义映射 二 一对多映射 One to Many 2 1 创建实体 2 2 级联方式处理映射关系 2 3 定义SQL 2 4 OrderMapper
  • jquery 购物车飞入特效--全网最简单

    有个插件 jquery fly js 可以搞定 好象特点之一是有抛物线效果 如果要求不高 可以看看我这个 其实也是在网上看到的 作了些改进 三个元素 被点击的div 飞翔的小红点 装小红点的div 购物车 div 被点击的 div div
  • (一)@Input属性讨论

    Input Declares a data bound input property Angular automatically updates data bound properties during change detection 大
  • PAT C入门题目-7-111 输出学生成绩 (20 分)(动态内存分配)

    7 111 输出学生成绩 20 分 本题要求编写程序 根据输入学生的成绩 统计并输出学生的平均成绩 最高成绩和最低成绩 建议使用动态内存分配来实现 输入格式 输入第一行首先给出一个正整数N 表示学生的个数 接下来一行给出N个学生的成绩 数字
  • vue3+uniapp+TS+Vite+uView-plus(uniapp-nutui)微信小程序模板搭建

    官网下载目录结构 DCloud uni preset vue 码云 开源中国 gitee com 下载zip压缩包即可 目录 一 依赖下载 二 运行 三 vite config json文件修改 四 uView plus组件库加载 1 安装
  • Android Studio之BuildConfig类

    转自 http blog csdn net lvxiangan article details 71601451 Android Studio开发中 把一个module输出打包为jar文件 我们会发现里面多了一个BuildConfig类 但
  • vue中慎用style的scoped属性

    在vue组件中 在style标签上添加scoped属性 以表示它的样式作用于当下的模块 很好的实现了样式私有化的目的 这是一个非常好的机制 但是为什么要慎用呢 在实际业务中我们往往会对公共组件样式做细微的调整 如果添加了scoped属性 那
  • 前后端通过局域网对接

    因为前后端分离写项目 后端同学在隔壁宿舍 我们通过连他的热点来进行前后端的对接 第一步 关闭防火墙 第二部 找到自己ip地址 无线局域网Ipv4地址 然后前后端在 cmd中 通过 ping 加上地址可以连接成功 然后就可以访问后端的接口了
  • Linux与Windows:操作系统之争及个人体验比较

    在当今数码化的世界中 操作系统扮演着关键的角色 Linux和Windows作为最受欢迎和广泛使用的操作系统之一 具有不同的特点和优势 作为一个AI模型 我虽然没有真正的使用经验 但我可以就这两个操作系统进行比较 并提供一些观点供您参考 Li
  • 利用注册表修改3389端口

    步骤 打开 开始 运行 输入 regedit 打开注册表 进入以下路径 HKEY LOCAL MACHINE SYSTEM CurrentControlSet Control Terminal Server Wds rdpwd Tds tc
  • 1060- 礼物的最大价值

    题目如下 在一个 m n 的棋盘的每一格都放有一个礼物 每个礼物都有一定的价值 价值大于 0 你可以从棋盘的左上角开始拿格子里的礼物 并每次向右或者向下移动一格 直到到达棋盘的右下角 给定一个棋盘及其上面的礼物的价值 请计算你最多能拿到多少
  • VMware 搭建私有云

    我们的目的是在VMware workstation 上安装Centos 7系统 并配置用远程桌面访问虚拟机 在虚拟机上安装Centos 7 首先按照老师给出的博客 VirtualBox 安装 Centos 7 笔记 进行安装 博主使用的是v
  • MPU6050 加速度计和陀螺仪传感器与 Arduino 连接

    MPU6050 加速度计和陀螺仪传感器与 Arduino 连接 前言 MPU6050 模块引脚 MPU6050 模块组成 MPU6050陀螺仪传感器模块电路图 MPU6050模块如何工作 MEMS加速度计如何工作 MEMS陀螺仪如何工作 常