Nota

Hola, ¡bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook! Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.

¿Por qué unirse?

  • Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Avances exclusivos: Obtén acceso anticipado a nuevos anuncios de productos y adelantos.

  • Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Promociones festivas y sorteos: Participa en sorteos y promociones de temporada.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo!

QMC5883L

Descripción general

En este tutorial, exploraremos el módulo IMU GY-87, centrándonos en su magnetómetro QMC5883L. La primera parte del tutorial te guía a través de la calibración del magnetómetro QMC5883L, esencial para mediciones precisas del campo magnético. Aprenderás cómo cargar un sketch de calibración en Arduino, realizar la calibración en tiempo real y aplicar estos ajustes en tus proyectos. La segunda parte del tutorial cubre la inicialización del MPU6050 (acelerómetro y giroscopio) y el QMC5883L en un Arduino Uno utilizando las bibliotecas Adafruit MPU6050 y QMC5883LCompass. Aprenderás a leer y mostrar datos del sensor en el Monitor Serial, una habilidad fundamental para aplicaciones en navegación, seguimiento de movimiento y detección de orientación.

Componentes necesarios

En este proyecto, necesitamos los siguientes componentes.

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

Elite Explorer Kit

300+

Elite Explorer Kit

También puedes comprarlos por separado desde los enlaces a continuación.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Arduino Uno R4 WiFi

-

Cables de Puente

COMPRAR

Módulo IMU GY-87

-

Cableado

../_images/09-gy87_bb1.png

Diagrama esquemático

../_images/09_basic_gy87_schematic.png

Instalar biblioteca

Nota

Para instalar la biblioteca, utiliza el Administrador de Bibliotecas de Arduino.

  • Busca «Adafruit MPU6050» e instálala

    Al instalar cada biblioteca, asegúrate de seleccionar la instalación de todas las dependencias.

    ../_images/09-add_lib_tip.png
  • Busca «QMC5883LCompass» e instálala

Calibrar QMC5883L

Nota

  • Puedes abrir el archivo 09-gy87_compass_calibration.ino en la ruta de elite-explorer-kit-main\basic_project\09-gy87_compass_calibration directamente.

  • O copiar este código en el IDE de Arduino.

Después de cargar el código, abre el monitor serial. Sigue las instrucciones en el monitor serial para calibrar el QMC5883L. Cuando se te indique mover el sensor, se recomienda utilizar el método de calibración en forma de 8. Alternativamente, simplemente mantén el sensor paralelo al suelo y gíralo en sentido horario o antihorario hasta que el monitor serial indique que la calibración está completa.

../_images/09_calibrate_qmc5883l.png

Una vez que se hayan recopilado todos los datos de calibración, el sketch te proporcionará un código que se verá como compass.setCalibrationOffsets(-375.00, -179.00, 85.00); y compass.setCalibrationScales(1.04, 0.96, 1.01);. Copia este código. Es posible que desees guardarlo para futuras referencias.

Al usar el QMC5883L: Abre el sketch de tu proyecto y pega la línea de código que copiaste directamente debajo de la llamada compass.init(). Así:

void initializeQMC5883L() {

  compass.init();

  // Debes reemplazar el código a continuación según tus resultados de calibración
  compass.setCalibrationOffsets(-375.00, -179.00, 85.00);
  compass.setCalibrationScales(1.04, 0.96, 1.01);

}

Código

Nota

Los magnetómetros deben calibrarse(Calibrar QMC5883L) antes de que puedan usarse como brújulas, y deben mantenerse nivelados durante su uso y mantenerse alejados de objetos de hierro, materiales magnetizados y cables que transportan corriente.

Nota

  • Puedes abrir el archivo 09-gy87_qmc5883l.ino en la ruta de elite-explorer-kit-main\basic_project\09-gy87_qmc5883l directamente.

  • O copiar este código en el IDE de Arduino.

  • Coloca el código obtenido de los pasos de calibración debajo de la línea de código compass.init() en la función initializeQMC5883L().

Análisis del código

  1. Incluir bibliotecas e inicializar sensores Esta sección incluye las bibliotecas necesarias para los sensores MPU6050 y QMC5883L e inicializa sus objetos.

    #include <Adafruit_MPU6050.h>
    #include <Adafruit_Sensor.h>
    #include <Wire.h>
    #include <QMC5883LCompass.h>
    
    Adafruit_MPU6050 mpu;
    QMC5883LCompass compass;
    
  2. Función de configuración

    Inicializa la comunicación serial, el sensor MPU6050 y configura el MPU6050 en modo bypass I2C para permitir el acceso directo al magnetómetro QMC5883L. Luego, inicializa el magnetómetro QMC5883L.

    void setup() {
      // Inicializa la comunicación serial con una velocidad de 9600 baudios
      Serial.begin(9600);
    
      // Inicializa el sensor MPU6050 (acelerómetro y giroscopio)
      initializeMPU6050();
    
      // Habilita el bypass I2C en el MPU6050 para acceder directamente al magnetómetro QMC5883L
      mpu.setI2CBypass(true);
    
      // Inicializa el sensor magnetómetro QMC5883L
      initializeQMC5883L();
    }
    
  3. Función de bucle

    Lee continuamente los datos del magnetómetro QMC5883L y los imprime en el Monitor Serial.

    void loop() {
      printQMC5883L();
      delay(500);
    }
    
  4. Función para inicializar el QMC5883L

    Inicializa y calibra el magnetómetro QMC5883L. Los valores de calibración deben ajustarse según los datos específicos de calibración.(Calibrar QMC5883L)

    void initializeQMC5883L() {
      compass.init();
    
      // Debes reemplazar el código a continuación según tus resultados de calibración
      compass.setCalibrationOffsets(-549.00, -66.00, 160.00);
      compass.setCalibrationScales(0.97, 1.02, 1.02);
    }
    
  5. Función para imprimir los datos del QMC5883L

    Esta función lee los valores X, Y, Z y el acimut del magnetómetro, y los imprime en el Monitor Serial.

    void printQMC5883L() {
    
      Serial.println();
      Serial.println("QMC5883L ------------");
    
        int x, y, z, a;
        char myArray[3];
    
        compass.read();
    
        x = compass.getX();
        y = compass.getY();
        z = compass.getZ();
    
        a = compass.getAzimuth();
    
        compass.getDirection(myArray, a);
    
        Serial.print("X: ");
        Serial.print(x);
    
        Serial.print(" Y: ");
        Serial.print(y);
    
        Serial.print(" Z: ");
        Serial.print(z);
    
        Serial.print(" Azimuth: ");
        Serial.print(a);
    
        Serial.print(" Direction: ");
        Serial.print(myArray[0]);
        Serial.print(myArray[1]);
        Serial.println(myArray[2]);
    
      Serial.println("QMC5883L ------------");
      Serial.println();
    }