Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

MPU6050 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
MPU6050 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

1 Mayıs 2021 Cumartesi

Arduino ve MPU-6050 Deprem Dedektörü

 

Arduino ve MPU-6050 Deprem Dedektörü


Arduino ve MPU6050 sensörünü kullanan Deprem Dedektörü: Deprem dedektörü, deprem şoklarını algılayan bir cihazdır. Araştırmaya göre bir yılda yaklaşık 800.000 deprem meydana gelir ve bu kadar çok can ölür ve binaları tahrip eder. Projemiz, deprem nedeniyle oluşan kaybın üstesinden gelmek için küçük bir çabadır. Bu dedektör, küçük şokları algılayabilir ve güvenli bir yere tahliye etmeniz için sizi uyarabilir. Bu dedektörün en önemli bileşeni daha sonra konuşacağımız MPU 6050 modülüdür. Arduino bu dedektörün beynidir, mesaj göstermek için LCD , gösterge olarak Led ve zil kullanılır.

Arduino kullanarak Blok Diyagram Deprem Dedektörü Arduino blok şemasını kullanan Deprem Dedektörü

Gerekli Bileşenler

  • ArduinoUno: Ucuz olduğu için Arduino Uno kullandık ve iki analog pime ve sekiz dijital pime ihtiyacımız olduğundan bu proje için mükemmel uyuyor. Programlaması kolaydır ve programı saklamak için hafıza kaybı vardır.
  • MPU6050: MPU6050, 6 Eksenli İvmeölçer ve jiroskoptur. Genellikle bir hareket takip cihazıdır. Aynı zamanda sıcaklığı ölçebilir. Daha az güç tüketir ve fiyatı çok ucuzdur.

İşte bazı MPU6050 özellikleri

  • Jiroskop çalışma akımı: 3.6mA.
  • İvmeölçer normal çalışma akımı: 500µA.
  • Bekleme akımı: 5µA.
  • Çalışma voltajları 2,37v ila 3,46v arasındadır
  • Geliştirilmiş düşük frekanslı gürültü performansı.
  • Dijital çıkışlı sıcaklık sensörü.

MPU6050 modülünün pin açıklaması:

  1. Vcc: Bu pime 3.3 besleme gerilimi.
  2. GND: Bu pin toprağa bağlı.
  3. SCL: I 2 C Seri Saat Pimi.
  4. SDA: I 2 C Seri Veri Pimi.
  5. XDA: I 2 C Harici bir sensör için Ana Veri pini.
  6. XCL: I 2 C Harici bir sensör için Ana Saat pimi.
  7. AD0: I 2 C Slave Adresi LSB.
  8. INT: Dijital çıkış pinini kes.
  • 16 × 2 LCD : LCD, alfasayısal karakterleri göstermek için kullanılır. Toplam 16 pimi vardır. LCD'nin kontrastını ayarlamak için üçüncü pim ile bir 10K ohm potansiyometre bağlanır. Ayrıca bir arka ışık LED'i içerir. Bu projede kullandığımız LCD 16 × 2 dir, yani 16 karakteri iki satırda görüntüleyebiliriz. Bu projede şokların tespit edilip edilmediğini göstermek için LCD kullanılmaktadır.
  • Led : Deprem şoklarının algılandığını ve kırmızı rengin de tehlikeyi temsil ettiğini belirtmek için kırmızı bir led kullanılır.
  • Buzzer: Bir zil, deprem şoklarının algılandığı kişilere alarm veren yüksek bir ses üretir.
  • Direnç ve bazı jumper kabloları

Arduino kullanan Deprem Dedektörünün Devre Şeması Arduino devre şemasını kullanan Deprem Dedektörü

Deprem Dedektörünün Arduino blok şemasını kullanarak çalışması

Arduino her şeyden önce MPU 6050'yi başlatır. Uyku modunu ve modülden bir saat sinyalini kontrol edin ve ardından değerleri okumaya başlayın. Kontrol ettiği kodda maksimum ve minimum değerler belirtilir, değerin istenilen değerden büyük veya küçük olup olmadığı daha sonra sesli uyarıyı çalıştırır, led ve LCD'de “*** Deprem ***” mesajını gösterir. Değerler normalse hiçbir şey yapmaz.

Arduino ile Deprem Dedektörünün Uygulanması

Arduino kullanan deprem dedektörü

Arduino kullanan Deprem Dedektörü için Seri Plotter

plotter

Arduino kullanarak Deprem Dedektörü Kodu

#include <LiquidCrystal.h>

#include <Wire.h>

#include <MPU6050.h>

#define minval -5

#define maxval 3

MPU6050 mpu;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()

{   lcd.begin(16, 2);

    Serial.begin(115200);

    pinMode(7,OUTPUT);

    pinMode(8,OUTPUT);

    lcd.print("   EarthQuake ");

    lcd.setCursor(0, 1);

    lcd.print("   Detector");

    delay (2000);

    lcd.clear();

  // Initialize MPU6050

  Serial.println("Initialize MPU6050");

  while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))

  { Serial.println("Could not find a valid MPU6050 sensor, check wiring!");

    delay(500);}

  mpu.setThreshold(3); 

  // Check settings

  checkSettings();

}



void checkSettings()

{

  Serial.println();



  Serial.print(" * Sleep Mode:        ");

  Serial.println(mpu.getSleepEnabled() ? "Enabled" : "Disabled");

  Serial.print(" * Clock Source:      ");

  switch(mpu.getClockSource())

  {case MPU6050_CLOCK_KEEP_RESET:     Serial.println("Stops the clock and keeps the timing generator in reset"); break;

    case MPU6050_CLOCK_EXTERNAL_19MHZ: Serial.println("PLL with external 19.2MHz reference"); break;

    case MPU6050_CLOCK_EXTERNAL_32KHZ: Serial.println("PLL with external 32.768kHz reference"); break;

    case MPU6050_CLOCK_PLL_ZGYRO:      Serial.println("PLL with Z axis gyroscope reference"); break;

    case MPU6050_CLOCK_PLL_YGYRO:      Serial.println("PLL with Y axis gyroscope reference"); break;

    case MPU6050_CLOCK_PLL_XGYRO:      Serial.println("PLL with X axis gyroscope reference"); break;

    case MPU6050_CLOCK_INTERNAL_8MHZ:  Serial.println("Internal 8MHz oscillator"); break;

  }

  Serial.print(" * Gyroscope:         ");

  switch(mpu.getScale())

  {case MPU6050_SCALE_2000DPS:        Serial.println("2000 dps"); break;

    case MPU6050_SCALE_1000DPS:        Serial.println("1000 dps"); break;

    case MPU6050_SCALE_500DPS:         Serial.println("500 dps"); break;

    case MPU6050_SCALE_250DPS:         Serial.println("250 dps"); break:}

  Serial.print(" * Gyroscope offsets: ");

  Serial.print(mpu.getGyroOffsetX());

  Serial.print(" / ");

  Serial.print(mpu.getGyroOffsetY());

  Serial.print(" / ");

  Serial.println(mpu.getGyroOffsetZ());

  Serial.println();}

void loop()

{   Vector rawGyro = mpu.readRawGyro();

  Vector normGyro = mpu.readNormalizeGyro();

  Serial.print(" Xraw = ");

  Serial.print(rawGyro.XAxis);

  Serial.print(" Yraw = ");

  Serial.print(rawGyro.YAxis);

  Serial.print(" Zraw = ");

  Serial.println(rawGyro.ZAxis); 

if(normGyro.XAxis > maxval || normGyro.XAxis < minval && normGyro.YAxis > maxval || normGyro.YAxis  < minval && normGyro.ZAxis > maxval || normGyro.ZAxis  < minval)

{ digitalWrite(7,HIGH);

  digitalWrite(8,HIGH);

  delay(300);

  digitalWrite(7,HIGH);

  digitalWrite(8,HIGH);

  delay(300);

  lcd.clear();

  lcd.print("***EarthQuake***");

  delay (1000);

  lcd.clear();}

 else{digitalWrite(7,LOW);

 digitalWrite(8,LOW);}

  Serial.print(" Xnorm = ");

  Serial.print(normGyro.XAxis);

  Serial.print(" Ynorm = ");

  Serial.print(normGyro.YAxis);

  Serial.print(" Znorm = ");

  Serial.println(normGyro.ZAxis);

  delay(10);}

ANA SAYFAYA DÖN

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.

24 Nisan 2021 Cumartesi

MPU6050 İvmeölçer ve Jiroskop Sensörü ve Arduino

 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.

Son yıllarda, bazı kurnaz mühendisler başarılı bir şekilde mikro işlenmiş jiroskoplar yaptılar. Bu MEMS (mikroelektromekanik sistem) jiroskopları, hareket tanıma, gelişmiş oyun, artırılmış gerçeklik, panoramik fotoğraf çekimi, araç navigasyonu, fitness izleme ve daha fazlası gibi tamamen yeni bir dizi yenilikçi uygulamanın yolunu açtı.Hiç şüphe yok ki jiroskop ve ivmeölçer kendi yöntemleriyle harika. Ancak bunları birleştirdiğimizde, bir nesnenin yönelimi hakkında çok doğru bilgiler elde edebiliriz. MPU6050 burada devreye giriyor. MPU6050, hem bir jiroskop hem de ivmeölçere sahip olup, bunu kullanarak üç eksenin tümü boyunca dönüşü, yerçekimine bağlı statik ivmeyi ve ayrıca hareket, şok veya titreşim nedeniyle dinamik ivmeyi ölçebiliriz.MPU6050'yi Arduino projemizde kullanmadan önce, ivmeölçerlerin ve jiroskopların gerçekten nasıl çalıştığını görmek güzel olurdu.



İ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.

İvmeölçer Çalışma İllüstrasyon - Ağırlıksız Durum

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.

İvmeölçer Çalışma İllüstrasyon - Ani Hareket

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:

İvmeölçer Çalışma İllüstrasyon - Yerçekimi Kuvveti

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.

mems ivmeölçer çalışıyor
ivmeölçer animasyon etiketleri

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.

coriolis bir kütle üzerindeki kuvvet

Ş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.

coriolis kuvveti iki kütleye etki eder

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.

mpu6050 accel gyro çalışma sürücü modu çıkışı

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.

mpu6050 accel gyro çalışma rulo modu çıkışı

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.

mpu6050 accel gyro çalışma aralığı modu çıkışı

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.

mpu6050 accel gyro çalışma yalpalama modu çıkışı

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.

başı açık l3gd20htr mems jiroskop
Kredi bilgileri: Adam McCombs

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.

mpu6050 modül donanımına genel bakış

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 modülü ivmeölçer ekseni

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 modülü jiroskop ekseni

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.

mpu6050 modülü i2c adres seçim pini

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.

mpu6050 modülü harici i2c pimleri

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:

mpu6050 3 eksenli ivmeölçer jiroskop modülü pin çıkışı

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.

SCLSDA
Arduino UnoA5A4
Arduino NanoA5A4
Arduino Mega2120
Leonardo / Mikro32

Aşağıdaki şema, her şeyi nasıl bağlayacağınızı gösterir.

arduino ile mpu6050 accel gyro modülü kablolama

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.

kitaplıkları yönet

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 kütüphane kurulumu

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.

adafruit birleşik sensör kütüphanesi kurulumu
adafruit busio kütüphane kurulumu

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.

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;

void setup(void) {
	Serial.begin(115200);

	// Try to initialize!
	if (!mpu.begin()) {
		Serial.println("Failed to find MPU6050 chip");
		while (1) {
		  delay(10);
		}
	}
	Serial.println("MPU6050 Found!");

	// set accelerometer range to +-8G
	mpu.setAccelerometerRange(MPU6050_RANGE_8_G);

	// set gyro range to +- 500 deg/s
	mpu.setGyroRange(MPU6050_RANGE_500_DEG);

	// set filter bandwidth to 21 Hz
	mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);

	delay(100);
}

void loop() {
	/* Get new sensor events with the readings */
	sensors_event_t a, g, temp;
	mpu.getEvent(&a, &g, &temp);

	/* Print out the values */
	Serial.print("Acceleration X: ");
	Serial.print(a.acceleration.x);
	Serial.print(", Y: ");
	Serial.print(a.acceleration.y);
	Serial.print(", Z: ");
	Serial.print(a.acceleration.z);
	Serial.println(" m/s^2");

	Serial.print("Rotation X: ");
	Serial.print(g.gyro.x);
	Serial.print(", Y: ");
	Serial.print(g.gyro.y);
	Serial.print(", Z: ");
	Serial.print(g.gyro.z);
	Serial.println(" rad/s");

	Serial.print("Temperature: ");
	Serial.print(temp.temperature);
	Serial.println(" degC");

	Serial.println("");
	delay(500);
}

Ç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.

mpu6050 arduino kodu hızlanma gyro sıcaklık çıkışı

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.

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Ardından, ilgili işlevlere erişebilmemiz için Adafruit_MPU6050 sınıfının yeni bir örneği oluşturulur.

Adafruit_MPU6050 mpu;

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.

Serial.begin(115200);

// Try to initialize!
if (!mpu.begin()) {
	Serial.println("Failed to find MPU6050 chip");
	while (1) {
	  delay(10);
	}
}

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.

mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);

Ö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_tsonuçlarımızı tutmak için önce bellekte bir nesne oluşturuyoruz sensors_event_tsadece 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 .

sensors_event_t a, g, temp;

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 mpuBu, sensörünüzü 'okumak' için aradığınız işlevdir!

mpu.getEvent(&a, &g, &temp);

Son olarak, değerleri seri monitörde çıkarıyoruz.

Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
Serial.print(", Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");

Serial.print("Rotation X: ");
Serial.print(g.gyro.x);
Serial.print(", Y: ");
Serial.print(g.gyro.y);
Serial.print(", Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");

Serial.print("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" degC");

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.

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;

void setup(void) {
	Serial.begin(115200);

	// Try to initialize!
	if (!mpu.begin()) {
		Serial.println("Failed to find MPU6050 chip");
		while (1) {
		  delay(10);
		}
	}

	// set accelerometer range to +-8G
	mpu.setAccelerometerRange(MPU6050_RANGE_8_G);

	// set gyro range to +- 500 deg/s
	mpu.setGyroRange(MPU6050_RANGE_500_DEG);

	// set filter bandwidth to 21 Hz
	mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);

	delay(100);
}

void loop() {
	/* Get new sensor events with the readings */
	sensors_event_t a, g, temp;
	mpu.getEvent(&a, &g, &temp);

	/* Print out the values */
	Serial.print(a.acceleration.x);
	Serial.print(",");
	Serial.print(a.acceleration.y);
	Serial.print(",");
	Serial.print(a.acceleration.z);
	Serial.print(", ");
	Serial.print(g.gyro.x);
	Serial.print(",");
	Serial.print(g.gyro.y);
	Serial.print(",");
	Serial.print(g.gyro.z);
	Serial.println("");

	delay(10);
}

Modülü Z ekseni boyunca yukarı ve aşağı hareket ettirirken buna benzer bir şey görmelisiniz.

mpu6050 arduino plotter çıkışı

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.

ANA SAYFAYA DÖN

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.