微型四轴设计之通过arduino读取MPU6050原始数据

2023-05-16

概述


  • 打算自己选型配件、画PCB以及焊元件,制作一个微型四轴飞行器。
  • 主控板打算使用stm32,此处使用arduino来读取mpu6050只是为了便于开发和调试(arduino的串口监视器用起来很方便,便于打印输出调试信息到电脑),同时熟悉一下mpu6050的使用流程。

开发环境


  • 操作系统:windows 10
  • IDE:arduino 1.8.3
  • 开发板:Arduino/Genuino Uno(seeedstudio与Arduino LLC为中国爱好者定制的中文版的开发板,与市面常见的Arduino Uno R3基本没什么区别)
  • 六轴传感器模块:MPU6050

接线说明


  • 具体接线如表所示。arduino开发板需要通过usb线与电脑相连。mpu6050的AD0引脚暂时不需要考虑接线(实际测试过,这个引脚拉低或不接对结果无影响)。

    arduino引脚mpu6050引脚
    GNDGND
    3.3VVCC
    SCLSCL
    SDASDA
  • 此处附上实物图
    mpu6050接线
    arduino接线1
    arduino接线2

程序流程


初始化I2C和串口

void setup() {
  Wire.begin();//默认作为master设备打开
  Serial.begin(9600);//串口通讯的波特率设置为9600
}

使MPU6050开始工作

  • 为了使MPU6050开始工作,需要向MPU6050的0x6B寄存器写入0数据(最开始照着别人的例程写的时候,把0x6b错看成0x68(大写的B和8好难分清),最后读取的结果要么是0要么是-1)
Wire.beginTransmission(0x68);//MPU6050对应的I2C slave设备地址是0x68
Wire.write(0x6b);//写入下一步要写的寄存器地址0x6b
Wire.write(0);//向0x6b寄存器写入0,使MPU6050开始工作
Wire.endTransmission(true);

读取数据

  • 一共需要读取7个寄存器的数据,每个寄存器均为16位的,所以一共是14个字节。
  • 7个寄存器分别保存的是x、y、z方向的加速度,温度,x、y、z方向的角速度。
  • 7个寄存器地址分别是0x3b、ox3d、0x3f、0x41、0x43、0x45和0x47(按照字节编址,每个寄存器两个字节,7个寄存器位于连续存储空间)。
  int x,y,z = 0;//用来保存加速度数据
  int t = 0;//用来保存温度数据
  int a,b,c = 0;//用来保存角速度数据
  Wire.beginTransmission(0x68);
  Wire.write(0x3B);//写入要读取的寄存器的起始地址0x3B
  Wire.requestFrom(0x68, 14, true);//以该地址为起始地址,依次读取14个字节的数据到缓冲区
  Wire.endTransmission(true);

源码


此处给出完整源码。

#include <Wire.h>

void setup() {
  // put your setup code here, to run once:
  Wire.begin();//默认作为master设备打开
  Serial.begin(9600);//串口通讯的波特率设置为9600
  Wire.beginTransmission(0x68);//MPU6050对应的I2C slave设备地址是0x68
  Wire.write(0x6B);//写入下一步要写的寄存器地址0x6b
  Wire.write(0);//向0x6b寄存器写入0,使MPU6050开始工作
  Wire.endTransmission(true);
}

void loop() {
  int x,y,z = 0;//用来保存加速度数据
  int t = 0;//用来保存温度数据
  int a,b,c = 0;//用来保存角速度数据
  Wire.beginTransmission(0x68);
  Wire.write(0x3B);//写入要读取的寄存器的起始地址0x3B
  Wire.requestFrom(0x68, 14, true);//以该地址为起始地址,依次读取14个字节的数据到缓冲区
  Wire.endTransmission(true);
  x = Wire.read() << 8 | Wire.read();//每次从缓冲区读取一个字节,先读高字节,再读低字节,高字节左移八位,低位补0,再与低字节作或运算,即可得到一个寄存器(长度为2个字节)的完整数据
  y = Wire.read() << 8 | Wire.read();
  z = Wire.read() << 8 | Wire.read();
  t = Wire.read() << 8 | Wire.read();
  a = Wire.read() << 8 | Wire.read();
  b = Wire.read() << 8 | Wire.read();
  c = Wire.read() << 8 | Wire.read();
  Serial.print("Ax = ");//向串口打印输出结果
  Serial.print(x);
  Serial.print('\t');
  Serial.print("Ay = ");
  Serial.print(y);
  Serial.print('\t');
  Serial.print("Az = ");
  Serial.print(z);
  Serial.print('\t');
  Serial.print("temperature = ");
  Serial.print(t);
  Serial.print('\t');
  Serial.print("Cx = ");
  Serial.print(a);
  Serial.print('\t');
  Serial.print("Cy = ");
  Serial.print(b);
  Serial.print('\t');
  Serial.print("Cz = ");
  Serial.println(c);
  delay(20);
}

结果截图


  • 打开arduino IDE的【工具】–>【串口监视器】(设置波特率为9600),编译并上传程序到开发板,可以查看读取的数据。
    串口监视器的输出结果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微型四轴设计之通过arduino读取MPU6050原始数据 的相关文章

随机推荐

  • spring mvc 配置总结

    1 spring mvc的配置文件 2 Spring Mvc 3 1 之后如何配置messageConverters 3 Spring aop 原理及各种应用场景
  • 【Latex】中插入图片(Excel和Visio绘制)不失真的方法

    一开始用Latex写论文不懂 xff0c 用Visio和Excel绘制图片之后直接用截图工具截取后存为 png格式之后就往Latex中插入 xff0c 结果图片严重失真 xff0c 后来问过师兄后得到大致的过程 xff0c 摸索后成功 xf
  • SSL证书类型

    按适用域名数量分类有 xff1a 通配符型SSL证书 万能型SSL证书 单域名SSL证书 多域名SSL证书 通配型SSL证书 xff1a 也称为泛域名证书 xff0c 可以同时适用于多个子域名 xff0c 可以匹配 domain com 万
  • Maven的pom.xml介绍

    6 1 简介 pom xml文件是 Maven进行工作的主要配置文件 在这个文件中我们可以配置 Maven项目的 groupId artifactId和 version等 Maven项目必须的元素 xff1b 可以配置 Maven项目需要使
  • 使用简单的wcf文件实现上传,下载文件到服务器

    wcf是微软开发出的用户数据通信的app接口 xff0c 在 net framework3 0中与wpf xff0c wf一同集成 xff0c 是 net框架的一部分 具体请参见点击打开链接 本文主要讲述了使用wcf服务契约来进行文件或者数
  • mysql添加用户和权限

    用户管理 mysql gt use mysql 查看 mysql gt select host user password from user 创建 mysql gt create user 用户名 IDENTIFIED by 39 用户密
  • MacBook Pro(M1)安装mysql

    1 下载 网址 xff1a mysql com 2 选择社区版本 3 MySQL Community Server 版本 兼容性说明 xff1a 适配 macOS 10 15 版本 xff0c 但上面有说明 xff0c 可运用于 Big S
  • MySQL进阶-监控、高可用

    MySQL监控 1 常见的监控方式 一般来说 xff0c 常见的监控方式主要有如下三种 xff1a 监控方式特点优点缺点工具 脚本自己编写工具或脚本 xff0c 适合初期机器很少的生产环境在企业初期可以快速满足监控需求后期部署和维护成本大商
  • Druid+Commons DBUtils基本使用

    Druid 1 jar包下载 xff1a https github com alibaba druid releases 2 导入jar包 2 1创建lib文件夹 xff0c 复制粘贴进去 2 2 2 3 3 创建配置文件 文件名称 xff
  • MAC安装maven及每次启动需要刷新bash_profile问题

    1 下载 网址 xff1a https maven apache org download cgi 2 解压安装 选择一个目录 示例 xff1a Users i18 apache maven 3 8 1 3 配置变量 vim span cl
  • win10解压安装mysql方法及遇见的问题(缺少MSVCR120.dll文件、服务无法启动)

    WIN10系统MYSQL的下载与安装详细教程 第一步 xff1a 下载 MySQL 下载地址 xff1a https dev mysql com downloads mysql 5 1 html downloads 具体过程如下 xff1a
  • 基于select函数实现的tcp简单服务器

    select 实现 tcp demo 回忆TCP的连接过程selectselect 的封装tcp类的封装程序流程 程序cli cpp 客户端建立连接SelectSvr hpp 服务器的头文件Tcpsvr hppmain cpp 主函数mak
  • 【odroid-xu3】 ODROID-XU3软件环境搭建记录

    原文链接 xff1a http blog csdn net aganlengzi article details 50036951 1 操作系统环境准备 我用的是Ubuntu12 04 xff0c 但是建议用更高的版本 按照android官
  • D435i相机首次开发与踩坑记录

    D435i相机首次开发与踩坑记录 介绍 配置完D435i相机的开发环境后开始尝试研究官方例程 xff0c 试着运行一些demo初入intel相机 开始的时候也是很头疼 xff0c 不知道如何下手 xff0c 看了众多博客后稍微有了一些眉目
  • 单片机串口收发字符数据的类型

    今天在用51单片机进行串口收发数据的时候遇到了这样一个问题 xff0c 上位机给单片机的字符数据是什么类型的 xff0c 单片机又是怎样存储的 xff1f 串口中断如下 UART中断服务函数 void InterruptUART inter
  • cmake之链接外部动态库

    cmake不再使你在构建项目时郁闷地想自杀了 xff0d xff0d 佚名KDE开发者 xff11 xff0e 写在开头 有两种方式 xff0c 一种是cmake自己内置的find package 另一种是使用pkg config 2 fi
  • 一帧CAN数据需要多长时间发送

    1 CAN通讯速率 默认 500kbit s xff1b 2 xff1a 从下图CAN数据包的完整结构可知 xff0c 一包完整的扩展帧CAN数据总共包含 128bit xff1b 3 xff1a 发送一帧扩展帧CAN数据耗时 128 50
  • 在单片机中什么是堆栈?它的作用是什么?

    在片内RAM中 xff0c 常常要指定一个专门的区域来存放某些特别的数据 它遵循顺序存取和后进先出 LIFO FILO 的原则 这个RAM区叫堆栈 子程序调用和中断服务时CPU自动将当前PC值压栈保存 xff0c 返回时自动将PC值弹栈 保
  • 初识Java内部类

    初识Java内部类原创 xff1a morgan83 提起Java内部类 xff08 Inner Class xff09 可能很多人不太熟悉 xff0c 实际上类似的概念在C 43 43 里也有 xff0c 那就是嵌套类 xff08 Nes
  • 微型四轴设计之通过arduino读取MPU6050原始数据

    概述 打算自己选型配件 画PCB以及焊元件 xff0c 制作一个微型四轴飞行器 主控板打算使用stm32 xff0c 此处使用arduino来读取mpu6050只是为了便于开发和调试 xff08 arduino的串口监视器用起来很方便 xf