第十五篇、基于Arduino uno,获取mpu6050三轴加速度、角速度、温度的数据——结果导向

news2024/10/5 17:21:47

0、结果

 说明:先来看看串口调试助手显示的结果,第一个值是温度值,第二个值是X轴的加速度,第三个值是Y轴的加速度,第四个值是Z轴的加速度,第五个值是X轴的角速度,第六个值是Y轴的角速度,第七个值是Z轴的角速度,如果是你想要的,可以接着往下看。


1、外观

 说明:虽然mpu6050传感器形态各异,但是原理和代码都是适用的。


2、连线

 说明:只需要连接四根线。
uno————mpu6050传感器

  3.3V------VCC
  GND------GND
  SCL------SCL
  SDA------SDA

3、源程序

说明:采用非阻塞方式编写,一定时间获取一次数据,并将对应功能进行函数化,方便移植。

/****************************************mpu6050 part****************************************/
/*
  接线:
  VCC------VCC
  GND------GND
  SCL------SCL
  SDA------SDA
*/
#include <Adafruit_MPU6050.h>                                                 //include library
#include <Adafruit_Sensor.h>                                                  //include library
#include <Wire.h>                                                             //include library

Adafruit_MPU6050 mpu;                                                         //Instantiate object
#define mpu6050TimeInterval 100                                               //Detect the time interval of a trip
unsigned long mpu6050Times = 0;                                               //Record the device running time
float mpu6050Temp = 0;                                                        //Define a variable
float xAcceleration , yAcceleration , zAcceleration ;                         //Define three variables
float xAccele , yAccele , zAccele ;                                           //Define three variables
float xGyro = 0, yGyro = 0, zGyro = 0;                                        //Define three variables
float gravity = 9.8;                                                          //Define a variable
/****************************************set up and loop part*********************************/
void setup(void) {
  Serial.begin(9600);                                                         //Example Set the baud rate of the serial port to 9600

  if (!mpu.begin()) {                                                         // Try to initialize!
    while (millis() - 1000) {                                                 //Wait for the device to come online
      Serial.println("Failed to find MPU6050 chip");
    }
  }
  mpu.setAccelerometerRange(MPU6050_RANGE_16_G);                              //Set the accelerometer range
  mpu.setGyroRange(MPU6050_RANGE_250_DEG);                                    //Set the gyroscope range
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);                                 //Set filtering bandwidth

  Serial.println("Go online!");
}
void loop() {
  getMpu6050Data();                                                           //Obtain data about the mpu6050
}
/****************************************mpu6050 part****************************************/
/*Obtain data about the mpu6050*/
void getMpu6050Data() {
  if (millis() - mpu6050Times >= mpu6050TimeInterval) {                       //This command is executed once in a while
    mpu6050Times = millis();
  
    sensors_event_t a, g, temp;                                               //Set three variables
    mpu.getEvent(&a, &g, &temp);                                              //Read the corresponding three values

    mpu6050Temp = temp.temperature;                                           //Acquired temperature

    xAcceleration = a.acceleration.x ;                                        //Acquired acceleration
    yAcceleration = a.acceleration.y ;                                        //Acquired acceleration
    zAcceleration = a.acceleration.z ;                                        //Acquired acceleration

    xAccele = xAcceleration / gravity;                                        //Convert the units of acceleration into g
    yAccele = yAcceleration / gravity;                                        //Convert the units of acceleration into g
    zAccele = zAcceleration / gravity;                                        //Convert the units of acceleration into g

    xGyro = g.gyro.x;                                                         //Acquired angular velocity
    yGyro = g.gyro.y;                                                         //Acquired angular velocity
    zGyro = g.gyro.z;                                                         //Acquired angular velocity

    Serial.print("Temp: ");
    Serial.print(mpu6050Temp);                                                //Serial print temperature
    Serial.print(" , x-accele: ");
    Serial.print(xAccele);                                                    //Serial print acceleration
    Serial.print(" , y-accele: ");
    Serial.print(yAccele);                                                    //Serial print acceleration
    Serial.print(" , z-accele: ");
    Serial.print(zAccele);                                                    //Serial print acceleration

    Serial.print(" , x-gyro:");
    Serial.print(xGyro);                                                      //Serial port print angular speed
    Serial.print(" , y-gyro:");
    Serial.print(yGyro);                                                      //Serial port print angular speed
    Serial.print(" , z-gyro:");
    Serial.println(zGyro);                                                    //Serial port print angular speed
  }
}

4、注意事项

说明:需要下载对应的库文件才不会编译报错。建议使用2.5V~3.6V的电源。实际使用过程中温度数据和加速度可能会有一些些误差,在MPU6050使用的过程中,需要确保其固定稳定,避免因振动或者位移导致读数不准确

5、基本原理

        MPU6050是一种常用的带有三轴加速度计和三轴陀螺仪的MEMS传感器,可以通过I2C总线与Arduino进行通信,在Arduino中使用MPU6050传感器需要注意一些细节和性能参数。
        工作原理方面,MPU6050的加速度计基于微机电系统(MEMS)技术,使用微小的机械结构和电子元件来测量物体在三个方向(X、Y、Z轴)上的加速度,通过自身的电路进行处理和放大后,输出测量到的加速度值。
        陀螺仪则利用了光电陀螺的原理,通过测量振动捕捉器或旋转体在三轴方向上的震荡运动,来记录物体在三个方向上的角速度,同样也是X、Y和Z轴方向上的角速度值。通常,陀螺仪的精度比加速度计高,但是更容易受到噪声和温度的影响。
        在Arduino中使用MPU6050传感器,我们需要先将其正确连接到Arduino板上,并设置相应的采样参数和滤波带宽参数。通过读取MPU6050传感器测量到的X、Y、Z轴方向上的加速度和角速度值,我们可以根据这些数据计算和分析物体的倾斜角度、运动方式等信息,以应用于各种实际应用场景中。
        需要注意的是,由于MPU6050传感器的测量精度和稳定性受到多种因素的影响,如传感器的校准、采样频率、运动状态等,因此在使用时还需要进行相应的校准和优化,以提高数据的准确性和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/598802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++库函数——string类

1. 简介 ①什么是string类 源文档 译&#xff1a; 1. 字符串是表示字符序列的类 2. 标准的字符串类提供了对此类对象的支持&#xff0c;其接口类似于标准字符容器的接口&#xff0c;但添加了专门用于操作单字节字符字符串的设计特性。 3. string 类是使用 char( 即作为它…

【六一】90后的你们还记得年少时的梦吗?还记得你们当初追的奥特曼吗?现在就让我们一起回味我们逝去的曾经吧!

迎面走来的是我们从未正式出过剧集&#xff0c;并附有“反派”盛名的大哥&#xff01;佐~~菲~~&#xff01; 还记得第一个登场&#xff0c;第一个进入我们的视野的那位吗&#xff1f;没错&#xff0c;那就是奥特曼 我的最爱~~~~~赛文&#xff01; 一度以为&#xff0c;曾经的那…

Bellhop 绘制传播损失

文章目录 前言一、相干传播损失&#xff08;TL&#xff09;基本算例1、环境文件2、绘制相干传播损失 二、相干、半相干和非相干传播损失&#xff08;TL&#xff09; 前言 上文我们讲述了 Bellhop 的使用以及使用 bellhop 绘制了声速剖面、声线轨迹及本证声线&#xff0c;本文我…

【SpringMVC】入门案例

前言: SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&#xff0c;是对Servlet进行了封装。 对于SpringMVC我们主要学习如下内容: SpringMVC简介请求与响应REST风格SSM整合(注解版)拦截器 SpringMVC是处于Web层的框架&#xff0c;所以其主要的作用…

用户验证FTP实验

用户FTP实验 目录 匿名用户验证&#xff1a; 本地用户验证&#xff1a; 本地用户访问控制&#xff1a; 匿名用户验证&#xff1a; 例&#xff1a;&#xff08;前提配置&#xff0c;防火墙关闭&#xff0c;yum安装&#xff0c;同模式vmware11&#xff09; 现有一台计算机huy…

数据结构算法-图技术点(图的算法实现)

先看 定义邻接表 //边 struct Edge {int AdjVertex;//邻接顶点int Weight;//权值Edge* next;//下一条边 };using VertexValue use define//顶点 struct Vertex {VertexValue value; // 顶点数据Edge* First;//获取第一条边 }; //邻接顶点 using AdjVertex Vertex*; //邻接…

自动驾驶嵌入式开发工程师:车载SOC开发修炼秘籍

声明&#xff1a;本文档是博主在开发学习过程中写的笔记&#xff0c;本意是便于以后开发复盘&#xff0c;参考《 ug1144-petalinux-tools-reference-guide》、《ug1085》、黑金Zynq UltraScale MPSoC 5EV开发板资料、英伟达官方资料。大佬勿喷 大佬勿喷 大佬勿喷&#xff01;&a…

【资料分享】RS-485 串行接口说明

面对大量可用的串行接口&#xff0c;可能很难理解它们之间的差异以及何时使用它们。正如我最喜欢的工程学教授经常说的那样&#xff0c;“标准的美妙之处在于有很多标准可供选择。” 今天的编码器比以往任何时候都更智能、更先进&#xff0c;要求工程师放弃更简单的正交增量传感…

智能网联环境下数据安全分析与建设思考

01安全概况 随着智能化程度不断提升&#xff0c;汽车正逐渐从传统意义上的交通工具演化为公路上的智能终端&#xff0c;核心部件也从发动机、变速箱、底盘上升为芯片、软件与数据。相关机构研究表明&#xff0c;目前全球市场搭载智能网联功能的新车渗透率约为45%&#xff0c;预…

160个CrackMe之001

吾爱中的逆向练习题 运行程序 有两个方式 一个是账号登入 一个是序列号输入 账号输入 方法一 爆破 我们先进行账号输入 这个是最简单的逆向 所以我们可以使用 字符串查找看看 先试用ollydbg打开 右键 ->查找 ->所有参考文本字符串 这里我们能发现有两个报错 我们还…

《C++ deque的介绍以及stackh和queue的模拟实现》

文章目录 一、容器适配器1.1 什么是适配器1.2 STL中stack和queue的底层结构1.3 deque的简单介绍1.3.1 deque的原理介绍1.3.2 deque的结构1.3.3 deque和vector以及list的对比1.3.4 为什么选择deque作为stack和queue的适配容器 二、stack的模拟实现三、queue的模拟实现 一、容器适…

5个超实用视频素材网站,免费下载~

推荐几个高清无水印的视频素材网站&#xff0c;重点是可以免费下载使用&#xff0c;建议收藏&#xff01; 菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 可以称之为最大素材库&#xff0c;在这里你可以找到设计、办公、图片、视频、音频等各种素材。视频素材就有…

基于Nginx搭建LNMP

目录 一&#xff1a;安装 Nginx 服务 1、关闭防火墙、安装依赖包 2、创建运行用户 3、压缩包编译安装 4、优化路径 5、添加 Nginx 系统服务 二&#xff1a; 安装 MySQL 服务 1、安装Mysql环境依赖包 2、创建运行用户 3、编译安装 4、修改mysql 配置文件 5、更改mysql安装…

网络通信:http协议

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议) 就是其中之一. 认识URL 统一资源定位符(Uniform Resource Locator&#xff0c;缩写&#xff1a;URL)&#xff0c;…

springboot + vue3实现视频播放Demo(video.js Vue3-video-play视频播放器)

文章目录 学习链接前言ffmpeg安装ffmpeg配置环境变量分割视频文件 后台配置WebConfig 前端代码video.js示例安装依赖视频播放组件效果 Vue3-video-play示例安装依赖main.js中使用视频播放组件效果 学习链接 ffmpeg官网 长时长视频java存储及vue播放解决方法 【 攻城略地 】vue…

AKStream部署1:ZLMediaKit流媒体服务器(win)

环境准备&#xff1a; windows10/11 visual stadio 2022(.net 6) cmake 3.22.0 git bash 没讲究直接下最新的 ffmpeg &#xff1a; ffmpeg-5.1.2-full_build VLC播放器&#xff1a;VLC media player ZLMediaKit&#xff1a;gitee地址 1、安装上述软件 例ffmpeg下载解压至某自定…

图片转pdf怎么转?一分钟解决

在日常生活中&#xff0c;我们常常需要将一些图片转换成PDF格式&#xff0c;以便于在电子设备上查看和分享。今天&#xff0c;我们将分享一些关于如何将图片转换成PDF的方法。 以下是三种常用的将图片转换成PDF的方法&#xff1a; 我们可以借助转换工具将图片转成PDF 如PDF转…

用esp8266连网的一些互联网知识

参考太极创客的课程资料添加链接描述 TCP/IP协议簇 在网络系统中&#xff0c;为了保证通信设备之间能正确地进行通信&#xff0c;必须使用一种双方都能够理解的语言&#xff0c;这种语言被称为“协议”。 TCP/IP协议簇是Internet的基础&#xff0c;也是当今最流行的组网形式…

数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)

目录 题目描述 输入示例 输出示例 数据结构的选择 核心算法 计算左子树的规模 思路 总结 题目描述 现给定一系列不同的非负整数键&#xff0c;如果要求构造出一颗完全二叉树&#xff0c;则可以构造唯一的二叉搜索树。输出此二叉搜索树的层序遍历序列。 完全二叉树 有n…

复习之linux系统中的权限管理

1.权限的查看及读取 &#xff08;1&#xff09;权限的查看 # ls -l file : 查看文件的权限 # ls -ld dir :查看目录权限 &#xff08;2&#xff09;权限的读取 文件的属性叫做文件的元数据。 元数据&#xff08;Metadata&#xff09;&#xff0c;又称中介数据、中继…