将 MPU 6050 和 HMC 5883L 连接到 Arduino Nano 的 i2c 总线

Connect MPU 6050 and HMC 5883L to i2c bus of Arduino Nano

我正在尝试为自动驾驶汽车的 IMU 连接 MPU 6050 模块和 HMC 5883L 模块。但是 Nano (A4, A5) 中有一个 i2c 连接。当我 运行 MPU 6050 的代码时,它显示了结果。 代码在这里。电路图

#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

void setup() {
 Serial.begin(9600);
 Wire.begin();
 mpu6050.begin();
 mpu6050.calcGyroOffsets(true);
}

void loop() {
mpu6050.update();
Serial.print("angleX : ");
Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");
Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");
Serial.println(mpu6050.getAngleZ());
}

但是当我 运行 磁力计代码时,它没有提供数据。

#include <Wire.h>
#include <DFRobot_QMC5883.h>

DFRobot_QMC5883 compass;

void setup()
{
Serial.begin(115200);
while (!compass.begin())
{
Serial.println("Could not find a valid QMC5883 sensor, check wiring!");
  delay(500);
}

if(compass.isHMC()){
    Serial.println("Initialize HMC5883");
    compass.setRange(HMC5883L_RANGE_1_3GA);
    compass.setMeasurementMode(HMC5883L_CONTINOUS);
    compass.setDataRate(HMC5883L_DATARATE_15HZ);
    compass.setSamples(HMC5883L_SAMPLES_8);
}
  else if(compass.isQMC()){
    Serial.println("Initialize QMC5883");
    compass.setRange(QMC5883_RANGE_2GA);
    compass.setMeasurementMode(QMC5883_CONTINOUS); 
    compass.setDataRate(QMC5883_DATARATE_50HZ);
    compass.setSamples(QMC5883_SAMPLES_8);
   }
  }
void loop()
{
 Vector norm = compass.readNormalize();

 float heading = atan2(norm.YAxis, norm.XAxis);
 float declinationAngle = (4.0 + (26.0 / 60.0)) / (180 / PI);
 heading += declinationAngle;

 if (heading < 0){
 heading += 2 * PI;
 }

 if (heading > 2 * PI){
 heading -= 2 * PI;
 }

 // Convert to degrees
 float headingDegrees = heading * 180/M_PI; 

 // Output
 Serial.print(" Heading = ");
 Serial.print(heading);
 Serial.print(" Degress = ");
 Serial.print(headingDegrees);
 Serial.println();

 delay(100);
 }

我认为你做对了。 MPU6050 有一个从 I2C 总线,用于连接罗盘。您已相应地连接设置。

您需要正确配置 MPU,但随后它会在 Arduino 不知道的情况下与罗盘通信。您可以与 HMC 对话,但只能通过具有特殊命令的 MPU。设备扫描将 不会 显示 HMC,因为它不能直接从 Arduino 上看到。在此设置中,您不能使用此处显示的磁力计代码。您需要使用 MPU6050 绑定并将其配置为从罗盘(不过我不知道是否有任何 Arduino MPU6050 库支持此功能。)