在Arduino中校准Adafruit LSM303

在Arduino中校准Adafruit LSM303,arduino,calibration,adafruit,Arduino,Calibration,Adafruit,我有一个Adafruit LSM303加速计和罗盘连接到Arduino Uno 我使用了Adafruit推荐的校准草图之一(见下文),得到了以下输出: 最低加速度:-8.55-10.16-14.12 加速度最大值:9.89 11.26 15.26 最低磁感应强度:-60.09-57.55-130.51 Mag最大值:69.64 78.09 68.88 如何获取校准输出并使用Adafruit校准指南针 #包括 #包括 #包括 /*为这些传感器分配一个唯一的ID*/ Adafruit_LSM30

我有一个Adafruit LSM303加速计和罗盘连接到Arduino Uno

我使用了Adafruit推荐的校准草图之一(见下文),得到了以下输出:

  • 最低加速度:-8.55-10.16-14.12
  • 加速度最大值:9.89 11.26 15.26
  • 最低磁感应强度:-60.09-57.55-130.51
  • Mag最大值:69.64 78.09 68.88
如何获取校准输出并使用Adafruit校准指南针

#包括
#包括
#包括
/*为这些传感器分配一个唯一的ID*/
Adafruit_LSM303_Accel_Unified Accel=Adafruit_LSM303_Accel_Unified(54321);
Adafruit_LSM303_Mag_Unified Mag=Adafruit_LSM303_Mag_Unified(12345);
浮动AccelMinX、AccelMaxX;
浮动AccelMinY,AccelMaxY;
浮动AccelMinZ、AccelMaxZ;
MagmaMinx浮球,MagMaxX;
漂浮的MagMinY,MagMaxY;
浮动式MagMinZ,MagMaxZ;
持续时间长;
作废设置(作废)
{
Serial.begin(9600);
Serial.println(“LSM303校准”);Serial.println(“”);
/*初始化加速度计*/
如果(!accel.begin())
{
/*检测ADXL345时出现问题…请检查您的连接*/
Serial.println(“Ooops,未检测到LSM303…检查您的接线!”);
而(1),;
}
/*初始化磁强计*/
如果(!mag.begin())
{
/*检测LSM303时出现问题…请检查您的连接*/
Serial.println(“Ooops,未检测到LSM303…检查您的接线!”);
而(1),;
}
lastDisplayTime=millis();
}
无效循环(无效)
{
/*获取新的传感器事件*/
传感器事件加速事件;
传感器事件图像事件;
accel.getEvent(&accelEvent);
mag.getEvent(&magEvent);
如果(accelEvent.acceleration.xAccelMaxX)AccelMaxX=accelEvent.acceleration.x;
如果(accelEvent.acceleration.yAccelMaxY)AccelMaxY=accelEvent.acceleration.y;
如果(accelEvent.acceleration.zAccelMaxZ)AccelMaxZ=accelEvent.acceleration.z;
如果(magEvent.magnetic.xMagMaxX)MagMaxX=magEvent.magnetic.x;
如果(magEvent.magnetic.yMagMaxY)MagMaxY=magEvent.magnetic.y;
如果(magEvent.magnetic.zMagMaxZ)MagMaxZ=magEvent.magnetic.z;
如果((毫秒()-lastDisplayTime)>1000)//显示一次/秒
{
Serial.print(“Accel最小值”);Serial.print(AccelMinX);Serial.print(“”);Serial.print(AccelMinY);Serial.print(“”);Serial.print(AccelMinZ);Serial.println();
Serial.print(“Accel最大值”);Serial.print(AccelMaxX);Serial.print(“”);Serial.print(AccelMaxY);Serial.print(“”);Serial.print(AccelMaxZ);Serial.println();
Serial.print(“Mag最小值”);Serial.print(MagMinX);Serial.print(“”);Serial.print(MagMinY);Serial.print(“”);Serial.print(MagMinZ);Serial.println();
Serial.print(“Mag最大值”);Serial.print(MagMaxX);Serial.print(“”);Serial.print(MagMaxY);Serial.print(“”);Serial.print(MagMaxZ);Serial.println();Serial.println();
lastDisplayTime=millis();
}
}

在您链接到的adafruit页面上,它说“我们可以使用atan2()函数来计算由Y轴和X轴读数定义的矢量的角度”,我还发现了在给定3轴磁强计读数时如何计算罗盘航向的问题,它证实了上述代码的公式如下:

float magFieldRad = atan2(magEvent.magnetic.x, magEvent.magnetic.y); // compass in Radians
float magFieldDeg = (magFieldRad * 180) / 3.1415; // compass in Degrees

在您链接到的adafruit页面上,它说“我们可以使用atan2()函数来计算由Y轴和X轴读数定义的矢量的角度”,我还发现了当给定3轴磁强计读数时如何计算罗盘航向的问题,它证实了上述代码的公式应如下所示:

float magFieldRad = atan2(magEvent.magnetic.x, magEvent.magnetic.y); // compass in Radians
float magFieldDeg = (magFieldRad * 180) / 3.1415; // compass in Degrees