MPU6050:用于Arduino定位的模块

MPU6050板

如果您需要创建一个项目并将其定位,那就知道 如何放置 关于空间,您可以使用模块 微处理器6050。 即,该模块是具有6个自由度(DoF)的惯性测量单元或IMU(惯性测量单元)。 这要归功于3轴加速度传感器和3轴陀螺仪。

该MPU6050可以知道包含对象的放置位置,以用于 应用 导航,测角,稳定,手势控制等。 移动电话通常包括这种类型的传感器,例如,通过手势控制某些功能,例如,如果智能手机被翻转,则停止操作;通过将移动设备当作方向盘旋转来在视频游戏中驾驶车辆等。

什么是加速度计和陀螺仪?

MEMS实例

MEMS实例

好吧,让我们分部分进行。 首先是要了解这些类型的传感器是什么 能够检测加速度和转弯,可以从自己的名字推导出来。

  • 加速度计:测量加速度,即每单位时间的速度变化。 请记住,在物理学中,速度随时间的变化(a = dV / dt)是加速度的定义。 根据牛顿第二定律,我们还有a = F / m,这就是加速度计用来工作的原理,也就是说,它们使用物体的力和质量参数。 为了能够在电子学中实现,使用了MEMS(微电子机械系统)技术,该技术不同于传统的电子芯片制造技术,因为机械零件是在MEMS中产生的。 在这种情况下,将创建能够测量加速度的轨道或元素。 这意味着可以采用许多其他单位,例如速度(如果加速度在时间上积分),如果它再次积分,我们有位移等。 也就是说,非常有趣的参数可以知道对象的位置或检测对象的运动。
  • 陀螺仪:又称陀螺仪,它是一种测量物体角速度的设备,即单位时间的角位移或物体绕其轴旋转的速度。 在这种情况下,MEMS技术还可以利用一种称为科里奥利(Coriolis)的效应来测量该速度。 因此,可以测量角速度,或者通过将角速度相对于时间进行积分,可以获得角位移。

MPU6050模块

MPU6050引脚排列

现在您知道了加速度计和陀螺仪是什么, MPU6050模块 它是集成了这两个元素的电子板,可让您测量元素位置的这些变化,从而能够产生反应。 例如,当物体移动时,LED会亮起,或者其他更复杂的事情。

就像我说的,它有6个自由轴,自由度, 3轴X,Y和Z加速度传感器以及其他3轴陀螺仪 测量角速度。 您必须考虑不要在放置模块的方式和测量的旋转方向上犯错误,因为如果输入错误的符号会有些混乱。 查看下图,该图指定了轴的方向(但是,请注意,PCB本身也在一侧上进行了打印):

数据表MPU6050

考虑到这一点, 引脚排列,或多或少,您都清楚可以开始使用MPU6050。 如上图所示,连接非常简单,并允许I2C通信与大多数微控制器(包括Arduino)兼容。 SCL和SDA引脚在板上有一个上拉电阻,可直接连接到Arduino板,因此您不必担心自己添加它们。

要在I2C总线上同时使用两个方向,您可以使用这些 针脚和方向:

  • AD0 = 1或高电平(5v):适用于I0C地址69x2。
  • AD0 = 0或低(GND或Nc):用于I0C总线的地址68x2。

请记住,该模型的工作电压为3v3,但幸运的是它具有内置稳压器,因此可以毫无问题地使用Arduino的5v进行切换,并将其转换为3.3v。

顺便说一下,如果内部引脚连接到GND,如果未连接此引脚,则地址为 默认情况下它将是0x68,因为默认情况下它将接地,因此将其解释为逻辑0。

与Arduino集成

Arduino和MPU6050连接

你可以得到 有关I2C总线的更多信息 在本文中。 您已经知道,根据Arduino开发板,用于总线的引脚会有所不同,但在 Arduino UNO 是模拟引脚 A4和A5,用于SDA(数据)和SCL(时钟) 分别。 它们是唯一的Arduino引脚,以及应为板供电的5v和GND引脚。 因此,连接尽可能简单。

对于MPU6050的功能,可以使用其链接库中的库,您可以在该链接中获取更多信息。 I2C 模块的和总线的 微处理器6050.

MPU6050的Arduino板编程不是太简单,因此不适合初学者。 此外,了解加速度的极限或角度范围后,您可以进行校准以确定确切的运动或加速度。 但是,为了至少可以有一个示例说明如何使用它,您可以从 Arduino IDE的示例草图 它将读取加速度计和陀螺仪记录的值:

// Bibliotecas necesarias:
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"

// Dependiendo del estado de AD0, la dirección puede ser 0x68 o 0x69, para controlar así el esclavo que leerá por el bus I2C
MPU6050 sensor;

// Valores RAW o en crudo leidos del acelerometro y giroscopio en los ejes x,y,z
int ax, ay, az;
int gx, gy, gz;

void setup() {
  Serial.begin(57600);    //Función para iniciar el puerto serie con 57600 baudios
  Wire.begin();           //Inicio para el bus I2C 
  sensor.initialize();    //Iniciando del sensor MPU6050

  if (sensor.testConnection()) Serial.println("Sensor iniciado correctamente");
  else Serial.println("Error al iniciar el sensor");
}

void loop() {
  // Leer las aceleraciones y velocidades angulares
  sensor.getAcceleration(&ax, &ay, &az);
  sensor.getRotation(&gx, &gy, &gz);

  // Muestra las lecturas que va registrando separadas por una tabulación 
  Serial.print("a[x y z] g[x y z]:\t");
  Serial.print(ax); Serial.print("\t");
  Serial.print(ay); Serial.print("\t");
  Serial.print(az); Serial.print("\t");
  Serial.print(gx); Serial.print("\t");
  Serial.print(gy); Serial.print("\t");
  Serial.println(gz);

  delay(100);
}

如果您是初学者而又不太了解 如何使用Arduino IDE进行编程,这对您来说很难理解,因此您可以免费查阅Arduino编程入门课程的手册...


成为第一个发表评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。