MPU6050 con arduino

MPU6050 con Arduino para proyectos de giroscopio y acelerometro.

Interfaz entre MPU-6050 y Arduino.

En este proyecto, le mostraré cómo funciona el sensor MPU6050 y también cómo conectar Arduino con el MPU6050. Interconectaremos una placa de ruptura MPU-6050 con Arduino UNO y leeremos los valores del acelerómetro y el giroscopio.

Antes de ingresar al proyecto, debe comprender algunos conceptos básicos del sensor MPU6050. El MPU-6050 es un sensor IMU que contiene un acelerómetro MEMS (sistema microelectromecánico) y un giroscopio MEMS en un solo chip.

Aquí, el sensor IMU, donde el IMU representa Unidad de medición inercial, es un dispositivo que mide la fuerza específica usando acelerómetro, velocidad angular utilizando giroscopio y campo magnético usando magnetómetros.

Los sensores IMU se utilizan en robots, aviones, teléfonos móviles, tabletas, naves espaciales, satélites, drones, vehículos aéreos no tripulados autoequilibrados, para orientación, detección de posición, detección de orientación, seguimiento de movimiento y control de vuelo.

Las dos IMU comunes son acelerómetro ADXL 335 y MPU-6050. El ADXL 335 contiene un acelerómetro de 3 ejes.

En el caso de MPU-6050, es un dispositivo de seguimiento de movimiento de seis ejes que combina un acelerómetro de 3 ejes y un giroscopio de 3 ejes en un solo chip. Veremos más detalles sobre MPU6050 en la siguiente sección.

modulo MPU6050
modulo MPU6050

Tabla de contenido

  • Introducción al sensor MPU6050
  • Interfaz entre MPU6050 y Arduino
  • Componentes necesarios
    • Hardware
    • Software
  • Diagrama de circuito
  • Lectura de valores RAW de MPU6050
  • Carga del código en Arduino y prueba de MPU6050
  • Modelado 3D en el procesamiento según los valores de Interfacing Arduino y MPU6050

Introducción al sensor MPU6050

El MPU-6050 es un motor de seis ejes en el dispositivo de rastreo desarrollado por InvenSense. Las principales características del dispositivo MPU6050 se mencionan a continuación.

  • Acelerómetro de tres ejes
  • Giroscopio de tres ejes
  • Sensor de temperatura de salida digital
  • Seis ADC de 16 bits (tres para acelerómetro y tres para giroscopio)
  • Procesador de movimiento digital integrado (DMP)
  • Buffer FIFO 1024B

El MPU-6050 de seis ejes se denomina en algún momento dispositivo de 6 DoF (seis grados de libertad), ya que proporciona seis valores de salida (tres de Acelerómetro y tres de Gyro). El MPU-6050 se puede comunicar utilizando el protocolo I2C.

El procesador de movimiento digital o el DMP es un procesador integrado que puede reducir la carga computacional del procesador host, como un Arduino, al adquirir y procesar datos del acelerómetro, el giroscopio y un magnetómetro externo.

Interfaz entre MPU6050 y Arduino

Como se mencionó anteriormente, el MPU6050 solo admite la comunicación I2C y, por lo tanto, debe estar conectado solo a los pines I2C del Arduino. Los pines I2C de Arduino se multiplexan con los pines de entrada analógica A4 y A5, es decir, A4 es SDA y A5 es SCL.

MPU6050 con arduino
MPU6050 con arduino

Viniendo al MPU6050, hemos usado una placa de ruptura normal que proporcionado ocho pines. La imagen de arriba muestra la representación esquemática de la placa MPU6050 Breakout.

En esto, usaremos las patillas SCL, SDA e INT para conectar con Arduino.

coneccion del modulo acelerometro giroscopio
coneccion del modulo acelerometro giroscopio

Componentes requeridos

Hardware

  • Arduino UNO
  • MPU6050 Breakout Board
  • Conexión de cables

Software

  • Arduino IDE
  • Procesamiento (para visualización tridimensional)

Diagrama de circuito

La siguiente imagen muestra el diagrama de circuito para interconectar MPU6050 con Arduino UNO. Como se mencionó anteriormente, la interfaz entre MPU6050 y Arduino debe implementarse utilizando el protocolo I2C.

Por lo tanto, el Pin SCL del Arduino (A5) está conectado al Pin SCL del MPU6050. De manera similar, el Pin SDA del Arduino (A4) está conectado al Pin SDA de la placa MPU6050.

Además, usaremos la función de Interrupción del MPU6050 para indicar (o interrumpir) Arduino cuando el 1024 Byte FIFO buffer está lleno. Entonces, conecte el pin INT del MPU6050 al pin de interrupción externa 0 (INT0) de Arduino UNO, es decir, el Pin 2.


NOTA: En la Comunicación I2C, el MPU-6050 siempre actúa como un esclavo.

Lectura de valores RAW desde MPU6050

Antes de cargar el programa real, primero veremos un programa simple para leer los valores brutos del Acelerómetro, giroscopio y el sensor de temperatura. Simplemente conecte los cables SCL y SDA del MPU6050 a los pines I2C correspondientes de Arduino (A4 y A5) y cargue el siguiente código.

#include<Wire.h>
const int MPU6050_addr=0x68;
int16_t AccX,AccY,AccZ,Temp,GyroX,GyroY,GyroZ;
void setup(){
Wire.begin();
Wire.beginTransmission(MPU6050_addr);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(9600);
}
void loop(){
Wire.beginTransmission(MPU6050_addr);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_addr,14,true);
AccX=Wire.read()<<8|Wire.read();
AccY=Wire.read()<<8|Wire.read();
AccZ=Wire.read()<<8|Wire.read();
Temp=Wire.read()<<8|Wire.read();
GyroX=Wire.read()<<8|Wire.read();
GyroY=Wire.read()<<8|Wire.read();
GyroZ=Wire.read()<<8|Wire.read();
Serial.print(«AccX = «); Serial.print(AccX);
Serial.print(» || AccY = «); Serial.print(AccY);
Serial.print(» || AccZ = «); Serial.print(AccZ);
Serial.print(» || Temp = «); Serial.print(Temp/340.00+36.53);
Serial.print(» || GyroX = «); Serial.print(GyroX);
Serial.print(» || GyroY = «); Serial.print(GyroY);
Serial.print(» || GyroZ = «); Serial.println(GyroZ);
delay(100);
}

Si abre el terminal en serie, obtendrá los valores brutos del acelerómetro y el giroscopio y la temperatura calibrada del sensor de temperatura. Los datos se parecen a algo así.

 MPU6050 Imagen 2

Como puede ver, leer los valores brutos del sensor MPU6050 es fácil, pero es solo información y necesitamos realizar un cálculo adicional en esta información para obtener el guiñada, el tono y el rodillo.

Ya he mencionado que en el sensor MPU6050, hay un procesador especial llamado DMP o procesador de movimiento digital que está incrustado en el mismo chip que el acelerómetro y el giroscopio. El uso de este DMP es que se puede programar con un firmware para realizar cálculos complejos en los datos de los sensores.

Pero no hay documentación clara sobre el DMP del lado de InvenSense y, como resultado, estamos Perdiendo la oportunidad de hacer cálculos rápidos sobre los datos del sensor directamente en el chip.

Jeff Rowberg y otros han hecho un excelente trabajo en la ingeniería inversa de la información relacionada con DMP del análisis de señal I2C.

Cargar el código en Arduino y probar MPU6050

Antes de cargar el código, debemos descargar dos bibliotecas para Arduino. Estas son I2Cdev y MPU6050. Los enlaces de descarga y los enlaces oficiales de GitHub se detallan a continuación.

I2Cdev: DESCARGUE LA BIBLIOTECA I2CDEV o visite GitHub ENLACE

MPU6050 : DESCARGAR LA BIBLIOTECA MPU6050 o visite GitHub ENLACE

Descargue la Biblioteca MPU6050 y extraiga el contenido descomprimiendo del archivo descargado. Obtendrás una carpeta con el nombre «MPU6050». Copie esta carpeta y péguela en la carpeta de bibliotecas de Arduino.

En mi caso, está ubicado en «C: Archivos de programa (x86) Arduino libraries». Haga lo mismo con la biblioteca I2Cdev.

Si todo va bien, abra Arduino IDE y navegue por la siguiente ruta: Archivo > Ejemplos > MPU6050 > Ejemplos > MPU6050_DMP6 y abra el código de ejemplo MPU6050_DMP6.

 MPU6050 Imagen 3

Cargue este código en Arduino (suponiendo que ya ha realizado las conexiones según el diagrama del circuito) y una vez que se cargue el código, abra el terminal en serie.

Establezca la velocidad en baudios en el terminal serie en 115200 y obtendrá el siguiente texto.

«Inicializando DMP …

Inicializando dispositivos I2C …

Conexiones de dispositivos de prueba …

Conexión de MPU6050 exitosa

Enviar cualquier carácter para comenzar la programación y demostración de DMP: »

Si no logra obtener cualquier información o aún getti ng datos basura, simplemente reinicia el Arduino. Si miras la última oración, dice «Enviar cualquier personaje para comenzar la programación y demo de DMP». Entonces, escriba cualquier caracter como 1 o a en el monitor serial y envíelo. Tan pronto como presione enter, puede comenzar a ver los valores de Yaw, Pitch and Roll (ypr) en el monitor serial.

MPU6050 Image 4

NOTA: Durante este tiempo, mantenga el MPU6050 en una superficie estable y horizontal. Además, espere 10 segundos para que los valores del MPU6050 se estabilicen.

Modelado 3D en Processing basado en valores de Interfacing Arduino y MPU6050

En el siguiente paso del proyecto, echaremos un vistazo al modelado 3D del sensor MPU6050 utilizando Processing IDE, donde puede ver la representación 3D de los datos del sensor. Processing es un lenguaje de programación e IDE desarrollado para artes electrónicas y diseño visual. De hecho, el IDE de Arduino también se basa en el lenguaje de programación de procesamiento.

Para descargar el IDE de procesamiento, visite este ENLACE. Descargue e instale el IDE de procesamiento usando el enlace dado.

Después de descargar el IDE de procesamiento e instalarlo (simplemente descomprima el contenido del archivo zip descargado), necesita descargar una biblioteca para Procesamiento llamada «Toxi». Puede descargar la Biblioteca Toxi desde este ENLACE.

He elegido el archivo «toxiclibs-complete-0020». Después de descargar este archivo, extraiga el contenido en una carpeta llamada «toxiclibs-complete-0020».

Copie esta carpeta y péguela en la carpeta de bibliotecas del Procesamiento. En mi caso, fue «C: Users Ravi Documents Processing libraries».

Después de copiar la carpeta, ahora está listo para el modelado 3D. En primer lugar, debe cargar el código anterior de Arduino (MPU6050_DMP6) con algunas modificaciones.

Abra el MPU6050_DMP6 (el programa de ejemplo que cargábamos anteriormente) en el IDE de Arduino. Desplácese hacia abajo hasta la línea que dice lo siguiente.

#define OUTPUT_READABLE_YAWPITCHROLL

Comente esta línea agregando doble barra diagonal delante de ella.

//# defina OUTPUT_READABLE_YAWPITCHROLL

Además, busque la línea que dice //# define OUTPUT_TEAPOT y descomentarlo quitando la barra diagonal doble. Ahora, puedes subir el código. Lo que modificamos en el código es que en lugar de enviar los datos al terminal serie, lo estamos reenviando al IDE de procesamiento.

Ahora, abra el IDE de procesamiento y haga clic en Archivo Abierto. Ahora, vaya a la carpeta donde está instalada la biblioteca MPU6050 para Arduino. Abra el ejemplo de procesamiento con el nombre «MPUTeapot».

En mi caso, la ubicación para este ejemplo es C: Archivos de programa (x86) Arduino libraries MPU6050 Examples MPU6050_DMP6 Processing MPUTeapot.

Este programa tiene una provisión para seleccionar automáticamente el número de PUERTO al que está conectado Arduino. La línea en el código asociado con esto es

String portName = Serial.list () [0];

Otra forma de especificar el número PORT de Arduino es ingresar manualmente el COM Número de puerto. Para hacerlo, comente la línea anterior y elimine el comentario de la línea siguiente y reemplace el número de puerto COM con el número de puerto COM al que Arduino está conectado.

//String portName = » COM4 «;

Antes de presionar el botón de ejecución en Processing, asegúrese de que el Serial Monitor de Arduino IDE esté cerrado. Ahora, haga clic en el botón ejecutar en el IDE de procesamiento. Obtendrás una ventana con una estructura similar a un avión. Espere 10 segundos antes de modelar 3D el MPU6050.

Los movimientos realizados por el MPU6050 se pueden ver a través del Objeto 3D en la pantalla.