MPU6050 Acelerometro y Giroscopio con Arduino Leonardo

publicado en: Sin Categoria | 0

Acelerometro y Giroscopio con MPU6050 + Arduino Leonardo 1El dispositivo MPU6050 (datasheet) posee un Acelerometro de 3 ejes y Giroscopio de 3 ejes, integrado en un solo chip, esto permite tener 6 grados de libertad ( x, y, z ) en ambos. Ademas este dispositivo es capaz de medir la aceleración de la gravedad respecto a cada eje (de esto obtenemos el angulo de giro) y la velocidad angular. Hoy en día podemos tener a nuestro alcance este dispositivo gracias a su bajo coste y muchas prestaciones ya que son muy utilizados en Robótica (robots de auto-equilibrio), UAV (vehículo aéreo NO tripulado «DRONE»), smartphone, etc.

Como se menciona el sensor MPU6050 posee 6 grados de libertad: Acelerometro de 3 ejes y Giroscopio de 3 ejes, su alimentación es de 3.3v pero gracias a que tiene un regulador se puede alimentar directamente con 5v. Su comunicación es a través del protocolo I2C y a una velocidad máxima de 400Khz, la version MPU-600 posee el protocolo SPI. A continuación se muestra sus características:

Además la comunidad arduino aporta muchas librerias, tanto en código y hardware, como esquemáticos, archivos eagle, etc. A continuación se muestra los link de descarga de los archivos relacionados con el MPU6050.

Archivos Eagle: Triple_Axis_Accelerometer-Gyro_Breakout_-_MPU-6050_v12 (1).zip

Esquematico: Triple_Axis_Accelerometer-Gyro_Breakout_-_MPU-6050_v12.pdf

CARACTERÍSTICAS DE MPU6050:

  1. Rango seleccionable para Acelerometro: ±2g, ±4g, ±8g, ±16g.
  2. Rango seleccionable para Giroscopio: ±250/500/1000/2000 g/s (grados/segundos).
  3. Salida de 16 bits para ambos.
  4. Giroscopio de 0.1g/s de sensibilidad.
  5. Bajo nivel de ruido.
  6. Sensor de temperatura digital.

EJEMPLO.

 

#include

// Dirección de MPU-6050
#define MPU 0x68

// Variables para almacenar Acelerometro y Giroscopio ejes (X,Y,Z).
unsigned int acelX,acelY,acelZ,giroX,giroY,giroZ;

void setup(){
Serial.begin(57600);
Wire.beginTransmission(MPU); // Inicio de Comunicacion I2C con MPU-6050.
Wire.write(0x6B); // Escritura de Dirección del registro.
Wire.write(0); // Escribe 0x00 en el registro.
Wire.endTransmission(true); // Stop MPU-6050.
delay(10);
// Verifica si es el dispositivo correcto leyendo su dirección.
Wire.beginTransmission(MPU); // Start MPU-6050.
Wire.write(0x75); // Escritura de Dirección del registro.
Wire.endTransmission(false); // Repite-Start.
Wire.requestFrom(MPU,1,true); // Peticion de Lectura.
byte c=Wire.read(); // Lectura de registro seleccionado.
if(c==MPU){
Serial.println("ID ok.");
}
else{
Serial.println("ID error.");
}
}

void loop(){
Wire.beginTransmission(MPU); // Start Comunicación MPU-6050.
Wire.write(0x3B); // Selecciona Registro Acelerometro eje X.
Wire.endTransmission(false); // Repite-Start.
Wire.requestFrom(MPU,6,true); // Lectura de 6 registros, cada registro ocupa 2 bytes.
acelX=Wire.read()<<8|Wire.read();// Lecura de Acelerometro eje X.
acelY=Wire.read()<<8|Wire.read();// Lecura de Acelerometro eje Y.
acelZ=Wire.read()<<8|Wire.read();// Lecura de Acelerometro eje Z.
delay(1);
Wire.beginTransmission(MPU); // Start Comunicación MPU-6050.
Wire.write(0x43); // Selecciona Registro Giroscopio eje X.
Wire.endTransmission(false); // Repite-Start.
Wire.requestFrom(MPU,4,true); // Lectura de 6 registros, cada registro ocupa 2 bytes.
giroX=Wire.read()<<8|Wire.read();// Lecura de Giroscopio eje X.
giroY=Wire.read()<<8|Wire.read();// Lecura de Giroscopio eje Y.
giroZ=Wire.read()<<8|Wire.read();// Lecura de Giroscopio eje Z.
// Muestra datos en Monitor Serial.
Serial.print(acelX);
Serial.print(" - ");
Serial.print(acelY);
Serial.print(" - ");
Serial.println(acelZ);
Serial.print(giroX);
Serial.print(" - ");
Serial.print(giroY);
Serial.print(" - ");
Serial.println(giroZ);
Serial.println();
delay(50);
}

Deja una respuesta