hi55234 发表于 2014-9-23 23:48:56

菜鸟看 HMC5883L

说是3轴,磁场强度啥的,菜鸟完全两眼一抹黑~~~

好在,这丫就是一个罗盘对吧,罗盘的唯一作用就是指北对吧~~~

那这玩意就一个值有用,那就是航向Degrees(度)

所以这玩意就这样最清爽了:

库文件在这里
http://forum.arduino.cc/index.php?topic=104811.0
的6楼





#include <Wire.h>//引用了I2C库
#include <HMC5883L.h>//引用HMC5883L罗盘库
HMC5883L compass;//保存我们的指南针作为一个变量。

void setup()
{

Serial.begin(9600);// 初始化串口。
Wire.begin(); // 启动I2C接口。
compass = HMC5883L(); // 构造一个新的HMC5883罗盘。

        }

       
void loop()
{


//其实俺啥都不知道,这丫就是定义了 scaled ,这个换算比例?难道Y轴数据就用在了这里,计划通啊~~
MagnetometerScaled scaled = compass.ReadScaledAxis();


//计算航向时,磁力计是水平的,我去,你咋知道是水平的,就是因为scaled换算过了吗?
float heading = atan2(scaled.YAxis, scaled.XAxis);
/*
科普时间:
atan2
atan2(y,x)所表达的意思是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间的角的角度。
当y>0时,射线与x轴正方向的所得的角的角度指的是x轴正方向绕逆时针方向到达射线旋转的角的角度;
而当y<0时,射线与x轴正方向所得的角的角度指的是x轴正方向绕顺时针方向达到射线旋转的角的角度。
http://zh.wikipedia.org/wiki/Atan2

提问时间:
那啥,既然x,y轴就算出了航向,那Y轴是干嘛的??有高手知道吗?还是库自己就用了,是计算scaled的时候用的吗?
*/


//磁偏角纠偏(没有正确的磁偏角,越纠越偏T_T
float declinationAngle = -0.0273;
heading += declinationAngle;

// 讨论方向大于为负的弧度,即小于0度的情况
if(heading < 0)
    heading += 2*PI;
   
// 讨论方向大于2pi弧度,即360度的情况
if(heading > 2*PI)
    heading -= 2*PI;
   
//弧度转换为度,以提高可读性,必须转啊,因为只输出度
float headingDegrees = heading * 180/M_PI;

   Serial.print("   \tHeading:\t");

   Serial.print(headingDegrees);
   Serial.println(" Degrees   \t");
   delay(500);   

}

wetnt 发表于 2014-9-24 09:49:13

不错,收藏!
页: [1]
查看完整版本: 菜鸟看 HMC5883L