关于hmc5883l芯片(gy273模块)的问题。
我使用gy273的模块,获得X,Y,Z方向的地磁场强度,然后求他们的均方根。这个值应该是地磁场的模值大小,应该是一个固定量,但为什么姿态变了这个值的大小就变了?300 281 124 429
299 282 125 429
300 280 127 429
299 280 121 427
302 279 121 428
301 279 124 428
301 282 123 430
119 358 130 399
-265 -415 598 774
-594 -448 119 753
-490 -570 65 754
-568 106 -64 581
-408 143 -251 499
-647 -40 149 665
344 34 590 683
145 -477 601 780
-651 -176 171 695
-364 -136 -308 495
-376 -137 -288 493
-224 417 -10 473
586 -162 397 726
26 -768 492 912
-492 -458 -100 679
-503 -453 -68 680
-599 -231 385 748
240 371 439 622
547 43 91 556
589 -1 173 613
63 -765 -54 769
-551 -472 268 773
-550 121 45 564 #include <Wire.h> //I2C Arduino Library
#define address 0x1E //0011110b, I2C 7bit address of HMC5883
void setup(){
//Initialize Serial and I2C communications
Serial.begin(9600);
Wire.begin();
//Put the HMC5883 IC into the correct operating mode
Wire.beginTransmission(address); //open communication with HMC5883
Wire.write(0x02); //select mode register
Wire.write(0x00); //continuous measurement mode
Wire.endTransmission();
}
void loop(){
long x,y,z; //triple axis data
//Tell the HMC5883 where to begin reading data
Wire.beginTransmission(address);
Wire.write(0x03); //select register 3, X MSB register
Wire.endTransmission();
//Read data from each axis, 2 registers per axis
Wire.requestFrom(address, 6);
if(6<=Wire.available()){
x = Wire.read()<<8; //X msb
x |= Wire.read(); //X lsb
z = Wire.read()<<8; //Z msb
z |= Wire.read(); //Z lsb
y = Wire.read()<<8; //Y msb
y |= Wire.read(); //Y lsb
}
//Print out values of each axis
//Serial.print("x: ");
Serial.print(x);
//Serial.print("y: ");
Serial.print(" ");
Serial.print(y);
Serial.print(" ");
//Serial.print("z: ");
Serial.print(z);
Serial.print(" ");
//Serial.print(" x: ");
x=abs(x);
//Serial.print(x);
//Serial.print("y: ");
y=abs(y);
//Serial.print(y);
//Serial.print("z: ");
z=abs(z);
//Serial.print(z);
//Serial.print(" x*x: ");
x=x*x;
//Serial.print(x);
//Serial.print("y*y: ");
y=y*y;
//Serial.print(y);
//Serial.print("z*z: ");
z=z*z;
//Serial.print(z);
unsigned longfx=sqrt(x+y+z);
//Serial.print("fx: ");
Serial.println(fx);
delay(500);
} 我也不太清楚 HMC5388L 當中 XYZ 的意義及有關單位.
但根據相關的庫的資料, 只是對應的磁場強度, 並非跟一個點的距離.
我也不太清楚你那均方根的值有什麼意義, 為什麼一定會是一個定量?
按道理,在一个地方,地球磁场变化不大(其变化是5883测量不出来的),三个分量的均方根是地球总场的大小。由于干扰问题,这个值不太靠谱! 附近是不是有铁磁性的物体或者附近有交流电源。
以前用5883做过东西,在屋子里经过有电线的地方会有误差。
另外。这个东西的数据的稳定性并不是特别好。 当然是固定值,我试过,完全是一条直线,说明还是很准确的!可能你计算有些问题,程序输出的是0-360之间的角度信息,需要换算成余弦,这才是在三个坐标轴上的投影,然后求方根才是模值。
页:
[1]