使用MPU6050陀螺仪自制Arduino数字量角器
MPU6050惯性单元是一个3轴加速度计和一个3轴陀螺仪组合的单元。它还包含温度传感器和DCM,可执行复杂的任务。 MPU6050通常用于制作无人机和其他远程控制机器人,如自平衡机器人。在本篇文章中,我们将使用MPU6050和Arduino开发板制作一款数字量角器。本文使用伺服电机在量角器上显示角度。伺服电机轴安装有指针,该指针可以在量角器上旋转,以指示角度,同时该角度值也显示在1602液晶显示屏上。在开始制作之前,让我们先了解陀螺仪传感器。
什么是加速度计和陀螺仪传感器?
加速度计用于测量加速度。它实际上可以感知到静态和动态加速度。例如,移动电话使用加速计传感器来感知移动设备处于横向模式或纵向模式。
陀螺仪用于测量角速度,该角速度使用地球的重力来确定运动中物体的方向。角速度是旋转体的角位置的变化率。
例如,今天的手机使用陀螺仪传感器根据手机的方向来玩手机游戏。此外,VR耳机使用陀螺仪传感器以360度方向观看。
因此,虽然加速度计可以测量线性加速度,但陀螺仪可以帮助找到旋转加速度。当将两个传感器用作单独的模块时,很难找到方向、位置和速度。但是通过组合这两个传感器,它可以作为惯性测量单元(IMU)。因此,在MPU6050模块中,加速度计和陀螺仪存在于单个PCB上,以找到方向、位置和速度。
常见的应用:
◾ 用于无人机的方向控制
◾ 自平衡机器人
◾ 机器人手臂控制
◾ 倾斜传感器
◾ 用于手机、视频游戏机
◾ 人形机器人
◾ 用于飞机、汽车等
MPU6050加速度计和陀螺仪传感器模块

MPU6050是一种微电子机械系统(MEMS),由3轴加速度计和3轴陀螺仪组成。它还有温度传感器。
它可以测量:
◾ 加速度
◾ 速度
◾ 方向
◾ 移位
◾ 温度
该模块内部还有一个(DMP)数字运动处理器,功能强大,可以执行复杂的计算,从而腾出微控制器的工作空间。
该模块还有两个辅助引脚,可用于连接外部IIC模块,如磁力计。由于模块的IIC地址是可配置的,因此可以使用AD0引脚将多个MPU6050传感器连接到微控制器。
功能和规格:
◾ 电源:3-5V
◾ 通信:I2C协议
◾ 内置16位ADC提供高精度
◾ 内置DMP提供高计算能力
◾ 可用于与磁力计等其他IIC设备连接
◾ 可配置的IIC地址
◾ 内置温度传感器
MPU6050的引脚说明:

|
引脚编号
|
引脚名称
|
引脚说明
|
| 1 | Vcc | 为模块供电,可以+3V至+5V。通常使用+5V |
| 2 | Ground | 连接到系统的接地 |
| 3 | Serial Clock (SCL) | 用于为I2C通信提供时钟脉冲 |
| 4 | Serial Data (SDA) | 用于通过I2C通信传输数据 |
| 5 | Auxiliary Serial Data (XDA) | 可用于将其他I2C模块与MPU6050连接。可选。 |
| 6 | Auxiliary Serial Clock (XCL) | 可用于将其他I2C模块与MPU6050连接。可选。 |
| 7 | AD0 | 如果MCU使用多个MPU6050,该引脚可用于更改地址 |
| 8 | Interrupt (INT) | 中断引脚,指示数据可供MCU读取。 |
所需的组件
● Arduino UNO
● MPU6050陀螺仪模块
● LCD显示屏1602
● SG90-伺服电机
● 量角器图片
电路原理图
这款自制的Arduino量角器的电路图如下:

Arduino UNO和MPU6050之间的电路连接如下:
|
MPU6050
|
Arduino UNO
|
|
VCC
|
+ 5V
|
|
GND
|
GND
|
|
SCL
|
A5
|
|
SDA
|
A4
|
Arduino UNO和伺服电机之间的电路连接如下:
|
伺服电机
|
Arduino UNO
|
|
红色线(VCC)
|
+ 5V
|
|
橙色线(PWM)
|
9
|
|
棕色线(GND)
|
GND
|

编程说明
本文末尾给出了完整的代码。这里伺服电机与Arduino连接,其轴投影在量角器图片上,表示倾斜的MPU6050的角度。本文的编程很简单。让我们详细看一下。
首先包括所有必需的库 - Servo库用于伺服电机,LiquidCrystal库用于LCD显示和wire库用于I2C通信。MPU6050使用I2C通信,因此必须连接到Arduino的I2C引脚。因此,Wire.h库用于建立Arduino UNO和MPU6050之间的通信。
#include <Servo.h>
#include <LiquidCrystal.h>
#include <Wire.h>
接下来定义连接到Arduino UNO的LCD显示引脚RS、E、D4、D5、D6、D7。
LiquidCrystal lcd(,,,,,);
定义MPU6050的I2C地址。
const int MPU_addr=0x68;
然后使用Servo类初始化myservo对象,以及定义三个变量来存储X轴、Y轴和Z轴的值。
Servo myservo;
int16_t axis_X,axis_Y,axis_Z;
将最小值和最大值设置为265和402,用于测量从0到360的角度。
int minVal=;
int maxVal=;
在void setup()函数中,首先启动I2C通信,并使用地址为0x68的MPU6050开始传输。
Wire.begin();
Wire.beginTransmission(MPU_addr);
通过写入0x6B将MPU6050置于休眠模式,然后通过写0唤醒它
Wire.write(0x6B);
Wire.write();
使MPU6050激活后,结束传输
Wire.endTransmission(true);
伺服电机的PWM引脚与Arduino UNO引脚9连接。
myservo.attach();
电路通电后,LCD就会显示一条欢迎信息,然后在3秒后清除
lcd.begin(,); //Sets LCD in 16X2 Mode
lcd.print("CIRCUIT DIGEST");
delay();
lcd.clear();
lcd.setCursor(,);
lcd.print("Arduino");
lcd.setCursor(,);
lcd.print("MPU6050");
delay();
lcd.clear();
在void loop()函数中 ,同样,首先MPU6050开始I2C通信。
Wire.beginTransmission(MPU_addr);
然后从寄存器0x3B(ACCEL_XOUT_H)开始
Wire.write(0x3B);
现在,通过以false设置结束传输将重新进程,但连接处于活动状态。
Wire.endTransmission(false);
之后,请求来自14个寄存器的数据。
Wire.requestFrom(MPU_addr,,true);
现在获得了轴寄存器值(x、y、z)并将其存储在变量axis_X、axis_Y、axis_Z中。
axis_X=Wire.read()<<|Wire.read();
axis_Y=Wire.read()<<|Wire.read();
axis_Z=Wire.read()<<|Wire.read();
然后将这些值从265到402映射为-90到90。
int xAng = map(axis_X,minVal,maxVal,-,);
int yAng = map(axis_Y,minVal,maxVal,-,);
int zAng = map(axis_Z,minVal,maxVal,-,);
下面给出以度(0到360)计算x值的公式。这里我们仅转换x,因为伺服电机旋转基于x值运动。
x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI);
X角度值,从0到360度,被转换为0到180。
int pos = map(x,,,,);
然后写入角度值以旋转伺服电机指向量角器卡片上的位置,并在1602 LCD显示屏上打印这些值。
myservo.write(pos);
lcd.setCursor(,);
lcd.print("Angle");
lcd.setCursor(,);
lcd.print(x);
delay();
lcd.clear();

以上就是使用Arduino开发板和MPU6050测量角度的方法。
原文链接:https://www.yiboard.com/thread-1199-1-1.html
使用MPU6050陀螺仪自制Arduino数字量角器的更多相关文章
- 使用Arduino开发板实现与MPU6050陀螺仪传感器连接的方法
MPU6050陀螺仪传感器具有许多强大的功能,采用单芯片封装.它是由一个MEMS加速度计.一个MEMS陀螺仪和温度传感器组成.该模块在将模拟量转换为数字量时非常准确,因为每个通道都有一个16位的模数转 ...
- Arduino连接MPU6050陀螺仪
一.线路连接 Arduino MPU6050 VCC 3.3V/5V GND GND SCL A5 SDA A4 INT D2 二.库下载 https://pan.baidu.com/s/1nvt75 ...
- Arduino数字引脚作为GPIO的使用
引脚与GPIO的关系 引脚(pin)是对芯片的外部物理接口的一个称呼,它是在不把这个物理接口投入到具体应用场合下的称呼.例如,我们可以说,某某芯片的P1.5引脚可以作为数字输出驱动外部数字设备,也可以 ...
- Arduino 数字函数总结
Arduino 有三个数字函数,分别是:pinMode( ), digitalWrite( ),digitalRead( ).三个函数各有其作用,pinMode( ) 在初始化 setup( )函数中 ...
- MPU6050陀螺仪和加速度计的校准
加速度计和陀螺仪的校准: 在传感器静止不动水平放置时,测出陀螺仪和加速度计各轴的偏移值,保存.以后每次上电调用dmp_set_xx_bias()就行了. u8 run_self_test(void) ...
- 安卓APP与智能硬件相结合的简易方案
第1章 概 述 (作者小波QQ463431476) (来源http://blog.chinaaet.com/zhaocundang/p/5100017645博客) (来源 http://www. ...
- 圆点博士 陀螺仪和加速度计MPU6050的单位换算方法
圆点博士陀螺仪和加速度计MPU6050的单位换算方法 陀螺仪和加速度计MPU6050的单位换算方法 对于四轴的初学者,可能无法理解四轴源代码里面陀螺仪和加速度数据的那些数学转换方法.下面我们来具体描述 ...
- 陀螺仪、加速度计与MPU6050的关系
文章目录 一.引言 二.陀螺仪 三.加速度计 四.MPU6050 一.引言 要开始做俩轮平衡小车了,所以需要补充一些关于平衡小车的知识,首先就是如何让小车保持平衡,这是要依据小车当前的三轴角度和平衡位 ...
- 了解 ARDUINO 101* 平台
原文链接 简介 作为一名物联网 (IoT) 开发人员,您需要根据项目的不同需求,选择最适合的平台来构建应用. 了解不同平台的功能至关重要. 本文第一部分比较了 Arduino 101 平台和 Ardu ...
随机推荐
- matlab 彩色图像转化成灰度图像,灰度图像降低灰度级
灰度级数k,k=2^b,称该图像为b比特图像. 降低灰度级数是靠2的幂次方 网上代码:https://blog.csdn.net/silence2015/article/details/6892736 ...
- ASP.NET 网站迁移 HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用
前提:今天要做网站迁移,把A服务器上的网站迁移到B服务器上,A服务器当时的环境是.NET 4.0 ,而B服务器是.NET2.0,A服务器IIS为6.0,B服务器IIS版本为7.0 第一步,先在B服务 ...
- vux scroller在iOS13上,一停止滑动就跳到顶部
转载:https://blog.csdn.net/sllailcp/article/details/102502452 今天客户反馈的问题,说在最新版的iOS上(iOS13),滑动列表,滑完就会跳到顶 ...
- k8s+Jenkins+GitLab-自动化部署项目
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 此文阅读目录: 1.闲聊 ...
- ASP.NET Core的无状态身份认证框架IdentityServer4
Identity Server 4是IdentityServer的最新版本,它是流行的OpenID Connect和OAuth Framework for .NET,为ASP.NET Core和.NE ...
- C++之救济金发放问题
n(n<20)个人站成一圈,逆时针编号为1~n.有两个官员,A从1开始逆时针数,B从n开始顺时针数.在每一轮中,官员A数k个就停下来,官员B数m个就停下来(注意有可能两个官员停在同一个人上).接 ...
- k8s部署nacos之二 nfs
1.在linux服务器下载nacos 首先安装git命令 yum install git git clone https://github.com/nacos-group/nacos-k8s.git ...
- contenteditable联合v-html实现数据双向绑定的vue组件
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/11466197.html 先看最终实现的demo效果图: (1)上面看似文本域的大框是通过给div ...
- CF1190E Tokitsukaze and Explosion 二分、贪心、倍增、ST表
传送门 最小值最大考虑二分答案,不难发现当最小值\(mid\)确定之后,原点到所有直线的距离一定都是\(mid\)时才是最优的,也就是说这些直线一定都是\(x^2+y^2=mid^2\)的切线. 接下 ...
- BZOJ3277 串(后缀自动机)
对多串建立SAM的一种方法是加分隔符.于是加完分隔符建出SAM. 考虑统计出每个节点被多少个串包含.让每个串各自在SAM上跑,跑到一个节点就标记(显然一定会完全匹配该节点,因为是对包含其的串建的SAM ...