风筝
发表于: 2018-3-13 12:01:13 | 显示全部楼层

MPU6050-Gyro-Sensor-Interfacing-with-Arduino.jpg

MPU6050陀螺仪传感器具有许多强大的功能,采用单芯片封装。它是由一个MEMS加速度计、一个MEMS陀螺仪和温度传感器组成。该模块在将模拟量转换为数字量时非常准确,因为每个通道都有一个16位的模数转换器硬件。该模块能够同时捕获x、y和z通道。它有一个I2C接口与主控制器进行通信。这款MPU6050模块是一款兼备加速度计和陀螺仪的小型芯片。对于无人机、机器人、运动传感器等许多应用来说,这是一个非常有用的设备。它也被称为陀螺仪或三轴加速度计。


今天在这篇文章中,我们将介绍如何使用Arduino开发板连接这款MPU6050陀螺仪,并且在16x2 LCD显示屏上显示这些数值。


所需的组件

1.  Arduino Uno开发板

2.  MPU6050陀螺仪传感器

3.  10K的电位器

4.  跳线

5.  面包板

6.  USB电缆

7.  电源


MPU6050陀螺仪传感器简介

MPU-6050是一款单芯片、8个引脚的6轴陀螺仪和加速计。该模块默认工作在I2C串行通信模式下,但可通过配置寄存器将其配置为SPI接口。对于I2C,它具有SDA和SCL线。几乎所有的引脚都是多种功能的,但在这里我们只介绍I2C模式相关引脚。

Gyro-Sensor.jpg


引脚配置

Vcc: - 此引脚用于向MPU6050模块供电,相对于地

GND: - 这是接地引脚

SDA:-SDA引脚,用于控制器和mpu6050模块之间的数据传输

SCL: - SCL引脚,用于时钟输入

XDA: - 这是传感器I2C SDA数据线,用于配置和读取外部传感器((可选),本例中不使用)

XCL: - 这是传感器I2C SCL时钟线,用于配置和读取外部传感器((可选),本例中不使用)

ADO: - I2C从地址LSB(本例中不适用)

INT: - 用于指示数据准备就绪的中断引脚。


项目描述

在这篇文章中,我们使用Arduino和MPU6050在LCD上显示温度、陀螺仪和加速度计的读数。该模块为我们提供了行值和标准值,但行值并不稳定,所以我们在LCD上显示了标准值。如果你只是想显示加速计值,你也可以使用加速度计ADXL335和Arduino。


在这个项目中,我们首先在LCD上显示温度值,10秒钟后显示陀螺仪值,10秒钟后显示加速度计读数,如下图所示:

Temperature-readings-over-LCD-using-MPU6050-with-Arduino.jpg


Accelerometer-reading-over-LCD-using-MPU6050-with-Arduino.jpg


电路图和说明

MPU6050与Arduino开发板连接的电路图非常简单,我们在这里使用了LCD和MPU6050。这里,我们使用了笔记本电脑的USB电源。使用了一个10k的电位器用于控制LCD的亮度。在与MPU6050的连接中,我们使用5连接,其中已经将MPU6050的3.3v电源和地连接到了Arduino的3.3v和地。 MPU6050的SCL和SDA引脚连接到Arduino的A4和A5引脚。并且,MPU6050的INT引脚连接到Arduino的中断0(D2)。 LCD的RS、RW和EN直接连接到Arduino的8、gnd和9。数据引脚直接连接到数字引脚编号10、11、12和13。

MPU6050-Gyro-Sensor-Circuit-diagram-for-Interfacing-with-Arduino.png


编程说明

编程部分对于这个项目也很容易。这里,我们使用MPU6050库来实现与Arduino进行连接。首先,我们需要从GitHub下载MPU6050库并将其安装在Arduino IDE中。


之后,我们可以在示例中找到示例代码。用户可以直接将它们上传到Arduino来测试该代码,并可以通过串行监视器查看值。或者用户可以使用我们在文章最后给出的代码来显示LCD和串行监视器的值。

在代码方面,我们已经包含了一些必需的库,如MPU6050和LCD。

  1. #include<LiquidCrystal.h>
  2. LiquidCrystal lcd(8,9,10,11,12,13);
  3. #include <Wire.h>
  4. #include <MPU6050.h>
复制代码

setup函数中,我们初始化两个设备并通过LCD写入欢迎消息:

  1. void setup()
  2. {
  3.   lcd.begin(16,2);
  4.   lcd.createChar(0, degree);
  5.   Serial.begin(9600);
  6.   Serial.println("Initialize MPU6050");
  7.   while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  8.   {
  9.     lcd.clear();
  10.     lcd.print("Device not Found");
  11.     Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
  12.     delay(500);
  13.   }
  14.   count=0;
  15.   mpu.calibrateGyro();
  16.   mpu.setThreshold(3);
复制代码

loop函数中,我们每隔10秒调用三个函数来显示LCD上的温度,陀螺仪和加速计读数。 这三个函数是tempShow,gyroShow和accelShow,你可以在本文最后给出的完整的Arduino代码中检查这些函数:

  1. void loop()
  2. {
  3.     lcd.clear();
  4.     lcd.print("Temperature");
  5.     long st=millis();
  6.     Serial.println("Temperature");
  7.     while(millis()<st+period)
  8.     {
  9.       lcd.setCursor(0,1);
  10.       tempShow();
  11.     }
  12.     lcd.clear();
  13.     lcd.print("Gyro");
  14.     delay(2000);
  15.     st=millis();
  16.     Serial.println("Gyro");
  17.     while(millis()<st+period)
  18.     {
  19.       lcd.setCursor(0,1);
  20.       gyroShow();
  21.     }
  22.     lcd.clear();
  23.     lcd.print("Accelerometer");
  24.     delay(2000);
  25.     st=millis();
复制代码

MPU6050陀螺仪和加速计都可用于检测任何设备的位置和方向。 陀螺仪使用地球重力来确定x、y和z轴位置,而加速度检测是根据运动变化的速率。


整个项目的完整代码: MPU6050.rar (932 Bytes, 下载次数: 378)

,如果你在使用MPU6050过程中遇到任何问题,可以在本帖内进行回复。

跳转到指定楼层
mk434343
发表于: 2018-12-23 15:28:07 | 显示全部楼层

你好,我用你的程序有一些问题,可以加我qq 私聊吗?
879584617

提供的MUP6050库文件里一些函数没法编译通过

while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    lcd.clear();
    lcd.print(Device not Found);
    Serial.println(Could not find a valid MPU6050 sensor, check wiring!);
    delay(500);
  }
  count=0;
  mpu.calibrateGyro();
  mpu.setThreshold(3);

主要是这一段没法编译
回复

使用道具 举报

haiting-ni
发表于: 2019-2-23 19:43:27 | 显示全部楼层

  while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    lcd.clear();
    lcd.print[color=Red]("Device not Found");
    Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
    delay(500);
  }
  count=0;
  mpu.calibrateGyro();
  mpu.setThreshold(3);
回复

使用道具 举报

haiting-ni
发表于: 2019-2-23 19:44:30 | 显示全部楼层

  while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    lcd.clear();
    lcd.print("Device not Found");
    Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
    delay(500);
  }
  count=0;
  mpu.calibrateGyro();
  mpu.setThreshold(3);
回复

使用道具 举报

hengshui0603
发表于: 2019-4-20 23:58:51 | 显示全部楼层

老哥,你上传代码是不全的啊,至少名称没有定义。
或者是你所用的MPU6050的库和IDE下载的库不一样?
回复

使用道具 举报

风筝
发表于: 2019-4-21 09:11:25 | 显示全部楼层

hengshui0603 发表于 2019-4-20 23:58
老哥,你上传代码是不全的啊,至少名称没有定义。
或者是你所用的MPU6050的库和IDE下载的库不一样?
...

用的是文章中提到的库文件,库的下载地址是:https://github.com/jarzebski/Arduino-MPU6050


我把Arduino的sketch工程代码添加到附件了,有需要可以下载:

MPU6050.zip (939 Bytes, 下载次数: 115)


回复

使用道具 举报

rlf5215
发表于: 2020-3-17 17:44:06 | 显示全部楼层

老大还是不行啊 !!'class MPU6050' has no member named 'begin'
回复

使用道具 举报

ZXCVBNMMNNN
发表于: 2021-5-16 19:17:30 | 显示全部楼层

while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    lcd.clear();
    lcd.print(Device not Found);
    Serial.println(Could not find a valid MPU6050 sensor, check wiring!);
    delay(500);
  }
  count=0;
  mpu.calibrateGyro();
  mpu.setThreshold(3);
编译没通过,串口监视器数据不变化
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 09:18 , Processed in 0.133372 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表