MPU6050 İvmeölçer ve Jiroskop Sensörü Arduino
Çocukken hatırlayın, bilim fuarındaki jiroskoplar tuhaf şekillerde hareket ettikleri ve hatta yer çekimine meydan okur gibi göründükleri için bizi her zaman büyüledi. Özel nitelikleri, onları küçük RC Helikopterlerden uzay mekiğindeki gelişmiş navigasyon sistemine kadar her şeyde son derece önemli kılıyor.
Biliyor musun?
Rus Mir uzay istasyonu, güneş yönünü korumak için 11 jiroskop kullandı. Hubble Uzay Teleskobu, gözlemler sırasında teleskobun doğru doğrultuyu korumasına yardımcı olan altı navigasyon jirosuna sahiptir.
İvmeölçer Nasıl Çalışır?
İvmeölçerlerin nasıl çalıştığını bilmek için, genellikle bir 3B küp içinde bir top hayal etmek yararlıdır.
Diyelim ki, küp her şeyin ağırlıksız olduğu uzayda, top basitçe küpün ortasında yüzecek.Şimdi her duvarın belirli bir ekseni temsil ettiğini düşünelim.
Aniden kutuyu taşımak, hızlanma 1 g (tek bir G-kuvveti 1 g / yerçekimi ivmesi 9.8 m eşdeğerdir s sol 2 ), bir Biz kuvvetinin ölçülmesi durumunda bilyeli geçerli olduğu topu duvar X vuracak şüphe X duvarına X ekseninde 1g çıktı değeri alabiliriz.
Bakalım o küpü Dünya'ya koyarsak ne olacak. Top basitçe Z duvarına düşecek ve aşağıdaki resimde gösterildiği gibi 1g'lik bir kuvvet uygulayacaktır:
Bu durumda kutu hareket etmiyor ancak yine de Z ekseninde 1g okuması alıyoruz. Bunun nedeni, yerçekimi kuvvetinin topu 1g kuvveti ile aşağı doğru çekmesidir.
İvme ölçer, eğim algılama uygulamalarında yerçekiminin statik ivmesini ve ayrıca hareket, şok veya titreşimden kaynaklanan dinamik ivmeyi ölçer.
MEMS İvme Ölçer Nasıl Çalışır?
MEMS (Mikro Elektro Mekanik Sistemler) ivmeölçer, silikon bir plaka üzerine inşa edilmiş mikro işlenmiş bir yapıdan oluşur.
Bu yapı polisilikon yaylar ile askıya alınmıştır. Belirli eksene ivme uygulandığında yapının sapmasına izin verir.
Sapma nedeniyle, sabit plakalar ve asılı yapıya takılan plakalar arasındaki kapasite değişir. Kapasitanstaki bu değişiklik, o eksendeki ivme ile orantılıdır.
Sensör, kapasitanstaki bu değişikliği işler ve bunu bir analog çıkış voltajına dönüştürür.
Jiroskop Nasıl Çalışır?
İvmeölçerler doğrusal ivmeyi ölçerken, MEMS jiroskopları açısal dönüşü ölçer. Bunu yapmak için Coriolis Etkisi olarak bilinen şeyin ürettiği gücü ölçerler .
Coriolis etkisi
Coriolis Etkisi bize, bir kütlenin (m) belirli bir yönde (v) hızıyla hareket ettiğinde ve bir dış açısal oran (Ω) uygulandığında (Kırmızı ok); Coriolis Etkisi, kütlenin dikey olarak yer değiştirmesine neden olan bir kuvvet (Sarı ok) üretir. Bu yer değiştirmenin değeri, uygulanan açısal hız ile doğrudan ilişkilidir.
Şimdi, sürekli olarak zıt yönlerde hareket etmeleri için sürekli salınım hareketinde tutulan iki kütlenin olduğunu varsayalım. Açısal hız uygulandığında, her kütle üzerindeki Coriolis etkisi de zıt yönlerdedir, bu da aralarındaki kapasitansta bir değişikliğe neden olur; bu değişiklik hissedilir.
MEMS Jiroskopu Nasıl Çalışır?
MEMS sensörü, coriolis etkisine tepki verecek şekilde sürekli salınımlı bir hareket halinde tutulan bir dayanıklı kütleden (4 parça M1, M2, M3 ve M4 içerir) oluşur. Yatay düzlemde aynı anda içe ve dışa doğru hareket ederler.
Yapıyı döndürmeye başladığımızda, hareketli dayanıklı kütleye etki eden Coriolis kuvveti, titreşimin yönünü yataydan dikeye değiştirir.
Açısal dönüşün hangi eksene uygulandığına bağlı olarak üç mod vardır.
Rulo Modu:
Koriyolis etkisi nedeniyle X ekseni boyunca açısal bir hız uygulandığında, M1 ve M3 düzlemden yukarı ve aşağı hareket edecektir. Bu, yuvarlanma açısının değişmesine neden olur, dolayısıyla buna Dönme Modu denir.
Adım Modu:
Y ekseni boyunca açısal bir oran uygulandığında, M2 ve M4 yukarı ve aşağı hareket edecektir. Bu, eğim açısının değişmesine neden olur, dolayısıyla Pitch Modu olarak adlandırılır.
Yaw Modu:
Z ekseni boyunca bir açısal oran uygulandığında, M2 ve M4 aynı yatay düzlemde zıt yönlerde hareket edecektir. Bu, yalpalama açısının değişmesine neden olur ve buna Yalpalama Modu denir.
Koriolis etkisi tespit edildiğinde, tahrik eden kütlenin sürekli hareketi, algılama yapısı tarafından alınan ve ardından bir voltaj sinyaline dönüştürülen bir kapasitans değişikliğine (∆C) neden olacaktır.
Bilginiz olsun diye, 3 eksenli bir dijital jiroskopun MEMS yapısının kalıbı budur. ST Microelectronics'ten kesilmiş L3GD20HTR MEMS jiroskopunun görüntüsünü paylaştığı için Adam McCombs'a teşekkürler.
MPU6050 Modül Donanımına Genel Bakış
Modülün merkezinde, 3 eksenli bir jiroskop, 3 eksenli ivmeölçer ve bir Dijital Hareket İşlemcisini (DMP) bir araya getiren düşük güçlü, ucuz 6 eksenli MotionTracking çipi, tümü küçük 4 mm x 4 mm'lik bir pakette bulunur.
Üç eksen boyunca açısal momentumu veya dönüşü, yerçekimine bağlı statik ivmeyi ve ayrıca hareket, şok veya titreşimden kaynaklanan dinamik ivmeyi ölçebilir.
Modül, yerleşik bir LD3985 3.3V regülatör ile birlikte gelir, böylece onu Arduino gibi bir 5V mantık mikrodenetleyici ile endişelenmeden kullanabilirsiniz.
MPU6050, ölçümler sırasında 3.6mA'dan daha az ve boşta iken yalnızca 5μA tüketir. Bu düşük güç tüketimi, pille çalışan cihazlarda uygulamaya izin verir.
Ek olarak, modülde, modüle güç verildiğinde yanan bir güç LED'i vardır.
İvme Ölçümü
MPU6050, programlanabilir dört tam ölçek aralığı ± 2g, ± 4g, ± 8g ve ± 16g olan çip üzeri ivmeölçeri kullanarak ivmeyi ölçebilir.
MPU6050, aynı anda hareketin 3 eksenini (X, Y ve Z ekseni boyunca) örnekleyen üç 16 bit analogdan dijitale dönüştürücüye sahiptir.
Rotasyon Ölçümü
MPU6050, ± 250 ° / sn, ± 500 ° / sn, ± 1000 ° / sn ve ± 2000 ° / sn'lik dört programlanabilir tam ölçek aralığına sahip çip üstü jiroskopunu kullanarak açısal dönüşü ölçebilir.
MPU6050, eşzamanlı olarak 3 dönme eksenini (X, Y ve Z ekseni etrafında) örnekleyen üç adet 16 bit analogdan dijitale dönüştürücüye sahiptir. Örnekleme hızı, saniyede 3,9 ila 8000 örnek arasında ayarlanabilir.
Sıcaklık Ölçümü
MPU6050, -40 ila 85 ° C aralığındaki sıcaklığı ± 1 ° C hassasiyetle ölçebilen yerleşik bir sıcaklık sensörü içerir.
Bu sıcaklık ölçümünün silikon kalıbın kendisi için olduğunu ve ortam sıcaklığından olmadığını unutmayın. Bu tür ölçümler genellikle ivmeölçer ve jiroskopun kalibrasyonunu dengelemek veya mutlak sıcaklıkları ölçmek yerine sıcaklık değişikliklerini tespit etmek için kullanılır.
I2C Arayüzü
Modül, Arduino ile iletişim için I2C arayüzünü kullanır. İki ayrı I2C adresini destekler: 0x68 HEX ve 0x69 HEX . Bu, iki MPU6050'nin aynı veri yolunda kullanılmasına veya veri yolundaki başka bir cihazla adres çakışmalarını önlemeye izin verir.
ADO pini, modülün I2C adresini belirler. Bu pim yerleşik bir 4.7K aşağı çekme direncine sahiptir. Bu nedenle ADO pimi bağlanmamış ayrılırken, varsayılan I2C adresi 0x68 olan HEX ve 3.3V bağladığınızda, çizgi YÜKSEK çekilir ve I2C adresi 0x69 olur HEX .
Harici Sensör Ekleme
Doğruluk düzeyini daha da artırmak için MPU6050 modülü, harici sensörleri bağlamak için bir özellik sağlar. Bu harici sensörler, ana I2C veri yolundan tamamen bağımsız olan ikinci bir I2C veri yolu (XDA ve XCL) aracılığıyla MPU6050'ye bağlanır.
Bu harici bağlantı genellikle manyetik alanları üç eksende ölçebilen bir manyetometre bağlamak için kullanılır. MPU6050, ivmeölçer ve jiroskop için üçer adet olmak üzere 6 Serbestlik Derecesine (DOF) sahiptir. Bir manyetometre eklemek sensöre fazladan üç DOF ekleyerek onu 9 DOF yapar.
MPU6050 Modül Bağlantıları
MPU6050 modülünün pin açıklamaları aşağıdaki gibidir:
VCCmodül için güç kaynağıdır. Arduino'nun 5V çıkışına bağlayın.
GND Arduino'nun zeminine bağlanmalıdır.
SCLbir I2C Clock pinidir. Bu, Bus Master cihazı tarafından sağlanan bir zamanlama sinyalidir. Arduino'daki SCL pinine bağlayın.
SDAbir I2C Veri pinidir. Bu hat hem gönderme hem de alma için kullanılır. Arduino'daki SDA pinine bağlayın.
XDAharici I2C veri hattıdır. Harici I2C veri yolu, harici sensörleri bağlamak içindir.
XCL harici I2C saat hattıdır.
AD0MPU6050 modülünün dahili I2C adresini değiştirmenize olanak sağlar. Modül başka bir I2C cihazıyla çakışıyorsa veya aynı I2C veriyolunda iki MPU6050 kullanmak istiyorsanız kullanılabilir. ADO pimi bağlanmamış bırakın, varsayılan I2C adresi 0x68 olan HEX ve 3.3V bağladığınızda, I2C adresi 0x69 olur HEX .
INTKesinti Çıkışıdır. MPU6050, hareket algılama, kaydırma, yakınlaştırma, kaydırma, dokunma algılama ve sarsıntı algılamada kesintiyi artıracak şekilde programlanabilir.
Arduino ile Kablolama MPU6050 Modülü
Bağlantılar oldukça basit. VCC pinini Arduino'daki 5V çıkışına bağlayarak başlayın ve GND'yi toprağa bağlayın.
Şimdi I2C iletişimi için kullanılan pinlerde kaldık. Her Arduino Board'un uygun şekilde bağlanması gereken farklı I2C pinlerine sahip olduğunu unutmayın. R3 düzenine sahip Arduino kartlarında, SDA (veri hattı) ve SCL (saat hattı), AREF pinine yakın pin başlıkları üzerindedir. A5 (SCL) ve A4 (SDA) olarak da bilinirler.
Farklı bir Arduino kartı kullanıyorsanız, lütfen aşağıdaki tabloya bakın.
Aşağıdaki şema, her şeyi nasıl bağlayacağınızı gösterir.
Kütüphane Kurulumu
MPU6050 modülünün kurulması ve çalıştırılması nispeten kolaydır ve cihazın ham veri çıkışını yakalar. Bununla birlikte, verileri anlamlı bir şeye dönüştürmek daha zordur, ancak cihazı kullanmak için bazı kitaplıklar mevcuttur.
Kitaplığı kurmak için Sketch> Dahil Et> Kitaplıkları Yönet'e gidin … Kitaplık Yöneticisinin kitaplıklar dizinini indirmesini ve kurulu kitaplıkların listesini güncellemesini bekleyin.
Aramanızı 'mpu6050' yazarak filtreleyin . Birkaç giriş olmalı. Arayın Adafruit MPU6050 Kütüphanesi tarafından Adafruit . Bu girişe tıklayın ve ardından Yükle'yi seçin.
Adafruit MPU6050 kitaplığı dahili olarak Adafruit Birleşik Sensör Sürücüsü ve Adafruit Bus IO Kitaplığı kullanır . Bu nedenle, kütüphane yöneticisinde Adafruit Unified Sensor ve BusIO için arama yapın ve bunları da kurun.
Arduino Kodu - İvme Ölçer, Jiroskop ve Sıcaklık Verilerini Okuma
Her şeyi bağladığınızda aşağıdaki çizimi çalıştırmayı deneyin. MPU6050 modülünden doğrusal ivmeyi, açısal dönüşü ve sıcaklığı nasıl okuyacağınız konusunda size eksiksiz bir anlayış verecektir ve daha pratik deneyler ve projeler için temel oluşturabilir.
Çizimi denemek için seri monitörünüzü 115200 baud hıza ayarlamanız gerektiğini unutmayın. MPU6050'den çok fazla veri geri gönderildiği için, onu görüntülemek için bu daha yüksek hıza ihtiyaç duyar.
Doğrusal hızlanma, açısal dönüş ve sıcaklık değerlerini gösteren sayısız veri göreceksiniz. Sensörünüzü hareket ettirmeyi deneyin ve verilerin nasıl değiştiğine dikkat edin.
Kod Açıklaması:
İlk adım, gerekli tüm Arduino kitaplıklarını dahil etmektir. Daha önce belirtildiği gibi, Adafruit_MPU6050 kitaplığı MPU6050'nin donanım işlevlerini ve Adafruit_Sensor kitaplığını birleşik sensör soyutlama katmanını uygular. Arduino IDE'ye önceden yüklenmiş olarak gelen Wire kütüphanesini de eklemeniz gerekecektir. Bu kütüphane, I2C cihazlarıyla iletişim kurmamızı sağlar.
Ardından, ilgili işlevlere erişebilmemiz için Adafruit_MPU6050 sınıfının yeni bir örneği oluşturulur.
Kodun kurulum bölümünde öncelikle PC ile seri haberleşmeyi başlatıp begin()
fonksiyonu çağırıyoruz . begin()
Çip İD doğru olup olmadığını fonksiyon I2C arayüzü ve kontroller başlatır. Ardından, yumuşak sıfırlama kullanarak çipi sıfırlar ve uyandıktan sonra kalibrasyon için sensör için bekler.
Oluşturduğunuz cihaz nesnesini kullanmadan önce, kullanmak istediğiniz hassasiyet aralığı ile onu başlatmalısınız. Aşağıda, MPU6050'nin ölçüm aralığını ayarlayan üç işlev bulunmaktadır.
setAccelerometerRange ( mpu6050_accel_range_t )
setAccelerometerRange()
Fonksiyon ivmeölçer aralığını belirler. 'SetAccelerometerRange' için izin verilen değerler şunlardır:
- MPU6050_RANGE_2_G - ± 2g aralığı için (varsayılan)
- MPU6050_RANGE_4_G - ± 4g aralığı için
- MPU6050_RANGE_8_G - ± 8g aralığı için
- MPU6050_RANGE_16_G - ± 16g aralığı için
Aralık ne kadar küçükse ivmeölçerden gelen okumaların o kadar hassas olacağını unutmayın.
setGyroRange ( mpu6050_gyro_range_t )
setGyroRange()
Fonksiyon ivmeölçer aralığını belirler. 'SetGyroRange' için izin verilen değerler şunlardır:
- MPU6050_RANGE_250_DEG - saniyede 250 derece aralık için (varsayılan)
- MPU6050_RANGE_500_DEG - saniyede 500 derece aralık için
- MPU6050_RANGE_1000_DEG - saniyede 1000 derece aralığı için
- MPU6050_RANGE_2000_DEG - saniyede 2000 derece aralığı için
Daha küçük bir saniye başına derece aralığının daha hassas bir çıktı anlamına geldiğini unutmayın.
setFilterBandwidth ( mpu6050_bandwidth_t )
setFilterBandwidth()
Fonksiyon dijital alçak geçiren filtre bant genişliği seçenekleri ayarlar. 'SetFilterBandwidth' için izin verilen değerler şunlardır:
- MPU6050_BAND_260_HZ, - 260 Hz bant genişliği için (Dokümanlar bunun filtreyi devre dışı bıraktığını belirtmektedir)
- MPU6050_BAND_184_HZ, - 184 Hz bant genişliği için
- MPU6050_BAND_94_HZ, - 94 Hz bant genişliği için
- MPU6050_BAND_44_HZ, - 44 Hz bant genişliği için
- MPU6050_BAND_21_HZ, - 21 Hz bant genişliği için
- MPU6050_BAND_10_HZ, - 10 Hz bant genişliği için
- MPU6050_BAND_5_HZ, - 5 Hz bant genişliği için
Jiroskobun çıktı verileri, düşük geçişli bir filtre ile filtrelenir. Bant genişliği seçimi, bu filtrenin kesme frekansını değiştirmenize olanak tanır. Bant genişliği ayarının yaptığı tek şey, yüksek frekanslı gürültüyü kaldırarak sinyali biraz yumuşatmaktır.
Deneyimiz için ivmeölçer aralığını ± 8G, jiroskop aralığı ± 500 ° / s ve filtre bant genişliğini 21 Hz olarak ayarlıyoruz.
Ölçüm aralığı veya tam ölçekli aralık, MPU6050'nizin okuyabileceği maksimum ivme veya açısal hızdır. Neyi ölçtüğünüzü düşünün ve buna göre limitler belirleyin. Bir plak çarkının (çok yavaş olan) veya dönen bir çarkın (çok hızlı olabilen) dönüşünü ölçmeniz gerekiyor mu?
Kodun döngü bölümünde, sensors_event_t
sonuçlarımızı tutmak için önce bellekte bir nesne oluşturuyoruz . sensors_event_t
sadece hızlanma, cayro, sıcaklık, ışık, basınç ve çok daha fazlası gibi birçok sensör verisini tutan kullanıcı tanımlı bir veri türüdür (C'deki Yapılar). Github'da bununla ilgili daha fazla bilgi edinebilirsiniz .
Sonra, getEvent()
fonksiyon diyoruz . Bu işlev, sensörünüzden yeni bir değerler kümesini (bir sensör 'olayı') okur, bunları uygun SI birimlerine ve ölçeğe dönüştürür ve ardından sonuçları nesnemize atar mpu
. Bu, sensörünüzü 'okumak' için aradığınız işlevdir!
Son olarak, değerleri seri monitörde çıkarıyoruz.
Arduino Kodu - MPU6050 verilerini çizme
Sadece MPU6050'den gelen ham verilere bakmak hiçbir işe yaramayacaktır. MPU6050'nizin hareket ettirdiğinizde nasıl tepki vereceğini gerçekten görmek istiyorsanız, Seri Plotter'ı kullanın .
Arduino IDE, seri çizici adı verilen harika bir araçla birlikte gelir. Size değişkenlerin gerçek zamanlı olarak görselleştirilmesini sağlayabilir. Bu, verileri görselleştirmek, kodunuzu gidermek ve değişkenlerinizi dalga formları olarak görselleştirmek için çok kullanışlıdır.
Aşağıdaki yeni kodla deneyelim. Aşağıdaki programı derleyin ve yükleyin, ardından Araçlar> Seri Plotter'a (Ctrl + Shift + L) gidin . Kod 115200 baud hızı kullanır, seri çizicide 115200 olarak ayarlandığından emin olun.
Modülü Z ekseni boyunca yukarı ve aşağı hareket ettirirken buna benzer bir şey görmelisiniz.
Kod Açıklaması:
Aşağıdakiler dışında, bu çizimin çoğunun önceki çizimle tamamen aynı olduğunu fark edeceksiniz:
- Sıcaklık okumaları yazdırılmaz
- Diğer tüm okumalar, virgülle ayrılmış bir değerler listesi oluşturacak şekilde yazdırılır
- Okumalar her 10 milisaniyede bir alınır.
Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook robotic.code
instagram @roboticcode
Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.
Hiç yorum yok:
Yorum Gönder
Yorum yazdığınız ve üye olduğunuz için Size teşekkür ederim.Burada olduğunuza göre hepimizin ilgi alanı Elektronik ve Programlama sonsuz bir dünyadayız.Hepimize Başarılar...
Not: Yalnızca bu blogun üyesi yorum gönderebilir.