MPU-6050仅移动一个轴时更改X和Z轴值

时间:2018-06-22 12:27:32

标签: arduino mpu6050

我正在建造一架无人机,并使用Arduino Uno对其进行控制。但是,当我倾斜无人机进行测试时,例如在X轴上,程序会说它在X和Z轴上都已倾斜。我正在使用MPU6050陀螺仪。这是我正在使用的代码:

//Written by Ahmet Burkay KIRNIK
//Measurement of Angle with MPU-6050(GY-521)

#include<Wire.h>

const int MPU_addr=0x68; int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

int minVal=265; int maxVal=402;

double x; double y; double z;

void setup(){ Wire.begin(); Wire.beginTransmission(MPU_addr); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true); Serial.begin(9600); } void loop(){ Wire.beginTransmission(MPU_addr); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU_addr,14,true); AcX=Wire.read()<<8|Wire.read(); AcY=Wire.read()<<8|Wire.read(); AcZ=Wire.read()<<8|Wire.read(); int xAng = map(AcX,minVal,maxVal,-90,90); int yAng = map(AcY,minVal,maxVal,-90,90); int zAng = map(AcZ,minVal,maxVal,-90,90);

x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI); y= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI); z= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI);

Serial.print("AngleX= "); Serial.println(x);

Serial.print("AngleY= "); Serial.println(y);

Serial.print("AngleZ= "); Serial.println(z); delay(400); }

2 个答案:

答案 0 :(得分:0)

没有人能完美地移动到可能在另一个轴上移动的一个轴上。 如果是我要确保将芯片/板/无人机固定在桌子或类似物品的边缘,然后将其倾斜一点,以查看是否仅在一个轴上移动。 您应该只能看到微不足道的运动和另一轴 如果它仍然显示出意想不到的明显运动 您的芯片可能坏了 我曾经有一个廉价的中文飞行控制器,它使用了向我发送的机载mpu6050损坏,但对我来说,问题是单轴运动 但我想有可能

答案 1 :(得分:0)

陀螺仪很坏,但是新的陀螺仪仍然没有用,但是可以使用。无论如何,那是陀螺仪。