Tienda de Electronica Avanzada

Tienda de Electronica Avanzada

$5,00

El IMU MPU6050 6 Grados de libertad es un circuito integrado que combina un giroscopio de 3-ejes y un acelerómetro de 3-ejes en el mismo chip, teniendo 6 grados de libertad(DoF).

Compare

El IMU MPU6050 6 Grados de libertad es un circuito integrado que combina un giroscopio de 3-ejes y un acelerómetro de 3-ejes en el mismo chip, teniendo 6 grados de libertad(DoF).

¿Para qué sirve el IMU MPU6050?

El MPU6050 es útil para sistemas de control, medición de vibración, sistemas de medición inercial (IMU), detección de caídas, sensor de distancia y/o velocidad o goniometría (medición de ángulos).


ESPECIFICACIÓN Y CARACTERÍSTICAS

  • Voltaje de funcionamiento: 3.3V5V
  • Chip: MPU-6050.
  • Grados de libertad (DoF): 6
  • Protocolo de comunicación: I2C 
  • Convertidor analógico a digital: 16 bit en todos los ejes.
  • Rango
    • Giroscopio: +/-250,+/- 500,+/- 1000 y +/- 2000° /s(dps)
    • Acelerómetro: +/-2 ,+/-4 ,+/-8  y +/-16g

DOCUMENTACIÓN Y RECURSOS


INFORMACIÓN ADICIONAL

¿Cómo funciona  el IMU MPU6050?

Este sensor se comunica a través de la interfaz I2C, cuenta con un regulador de tensión a 3.3V (por lo cual se puede alimentar con los 5V de placas de Arduino).

Las direcciones para poder trabajar en I2C son:

PIN AD0 Dirección I2C
AD0=HIGH  (5V) 0x69
AD0=LOW  (GND o NC) 0x68

Esto permitirá usar dos dispositivos en el mismo bus o en caso de que haya un conflicto de dirección con otro dispositivo en el bus. A continuación las conexiones para usar el dispositivo en Arduino UNO:

Conexión del Arduino a MPU-6050 para interfaz de I2C

Código de prueba para MPU-6050 GY-521

Se presenta el siguiente código con la finalidad de que puedas probar el funcionamiento del MPU , cabe mencionar que se requiere calibración y los datos arrojados son de fabrica. Para mas información revisar el datasheet.

#include "Wire.h"                           //Librería para poder comunicarse con dispositivos por I2C
const int MPU_ADDR = 0x68;                  // Dirección I2C del MPU-6050. Si AD0(0x69) HIGH, de lo contrario I2C(0x69)es LOW
int16_t a_x, a_y, a_z;                      // variables para el acelerómetro
int16_t g_x, g_y, g_z;                      // variables para giroscopio
int16_t t;                                  // variables para temperatura
char tmp_str[7];                            // variable temporal con 7 carácters
char* convert_int16_to_str(int16_t i) {    // variables para conversión de int16 a texto
  sprintf(tmp_str, "%6d", i);
  return tmp_str;
}
void setup() {
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(MPU_ADDR);        // Comienza la comunicación entre GY-521 por I2C
  Wire.write(0x6B);                        // registro para direcciones
  Wire.write(0);                           // empieza en cero (encender MPU-6050)
  Wire.endTransmission(true);
}
void loop() {
  Wire.beginTransmission(MPU_ADDR);
  Wire.write(0x3B);                        // se empieza con el registro 0x3B salida del acelerómetro(ACCEL_XOUT_H)
  Wire.endTransmission(false);             // Parámetro que indica que el Arduino mandara reset. O se mantendrá la conexión activa.
  Wire.requestFrom(MPU_ADDR, 7 * 2, true); // solicitud de 14 registros

 // "Wire.read()<<8 | Wire.read();" significa 2 registros son leídos y guardados en la misma variable
  
  a_x = Wire.read() << 8 | Wire.read();   // lectura del registro para acelerómetro: 0x3B (A_XOUT_H) y 0x3C (A_XOUT_L) (HIGH/LOW)
  a_y = Wire.read() << 8 | Wire.read();   // lectura del registro: 0x3D (A_YOUT_H) y 0x3E (A_YOUT_L)(HIGH/LOW)
  a_z = Wire.read() << 8 | Wire.read();   //lectura del registro: 0x3F (A_ZOUT_H) y 0x40 (A_ZOUT_L)(HIGH/LOW)

  t = Wire.read() << 8 | Wire.read();    // lectura del registro para temperatura: 0x41 (T_OUT_H) y 0x42 (T_OUT_L)(HIGH/LOW)

  g_x = Wire.read() << 8 | Wire.read();  // lectura del registro para giroscopio: 0x43 (G_XOUT_H) and 0x44 (GYRO_XOUT_L)
  g_y = Wire.read() << 8 | Wire.read();  // lectura del registro: 0x45 (G_YOUT_H) and 0x46 (G_YOUT_L)
  g_z = Wire.read() << 8 | Wire.read();  // lectura del registro: 0x47 (G_ZOUT_H) and 0x48 (G_ZOUT_L)

  // Impresión de la información
  Serial.print("aX = "); Serial.print(convert_int16_to_str(a_x));
  Serial.print(" | aY = "); Serial.print(convert_int16_to_str(a_y));
  Serial.print(" | aZ = "); Serial.print(convert_int16_to_str(a_z));
  Serial.print(" | tmp = "); Serial.print(t / 340.00 + 36.53);         // ecuación recomendada en el datasheet para la temperatura
  Serial.print(" | gX = "); Serial.print(convert_int16_to_str(g_x));
  Serial.print(" | gY = "); Serial.print(convert_int16_to_str(g_y));
  Serial.print(" | gZ = "); Serial.print(convert_int16_to_str(g_z));
  Serial.println();

  // espera 1s para la siguiente lectura
  delay(1000);
}

 

ENLACES EXTERNOS

Valoraciones

No hay valoraciones aún.

Sé el primero en valorar “Modulo 6y-521 Mpu6050 Giroscopio + Acelerometro Arduino”

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