INFORMACIÓN
El modulo Gy-87 realiza detección de movimiento en 10 ejes , ya que cuenta con acelerómetro de 3 ejes(3DOF), giroscopio de 3 ejes(3DOF), magnetómetro de 3 ejes(3DOF) y barómetro de 1 eje(1DOF). La comunicación puede realizarse tanto por bus SPI cómo por bus I2C, por lo que es sencillo obtener los datos medidos.
Las aplicaciones son muy amplias pues con este módulo se pueden realizar proyectos de sistemas de navegación, realidad virtual, funciones activadas por movimiento, detecciones en dimensiones, entre otros.
El módulo contiene 8 pines header rectos para soldar a la placa.
Nota: Es posible que la librería oficial de Adafruit del HMC5883 pueda generar errores al compilar el código, las pruebas se realizaron en febrero 2023 con la ultima versión publicada hasta la fecha, sin embargo puedes usar variaciones de esta librería como la que te proporcionamos aquí.
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
Características del Giroscopio
- Chip Principal: MPU6050
- Rango de Giroscopio: 250/500/1000/2000 grados/segundo
- Resolución ADC: 16 bit
- Corriente de Operación: 3.2mA
Características del 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
Características del Magnetómetro
- Chip Principal: HMC5883
- Rango del campo magnético: ± 4800uT (completo)
- Medición: hasta ±8 Gauss.
- Resolución ADC: 14 bit
Características del 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
- Pinout -GY87
- Librerías para Arduino
- Datasheet
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.
HMC5883
El HMC5883 es un módulo multichip de montaje en superficie diseñado para detección magnética de campo bajo con una interfaz digital para aplicaciones como la magnetometría y la brújula de bajo costo. El HMC5883 incluye nuestros sensores magnetorresistivos de alta resolución de la serie HMC118X de última generación, además de amplificación que contiene ASIC desarrollado por Honeywell, controladores de correa de desmagnetización automática, cancelación de desplazamiento, ADC de 12 bits que permite una precisión de rumbo de la brújula de 1 ° a 2 °. Las aplicaciones para el HMC5883 incluyen teléfonos móviles, netbooks, electrónica de consumo, sistemas de navegación para automóviles y dispositivos de navegación personal.
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 temperature; //Variable para temperatura
float pressure; //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("Inicializando dispositivos I2C...");
barometro.initialize();
mag.initialize();
// Verificación de conexión
Serial.println("Verificando conexión...");
Serial.println(barometro.testConnection() ? "BMP085 conexion exitosa" : "BMP085 conexion fallida");
Serial.println("Verificando conexión...");
Serial.println(mag.testConnection() ? "HMC5883L conexion exitosa" : "HMC5883L conexion fallida");
}
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(" accY : "); Serial.print(mpu6050.getAccY());
Serial.print(" accZ : "); Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : "); Serial.print(mpu6050.getGyroX());
Serial.print(" gyroY : "); Serial.print(mpu6050.getGyroY());
Serial.print(" gyroZ : "); Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : "); Serial.print(mpu6050.getAccAngleX());
Serial.print(" accAngleY : "); Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : "); Serial.print(mpu6050.getGyroAngleX());
Serial.print(" gyroAngleY : "); Serial.print(mpu6050.getGyroAngleY());
Serial.print(" gyroAngleZ : "); Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : "); Serial.print(mpu6050.getAngleX());
Serial.print(" angleY : "); Serial.print(mpu6050.getAngleY());
Serial.print(" angleZ : "); Serial.println(mpu6050.getAngleZ());
// solicitud de temperatura
barometro.setControl(BMP085_MODE_TEMPERATURE);
// lectura calibrada del valor de temperatura en Celcius
temperature = barometro.getTemperatureC();
// Solicitud de presión cada 23.5ms (por sobremuestreo)
barometro.setControl(BMP085_MODE_PRESSURE_3);
// lectura calibrada del valor de la presión en Pascales(Pa)
pressure = barometro.getPressure();
altitude = barometro.getAltitude(pressure);
// impresión del censado de variables
Serial.print("Temp: "); Serial.print(temperature); Serial.print("C");
Serial.print(" Press: "); Serial.print(pressure);
Serial.print(" Alt: "); Serial.print(altitude);
// impresión de los valores gyro x/y/z
Serial.print("mag:");
Serial.print(mx); Serial.print("x");
Serial.print(my); Serial.print("y");
Serial.print(mz); Serial.print("z");
// calculo de los grados del magnetómetro
float heading = atan2(my, mx);
if(heading < 0)
heading += 2 * M_PI;
Serial.print("heading: ");
Serial.println(heading * 180/M_PI);
Serial.println("=======================================================n");
timer = millis();
}
}
Valoraciones
No hay valoraciones aún.