Arduino GY-521 İvme ve Gyro Sensörü Kullanımı

Arduino GY-521 Sensörü Kullanımı

Arduino GY-521 Sensörü Kullanımı

Bu yazımızda Arduinoda gy-521 ivme ve gyro sensörünün ne olduğunu ve nasıl kullanıldığını ele alacaz. Lafı uzatmadan yazımıza başlayalım.

Arduinoda GY-521 İvme ve Gyro Sensörü Nedir ?

Arduino gy-521 ivme ve gyro sensörü, 3 eksenli gyro ve 3 eksen açısal ivme ölçer olan ve piezo elektrik etkisi ile çalışan ivme ve eğim değerlerini sayısal şekilde bize aktaran sensör çeşididir. Bu sensör 3 eksende değer iki çeşit değer ölçmektedir ve bunlar gyro ve ivmedir.

İvme ve Gyro Sensörü

Bu sensör denge ile ilgili olan projelerde kullanılmaktadır. Örneğin piyasada orta seğmende bulunan dronelarda bu sensörden bulunmaktadır ve böylelikle havada dengede durmayı yada kalkış esnasında drone sabit bir şekilde kalkmasını sağlamaktadır. Bunun dışında Arduino ile yapılan ve bizimde ileriki zamanlarda yer vereceğimiz iki tekerlek ile ayakta duran robot gibi projelerde dengenin durumuna göre motorlara komut verilmesini sağlamaktadır.

Arduino ile Denge Robotu

İvme ve gyro sensörünün 3 volt veya 5 volt ile beslenebilmektedir. Şimdi ise ivme ve gyro sensörü ile ilgili bir bir kaç örnek yapalım ve çalışma mantığını daha iyi anlamaya çalışalım.

Proje 1

Bu projemizde ivme ve gyro sensörü verdiği verileri serial monitörde görüntüleyecez ve böylelikle bu sensör yardımıyla hangi verilerin geldiğini görmüş olacaz. Lafı uzatmadan gerekli malzemeleri listeleyelim.

  • 1 Adet Arduino Uno
  • 1 Adet breadboard
  • 1 Adet İvme ve gyro sensörü (GY-521)
  • Jumper kablolar

Şimdi ise kod satırlarını oluşturmaya başlayalım. Burada dikkat etmemiz gereken husus kütüphanedir. Kütüphaneyi eklemeyi unutmayınız.

//omerfarukyildiz.com
#include "MPU6050.h" //ivme ve gyro sensörümüzün kütüphanesini tanımlıyoruz. 
MPU6050 ivmeolcer; // ivme ve gyro sensörünün kutuphanesinden deger tanımladık. 
int ivmex, ivmey, ivmez, gyrox, gyroy, gyroz; // Degerleri tanımlıyoruz. 
void setup() {
Serial.begin(9600); //Serial haberleşmeyi açıyoruz. 
} 
void loop() {
ivmeolcer.getMotion6(&ivmex, &ivmey, &ivmez, &gyrox, &gyroy, &gyroz); // ivme ve gyro değerlerini okumayı saglıyoruz kutuphane yardımıyla. 
 Serial.print("x ekseninin ivmesi: "); Serial.print(ivmex); Serial.print("\t"); //Ekrana degerleri yazdırıyoruz.
 Serial.print("y ekseninin ivmesi: "); Serial.print(ivmey); Serial.print("\t"); //Ekrana degerleri yazdırıyoruz.
 Serial.print("z ekseninin ivmesi: "); Serial.print(ivmez); Serial.print("\t"); //Ekrana degerleri yazdırıyoruz.
 Serial.print("x ekseninin gyrosu: "); Serial.print(gyrox); Serial.print("\t"); //Ekrana degerleri yazdırıyoruz.
 Serial.print("y ekseninin gyrosu: "); Serial.print(gyroy); Serial.print("\t"); //Ekrana degerleri yazdırıyoruz.
 Serial.print("z ekseninin gyrosu: "); Serial.print(gyroz);  Serial.println("\t"); //Ekrana degerleri yazdırıyoruz.
delay(100); //Ekrana 10 milisaniyede bir deger getirecek.
}

Bu kod satırlarında ivme ve gyro sensörünün kütüphanesi yardımıyla verileri çektik ve bu verileri serial monitörde ekrana sunduk ve bu işlem 10 milisaniyede bir tekrarlanacak şekilde ayarladık. Şimdi ise devre şemasını oluşturalım.

Proje 1 Şeması

Yukarıdaki şekilde oluşturduğumuz devre şemasına uygun şekilde bağlantılarını oluşturmanızın ardından serial monitörü açınız ve ekrana bütün değerler aşağıdaki gibi gelecektir.

Proje 1 Ekran Çıktısı

Bu şekilde ekrana gelen bütün veriler yansıyacaktır. Şimdi ise ikinci projemize gecelim.

Proje 2

Bu projemizde ivme ve gyro sensörümüzden gelen verilerden yararlanarak led yakma işlemini gerçekleştirecez. Bu proje için gerekli malzemeler su şekildedir;

  • 1 Adet Arduino Uno
  • 1 Adet breadboard
  • 1 Adet İvme ve gyro sensörü (GY-521)
  • 1 Adet Beyaz Led
  • 1 Adet kırmızı Led
  • 1 Adet mavi Led
  • 1 Adet sarı Led
  • 1 Adet yeşil Led
  • 5 Adet 220 k direnç
  • Jumper kablolar

Listedeki malzemeleri temin ettiğimize göre şimdi ise kod satırlarını oluşturalım.

//omerfarukyildiz.com
#include "MPU6050.h" //ivme ve gyro sensörümüzün kütüphanesini tanımlıyoruz. 
MPU6050 ivmeolcer; // ivme ve gyro sensörünün kutuphanesinden deger tanımladık. 
int ivmex, ivmey, ivmez, gyrox, gyroy, gyroz; // Değerleri tanımlıyoruz. 
int beyaz=8; //Ledlerin hangi pinlerde oldugunu tanımlıyoruz.
int kirmizi=9;
int sari=10;
int yesil=11;
int mavi=12;
void setup() {
Serial.begin(9600); //Serial haberleşmeyi açıyoruz. 
pinMode(beyaz,OUTPUT); //Ledlerin Pinlerini açıyoruz.
pinMode(kirmizi,OUTPUT);
pinMode(sari,OUTPUT);
pinMode(yesil,OUTPUT);
pinMode(mavi,OUTPUT);
} 
void loop() {
ivmeolcer.getMotion6(&ivmex, &ivmey, &ivmez, &gyrox, &gyroy, &gyroz); // ivme ve gyro değerlerini okumayı saglıyoruz kutuphane yardımıyla. 
 Serial.print("x ekseninin ivmesi: "); Serial.print(ivmex); Serial.print("\t"); //Ekrana değerleri yazdırıyoruz.
 Serial.print("y ekseninin ivmesi: "); Serial.print(ivmey); Serial.print("\t"); //Ekrana değerleri yazdırıyoruz.
 Serial.print("z ekseninin ivmesi: "); Serial.print(ivmez); Serial.print("\t"); //Ekrana değerleri yazdırıyoruz.
 Serial.print("x ekseninin gyrosu: "); Serial.print(gyrox); Serial.print("\t"); //Ekrana değerleri yazdırıyoruz.
 Serial.print("y ekseninin gyrosu: "); Serial.print(gyroy); Serial.print("\t"); //Ekrana değerleri yazdırıyoruz.
 Serial.print("z ekseninin gyrosu: "); Serial.print(gyroz);  Serial.println("\t"); //Ekrana degerleri yazdırıyoruz.
  if (ivmey>1000) //Y ekseninin ivmesi kosuldaki gibi ise altındaki işlemleri yaptıracaz.
  {
    digitalWrite(mavi, HIGH); // Mavi ledi açıyor. 
delay(200); // Mavi ledin açılma işlemi 2 saniye sürecek.
digitalWrite(mavi, LOW);//Mavi led kapatılıyor. 
delay(200); //Mavi led kapatma işlemini süresi 2 saniye olacak.
    }
  else if (ivmey<0)  //Y ekseninin ivmesi kosuldaki gibi ise altındaki işlemleri yaptıracaz.
  {
        digitalWrite(yesil, HIGH); // Yesil ledi açıyor. 
delay(200); // Yesil ledin açılma işlemi 2 saniye sürecek.
digitalWrite(yesil, LOW);//Yesil led kapatılıyor. 
delay(200); //Yesil led kapatma işlemini süresi 2 saniye olacak.
    }
  else if (ivmex>1000)  //X ekseninin ivmesi kosuldaki gibi ise altındaki işlemleri yaptıracaz.
  {
       digitalWrite(kirmizi, HIGH); // kırmızı ledi açıyor. 
delay(200); // kırmızı ledin açılma işlemi 2 saniye sürecek.
digitalWrite(kirmizi, LOW);//kırmızı led kapatılıyor. 
delay(200); //kırmızı led kapatma işlemini süresi 2 saniye olacak.
    }
  else if (ivmex<0)  //X ekseninin ivmesi kosuldaki gibi ise altındaki işlemleri yaptıracaz.
  {
       digitalWrite(sari, HIGH); // Sarı ledi açıyor. 
delay(200); // Sarı ledin açılma işlemi 2 saniye sürecek.
digitalWrite(sari, LOW);//Sarı led kapatılıyor. 
delay(200); //Sarı led kapatma işlemini süresi 2 saniye olacak.
    }
else //Eger hiçbiri degerse alttaki işlemi yap.
{
     digitalWrite(beyaz, HIGH); // Beyaz ledi açıyor. 
delay(200); // Beyaz ledin açılma işlemi 2 saniye sürecek.
digitalWrite(beyaz, LOW);//Beyaz led kapatılıyor. 
delay(200); //Beyaz led kapatma işlemini süresi 2 saniye olacak.
  }
  delay(200); //Ekrana 10 milisaniyede bir deger getirecek.
}

Kod satırları ilk projemizin aynısı olup kod satırlarını üzerine ledleri ekleyip aktif hale getirdik ve ardından if-else yardımıyla ivme ve gyro sensöründen gelen değerlere göre ledlerin yanmasını sağladık. Şimdi ise devre şemasını oluşturalım.

Proje 2 Şeması

Bu şekilde devreyi oluşturmamızın ardından sensörden gelen verilere göre ledler yanacaktır. Sensör eğer düz bir şekilde durması halinde beyaz led yanacaktır ve her bir konumda farklı led tek şekilde yanacaktır.

Matlab programlama dili için oluşturduğumuz yazılarak gitmek için Tıklayınız. tıklayarak gidebilirsiniz.

İsterseniz Java ve diğer programlama dilleri için sayfamıza Tıklayınız.

İsterseniz Arduino ile ilgili  projelerime göz atmak için sayfamıza Tıklayınız.

Yazı dolaşımı

Exit mobile version