MPU6050: módulo para posicionamiento con Arduino

Placa MPU6050

Si necesitas crear un proyecto y posicionarlo, es decir, saber cómo está colocado con respecto al espacio, puedes usar el módulo MPU6050. Es decir, que este módulo es una unidad de medición inercial o IMU (Inertial Measurment Units) con 6 grados de libertado (DoF). Eso es gracias a los sensores de tipo acelerómetro de 3 ejes y a un giroscopio de 3 ejes que implementa para trabajar.

Este MPU6050 puede saber cómo está posicionado el objeto que lo contiene para usarlo en aplicaciones de navegación, goniometría, estabilización, control por gestos, etc. Los teléfonos móviles suelen incluir este tipo de sensores para, por ejemplo, controlar ciertas funciones mediante gestos, como parar si se le da la vuelta al smartphone, conducir vehículos en videojuegos girando el móvil como si fuese un volante, etc.

¿Qué es un acelerómetro y un giroscopio?

Ejemplos de MEMS

Ejemplos de MEMS

Bien, vamos por partes. Lo primero es ver qué son estos tipos de sensores que son capaces de detectar aceleración y giros, como se puede deducir de sus propios nombres.

  • Acelerómetro: mide aceleración, es decir, la variación de velocidad por unidad de tiempo. Recuerda que en física, el cambio de velocidad respecto del tiempo (a=dV/dt) es la definición de aceleración. Según la Segunda Ley de Newton, también tenemos que a=F/m, y eso es lo que usan los acelerómetros para funcionar, es decir, usan parámetros de fuerza y masa del objeto. Para que eso se pueda implementar en la electrónica, se usan técnicas de MEMS (Micro Electro Mechanical Systems), que difieren en las técnicas de fabricación de chips electrónicos convencionales, ya que en un MEMS se crean partes mecánicas. En este caso, se crean unas pistas o elementos capaces de medir aceleraciones. Eso implica que se pueden sacar otras muchas unidades, como velocidad (si se integra la aceleración en el tiempo), si se integra nuevamente se tiene el desplazamiento, etc. Es decir, parámetros muy interesantes para saber la posición o detectar movimiento de un objeto.
  • Giroscopio: también llamado giróscope, es un dispositivo que mide la velocidad angular de un objeto, es decir, el desplazamiento angular por unidad de tiempo o lo rápido que gira un cuerpo alrededor de su eje. En este caso, también se emplean técnicas MEMS para medir dicha velocidad usando un efecto conocido como Coriolis. Gracias a eso se puede medir la velocidad angular o, integrando la velocidad angular respecto al tiempo, se puede obtener el desplazamiento angular.

Módulo MPU6050

pinout del MPU6050

Ahora que ya sabes qué es el acelerómetro y el giroscopio, el módulo MPU6050 es una placa electrónica que integra estos dos elementos para permitirte medir estos cambios de posición de un elemento y así poder generar una reacción. Por ejemplo, que cuando un objeto se mueva se encienda un LED, u otras cosas mucho más complejas.

Como he dicho, tiene 6 ejes de libertad, DoF, 3 ejes para el acelerómetro X, Y, y Z de aceleración, y otros 3 ejes del giroscopio para medir la velocidad angular. Tienes que tener en cuenta no equivocarte en la forma en la que posicionas el módulo y el sentido del giro para las mediciones, ya que si te equivocas de signo será un poco caótico. Fíjate en la siguiente imagen donde especifica el sentido de los ejes (no obstante, fíjate que el la propia PCB también lo tiene impreso en un lateral):

Datasheet MPU6050

Teniendo en cuenta esto y el pinout, más o menos lo tienes todo claro para comenzar a usar el MPU6050. Como puedes ver en la imagen anterior, las conexiones son bastante sencillasy permite la comunicación por I2C para ser compatible con la mayoría de microcontroladores, incluido el de Arduino. Los pines SCL y SDA tienen una resistencia pull-up en la placa para una conexión directa con la placa de Arduino, por lo que no te tienes que preocupar por añadirlas por tu cuenta.

Para trabajar con las dos direcciones por el bus I2C, puedes usar estos pines y direcciones:

  • AD0=1 o High (5v): para la dirección 0x69 del I2C.
  • AD0=0 o Low (GND o Nc): para la dirección 0x68 del bus I2C.

Recuerda que el voltaje de funcionamiento del modelo es 3v3, pero afortunadamente tiene un regulador integrado, por lo que se puede aliemtnar con el 5v de Arduino sin problema y lo transformará en 3.3v.

Por cierto, al tener una resistencia interna a GND, si no se conecta este pin, la dirección por defecto será la 0x68, ya que estará conectado por defecto a la tierra, interpretándose como un 0 lógico.

Integración con Arduino

conexión de Arduino y MPU6050

Puedes obtener más información sobre el bus I2C en este artículo. Ya sabes que dependiendo de la placa Arduino varían los pines usados para el bus, pero en la Arduino UNO es el pin analógico A4 y A5, para SDA (datos) y SCL (clock) respectivamente. Son los únicos pines de Arduino, junto con el de 5v y GND para alimentar la placa, que debes usar. Así que la conexión es lo más sencilla posible.

Para las funciones del MPU6050 puedes usar las bibliotecas de las que puedes obtener más información en este enlace para la I2C del módulo y la del bus MPU6050.

La programación de la placa Arduino no es demasiado sencilla con el MPU6050, así que no es para principiantes. Además, sabiendo los límites de las aceleraciones o rangos de los ángulos, se puede calibrar para determinar cuál ha sido el movimiento exacto o aceleración. No obstante, para que puedas al menos tener un ejemplo de cómo comentar a usarlo, puedes ver este código del sketch de ejemplo para tu Arduino IDE que leerá los valores registrados por el acelerómetro y giroscopio:


// 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);
}

Si eres principiante y no conoces bien cómo programar con Arduino IDE, esto te resultará complicado de entender, por eso puedes consultar nuestro manual con el curso de iniciación a la programación de Arduino gratis…


Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.