Вы находитесь на странице: 1из 7

USANDO EL MPU6050

En la sesión anterior dimos un repasito a cuatro ideas claves de las que era preciso asegúranos que las
teníamos claras, y así poder empezar a hablar directamente de acelerómetros y giróscopos, y una vez
sentadas las bases ya podemos empezar con la parte divertida.

Es importante que entendáis que los IMUs son unas piezas de hardware bastante sofisticadas y que
el MPU650 que vamos a utilizar es un chip de 6 dof o grados de libertad porque incluye un acelerómetro de 3
ejes y un giróscopo de 3 ejes.

Aunque lo que miden lo sensores internos son aceleraciones lineales y angulares el procesador interno
del IMU es capaz de realizar cálculos sobre la marcha para darnos informaciones más útiles como los ángulos
de inclinación con respecto a los 3 ejes principales.

Por eso todos los tutoriales que veáis por ahí os dirán que conseguir los datos en bruto del MPU650 es la
parte fácil, procesarlos y reaccionar es otra historia que se puede complicar un poco más.

Pero como siempre se dice un viaje de 1000 km empieza con un sencillo paso, así que vamos a darlo.
Empecemos viendo cómo se conecta a nuestro Arduino.

Para estas sesión vamos a utilizar una Breakout board bastante típica llamada GY-201, que incluye un
MPU650 y un regulador de tensión, con lo que podemos alimentar a tanto 3.3V como a 5V

ESQUEMA DE CONEXIÓN
EL MPU650 viene con interface I2C por lo que la conexión es trivial y podéis hacerla poco más o menos así:

Basta con conectar los pines de alimentación y montar los pines necesarios para el control del bus I2C.
Cuando el IMU dispone de alguna medida se lo informa a nuestro Arduino mediante una interrupción y por
eso conectamos el pin INT a nuestra primera interrupción en el pin 2.

Si vas a usar un Arduino Mega la conexión es ligeramente diferente como se muestra aquí:
Poco más porque la conexión es muy sencilla y basta con hacer la conexión del bus I2C. Pasemos ahora a la
parte del software.

EL PROGRAMA DE CONTROL
Vamos a montar las librerías correspondientes y a probar con uno de los programas de ejemplo que tanto las
conexiones como el MPU650 están en condiciones operativas.

El señor Jeff Rowberg ha puesto a nuestra disposición una bonita librería que podemos descargar desde
aquí: MPU6050 y también vamos a necesitar una librería modifica de I2C que se lleve bien con el IMU
llamada I2Cdev.

 Parece que el I2C del chip es un tanto peculiar a juzgar por lo que dicen por Internet la página oficial
de Arduino y algunos doctos comentaristas, y con aspectos delicados si necesitáis colocar más
elementos I2C al Bus.
Vamos a empezar cargando el ejemplo MPU6050_RAW:

\\Archivo\Ejemplos\MPU6050\Examples\ MPU6050_RAW
Y a continuación asegurándonos de que la consola serie está a 38400 baudios, porque los IMUs son muy
charlatanes y mejor que nos aseguremos de que recibimos a suficiente velocidad porque de lo contrario la
información se amontonará en nuestra puerta.

Este programa es de lo más sencillo, y lo que hace es leer e imprimir los valores en bruto que los
acelerómetros y giróscopos le envían a tu Duino, es decir sin procesar en absoluto, algo que sirve de muy
poco, pero es un programa que si vais saltando las partes de egipcio antiguo que contiene, encontrareis
bastante comprensible, en líneas generales.

Si todo está bien, deberíais ver una pantalla parecida a esta:

No te preocupes demasiado de estos valores, porque son las medidas reales que producen
los acelerómetros y los giróscopos, pero así no valen de mucho. El objetivo es asegurarnos de que
tu MPU6050 se comunica bien con tu Arduino.

 De todos modos fíjate en que hay 6 valores. Los tres primeros corresponden a los acelerómetros y los
tres últimos a los giróscopos.(De ahí el a/g: al principio de la línea)
 Si vas girando el IMU en direcciones perpendiculares verás con rapidez cual es cada uno de los ejes,
porque aunque el chip este en movimiento inercial (O sea en reposo o movimiento lineal uniforme,
¿Te suena del cole?) aun detectará la aceleración de la gravedad, claramente en una de las
direcciones.
 Nosotros estamos tan acostumbrados a la gravedad que ni la notamos a no ser que nos dejemos los
morros contra el suelo de un tropezón, pero el MP6050 es un sensor y mide de continuo su efecto,
que es unaaceleración y mira qué casualidad, es justo lo que mide un acelerómetro).
Vale, todo muy bonito. Pero… ¿Cómo mido los ángulos respecto a la horizontal? Que es lo que os interesa
para aseguraros de que no nos estrellamos contra el pavimento.

Y de nuevo, por una de esas increíbles casualidades de la vida, el segundo ejemplo trata de eso

MIDIENDO ÁNGULOS DE INCLINACIÓN


Vamos a cargar el segundo ejemplo que viene de demo con el MPU6050 que se llama DMP6:

\\Archivo\Ejemplos\MPU6050\Examples\ MPU6050_DMP6

Pero el autor quería comprobar que estabais despiertos y ha puesto el programa a 115200 baudios, a
diferencia del ejemplo anterior, así que empezar cambiando la velocidad de la consola Arduino en
consonancia:

Si ahora volcáis el programa a vuestro Arduino, os aparecerá un mensaje con este:

Donde como veis os pide que le enviéis cualquier pulsación más intro para empezar el programa.

Dadle cualquier cosa, y enseguida veréis que empiezan a aparecer valores en la pantalla, pero esperad un
poco porque necesita como 10 segundos para que los valores se estabilicen y tengan sentido:
El texto que aparece al principio de cada línea “ypr” corresponde a las iniciales en ingles de los tres ángulos
de referencia Yaw, Pitch y Roll, que si recordáis los presentamos con esta imagen:

Y los valores que van cambiando son poco más o menos el valor instantáneo de cada uno de esos ángulos.
Para tratar de dar un poco de sentido a es interminable flujo de valores tenemos que hablar de la gravedad,
(De la de Newton, no del estado de nuestras finanzas) y si alguno pensabais que se puede manejar y
programar un IMU sin hablar de física más vale que os vayáis a la biblioteca a por un libro de poesía.

Recordad que lo que mide un acelerómetro es una aceleración en tres ejes y resulta que nuestro
acelerómetro siempre está sometido al menos a una aceleración presente por doquier… que
llamamos gravedad y nuestro MPU6050 la detecta y mide permanentemente.

Lo cual es una gran ventaja porque como además sabe que su valor en reposo es de 9,8 m/seg2 (Disfrutad
que yo sé que esto os encanta) en cuanto sus lecturas se estabilizan, él sabe localizar el eje vertical porque es
el que la gravedad le indica y por tanto ya tiene una primera referencia del plano horizontal (El plano
horizontal es perpendicular a la gravedad, naturalmente)

 Si el IMU dispone además de un magnetómetro de 3 ejes, ya está en condiciones de apuntar al Norte


además y puede fijar con precisión el segundo eje, y el tercero cae por su propio peso, pero no es el
caso del MPU6050 que estamos usando. .
Ahora aplica la famosa regla de los tres dedos que tanto disfrutamos en las entretenidas clases de
electromagnetismo entre otras:

Con el pulgar apuntado en la dirección de la gravedad o z, y poniendo los dedos índice y anular poco más o
menos a 90º entre sí y con el eje z, nuestro sensor es capaz de utilizar unas referencias primarias en tres ejes.

Por eso veréis que si habéis hecho como yo, y habéis colocado vuestro sensor inercial poco más o menos
horizontal, los ángulos de Pitch y Roll tenderán rápidamente a cero como corresponde a un IMU bien
educado.

En cambio, el Angulo que a mí me sale de 54º y a vosotros puede saliros cualquier cosa… ¿Mide la desviación
con respecto a qué?

Pues no lo tengo muy claro. Supongo que es una referencia que el elige a huevo, o como se dice más
elegantemente, es una referencia arbitraria. El IMU cuenta con una serie de mecanismos para elegir una
referencia arbitraria en el arranque y después podemos corregir esas orientaciones, pero de momento no
vale la pena complicarnos más la vida.

En mi caso he montado el MPU6050 en una protoboard para poder mover con claridad el sensor y por eso si
ahora vais girando con cuidado la protoboard (O la plataforma de base) veréis como los ángulos van
reflejando la desviación respecto de la horizontal y con valores que pueden ser tanto positivos como
negativos.

COMENTARIOS FINALES
Bueno esto no ha pretendido más que ser una introducción al tema de acelerómetros y giróscopos y
tendremos tiempo para ir hablando más sobre el asunto en futuras sesiones, pero por ahora nos conviene
comentar que los IMUs tienen sus historias.

En primer lugar no son demasiado estables y sus medidas bailan bastante por lo que será preciso filtrar los
errores.

Además son muy sensibles (Una mala combinación) por lo que la medida que te dan, baila mucho con
cualquier golpecito o vibración que detecten. Haz la prueba moviendo un poco la plataforma y en seguida
veras el baile de las cifras.

No se puede despreciar tampoco las interferencias, que como sabéis afectan a todos los aparatos
electrónicos y los IMUs no son la excepción.

Y por último sufren también de un problema que se llama deriva (Shift en inglés) y que se produce porque el
procesador interno del IMU calcula las orientaciones, o si prefieres, los ejes de referencia por cálculo de
aceleraciones, que por mucha precisión que se intente al final tendrán pequeños errores que se irán
acumulando.

Este error acumulado puede hacernos perder el norte (Literalmente) y acabar recogiendo cachitos del asfalto
para ver que podemos salvar del desastre.

Todo tiene solución, pero supone cálculos y procesamiento abundante, además de nociones de física,
geometría y otras disciplinas que, aunque no os lo creáis, no todos disfrutan.

Por ultimo si vais a montar algún robot volador de un cierto valor, no os interesa perder la posibilidad de que
vuestro chip incluya un magnetómetro de 3 ejes más para localizar direcciones absolutas de referencia y si
el chisme va a volar, un sensor de presión barométrica no vendría mal tampoco para calcular la altitud.

Ya habéis adivinado que hay cantidad de sensores de este estilo en el mercado y simplemente os comentaré
que existe algún Breakout Board por ahí 10 dof o grados de libertad, como el GY-88 MPU-6050 HMC5883L 10
dof, que incluyen:

 Un acelerómetro de 3 ejes
 Un Giróscopo de tres ejes
 Un magnetómetro de 3 ejes
 Un sensor barométrico. .
 Son algo más caros que este MPU6050 con el que llevo aburriéndoos ya buen rato, pero os
compensará la diferencia de precio.

Вам также может понравиться