MPU6050 İvme ve Gyro Sensörü Nedir? Nasıl Çalışır?

Merhabalar, bu yazımızda MPU6050 İvme ve Gyro Sensörü Nedir? Nasıl Çalışır? konusunu işleyeceğiz. Arduino’ da kullanabileceğimiz üç eksenli ivmeölçer + üç eksenli jiroskop, toplamda 6 eksenli ivme ve gyro modülü özellikleri nelerdir? Hangi pinler kullanılır? Kullanıldığı alanlar nelerdir? Örnek Arduino çalıştırma kodu nedir? Bu soruların cevabını bu konuda işleyeceğiz.

MPU6050 Nedir?

MPU6050, 3 eksenli bir ivmeölçer (accelerometer) ve 3 eksenli bir jiroskop (gyroscope) sensörünü tek bir çipte birleştiren 6 serbestlik derecesine (6 DoF – üç boyutlu uzayda katı bir cismin altı mekanik hareket serbestliği anlamına gelir) sahip bir hareket sensörüdür. InvenSense firması tarafından üretilmiştir.

MPU6050 İvme ve Gyro Sensörü Pinleri

İvmeölçer: x, y, z eksenlerinde hareketi ve yerçekimi kuvvetini ölçer.
Jiroskop: x, y, z eksenlerinde açısal hızları (derece/saniye) ölçer.

MPU6050 de, dahili bir DMP (Digital Motion Processor – Dijital Hareket İşlemcisi) vardır. Bu sayede ivme ve jiroskop verilerini işleyip birleştirerek daha doğru sonuçlar elde edilebilir.

İvmeölçer Nasıl Çalışır?

MPU6050 içindeki MEMS (Micro Electro-Mekanik Sistemler) sayesinde hareket algılaması yapar. Bu yapı, bir silikon yonga üzerine inşa edilmiş mikro işlenmiş bir yapıdır. İvmeölçer, cismin doğrusal hareketini tespit eder. (sallanma, düşme, eğilme vs.)

MEMS Accelerometer Working

MPU6050 İç Yapısı

Bu yapı polisilikon yaylarla askıya alınmıştır. Yapının X, Y ve/veya Z eksenleri boyunca ivmelendirildiğinde sapmasına izin verir. Sapma sonucunda sabit plakalar ile askılı yapıya bağlı plakalar arasındaki kapasitans değişir. Kapasitanstaki bu değişim, o eksen boyunca ivmelenmeyle orantılıdır. Sensör, bu kapasitans değişimini işleyerek analog çıkış voltajına dönüştürür.

MEMS Jiroskopu Nasıl Çalışır?

Jiroskop, cismin açısal dönüşünü ölçer. (sağa sola dönüş, yuvarlanma vs.). MEMS sensörü, sürekli salınımlı bir hareketle korunan (M1, M2, M3 ve M4 olmak üzere) dört parçadan oluşur. Yatay düzlemde aynı anda içe ve dışa doğru hareket ederler.

MPU6050 Accel Gyro Working Drive Mode Output

Yapıyı döndürmeye başladığımızda, hareket eden parçalara etki eden kuvvet, titreşimin yataydan düşeye doğru değişmesine neden olur.

Açısal dönüşün uygulandığı eksene bağlı olarak üç farklı mod vardır. Roll, Pitch ve Yaw Temel olarak, bu üç mod ne anlama geliyor?

roll pitch yaw

Bunu boşlukta hareket eden uçak örneği ile açıklayalım. Dronlar yada uçaklar; sapma, eğim ve yuvarlanma gibi farklı terminolojiler kullanırlar.
• Uçağın önünden arkasına uzanan eksene yuvarlanma(roll) ekseni denir.
• Uçağın solundan sağa doğru uzanan eksene eğim(pitch) ekseni denir.
• Uçağın yukarıdan aşağıya doğru uzanan eksenine yalpalama(yaw) ekseni denir.

Buradan göründüğü üzere uçak, 3 farklı hareket yapabilmektedir. Bu hareket yapısına göre, modülün çalışma prensibine bir bakalım.

Roll (Yuvarlanma) Modu:

X ekseni boyunca açısal bir hareket uygulandığında, M1 ve M3 plakaları, düzlemden yukarı ve aşağı hareket edecektir. Bu, yuvarlanma açısında bir değişikliğe neden olur. Buna Roll (Yuvarlanma) Modu adı verilir.

MPU6050 Accel Gyro Working Roll Mode Output

Pitch (Perde) Modu:

Y ekseni boyunca açısal bir hareket uygulandığında, M2 ve M4 plakaları, düzlemden yukarı ve aşağı hareket edecektir. Bu, pitch (perde) açısında bir değişikliğe neden olur. Buna Pitch (Perde) Modu adı verilir.

MPU6050 Accel Gyro Working Pitch Mode Output

Yaw (Yalpalama) Modu:

Z ekseni ( dikey) boyunca açısal bir hareket uygulandığında, M2 ve M4 plakaları, zıt yönlerde yatay olarak hareket edecektir. Bu, yaw açısında bir değişikliğe neden olur. Buna Yaw (Yalpalama) Modu adı verilir.

MPU6050 Accel Gyro Working Yaw Mode Output

Bu şekilde sürekli hareket, kapasitans değerinde bir değişime neden olur ve bu değişim algılama yapısı tarafından tespit edilerek voltaj sinyaline dönüştürülür.

3 eksenli dijital jiroskobun MEMS yapı kalıbı da aşağıda görülmektedir.

MEMS Yapı Kalıbı

Kaynak: Adam McCombs

MPU-6050 Modülü

MPU6050 İvme ve Gyro Sensörü Pinleri

MPU6050 modülünde 8 adet pin bulunmaktadır.
VCC: Modüle güç sağlar. +5V DC bağlantısı. Arduino’ da VCC pinine bağlantı yapılır.
GND: Topraklama pini. Arduino’ da GND pinine bağlantı yapılır.
SCL: I2C ara yüzü için seri saat pini. Arduino’ da SCL pinine bağlanır. A5 pini de kullanılabilir.
SDA: Seri veri pini. Arduino’ da SDA pinine bağlanır. A4 pini de kullanılabilir.
XDA: Yardımcı seri veri pini. Diğer I2C sensörlerin SDA pinini, MPU6050’ye bağlamak için kullanılır.
XCL: Yardımcı seri saat pini. Diğer I2C sensörlerin SCL pinini, MPU6050’ye bağlamak için kullanılır.
AD0: MPU6050 ile diğer I2C aygıtları arasında çakışmaları önlemek veya iki MPU6050’yi aynı I2C veri yoluna bağlamak için kullanılır. ADO pini aynı zamanda modülün I2C adresini de belirler. Bu pin 4.7K dirençle LOW durumuna çekilir. Bu nedenle, ADO pinini kullanılmadığında varsayılan I2C adresi, 0x68 ‘tir.
INT: Kesme çıkış pinidir. MPU6050, hareketlerin algılanması üzerine bir kesme üretecek şekilde programlandığında bu pin kullanılabilir.

MPU6050 modülü, Arduino ile I2C ara yüzü üzerinden iletişim kurar. İki farklı I2C adresini destekler: 0x68 HEX ve 0x69 HEX . Bu, aynı veri yolunda iki MPU6050’nin kullanılmasına veya veri yolundaki diğer cihazlarla adres çakışmalarının önlenmesine olanak tanır. (Modül üzerindeki ADO pinini bağlamadığınızda varsayılan I2C adresi 0x68 ‘tir. Eğer ADO pinini 3.3V’a bağlarsanız, hat HIGH durumuna çekilir ve I2C adresi 0x69 olur.)

MPU6050 Özellikleri:

3 eksenli jiroskop
3 eksenli ivmeölçer
Her kanal için 16 bit ADC dönüştürme (Analog – Dijital Dönüştürücü – Her bir ekseni örneklemek için voltajı sayısallaştırmakta kullanılır.)
1024 bit FIFO arabelleği
Dijital çıkış sıcaklık sensörü (MPU6050, -40 ila 85°C arasındaki sıcaklıkları ±1°C hassasiyetle ölçebilen gömülü bir sıcaklık sensörüne sahiptir. Bu sıcaklık ölçümü, ortam sıcaklığını değil, silikon kalıbın sıcaklığını ölçer. Bu ölçümler genellikle ivmeölçer ve jiroskop kalibrasyonunu telafi etmek veya sıcaklık değişimlerini tespit etmek için kullanılır.
Entegre dijital hareket işlemcisi (DMP)

MPU6050 Sensörünün Kullanıldığı Alanlar:

• 3D uzaktan kumanda
• Giyilebilir sağlık cihazları izleme cihazlarında
• Drone konum kontrolü
• Robotik kolun kontrolü,
• El hareketi kontrol cihazları,
• Kendi kendini dengeleyen robot,

Arduino İle MPU6050 Sensörü Bağlantı Şeması:

MPU6050 İvme ve Gyro Sensörü Nedir? Nasıl Çalışır?

MPU6050 pinlerinin Arduino ile bağlantısı aşağıdaki gibidir:

VCC Pin: Arduino 5v/3v
GND Pin:  Arduino GND
SCL Pin: Arduino A5 veya SCL pin
SDA Pin: Arduino A4 veya SDA pin

MPU6050 Sensör Programlanması:

MPU6050’den veri elde etmek için Wire.h kitaplığını eklememiz gerekecektir. Aynı zamanda MPU6050 kütüphanesini de ekleyerek daha kısa kodlarla uygulamalarımızı geliştirebiliriz.

• MPU6050 Kütüphanesi
• Wire.h Kütüphanesi

Wire.h kütüphanesi Arduino içerisinde mevcuttur. MPU6050.h kütüphanesini aşağıdaki bağlantıdan indirebilirsiniz.

https://egitim.ahmetcandemir.com.tr/download-category/arduino-kutuphaneleri/

Örnek Çalıştırma Kodu:


//MPU6050 Test Kodları
#include <Wire.h>      // I2C haberleşme için gerekli kütüphane
#include <MPU6050.h>  // MPU6050 sensör kütüphanesi

MPU6050 sensor;     // MPU6050 sensörüne sensor ismini verdik

void setup() {
  Serial.begin(9600);   // Seri haberleşmeyi başlat
  Wire.begin();          // I2C haberleşmesini başlat
  sensor.initialize();   // MPU6050 sensörünü başlattık

  if (sensor.testConnection()) {                     // Eğer bağlantı var ise
    Serial.println("MPU6050 bağlantısı başarılı!");  // bağlantı başarılı
  } else {
    Serial.println("MPU6050 bağlantı hatası!");   // bağlantı başarısız
  }
}

void loop() {
  int16_t ax, ay, az;     // X, Y, Z eksenlerindeki ivme değerleri
  int16_t gx, gy, gz;    // X, Y, Z eksenlerindeki jiroskop değerleri

  sensor.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);  // Hem ivme hem jiroskop verilerini oku

  Serial.print("Ivme: ");                           // verileri seri port ekranına yaz
  Serial.print(ax); Serial.print(" ");
  Serial.print(ay); Serial.print(" ");
  Serial.print(az); Serial.print(" | Jiroskop: ");
  Serial.print(gx); Serial.print(" ");
  Serial.print(gy); Serial.print(" ");
  Serial.println(gz);

  delay(500);  //0.5 saniye bekle
}

MPU6050 Seri Port ekranı

Kod Açıklamaları:

int16_t türü, -32,768 ile 32,767 arası tam sayılar tutar ve MPU6050 verileri için uygundur.

getMotion6() fonksiyonu MPU6050’den 6 eksenli veriyi bir defada alır:

İvme (ax, ay, az) → G kuvveti cinsinden
Jiroskop (gx, gy, gz) → Açı değişim hızı (°/s cinsinden) seri porta aktarır.

İvme Verileri (ax, ay, az)

Bunlar, MPU6050’in içindeki ivmeölçer (accelerometer) tarafından ölçülür.

ax – X eksenindeki ivme – Ham değer (LSB)
ay – Y eksenindeki ivme – Ham değer
az – Z eksenindeki ivme (yerçekimi yönü) – Ham değer

Bu değerler, cismin hangi yönde ne kadar hızlandığını gösterir.
Örneğin: Cihaz hareketsiz yere düz konmuşken az değeri yaklaşık 16384 (1g) civarında olur (±2g ayarında). MPU6050, ±2g, ±4g, ±8g, ±16g gibi farklı “ölçüm aralıklarında” çalışabilir.

Eğer sensörün ivmeölçer hassasiyeti ±2g değilse, yani daha yüksek (örneğin ±4g veya ±8g) olarak ayarlanmışsa, maksimum çıkış değeri daha fazla olur. Maksimum değer ±4g de ±32,768 olur. Seri porttan bu değerleri görebiliriz.

Jiroskop Verileri (gx, gy, gz)

Bunlar, MPU6050’in içindeki jiroskop (gyroscope) tarafından ölçülür.

gx – X ekseni etrafındaki dönüş hızı – Ham değer (LSB)
gy – Y ekseni etrafındaki dönüş hızı – Ham değer
gz – Z ekseni etrafındaki dönüş hızı – Ham değer

Bu değerler, cihazın hangi eksen etrafında ne kadar dönmekte olduğunu gösterir.
Örneğin: Bir eksende döndürdüğünde o eksene ait g değeri değişir. Jiroskop minimum değeri: -32,768, Jiroskop maksimum değeri: +32,767 olabilir.
MPU6050 sensörü varsayılan olarak sensör verilerini ham (raw) LSB (least significant bit) olarak verir.

Bu değerleri gerçek birimlere çevirmek istersek şu dönüşümler gerekir:
İvme (g cinsinden) için:
ivmeX = ax / 16384.0; // ±2g ayarında

Jiroskop (derece/saniye olarak) için:
gyroX = gx / 131.0; // ±250°/s ayarında

Örnek olarak seri port ekranında eğer şöyle bir çıktı görünüyorsa:

Ivme: 1000 -2000 16384 | Jiroskop: 50 -10 200

• Cihaz sabit duruyor ama X ve Y eksenlerinde hafif eğilmiş.
az ≈ 16384 olduğu için aşağı (yerçekimi yönü) kuvveti normal.
gx, gy, gz değerleri düşük olduğu için sensöre bağlı cihaz dönmüyor (ya da çok yavaş dönüyor).

Datasheet:
https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf

MPU6050 İvme ve Gyro Sensörü Nedir? Nasıl Çalışır?

Youtube kanalımızda da mBlock ve Arduino ile ilgili ders videoları bulabileceksiniz. Youtube kanalıma abone olmayı da unutmayınız.

https://www.youtube.com/@candemirahmet

Oval@3x 2

Bu ipuçlarını kaçırmayın!

Kayıt butonuna bastıktan sonra e-postanız gelen kutunuza giderek gelen e-postayı onaylamayı unutmayınız. Gelen kutusunda görülmeyen postalar için Önemsiz -Spam klasörünü kontrol edebilirsiniz. Eğer kayıt e-postası ulaşmadıysa iletişim menüsünden bu durumu bildirebilirsiniz.

Yazan: Ahmet Candemir
Teknik Öğretmen - Cisco Instructor - Microsoft MCP - ECDL MS Office Advanced Expert - Adobe Eğitmeni - MEB Fatih Projesi Koordinatörü - Robotik Kodlama Eğitmeni