IMU (ataletsel ölçüm birimi), ivmeölçer ve jiroskobu (bazen pusulayı da) tek kartta birleştiren sensördür. İvmeölçer yer çekimine göre eğimi, jiroskop dönüş hızını ölçer. MPU6050 6 eksenli (3 ivme + 3 jiroskop) bir IMU'dur ve Arduino'ya I2C ile bağlanır. Jiroskop zamanla kayar, ivmeölçer ise titreşimden etkilenir; bu yüzden doğru açı için iki sensör bir filtreyle birleştirilir. BNO055 gibi sensörler bu birleştirmeyi kendi içinde yapar.
Kendini dengeleyen robotlar, drone'lar, el hareketiyle kontrol edilen eldivenler ve telefonların ekran döndürme özelliği... Hepsinde bir ivme ve jiroskop sensörü bulunur. Bu rehberde IMU sensörlerinin nasıl çalıştığını, MPU6050'nin Arduino ile nasıl kullanıldığını ve doğru açı ölçümünün inceliklerini anlatıyoruz.
IMU nedir?
IMU (Inertial Measurement Unit, ataletsel ölçüm birimi), hareket ve yönelimi ölçmek için ivmeölçer, jiroskop ve çoğu zaman manyetometreyi (pusula) bir arada barındıran sensördür. Eksen sayısı "DOF" (serbestlik derecesi) ile ifade edilir: 6 DOF = 3 eksen ivme + 3 eksen jiroskop; 9 DOF'ta buna 3 eksen pusula, 10 DOF'ta ise bir basınç sensörü eklenir.
İvmeölçer ve jiroskop arasındaki fark nedir?
| Sensör | Ne ölçer | Güçlü yanı | Zayıf yanı |
|---|---|---|---|
| İvmeölçer | Doğrusal ivme ve yer çekimi yönü | Durağan hâlde eğimi doğru verir | Titreşim ve hareketten çok etkilenir |
| Jiroskop | Dönüş hızı (°/s) | Hızlı ve gürültüsüz tepki | Açı hesaplanırken zamanla kayar (drift) |
| Manyetometre | Manyetik alan (pusula yönü) | Kuzeye göre mutlak yön | Metal ve motorlardan etkilenir |
MPU6050 nedir?
MPU6050, 3 eksenli ivmeölçer ve 3 eksenli jiroskobu tek çipte birleştiren 6 eksenli bir IMU'dur. Ölçüm aralıkları yazılımla seçilebilir: ivmeölçer için ±2g ile ±16g, jiroskop için ±250 ile ±2000 °/s. I2C ile haberleşir; adresi AD0 pinine göre 0x68 ya da 0x69'dur. Çip 3,3V ile çalışır; GY-521 gibi modüllerde regülatör bulunduğu için modül 5V ile de beslenebilir.
MPU6050 Arduino'ya nasıl bağlanır?
- VCC: 5V ya da 3,3V (modüle göre).
- GND: GND.
- SDA: Arduino Uno'da A4.
- SCL: Arduino Uno'da A5.
- INT (isteğe bağlı): D2; yeni veri hazır olduğunda kesme üretir.
Arduino'da Adafruit MPU6050 ya da I2Cdev/MPU6050 kütüphanesi kullanılır. Ham değerler ivme için m/s² ya da g, jiroskop için °/s olarak okunur.
Açı adım adım nasıl hesaplanır?
- Kalibrasyon: Sensör düz ve hareketsizken birkaç yüz ölçüm alın; jiroskobun ortalama değerini (sıfır hatası) her okumadan çıkarın.
- İvmeölçerden eğim: Yer çekiminin eksenlere dağılımından eğim açıları hesaplanır; ör. pitch ≈ atan2(ax, √(ay² + az²)).
- Jiroskoptan açı: Dönüş hızı her döngüde geçen süreyle çarpılıp toplanır (entegrasyon). Bu açı kısa sürede doğru, uzun sürede kayar.
- Tamamlayıcı filtre: İki değer birleştirilir: açı = 0,98 × (açı + jiroskop × dt) + 0,02 × ivme_açısı. Jiroskop hızlı değişimleri, ivmeölçer uzun vadeli doğruluğu sağlar.
- Daha gelişmiş yöntemler: Kalman filtresi ya da Madgwick/Mahony algoritmaları daha iyi sonuç verir. MPU6050'nin dahili DMP birimi de birleştirilmiş yönelim verisi üretebilir.
Not: Yalnızca ivmeölçer ve jiroskop ile yaw (yatay düzlemdeki yön) açısı zamanla kayar; mutlak yön için bir manyetometre gerekir.
MPU6050 yerine hangi sensörler kullanılabilir?
- MPU6500: MPU6050'nin geliştirilmiş 6 eksenli kardeşi; ör. GY-6500 MPU6500 modülü.
- 9 eksenli GY-85: ADXL345 ivmeölçer, ITG3205 jiroskop ve HMC5883L pusula bir arada; GY-85 9 eksen IMU modülü.
- MPU9250 + basınç: 9 eksen IMU ve MS5611 barometre; drone ve yükseklik projeleri için MPU9250/MS5611 10DOF modül.
- BNO055: Sensör birleştirmeyi kendi içinde yaparak doğrudan mutlak yönelim (Euler açıları ya da kuaterniyon) verir; filtre yazmak istemeyenler için idealdir. Ör. BNO055 + BMP280 10DOF sensör.
- Ayrı pusula: Mevcut IMU'ya yön eklemek için GY-271 QMC5883L pusula sensörü.
Basınçlı 10DOF modüllerdeki barometrenin çalışmasını basınç sensörü rehberimizde, drone uygulamalarını ise drone yapımı rehberimizde anlattık.
Sık sorulan sorular
MPU6050 ne işe yarar?
MPU6050 hareketi, eğimi ve dönüş hızını ölçer. Dengeleyen robotlarda, drone'larda, hareket algılayan oyun kontrolcülerinde ve titreşim izleme projelerinde kullanılır.
MPU6050 açısı neden zamanla kayıyor?
Jiroskop verisi toplanarak açı hesaplandığında küçük hatalar birikir ve açı kayar. İvmeölçer ile tamamlayıcı ya da Kalman filtresiyle birleştirmek bu kaymayı düzeltir; yaw açısı için ayrıca pusula gerekir.
MPU6050 3,3V mu, 5V mu?
Çipin kendisi 3,3V ile çalışır. GY-521 gibi modüllerde regülatör bulunduğu için modül 5V ile beslenebilir. I2C hatlarının gerilimi için modülün belgesine bakılmalıdır.
6 eksen ve 9 eksen IMU farkı nedir?
6 eksenli IMU ivmeölçer ve jiroskop içerir. 9 eksenli IMU'da buna 3 eksenli manyetometre eklenir ve kuzeye göre mutlak yön hesaplanabilir.
Birden fazla MPU6050 aynı Arduino'ya bağlanır mı?
AD0 pini farklı ayarlanarak iki MPU6050 aynı I2C hattına bağlanabilir (0x68 ve 0x69). Daha fazlası için I2C çoklayıcı kullanılır.
Özet
- IMU; ivmeölçer, jiroskop ve isteğe bağlı pusuladan oluşur.
- MPU6050 6 eksenlidir ve I2C (0x68/0x69) ile bağlanır.
- İvmeölçer eğimi, jiroskop dönüş hızını ölçer; ikisi filtreyle birleştirilir.
- Yaw açısı için manyetometre gerekir.
- BNO055 gibi sensörler birleştirmeyi kendi içinde yapar.