INFORMACIÓN
Gy-87 Sensor IMU 10 DOF permite la detección de movimiento en 10 ejes, este módulo tiene un detalle de fabricación ¡No funciona el magnetómetro de 3 ejes (3DOF)!, los demás ejes son funcionales como acelerómetro de 3 ejes (3DOF), giroscopio de 3 ejes (3DOF), y barómetro de 1 eje (1DOF). La comunicación puede realizarse tanto por bus SPI como por bus I2C, por lo que es sencillo obtener los datos medidos.
El sensor incluye 2 tiras headers de macho 8 pines.
ESPECIFICACIÓN Y CARACTERÍSTICAS
- Módulo Modelo: GY-87
- Sensor: MPU-6050
- Voltaje de alimentación: 3V a 5V (con regulador interno)
- Grados de libertad (DoF): 10
- Dimensiones: 2.2 x 1.7 cm
- Peso: 6 g
- Interfaz: I2C o SPI
Giroscopio
- Chip Principal: MPU6050
- Rango de Giroscopio: 250 / 500 / 1000 / 2000 grados/segundo
- Resolución ADC: 16 bit
- Corriente de Operación: 3.2mA
Acelerómetro
- Chip Principal: MPU6050
- Rango de Aceleración: ± 2 ± 4 ± 8 ± 16 g
- Resolución ADC: 16 bit
- Corriente de Operación: 450 uA
Barómetro
- Chip Principal: BMP180
- Tipo: Sensor de presión atmosférica digital
- Rango del Barómetro: 0.0016hPa
- Rango de Medición: 300~1100hPa (altitud: +9000m ~ -500m)
- Resolución de Temperatura : 0.01°C
- Corriente de Operación: (1Hz actualización, ahorro de energía): 2.8uA
DOCUMENTACIÓN Y RECURSOS
INFORMACIÓN ADICIONAL
Información detallada sobre los chips principales
MPU6050
Los dispositivos MPU6050 combinan un giroscopio de 3 ejes y un acelerómetro de 3 ejes en el mismo silicio junto con un procesador de movimiento digital (DMP) integrado capaz de procesar complejos algoritmos MotionFusion de 9 ejes.
Los algoritmos MotionFusion integrados de 9 ejes de las piezas acceden a magnetómetros externos u otros sensores a través de un bus I2C maestro auxiliar, lo que permite que los dispositivos recopilen un conjunto completo de datos de sensores sin la intervención del procesador del sistema.
BMP180
Este sensor de precisión es la mejor solución de detección de bajo costo para medir la presión barométrica y la temperatura. Debido a que la presión cambia con la altitud. El BMP180 es la próxima generación de sensores y reemplaza al BMP085. La buena noticia es que es completamente idéntico al BMP085 en términos de firmware / software ; puede el BMP085 y cualquier código / biblioteca de ejemplo como reemplazo directo. El pin XCLR no está físicamente presente en el BMP180, por lo que si necesita saber que los datos están listos, deberá consultar el bus I2C.
Diagrama de conexión para un Arduino Uno:
Código prueba y conexión para MPU6050 10DOF en Arduino
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.
#include <MPU6050_tockn.h>
#include <Wire.h> //Librería para poder comunicarse con dispositivos por I2C
#include "I2Cdev.h" //Librería para para comunicación I2C
#include "BMP085.h" //Librería del barómetro
#include "HMC5883L.h" //Librería del magnetómetro
MPU6050 mpu6050(Wire); //Datos del acelerómetro y giroscopio
BMP085 barometro; //Datos para el barómetro
HMC5883L mag; //Datos para magnetómetro
long timer = 0; //Variable para timer de mediciones
float temperatura; //Variable para temperatura
float presion; //Variable para presión
int32_t altitude; //Variable para altitud
int16_t mx, my, mz; //Variables para magnetómetro
void setup() {
//Inicialización de puertos y módulos
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
Serial.println("Initializing I2C devices...");
barometer.initialize();
mag.initialize();
// Verificación de conexión
Serial.println("Testing device connections...");
Serial.println(barometer.testConnection() ? "BMP085 connection successful" : "BMP085 connection failed");
Serial.println("Testing device connections...");
Serial.println(mag.testConnection() ? "HMC5883L connection successful" : "HMC5883L connection failed");
}
void loop() {
mpu6050.update();
mag.getHeading(&mx, &my, &mz);
//impresión y censado de variables
if (millis() - timer > 1000) {
Serial.println("=======================================================");
Serial.print("temp : "); Serial.println(mpu6050.getTemp());
Serial.print("accX : "); Serial.print(mpu6050.getAccX());
Serial.print("taccY : "); Serial.print(mpu6050.getAccY());
Serial.print("taccZ : "); Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : "); Serial.print(mpu6050.getGyroX());
Serial.print("tgyroY : "); Serial.print(mpu6050.getGyroY());
Serial.print("tgyroZ : "); Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : "); Serial.print(mpu6050.getAccAngleX());
Serial.print("taccAngleY : "); Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : "); Serial.print(mpu6050.getGyroAngleX());
Serial.print("tgyroAngleY : "); Serial.print(mpu6050.getGyroAngleY());
Serial.printt("tgyroAngleZ : "); Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : "); Serial.printt(mpu6050.getAngleX());
Serial.print("tangleY : "); Serial.print(mpu6050.getAngleY());
Serial.print("tangleZ : "); Serial.println(mpu6050.getAngleZ());
// solicitud de temperatura
barometer.setControl(BMP085_MODE_TEMPERATURE);
// lectura calibrada del valor de temperatura en Celcius
temperature = barometer.getTemperatureC();
// Solicitud de presión cada 23.5ms (por sobremuestreo)
barometer.setControl(BMP085_MODE_PRESSURE_3);
// lectura calibrada del valor de la presión en Pascales(Pa)
pressure = barometer.getPressure();
altitude = barometer.getAltitude(pressure);
// impresión del censado de variables
Serial.print("T/P/At");
Serial.print(temperature); Serial.print("t");
Serial.print(pressure); Serial.print("t");
Serial.print(altitude);
// impresión de los valores gyro x/y/z
Serial.print("mag:t");
Serial.print(mx); Serial.print("t");
Serial.print(my); Serial.print("t");
Serial.print(mz); Serial.print("t");
// calculo de los grados de ángulo donde 0° indica el Norte
float heading = atan2(my, mx);
if(heading < 0)
heading += 2 * M_PI;
Serial.print("heading:t");
Serial.printn(heading * 180/M_PI);
Serial.printn("=======================================================n");
timer = millis();
}
}
Valoraciones
No hay valoraciones aún.