How to Measure Angle With MPU-6050(GY-521)

21,176

24

36

Posted

Introduction: How to Measure Angle With MPU-6050(GY-521)

I will measure angle with an Arduino. We need some cables, an Arduino UNO and GY-521(MPU-6050) for measure angle.

Step 1: Connecting MPU-6050 to Arduino UNO

You need some male-female cables, an Arduino UNO and GY-521(MPU-6050) for measure angle. You have to connect MPU-6050 to Arduino UNO like in the picture. So,

  • VCC to 5V(MPU-6050 works with 3.3V but GY-521 increases it to 5V.),
  • GND to GND,
  • SCL to A5,
  • SDA to A4,
  • ADO to GND,
  • INT to digital pin 2.

Step 2: Code

Here is code. It uses I2C. I took some parts of code from internet.(I2C part)

//Written by Ahmet Burkay KIRNIK
//TR_CapaFenLisesi //Measure Angle with a 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); Serial.println("-----------------------------------------"); delay(400); }

Step 3: Done!

It has finished! If it doesn't work, please leave a comment. By the way, my English is not so good, sorry for my bad English.

Ahmet Burkay KIRNIK

Istanbul/TURKEY

3 People Made This Project!

Recommendations

  • Epilog Challenge 9

    Epilog Challenge 9
  • Sew Warm Contest 2018

    Sew Warm Contest 2018
  • Paper Contest 2018

    Paper Contest 2018
user

We have a be nice policy.
Please be positive and constructive.

Tips

Questions

what is the meaning of int xAng = map(AcX,minVal,maxVal,-90,90);

26 Comments

iyi günler

gerçekten güzel çalışma. devreyi şu anda test ediyorum. bende küçük bir hata var ama. 0-360 arası açıyı ölçerken 260 ile 290 arasında farklı değer gösteriyor. benimde 0-360 arası açıyı ölçmem gerekiyor. nerede hata yapıyorum. yardımcı olabilir misiniz acaba?

kabloları yanlış bağlamış olma ihtimaliniz var mı acaba bir kontrol edebilir misiniz?

Teşekkürler ilginiz için Burkay Bey. Koddaki minvalue değerini 235 e çekince düzeldi ölçümler. bugün çözebildik hatayı. bir okul projesi için adroid uygulama geliştirmeye çalışıyoruz. kodlarınız baya yardımcı oldu bize. Teşekkürler yardımlarınız için

Yardımcı olabildiysem ne mutlu bana. İyi günler

Hello, where from do you take the minVal and maxVal ?

I am sorry, I actually don't remember

Hi! The program uploads fine but the values I get with your code are strange. I get 180 degree changes on both X and Y axises. Any idea why?

Capture.JPG

Hello Burkay ,

Good Project ,

greetings from afyon ;)

Hi Burkay,

thanks for this project, I have replace PC by lcd 16x2 with I2C connection (addr = 0x3F).

I have seen, that if I take off 2 wires ( ADO and INT) , there is no change !

However, Angles X and Y are OK, Angle Z doesn't work ok.

Can you explain this problem ? Thanks.