Raspberry Pi Dersleri serimizde kullanacağımız malzemelerin tamamına sizler için hazırladığımız setler ile kolayca sahip olabilirsiniz. Raspberry Pi’ye Uzaktan Bağlantı Yöntemleri (VNC,SSH,TTL) #4 dersimize kadar olan malzemeler için Kombo Kit, Raspberry Pi 3 Röle Kartı İle Alarm Devresi Yapımı #11 dersimize kadar olan malzemeler için Süper Başlangıç Seti, tüm derslerdeki malzemeler için Proje Seti tercih edebilirsiniz.

Merhaba arkadaşlar. Bu dersimizde Raspberry Pi’mize bir ivmeölçer/jiroskop kartı (MPU6050) bağlayacağız.

Gerekli malzemeler:

MPU6050 6-eksen Jiroskop/İvmeölçer Kartı Nedir?

MPU6050, 3-eksen jiroskop ve 3-eksen ivmeölçere sahip bir IMU (inertial measurement unit – ataletsel ölçü birimi) sensörüdür. Cisimlerin hareket ve ivmelerini ölçmek için kullanılır. İnsansız hava araçlarının en temel sensörü bu ve benzeri IMU’lardır. Aynı zamanda denge robotları, kamera stabilizasyon aletleri gibi cihazlarda da kullanılırlar.

mpu6050-breakout
MPU6050 breakout kartı

Jiroskop ile ivmeölçerin farkı:

Jiroskop ile ivmeölçerin farkı; jiroskobun hareketi, ivmeölçerin ise ivmeyi ölçmesidir. Bildiğimiz üzere, durgun haldeki bir cisime etki eden tek ivme yerçekimidir. Bu sayede ivmeölçer ile cismin üzerine etki eden yerçekimi ivmesini ölçerek üç boyutlu uzaydaki oryantasyonunu elde edebiliriz. İvmeölçerden alacağımız bilgi, m/s2 veya yerçekimi kuvveti olan g’nin katları şeklinde olacaktır. Jiroskop ise, herhangi bir eksende cismin yaptığı hareketin ölçümünde kullanılır. Durgun konumdaki bir cisimde jiroskop sıfır yada çok yakın bir değeri ölçer. Cisim hareket ettiği sürece jiroskop sensörü, bu hareketin hızını bize derece/saniye gibi bir hız biriminde verecektir.

Önemli Not: Bu dersimizde kullandığımız sensör I2C bağlantısı kullanmaktadır. Devrenin çalışabilmesi için Raspberry Pi’mize ait I2C arayüzünün açık olması gereklidir. Seriyi sırayla takip etmediyseniz Raspberry Pi Dersleri 1: raspi-config İle İlk Ayarlama dersimizden faydalanarak arayüzü aktifleştirebilirsiniz.

MPU6050, I2C haberleşme arabirimine sahiptir. I2C haberleşme arabirimi, Philips firmasının yarıiletken birimi (şimdiki adı ile NXP) tarafından geliştirilmiş bir seri haberleşme arabirimidir. Çoğunlukla I2C (inter-integrated circuit), IIC ve TWI (two-wire interface) gibi kısaltmalar ile anılır. 1996 yılında Intel tarafından geliştirilen SMBus (System Management Bus) protokolü de I2C tabanlıdır, bu yüzden Linux tabanlı sistemlerde bu isimle anılmaktadır. 2 adet haberleşme hattı (SCL: serial clock ve SDA: serial data) kullandığından çok pratik bir kullanıma sahiptir.

Raspberry Pi – MPU6050 devre şeması:

 

rpi-mpu6050
Raspberry Pi – MPU6050 bağlantı şeması

Devremizin bağlantısını yaptıktan sonra Raspberry Pi’mizi çalıştırıyoruz. İşletim sistemi açılınca bir terminal ekranında

i2cdetect -y 1

komutunu vererek sisteme bağlı olan tüm I2C cihazların listelenmesini sağlıyoruz. Bağlantımız doğru ise aşağıdaki gibi 68 nolu adreste sensörümüzün görünmesi gereklidir:

Not: Eğer Raspberry Pi’nin 256MB RAM belleğe sahip Model B sürümünü kullanıyorsak kodu i2cdetect -y 0 olarak değiştirmemiz gereklidir.

Sensörümüz sistem tarafından sorunsuzca algılandıysa Python kodumuzu çalıştırmaya hazırız demektir:

import smbus
import math
import time

# Guc yonetim register'lari
power_mgmt_1 = 0x6b
power_mgmt_2 = 0x6c

def read_byte(adr):
 return bus.read_byte_data(address, adr)

def read_word(adr):
 high = bus.read_byte_data(address, adr)
 low = bus.read_byte_data(address, adr+1)
 val = (high << 8) + low
 return val

def read_word_2c(adr):
 val = read_word(adr)
 if (val >= 0x8000):
 return -((65535 - val) + 1)
 else:
 return val

def dist(a,b):
 return math.sqrt((a*a)+(b*b))

def get_y_rotation(x,y,z):
 radians = math.atan2(x, dist(y,z))
 return -math.degrees(radians)

def get_x_rotation(x,y,z):
 radians = math.atan2(y, dist(x,z))
 return math.degrees(radians)


bus = smbus.SMBus(1)
address = 0x68 #MPU6050 I2C adresi

#MPU6050 ilk calistiginda uyku modunda oldugundan, calistirmak icin asagidaki komutu veriyoruz:
bus.write_byte_data(address, power_mgmt_1, 0)

while True:
 time.sleep(0.1)
 #Jiroskop register'larini oku
 gyro_xout = read_word_2c(0x43)
 gyro_yout = read_word_2c(0x45)
 gyro_zout = read_word_2c(0x47)

 print "Jiroskop X : ", gyro_xout, " olcekli: ", (gyro_xout / 131)
 print "Jiroskop Y : ", gyro_yout, " olcekli: ", (gyro_yout / 131)
 print "Jiroskop Z: ", gyro_zout, " olcekli: ", (gyro_zout / 131)
 
 #Ivmeolcer register'larini oku
 accel_xout = read_word_2c(0x3b)
 accel_yout = read_word_2c(0x3d)
 accel_zout = read_word_2c(0x3f)

 accel_xout_scaled = accel_xout / 16384.0
 accel_yout_scaled = accel_yout / 16384.0
 accel_zout_scaled = accel_zout / 16384.0

 print "Ivmeolcer X: ", accel_xout, " olcekli: ", accel_xout_scaled
 print "Ivmeolcer Y: ", accel_yout, " olcekli: ", accel_yout_scaled
 print "Ivmeolcer Z: ", accel_zout, " olcekli: ", accel_zout_scaled

 print "X dondurme: " , get_x_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)
 print "Y dondurme: " , get_y_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)

 time.sleep(0.5)

Kodumuz çalışırken bilgileri bize aşağıdaki gibi vermesi gerekli:

4 Yorumlar

    • sudo apt-get install xrdp yukle sonra bilgisayarından Uzak masaüstü baglantısı (mstsc.exe) calıştır. Raspbery ip adresini vererek baglana bilirsin
      veya putty programi ile SSH baglantısı yaparak Terminal ekranı olarak bağlana bilirsiniz

    • Aslında doğrudan Pi üzerinden kayıt almıyoruz, Raspberry Pi üzerinden VNC sunucu çalıştırıp diğer bilgisayardan VNC istemcisi ile bağlanarak o ekranın görüntüsünü kaydediyoruz.

CEVAP VER