MPU6050 3 Eksen Eğim Ölçümü Alma - Z Ekseni İle Kumpas Ölçümü Dahil
Öncelikle yaptığımız işlem MPU6050 sensörü ile X,Y,Z eksenlerinin ölçümünü sağlamak. Sensör ile Gyro ve Açı ölçümü yapmak mümkündür.
Pin bağlantısı şu şekilde;
- VCC -> Arduino üzerinde 5V'a bağlıyoruz,
- GND -> Arduino üzerinde GND pinine bağlıyoruz,
- SCL -> Arduino üzerinde SCL veya A4 pinine bağlıyoruz,
- SDA -> Arduino üzerinde SDA veya A5 pinine bağlıyoruz.
A4 ve A5 pinlerine arduino nano, uno benzeri kartlarda pin yeri kalmaması durumunda kullanılıyor. Mega'da orjinallerde 2 adet klonlarda 3 adet olmak üzere SCL ve SDA bulunmaktadır.
Daha sonra kütüphane ekleme kısmına geliyoruz;
MPU6050 Kütüphane dosyamızı buradan indirelim. İndirdiğimiz dosyayı açın ve içindeki klasörü Bilgisayarım->Belgelerim->Arduino->Libraries klasörüne çıkartın.
Kullanım şekli;
#include "Wire.h"
#include <MPU6050_light.h>
MPU6050 mpu(Wire);
void setup() {
Serial.begin(9600);
Wire.begin();
byte status = mpu.begin();
Serial.print(F("MPU6050 durumu: "));
Serial.println(status);
while (status != 0) { } // stop everything if could not connect to MPU6050
Serial.println(F("Kalibrasyon yapılıyor. Lütfen cihazı hareket ettirmeyiniz!"));
delay(1000);
mpu.calcOffsets(); // gyro ve açı sensörünün offsetlerini tanımlayalım.
Serial.println("Kalibrasyon tamamlandı!\n");
}
void loop() {
mpu.update();
Serial.print("");
Serial.print(mpu.getAngleX());
Serial.print(" ");
Serial.print(mpu.getAngleY());
Serial.print(" ");
Serial.println(mpu.getAngleZ());
}
Burada kullanım şeklinde
mpu.getAngleX();
mpu.getAngleY()
mpu.getAngleZ()
değerleri eksenleri temsil etmektedir. Z Ekseni kumpasta üzerine eklene eklene devam etmektedir. Yani 360 dereceyi geçince 0 derece yerine 361, 362 derece diye devam etmektedir. Bu kısmı aşmak için aşşağıdaki hazırladığım yazılıma göz atabilirsiniz;
#include "Wire.h"
#include <MPU6050_light.h>
MPU6050 mpu(Wire);
void setup() {
Serial.begin(9600);
Wire.begin();
byte status = mpu.begin();
Serial.print(F("MPU6050 durumu: "));
Serial.println(status);
while (status != 0) { } // stop everything if could not connect to MPU6050
Serial.println(F("Kalibrasyon yapılıyor. Lütfen cihazı hareket ettirmeyiniz!"));
delay(1000);
mpu.calcOffsets(); // gyro ve açı sensörünün offsetlerini tanımlayalım.
Serial.println("Kalibrasyon tamamlandı!\n");
}
void loop() {
mpu.update();
int bolum = (mpu.getAngleZ() / 360);
if(bolum-bolum_birikim == 1 && (bolum_birikim > 0 || bolum_birikim == 0)) bolum_birikim = bolum;
if(bolum-bolum_birikim == -1 && (bolum_birikim < 0 || bolum_birikim == 0)) bolum_birikim = bolum;
if(bolum_birikim-bolum == 2) bolum_birikim = bolum_birikim-1;
if(bolum_birikim-bolum == -2) bolum_birikim = bolum_birikim+1;
if(bolum_birikim == -1 && mpu.getAngleZ() > 0) bolum_birikim = 0;
if(bolum_birikim == 1 && mpu.getAngleZ() < 0) bolum_birikim = 0;
mpu.getAngleZ() = mpu.getAngleZ() - (bolum_birikim * 360);
Serial.print(mpu.getAngleX());
Serial.print(" ");
Serial.print(mpu.getAngleY());
Serial.print(" ");
Serial.println(mpu.getAngleZ());
}
şeklinde kullanım sağlayabiliriz. Burada bölüm birikim ile 360 dereceyi her gectiğinde 360 derece çıkartarak 1,2,3 derece olarak devam etmesini sağlıyoruz. Bunu da bir katsayıya bağlıyoruz yani 360 dereyi geçtiğinde katsayı 1 olarak 360*1 çıkartıyor, 720 dereceyi geçtiğinde 360*2 çıkartarak ilerliyor 720'den tekrar 360'a düştüğünde katsayıyı tekrar düşüyoruz.
### NOT: Bu ölçüm paraziti en aza indirilmiş gyroscope değeri de göz önüne alınarak hesaplanan net eğim değerlerini vermektedir.
Burada kullandığımız
mpu.getAngleZ()
değişkende "getAngleZ()" kütüphaneden alınan eksen fonksiyonudur. Buna benzer kullanabileceğiniz fonksiyonlar;
getGyroXoffset()
getGyroYoffset()
getGyroZoffset()
getAccXoffset()
getAccYoffset()
getAccZoffset()
getFilterGyroCoef()
getFilterAccCoef()
getTemp()
getAccX()
getAccY()
getAccZ()
getGyroX()
getGyroY()
getGyroZ()
getAccAngleX()
getAccAngleY()