Arduino中使用库文件读取陀螺仪MPU6050欧拉角

目录

1、库文件安装

(1)方法1-网上下载库文件

(2)方法2-本地库文件夹中添加

2、欧拉角获取

(1)打开测试程序

(2)读欧拉角程序

(3)坐标系和欧拉角说明

(4)串口数据读取

3、代码

4、下载链接


1、库文件安装

(1)方法1-网上下载库文件

在库中搜索mpu6050,然后安装它

找到如图所示的版本进行安装

(2)方法2-本地库文件夹中添加

找到方法1中下载的压缩文件

如果找不到可以点击本链接,下载

https://download.csdn.net/download/panjinliang066333/89791896

解压后将文件夹复制到如下文件路径,重启软件即可。

重新启动Arduino软件,即可找到MPU6050库文件提供的案例

2、欧拉角获取

(1)打开测试程序

打开例子,使用例子需要做一点修改。或者下载下面改好的例子

https://download.csdn.net/download/panjinliang066333/89791896

(2)读欧拉角程序

(3)坐标系和欧拉角说明

(4)串口数据读取

3、代码

#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE#include "Wire.h"
#endifMPU6050 mpu;#define OUTPUT_READABLE_YAWPITCHROLL
#define INTERRUPT_PIN 2  
#define LED_PIN 13 
bool blinkState = false;// MPU control/status vars
bool dmpReady = false;  // set true if DMP init was successful
uint8_t mpuIntStatus;   // holds actual interrupt status byte from MPU
uint8_t devStatus;      // return status after each device operation (0 = success, !0 = error)
uint16_t packetSize;    // expected DMP packet size (default is 42 bytes)
uint16_t fifoCount;     // count of all bytes currently in FIFO
uint8_t fifoBuffer[64]; // FIFO storage buffer// orientation/motion vars
Quaternion q;           // [w, x, y, z]         quaternion container
VectorInt16 aa;         // [x, y, z]            accel sensor measurements
VectorInt16 aaReal;     // [x, y, z]            gravity-free accel sensor measurements
VectorInt16 aaWorld;    // [x, y, z]            world-frame accel sensor measurements
VectorFloat gravity;    // [x, y, z]            gravity vector
float euler[3];         // [psi, theta, phi]    Euler angle container
float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector// packet structure for InvenSense teapot demo
uint8_t teapotPacket[14] = { '$', 0x02, 0,0, 0,0, 0,0, 0,0, 0x00, 0x00, '\r', '\n' };// ================================================================
// ===               INTERRUPT DETECTION ROUTINE                ===
// ================================================================volatile bool mpuInterrupt = false;     // indicates whether MPU interrupt pin has gone high
void dmpDataReady() 
{mpuInterrupt = true;
}void setup() 
{// join I2C bus (I2Cdev library doesn't do this automatically)#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIREWire.begin();Wire.setClock(400000); // 400kHz I2C clock. Comment this line if having compilation difficulties#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIREFastwire::setup(400, true);#endifSerial.begin(115200);while (!Serial); Serial.println(F("Initializing I2C devices..."));mpu.initialize();pinMode(INTERRUPT_PIN, INPUT);Serial.println(F("Testing device connections..."));Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));Serial.println(F("\nSend any character to begin DMP programming and demo: "));while (Serial.available() && Serial.read()); // empty bufferwhile (!Serial.available());                 // wait for datawhile (Serial.available() && Serial.read()); // empty buffer again// load and configure the DMPSerial.println(F("Initializing DMP..."));devStatus = mpu.dmpInitialize();// supply your own gyro offsets here, scaled for min sensitivitympu.setXGyroOffset(220);mpu.setYGyroOffset(76);mpu.setZGyroOffset(-85);mpu.setZAccelOffset(1788); // 1688 factory default for my test chip// make sure it worked (returns 0 if so)if (devStatus == 0) {// Calibration Time: generate offsets and calibrate our MPU6050mpu.CalibrateAccel(6);mpu.CalibrateGyro(6);mpu.PrintActiveOffsets();// turn on the DMP, now that it's readySerial.println(F("Enabling DMP..."));mpu.setDMPEnabled(true);// enable Arduino interrupt detectionSerial.print(F("Enabling interrupt detection (Arduino external interrupt "));Serial.print(digitalPinToInterrupt(INTERRUPT_PIN));Serial.println(F(")..."));attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING);mpuIntStatus = mpu.getIntStatus();Serial.println(F("DMP ready! Waiting for first interrupt..."));dmpReady = true;packetSize = mpu.dmpGetFIFOPacketSize();} else {Serial.print(F("DMP Initialization failed (code "));Serial.print(devStatus);Serial.println(F(")"));}// configure LED for outputpinMode(LED_PIN, OUTPUT);
}void loop() 
{// if programming failed, don't try to do anythingif (!dmpReady) return;// read a packet from FIFOif (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) { // Get the Latest packet #ifdef OUTPUT_READABLE_QUATERNION// display quaternion values in easy matrix form: w x y zmpu.dmpGetQuaternion(&q, fifoBuffer);Serial.print("quat\t");Serial.print(q.w);Serial.print("\t");Serial.print(q.x);Serial.print("\t");Serial.print(q.y);Serial.print("\t");Serial.println(q.z);#endif#ifdef OUTPUT_READABLE_EULER// display Euler angles in degreesmpu.dmpGetQuaternion(&q, fifoBuffer);mpu.dmpGetEuler(euler, &q);Serial.print("euler\t");Serial.print(euler[0] * 180/M_PI);Serial.print("\t");Serial.print(euler[1] * 180/M_PI);Serial.print("\t");Serial.println(euler[2] * 180/M_PI);#endif#ifdef OUTPUT_READABLE_YAWPITCHROLL// display Euler angles in degreesmpu.dmpGetQuaternion(&q, fifoBuffer);mpu.dmpGetGravity(&gravity, &q);mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);Serial.print("ypr\t");Serial.print(ypr[0] * 180/M_PI);Serial.print("\t");Serial.print(ypr[1] * 180/M_PI);Serial.print("\t");Serial.println(ypr[2] * 180/M_PI);#endif#ifdef OUTPUT_READABLE_REALACCEL// display real acceleration, adjusted to remove gravitympu.dmpGetQuaternion(&q, fifoBuffer);mpu.dmpGetAccel(&aa, fifoBuffer);mpu.dmpGetGravity(&gravity, &q);mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);Serial.print("areal\t");Serial.print(aaReal.x);Serial.print("\t");Serial.print(aaReal.y);Serial.print("\t");Serial.println(aaReal.z);#endif#ifdef OUTPUT_READABLE_WORLDACCEL// display initial world-frame acceleration, adjusted to remove gravity// and rotated based on known orientation from quaternionmpu.dmpGetQuaternion(&q, fifoBuffer);mpu.dmpGetAccel(&aa, fifoBuffer);mpu.dmpGetGravity(&gravity, &q);mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);mpu.dmpGetLinearAccelInWorld(&aaWorld, &aaReal, &q);Serial.print("aworld\t");Serial.print(aaWorld.x);Serial.print("\t");Serial.print(aaWorld.y);Serial.print("\t");Serial.println(aaWorld.z);#endif#ifdef OUTPUT_TEAPOT// display quaternion values in InvenSense Teapot demo format:teapotPacket[2] = fifoBuffer[0];teapotPacket[3] = fifoBuffer[1];teapotPacket[4] = fifoBuffer[4];teapotPacket[5] = fifoBuffer[5];teapotPacket[6] = fifoBuffer[8];teapotPacket[7] = fifoBuffer[9];teapotPacket[8] = fifoBuffer[12];teapotPacket[9] = fifoBuffer[13];Serial.write(teapotPacket, 14);teapotPacket[11]++; // packetCount, loops at 0xFF on purpose#endif// blink LED to indicate activityblinkState = !blinkState;digitalWrite(LED_PIN, blinkState);}delay(1000);
}

4、下载链接

https://download.csdn.net/download/panjinliang066333/89791896

参考

https://zhuanlan.zhihu.com/p/710727388

mpu6050陀螺仪计角度的精准实现方法,基于arduino实现_failed to find mpu6050 chip-CSDN博客

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

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

相关文章

征才令!开物™创新论文激励计划,等你来大展身手

背景介绍 随着云计算、人工智能的迅猛发展,现有的IT系统变得日益复杂,网络技术亟需创新才能满足现代数据中心、智算中心的网络需求。在这一背景下,被定义为“未来数据中心第三颗主力芯片”的DPU崭露头角,成为未来网络技术的发展方…

iOS V2签名网站系统源码 开源免授权

简介 这是一款iOS 签名站的开源源码,免去了授权,它支持UDID获取、软件选择以及签名码功能。 同时,用户可以多开APP进行安装。这是一个自主可下载的版本,感兴趣的用户可以自行获取。 界面

aws s3 存储桶 前端组件上传简单案例

写一个vue3 上传aws oss存储的案例 使用到的插件 npm install aws-sdk/client-s3 注意事项 : 1. 本地调试 , 需要设置在官网设置跨域 必须!!! 否则调试不了 ,前端代理是不起作用的 ,因为是插…

【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 一:单例模式(singleton) 1:概念 二:“饿汉模…

JavaEE——多线程Thread 类及常见方法

目录 一、Thread(String name) 二、是否后台线程 isDeamon() 三、是否存活 isAlive() 四、run()方法和start()方法的区别 五、中断线程 法一: 法二: 六、线程等待join() 七、线程休眠sleep() 一、Thread(String name) 定义:这个东西…

期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟

在 AI 程序员的帮助下,一个几乎没有专业编程经验的初中生,在人头攒动的展台上从零开始,两分钟就做出了一个倒计时网页。 他需要做的,只是输入包含几句话的提示词。数秒钟后,大模型就生成了代码,还列出了环…

​地质图制图规范大全资料分享

我们在《2024年最新测绘地理信息规范在线查看下载》一文整理460个测绘地理信息相关规范的在线查看链接。 现在我们又整理了地质图制图规范大全分享给大家,你可以在文末查看该文档的领取方法。 地质图制图规范大全 这些地质图制图规范来自地质科学数据出版系统&am…

基于 IV 的因果中介分析模型及 Stata 实现

目录 一、文献综述 二、理论原理 三、实证模型 四、稳健性检验 五、程序代码及解释 一、文献综述 因果中介分析在众多学科领域中都占据着关键地位,其重要性日益凸显。在社会科学领域,如经济学和社会学中,研究者们常常致力于揭示各种因素之…

深度学习实战:UNet模型的训练与测试详解

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 1、云实例:配置选型与启动1.1 登录注册1.2 配置 SSH 密钥对1.3 创建实例1.4 登录云实例 2、云存储:数据集上传…

vue2 搜索高亮关键字

界面&#xff1a; 搜索 “成功” 附上代码&#xff08;开箱即用&#xff09; <template><div class"box"><input class"input-box" v-model"searchKeyword" placeholder"输入搜索关键字" /><div class"r…

tauri开发软件中,使用tauri自带的api用浏览器打开指定的url链接

有能力的可以看官方文档&#xff1a;shell | Tauri Apps 就是使用这个api来打开指定的url链接&#xff0c;要在tauri.config.json中配置打开这个api&#xff1a; 然后在前端页面中导入使用&#xff1a; import { open } from tauri-apps/api/shell; // opens the given URL o…

年轻用户对Facebook的使用趋势分析

在社交媒体的蓬勃发展中&#xff0c;Facebook作为全球最大的社交平台之一&#xff0c;尽管面临着来自新兴平台的竞争&#xff0c;仍然在年轻用户中扮演着重要角色。然而&#xff0c;年轻用户对Facebook的使用方式和趋势却在不断变化。本文将探讨年轻用户对Facebook的使用趋势&a…

代码随想录算法训练营Day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

目录 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度 226.翻转二叉树 题目 226. 翻转二叉树 - 力扣&#xff08;LeetCode&#xff09; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例1&#…

Redis 篇-深入了解 Redis 五种数据类型和底层数据结构(SDS、Intset、Dict、ZipList、SkipList、QuickList)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Redis 底层数据结构 1.1 Redis 数据结构 - 动态字符串 SDS 1.2 Redis 数据结构 - Intset 1.3 Redis 数据结构 - Dict 1.3.1 Dict 的渐进式 rehash 1.4 Redis 数据…

双主轴精密纵切数控车床

双主轴精密纵切数控车床&#xff0c;作为一种先进的机械加工设备&#xff0c;融合了高精度、高效率与多功能性于一身&#xff0c;广泛应用于航空、航天、汽车、摩托车、通讯、制冷、光学、家电、微电子等多个行业。下面&#xff0c;我将从几个关键方面为您详细介绍这种机床的特…

DK5V100R10S 双引脚同步整流芯片12V 4A,10mΩ

DK5V100R10S是一款简单高效率的同步整流芯片&#xff0c;只有A&#xff0c;K两个引脚&#xff0c;分别对应肖特基二极管的PN管脚。芯片内部集成了100V功率NMOS管&#xff0c;可以大幅降低二极管导通损耗&#xff0c;提高整机效率&#xff0c;取代或替换目前市场上等规的肖特基整…

windows桌面管理软件推荐:一键整理桌面!美化电脑桌面小助手!

windows桌面管理软件推荐来咯&#xff01;在繁忙的工作和生活中&#xff0c;一个整洁、有序的电脑桌面不仅能提升工作效率&#xff0c;还能带来愉悦的视觉体验。然而&#xff0c;随着文件的增多&#xff0c;桌面往往变得杂乱无章。幸运的是&#xff0c;市面上有许多优秀的Windo…

用ArcMap实现可视域分析

在 ArcToolbox>>3D Analyst>>可见性>>视域&#xff0c;输入值如图所示&#xff1a; 设置完成后点击确认&#xff0c;生成可视域分析图层 Viewshe1&#xff0c;由内容列表 可见&#xff0c;红色为不可见&#xff0c;绿色为可见。 改变观察点的高度&#xff1a…

喜报 | 众数信科荣获2024年“火炬瞪羚企业”称号

近日&#xff0c;厦门火炬高新区公布2024年“火炬瞪羚企业”名单&#xff0c;众数&#xff08;厦门&#xff09;信息科技有限公司凭借在AI领域的综合实力、技术创新及典型场景应用等方面的卓越表现&#xff0c;成功入选。 瞪羚企业 一般指高成长性科技型企业&#xff0c;是跨过…

寄宿制学校自闭症教育:为每个孩子创造奇迹

寄宿制学校自闭症教育&#xff1a;星贝育园——为每个孩子创造奇迹 在自闭症儿童教育的广阔领域中&#xff0c;寄宿制学校以其独特的教育模式和全方位的关怀体系&#xff0c;正逐步成为推动这些特殊孩子成长与发展的重要力量。广州的星贝育园自闭症儿童寄宿制学校&#xff0c;…