Bu projede, MPU6050 Sensörünün nasıl çalıştığını ve Arduino'yu MPU6050 ile nasıl çağıracağımızı göreceğiz. MPU-6050 ivme sensörünü Arduino UNO ile ara birim yapacağız ve İvme Ölçüm Cihazı ve Jiroskop'tan değerleri okuyacağız.
Projeye başlamadan önce, MPU6050 Sensörünün birkaç temelini anlamamız gerekir. MPU-6050, tek bir yongada bir MEMS (Mikroelektromekanik Sistem) Hızlanma Ölçer ve MEMS Jiroskopu içeren bir IMU Sensördür.
Burada, IMU, Atalet Ölçüm Birimi (Inertial Measurement Unit) anlamına gelen IMU Sensörü, İvmeölçer'i kullanarak belirli kuvveti ölçen, jiroskop kullanılarak açısal hızı ve Manyetometreleri kullanarak manyetik alanı ölçen bir cihazdır.
IMU Sensörleri, kendi kendine dengelenen robotlar, uçaklar, cep telefonları, tabletler, uzay araçları, uydular, uçaklar, UAV'ler (insansız hava aracı) vb. Gibi rehberlik, konum tespiti, yön bulma, hareket izleme ve uçuş kontrolü için kullanılır.
MPU-6050, 3 eksenli bir Accelerometer ve 3 eksenli bir Jiroskopu tek bir yonga üzerinde birleştiren altı eksenli bir hareket izleme cihazıdır.
MPU6050 Sensörüne Giriş
MPU-6050, InvenSense tarafından geliştirilen altı eksenli bir hareket izleme cihazıdır. MPU6050 cihazının temel özellikleri aşağıda belirtilmiştir.
- Üç eksenli İvme Ölçer
- Üç eksenli Jiroskop
- Dijital Çıkış Sıcaklık Sensörü
- Altı adet 16 bit ADC
- Tümleşik Dijital Hareket İşlemci (DMP)
- 1024B FIFO Arabelleği
Dijital Hareket İşlemcisi veya DMP, Accelerometer, Jiroskop ve bir harici Magnetometre'den veri edinerek ve işleyerek bir Arduino gibi ana işlemciden hesaplama yükünü azaltabilen gömülü bir işlemcidir.
Arduino ile MPU6050 Arayüzü
Daha önce de belirtildiği gibi, MPU6050 sadece I2C İletişim'i desteklemektedir ve bu nedenle sadece Arduino'nun I2C Pins'ine bağlanmalıdır. Arduino'nun I2C pinleri, A4 ve A5 analog giriş pinleri ile çoğaltılmıştır, yani A4, SDA ve A5, SCL'dir.
MPU6050'de toplam sekiz adet giriş bulunur. Yukarıdaki resim ivme sensörümüzün şematik görünümünü göstermektedir.
Burada Arduino'ya bağlanmak için SCL, SDA ve INT pinlerini kullanacağız.
Gerekli Bileşenler
Donanım
- Arduino UNO
- MPU6050 ivme sensörü
- Kablo bağlantısı
Aşağıdaki resim, Arduino UNO ile MPU6050'nin arabirimi için devre şemasını göstermektedir. Daha önce de belirtildiği gibi, MPU6050 ve Arduino arasındaki arayüz I2C Protokolü kullanılarak uygulanmalıdır.
Dolayısıyla Arduino (A5) SCL Pin'i sensörün SCL Pinine bağlanır. Benzer şekilde Arduino'nun SDA Pimi (A4) sensörün SDA Pinine bağlanır.
Ayrıca, 1024 Byte FIFO arabelleği dolduğunda ivme sensörünün Kesme (interrupt) özelliğini Arduino'yu göstermek (veya kesmek (interrupt) için) kullanacağız. Bu nedenle, sensörün INT pimini, Arduino UNO'nun (yani Pin 2) harici kesme (interrupt) 0 (INT0) pimine bağlayın.
Sensörden RAW Değerlerini Okuma
Programı yüklemeden önce, Accelerometer, Jyroscope ve Temperature Sensor'dan ham değerleri okumak için basit bir program çalıştıracağız. Sensörün SCL ve SDA pinlerini Arduino'nun ilgili I2C Pinlerine (A4 ve A5) bağlayın ve aşağıdaki kodu yükleyin.
Seri port ekranı açarsanız, Hızlanma Ölçer ve Jiroskop'tan ham değerleri elde edersiniz ve Sıcaklık Sensöründen kalibre edilmiş Sıcaklığı elde edersiniz. Veriler aşağıda gördüğünüz gibi görülüyor.
Gördüğünüz gibi, MPU6050 ivme sensöründen ham değerleri okumak kolaydır, ancak bu veriler ve Yaw, Pitch ve Roll'u elde etmek için bu veriler üzerinde ilave hesaplamalar yapmak zorundayız.
Daha önce de belirttiğim gibi, MPU6050 sensöründe, ivmeölçer ve cayro ile aynı çipte yer alan DMP veya Dijital Hareket İşlemcisi adlı özel bir işlemci var. Bu DMP'nin kullanımı, sensörlerden gelen veriler üzerinde karmaşık hesaplamalar yapmak için bir yazılım ile programlanabilmesidir.
Kodu Arduino'ya Yükleme ve MPU6050'yi Test Etme
Kodu yüklemeden önce, Arduino için iki kütüphane indirmeliyiz. Bunlar I2Cdev ve MPU6050. İndirme bağlantıları ve resmi GitHub bağlantıları aşağıda verilmiştir.
I2Cdev: GitHub ziyaret LINK
MPU6050: GitHub ziyaret LINK
MPU6050 Kütüphanesini indirin ve indirilen dosyayı çıkarın. "MPU6050" isimli bir klasör göreceksiniz. Bu klasörü kopyalayıp Arduino'nun libraries klasörüne yapıştırın.
Benim bilgisayarda"C: \ Program Files (x86) \ Arduino \ libraries" da bulunmaktadır. I2Cdev kütüphanesi için aynı şeyi yapın.
Her şey yolunda gittiyse, Arduino IDE'yi açın ve aşağıdaki yola ulaşın: Dosya -> Örnekler -> MPU6050 -> Örnekler -> MPU6050_DMP6 ve MPU6050_DMP6 örnek kodunu açın.
Bu kodu Arduino'ya yükleyin (bağlantıları devre şemasına göre önceden yaptıysanız) ve kod yüklendikten sonra seri terminalini açın.
Seri terminaldeki baud hızını 115200 olarak ayarlayın ve ardından aşağıdaki metni alacaksınız.
“Initializing DMP…
Initializing I2C devices…
Testing device connections…
MPU6050 connection successful
Send any character to begin DMP programming and demo:”
Herhangi bir veri almadıysanız Arduino'yu sıfırlayın. Son cümleye bakarsanız, "Send any character to begin DMP programming and demo:" der. Bu sebeple seri monitörde 1 veya a gibi bir karakter yazın ve gönderin. Girişe girildiği anda, seri monitörde Yaw, Pitch ve Roll (ypr) değerlerini görmeye başlayabilirsiniz.
NOT: Bu süre zarfında, MPU6050'yi dengeli ve yatay bir yüzeyde tutun. Ayrıca, MPU6050'den gelen değerlerin dengelenmesi için 10 saniye bekleyin.
KAYNAK: http://www.ismitekno.com