CONFIGURAR EL MPU6050.

INTRODUCCIÓN.

Este tutorial, es una extensión del artículo sensormpu6050. EL módulo MPU6050 contiene un giroscopio de tres ejes con el que podemos medir velocidad angular y un acelerómetro también de 3 ejes con el que medimos los componentes X, Y y Z de la aceleración, el acelerómetro trabaja sobre el principio piezo eléctrico, posee además de un sensor de temperatura.

Los acelerómetros internamente tienen un MEMS (MicroElectroMechanical Systems) que de forma similar a un sistema masa-resorte permite medir la aceleración. Los giroscopios utilizan un MEMS (MicroElectroMechanical Systems) para medir la velocidad angular usando el efecto Coriolis.

En esta ocasión presento un ejemplo simple de cómo interconectar el MPU-6050 con una placa Arduino. El MPU6050 es un sensor de movimiento, que tiene un conversor ADC de 16 bits que convierte los datos a un valor digital, el módulo de giroscopio se comunica con el Arduino a través de la comunicación serie I2C a través del reloj serial (SCL) y datos (SDA), el chip MPU6050 necesita 3.3V pero un regulador de voltaje en la tarjeta GY-521 le permite alimentarlo hasta 5V, en nuestro caso en un Arduino con el que haremos unos ejercicios.

El procesador interno del IMU (Inertial Measurment Units) es capaz de realizar cálculos precisos de los valores que miden sus sensores internos que son, aceleraciones lineales y angulares, para informarnos de valores útiles como los ángulos de inclinación con respecto a los 3 ejes principales. Un dato importante es que ni la aceleración ni la velocidad lineal afectan la medición de giro.

La dirección de los ejes está indicado en el módulo el cual hay que tener en cuenta para no equivocarnos en el signo de las aceleraciones. Como la comunicación del módulo es vía I2C, esto le permite trabajar con la mayoría de microcontroladores. En el módulo los pines SCL y SDA tienen una resistencia pull-up en placa para una conexión directa al microcontrolador que estemos utilizando.

IMU_60500-300x191.jpgFig. 1

Alguien como Jeff Rowberg ya ha hecho el trabajo duro por nosotros, escribió algunas bibliotecas de Arduino para obtener los datos del acelerómetro/giroscopio y manejar todos los cálculos. Las librerías están disponibles como un archivo zip desde aquí.

Y también las puede descargar de:
https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
y la encargada de I2Cdev de:
https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/I2Cdev

Instalar las librerías en el IDE Arduino, con ellas podremos trabajar los siguientes ejercicios. Una vez descomprimido, copie las dos carpetas “I2Cdev” y “MPU6050” en su carpeta Arduino “libraries” en el siguiente directorio: C: \ Archivos de programa (x86) \ Arduino \ libraries

EL CIRCUITO.

esquema_mpu6050-300x193.jpgFig. 2 Circuito.

Abra su Arduino si no lo tiene abierto ya, vaya al menú Archivos/Ejemplos… y navegue hasta MPU6050> y encontrará el archivo MPU6050_DMP6, ábralo y seleccione el puerto COM adecuado, suba el boceto. En el monitor Serial elija la velocidad de 115200 Baudios.

archivo-mpu6050_dmp6-300x293.gifFig. 3 Archivo MPU6050_DMP6.

Le aparecerá una indicación, pruebe a escribir algún dato y pulse Enter, en ese momento deberían aparecer los datos, lo que indica que todo está saliendo bien.

mpu6050_dmp6-286x300.gifFig. 4 Monitor Serial.

CALIBRANDO EL MPU6050

Muchos de los ejemplos que podemos encontrar, tienen un problema y es que presentan muchas vibraciones y ruido en las medidas, además cuando tengamos instalado el módulo MPU6050 en el proyecto, siempre puede haber un desnivel en sus componentes, motivo por el cual debemos calibrar el módulo, asegurándonos de que no haya un error de desnivel agregado en cada componente.

ejes-Tait-Brayan_-o_Euler-300x138.jpgFig. 5 Ejes Tait-Brayan o Euler

Podemos solucionar estos problemas al configurar el módulo MPU6050 OFFSETS, para compensar dichos errores.

Este código nos sirve para calibrar los offset del MPU6050.

Durante la calibración deberemos mantener el sensor sin moverlo en la posición de trabajo habitual, entonces el programa empieza por leer los offsets y nos pide que enviemos un carácter por el puerto serie. El programa trata de corregir los errores de las medidas, para ello modifica constantemente el offest, usando un filtro y cada 100 lecturas comprueba los valores si se acercan a los que deseamos leer, aumentando o disminuyendo los offsets. Esto hará que las lecturas filtradas se acerquen a:
-aceleración: p_ax=0 , p_ay=0 , p_az=+16384
-velocidad angular: p_gx=0 , p_gy=0 , p_gz=0

calibrado_boceto-206x300.gifFig. 6 Calibrado del PMU6050.

Tal como indica en el monitor debemos anotar las compensaciones obtenidas para configurarlas en nuestros proyectos, usando la función mpu.setXAccelOffset(), como se indica a continuación.

Abriremos el archivo MPU6050_PMT y buscaremos la parte de Calibration results como se aprecia en la figura que sigue.

config_calibrado-300x175.gifFig. 7 Configurar el boceto.

La calibración solo es necesario hacerla una vez. EL filtro complemento en si, es para combinar el acelerómetro y el giroscopio. Si solo utilizáramos el acelerómetro para determinar el ángulo, cualquier aceleración generada por un desplazamiento generaría errores en el ángulo. En cambio sí solo usamos el giroscopio vamos a obtener un error acumulativo por causa de la integración de w (velocidad angular). Este filtro se utiliza acunado, queremos sensar el ángulo pero el MPU está en constante movimiento (Drones, robots móviles, etc). En cambio, si el PMU va a estar fijo podemos tomar sólo el vector de la aceleración de la gravedad para determinar los ángulos.

ESCALADO DE LECTURAS

Ahora, vamos a escalar las lecturas a valores con las unidades de aceleración y velocidad angular. Carguemos el siguiente programa que usa una ecuación para convertir el valor leído en un valor de aceleración o velocidad angular.

Este código nos permite escalar valores de aceleración y velocidad angular.

 Con el MPU6050, sólo podemos obtener los ángulos X e Y, con el filtro de complemento usamos los ángulos obtenidos del acelerómetro, los cuales se limitan a X e Y, puesto que una rotación en Z del acelerómetro no la detectará ya que usamos la gravedad para determinar el ángulo. Para esto es mejor usar un Magnetómetro similar al HMC5883L.

escalar_valoresg-300x276.gifFig. 8 Escalar valores de acel/grad.

Los valores obtenidos ya están escalados a unidades de aceleración y velocidad angular, hemos convertido la aceleración a valores en m/s^2 por lo que se reemplazó el valor de g=9.81 si el sensor se mantiene en posición horizontal se deben obtener mediciones cercanas a 9.8 m/s^2 (aceleración de la gravedad terrestre) es la componente z de la aceleración.

SIMULACIÓN 3D.

Para ejecutar la demostración o simulación 3D, vamos a utilizar una sencilla maqueta de un Eurofighter para que se comprenda mejor la evolución de los parámetros YawRoll y Pitch a medida que se generan al cambiar la posición del IMU.

El primer paso es subir el código al IDE Arduino o si lo prefiere al nodeMCU, vamos a probar con Arduino, en ese caso, nos sirve el circuito descrito en la figura 2, en el que la conexión INT del MPU6050 no es necesaria.

En el caso de utilizar el nodeMCU12, el esquema es el siguiente:

mpu_294x223.jpg

Fig. 9 Conexiones nodeMCU e IMU.

EL CÓDIGO.

El código obtener inclinación viene bastante bien descrito y no hará falta muchas aclaraciones.

Copie y pegue el anterior código y guárdelo con un nombre por ej. simulador.ino, súbalo al IDE Arduino o al nogeMCU y ejecútelo. Cuando termine, si todo ha ido bien, al abrir el monitor serie podrá ver como surgen los valores que detecta el IMU.

inclinacion_mpu6050-300x287.gifFig. 10 Monitor Serial.

Para tener una imagen más aproximada de lo que representan estos valores, vamos a poder ver la evolución de estos datos con la ayuda del monitor llamado Serial Plotter, pulse CRTL+Mayús+L o vaya al menú Herramientas/Serial Plotter, se abre una ventana que nos muestra unas líneas de colores que indican el progreso de los parámetros YAW, PITCH y ROLL en la medida que se producen.

tres-ejes.gifFig. 11 Tres ejes.

En la nueva ventana aparecen unas líneas de colores que corresponden a los ya mencionados YAW, PITCH y ROLL (según se puede ver en la figura 11). Pueden apreciarse las variaciones de cada línea de color en su evolución.

trazado_de_yaw-pitch-roll-300x287.jpgFig. 12 Serial Plotter.

Estos datos que he intentado describir se aprecian mejor en el vídeo que he realizado y se muestra a continuación.

Vídeo.

Espero que les sirvan estos artículos para iniciarse en este mundo tan emocionante y con tantos caminos por andar. Esto es todo por este simple tutorial, como parte de una serie de artículos sobre estos nuevos dispositivos que nos permiten utilizar los recursos del Internet de las cosas.

Ayúdenos a mantener la comunidad en lo positivo y útil.
Sobre el tema, sea respetuoso con todas las edades y niveles
con la habitual responsabilidad.
Sea amable y no haga Spam – ¡Gracias!

6 thoughts on “CONFIGURAR EL MPU6050.”

  1. Estimado Sr. Vicente,
    Gracias por su ayuda. Es muy útil y buen artículo. Muchas felicidades.
    Sin embargo, quisiera hacerle unas preguntas. Una vez cargado en la placa de Arduino el código de calibración, el resultado mostrado en el monitor serie no es igual que la figura 6 que usted muestra en este blog. Es decir, una vez cargado el código en el monitor serie y enviado el carácter, empiezan a salir números que no terminan nunca y que no dan un resultado. Solo cuándo se vuelve a abrir el monitor serie aparecen unos resultados y no tan bien clasificados cómo en la figura 6. Ademas, por alguna otra razón, aunque la calibración la haya realizado en el plano y con un perfecto 0º, los resultados mostrados una vez rectificados los valores SET (según lo que yo interpreto del monitor serie), nunca obtengo en pantalla ni el 0º ni el 90º cuándo lo giro. El error suele ser de +/-3º o más.
    Gracias,
    Jose

  2. Hola Jose R.
    Los resultados de la figura 6, digamos que son los ideales, en realidad, lo que hacemos al ejecutar dicho programa en nuestro MPU6050, lo que hacemos es exactamente eso calibrarlo. Me explico, al ejecutar el programa de calibrado, debemos esperar un tiempo (45 seg. a 1 minuto) y aún así puede que no lleguemos a esos valores ideales, sin embargo, con los valores obtenidos, modificaremos nuestros programa MPU6050_PMT, en las líneas 228 a 231, como se indica en:
    Abriremos el archivo MPU6050_PMT y buscaremos la parte de Calibration results como se aprecia en la figura 7 que sigue.
    También se dice que se calibrará una sola vez. En cuanto al desvío de las lecturas del orden del ±3 %, se puede deber al propio MPU, personalmente no he tenido ocasión de comprobar estos datos.
    Espero haber dado respuesta a su consulta.
    Saludos.

  3. Muchas gracias por la respuesta.
    Si, los valores que da el sensor son muy aceptables. Si pudiera conseguir una superficie más plana quizás llegaría al ángulo deseado.

  4. Buenas tardes, estoy trabajando con un MPU-9250, usted sabe como cambiar el valor de la escala del giroscopio a +-2000 °/S

Deja un comentario

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

  Acepto la politica de privacidad y la suscripcion gratuita al semanario de noticias.

Informacion sobre proteccion de datos

  • Responsable: NTDhoy, S.L.
  • Fin del tratamiento: Controlar el spam, gestion de comentarios
  • Legitimacion: Su consentimiento
  • Comunicacion de los datos: No se comunican los datos a terceros salvo por obligacion legal.
  • Derechos: Acceso, rectificacion, portabilidad, olvido.
  • Contacto: info@ntdhoy.com.
  • Informacion adicional: Mas informacion en nuestra politica de privacidad.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.