QMC5883L
概述
在本教程中,我们将探索 GY-87 IMU 模块,重点介绍其 QMC5883L 磁力计。教程的第一部分将指导您校准 QMC5883L 磁力计,这对于精确的磁场测量至关重要。您将学习如何将校准草图上传到 Arduino,执行实时校准,并在项目中应用这些设置。教程的第二部分介绍如何使用 Adafruit MPU6050 和 QMC5883LCompass 库,在 Arduino Uno 上初始化 MPU6050(加速度计和陀螺仪)和 QMC5883L。您将学习如何读取传感器数据并在串口监视器上显示,这是导航、运动追踪和方向检测应用中的基础技能。
所需元件
本项目中,我们需要以下元件。
购买整套套件会更加方便,以下是链接:
名称 |
套件所含项目 |
链接 |
|---|---|---|
Elite Explorer 套件 |
300+ |
您也可以从以下链接单独购买。
元件介绍 |
购买链接 |
|---|---|
- |
|
- |
接线
原理图
安装库
校准 QMC5883L
备注
您可以直接打开路径
elite-explorer-kit-main\basic_project\09-gy87_compass_calibration下的09-gy87_compass_calibration.ino文件。或者将以下代码复制到 Arduino IDE 中。
上传代码后,打开串口监视器。按照串口监视器中的指示校准 QMC5883L。当提示移动传感器时,建议使用八字校准法。或者,只需将传感器保持与地面平行,顺时针或逆时针旋转,直到串口监视器提示校准完成。
收集完所有校准数据后,草图将提供类似 compass.setCalibrationOffsets(-375.00, -179.00, 85.00); 和 compass.setCalibrationScales(1.04, 0.96, 1.01); 的代码。复制此代码。建议保存以供将来参考。
使用 QMC5883L 时:打开项目草图,将复制的代码行直接粘贴到 compass.init() 调用下方。如下所示:
void initializeQMC5883L() {
compass.init();
// 您应根据校准结果替换以下代码
compass.setCalibrationOffsets(-375.00, -179.00, 85.00);
compass.setCalibrationScales(1.04, 0.96, 1.01);
}
代码
备注
磁力计必须经过校准(校准 QMC5883L)才能用作指南针,使用时必须保持水平,并**远离铁质物体、磁化材料和载流导线** 。
备注
您可以直接打开路径
elite-explorer-kit-main\basic_project\09-gy87_qmc5883l下的09-gy87_qmc5883l.ino文件。或者将以下代码复制到 Arduino IDE 中。
将从校准步骤获得的代码放在函数
initializeQMC5883L()中compass.init()代码行下方。
代码分析
包含库并初始化传感器 这部分包含了 MPU6050 和 QMC5883L 传感器所需的库,并初始化了它们的对象。
#include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> #include <Wire.h> #include <QMC5883LCompass.h> Adafruit_MPU6050 mpu; QMC5883LCompass compass;
设置函数
初始化串口通信、MPU6050 传感器,并将 MPU6050 设置为 I2C 旁路模式以允许直接访问 QMC5883L 磁力计。然后,初始化 QMC5883L 磁力计。
void setup() { // 初始化串口通信,波特率为 9600 Serial.begin(9600); // 初始化 MPU6050 传感器(加速度计和陀螺仪) initializeMPU6050(); // 在 MPU6050 上启用 I2C 旁路以直接访问 QMC5883L 磁力计 mpu.setI2CBypass(true); // 初始化 QMC5883L 磁力计传感器 initializeQMC5883L(); }
循环函数
持续从 QMC5883L 磁力计读取数据并打印到串口监视器。
void loop() { printQMC5883L(); delay(500); }
初始化 QMC5883L 函数
初始化并校准 QMC5883L 磁力计。校准值应根据具体校准数据进行调整。(校准 QMC5883L)
void initializeQMC5883L() { compass.init(); // 您应根据校准结果替换以下代码 compass.setCalibrationOffsets(-549.00, -66.00, 160.00); compass.setCalibrationScales(0.97, 1.02, 1.02); }
打印 QMC5883L 数据函数
此函数读取磁力计的 X、Y、Z 值和方位角,然后打印到串口监视器。
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(); }