使用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的引脚说明:

所需的组件

● Arduino UNO
● MPU6050陀螺仪模块
● LCD显示屏1602
● SG90-伺服电机
● 量角器图片

电路原理图

这款自制的Arduino量角器的电路图如下:

编程说明

本文末尾给出了完整的代码。这里伺服电机与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(2,3,4,5,6,7);  

定义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=265;
int maxVal=402;

void setup()函数中,首先启动I2C通信,并使用地址为0x68的MPU6050开始传输。

Wire.begin();            
Wire.beginTransmission(MPU_addr);  

通过写入0x6B将MPU6050置于休眠模式,然后通过写0唤醒它

Wire.write(0x6B);                   
Wire.write(0);   

使MPU6050激活后,结束传输

Wire.endTransmission(true);   

伺服电机的PWM引脚与Arduino UNO引脚9连接。

myservo.attach(9);              

电路通电后,LCD就会显示一条欢迎信息,然后在3秒后清除

lcd.begin(16,2);                 //Sets LCD in 16X2 Mode
lcd.print("CIRCUIT DIGEST");  
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Arduino");
lcd.setCursor(0,1);
lcd.print("MPU6050");
delay(3000);
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,14,true);

现在获得了轴寄存器值(x、y、z)并将其存储在变量axis_X、axis_Y、axis_Z中。

axis_X=Wire.read()<<8|Wire.read();
axis_Y=Wire.read()<<8|Wire.read();
axis_Z=Wire.read()<<8|Wire.read();

然后将这些值从265到402映射为-90到90。

int xAng = map(axis_X,minVal,maxVal,-90,90);
int yAng = map(axis_Y,minVal,maxVal,-90,90);
int zAng = map(axis_Z,minVal,maxVal,-90,90);

下面给出以度(0到360)计算x值的公式。这里我们仅转换x,因为伺服电机旋转基于x值运动。

x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI);   

X角度值,从0到360度,被转换为0到180。

 int pos = map(x,0,180,0,180);

然后写入角度值以旋转伺服电机指向量角器卡片上的位置,并在1602 LCD显示屏上打印这些值。

myservo.write(pos);         
lcd.setCursor(0,0);
lcd.print("Angle");
lcd.setCursor(0,1);
lcd.print(x);               
delay(500);
lcd.clear();

以上就是使用Arduino开发板和MPU6050测量角度的方法。

原文链接:https://www.yiboard.com/thread-1199-1-1.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容