Etiquetas: ,

El módulo MPU6050 es una unidad inercial que mide la evolución de un objeto en el espacio. Puede medir las aceleraciones lineales y angulares en los tres ejes del espacio. Este componente se puede encontrar en varias aplicaciones como los controladores de videojuegos o los teléfonos inteligentes. Se puede usar para realizar el control de actitud de un dron o para equilibrar un robot sobre dos ruedas.

Para este tutorial, usaremos el módulo GY-521 en el que está integrado el MPU6050.

Prerrequisito: comunicación I2C

arduino-accelerometer-mpu6050 Usando un módulo MPU6050 con Arduino

Hardware

  • Computadora
  • Arduino UNO
  • Cable USB A macho a B macho
  • MPU6050 (Module GY-521)

Principio de funcionamiento

El módulo GY-521 es un tablero de desarrollo para el sistema microelectromecánico MPU6050 (MEM- Sistemas microelectromecánicos). El módulo MPU6050 consta de un sensor de temperatura y dos sensores micromecánicos: un giroscopio para medir las rotaciones y un acelerómetro para medir las aceleraciones en el espacio. Estos sensores suelen constar de una parte mecánica y una parte piezoeléctrica. Cuando el objeto está en movimiento, la parte mecánica se mueve contra la parte piezoeléctrica que envía una señal eléctrica.

Esquema

El módulo puede ser alimentado directamente a través de la clavija de 5V en el tablero de Arduino. El módulo GY-521 utiliza la comunicación I2C para interactuar con el microcontrolador.

  • SDA al pin A4
  • SCL al pin A5
  • VCC al pin 5V
  • GND al pin GND
arduino-mpu6050_bb Usando un módulo MPU6050 con Arduino

Código

Para interactuar con el módulo GY-521, y por lo tanto con el MPU6050, utilizaremos la biblioteca del mismo nombre Adafruit_MPU6050.h. Es importante tener en cuenta que, dependiendo del módulo utilizado, puede ser necesario modificar la dirección I2C para poder recuperar las mediciones. El código propuesto aquí es el programa básico para mostrar y utilizar las mediciones del sensor. La biblioteca ofrece muchos más ajustes y parámetros. Para más funcionalidades, no dude en consultar la documentación y los ejemplos de la biblioteca.

//Libraries
#include <Wire.h>//https://www.arduino.cc/en/reference/wire
#include <Adafruit_MPU6050.h>//https://github.com/adafruit/Adafruit_MPU6050
#include <Adafruit_Sensor.h>//https://github.com/adafruit/Adafruit_Sensor

//Objects
Adafruit_MPU6050 mpu;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init i2c (Default pins A4, A5)
  Wire.begin();
  if (!mpu.begin(0x69)) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }

  mpu.setAccelerometerRange(MPU6050_RANGE_16_G);
  mpu.setGyroRange(MPU6050_RANGE_250_DEG);
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
}

void loop() {
  readMPU();
  delay(100);
}

void readMPU( ) { /* function readMPU */
  ////Read acceleromter data
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  /* Print out the values */
  Serial.print("Acceleration X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");

  Serial.print("Rotation X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" rad/s");

  Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println("°C");
}

Resultado

Una vez que el código ha sido cargado en el Arduino, si mueves el sensor, puedes ver que los valores de aceleración cambian en diferentes direcciones en el espacio. También puede comprobar el funcionamiento del sensor de temperatura pegando el dedo sobre el módulo.

arduino-monitor-mpu6050-results Usando un módulo MPU6050 con Arduino

Aplicaciones

  • Estabilizar un UAV
  • Controlar un robot con los movimientos de la mano
  • Darle equilibrio a un robot de dos ruedas

Fuentes

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código