- Gerekli Bileşenler:
- MPU6050 Gyro Sensörü:
- Açıklama:
- Devre Şeması ve Açıklaması:
- Raspberry Pi'yi MPU6050 Gyro sensörü için yapılandırma:
- Programlama Açıklaması:
MPU6050 sensörünün tek çip üzerinde birçok işlevi vardır. Bir MEMS ivmeölçer, bir MEMS cayro ve sıcaklık sensöründen oluşur. Bu modül, analog değerleri dijitale çevirirken oldukça hassastır çünkü her kanal için 16 bit analogdan dijitale dönüştürücü donanımı vardır. Bu modül aynı anda x, y ve z kanallarını yakalayabilir. Ana bilgisayar denetleyicisiyle iletişim kurmak için bir I2C arayüzüne sahiptir. Bu MPU6050 modülü, hem ivmeölçer hem de cayroya sahip kompakt bir çiptir. Bu, dronlar, robotlar, hareket sensörleri gibi birçok uygulama için çok kullanışlı bir cihazdır. Jiroskop veya Üç eksenli ivmeölçer olarak da adlandırılır.
Bugün bu yazıda bu MPU6050'yi Raspberry Pi ile Arayüz ve 16x2 LCD üzerindeki değerleri göstereceğiz.
Gerekli Bileşenler:
- Ahududu Pi
- MPU-6050
- 10K Tencere
- Atlama teli
- Breadboard
- Güç kaynağı
MPU6050 Gyro Sensörü:
MPU-6050, tek bir çipte bulunan 8 pinli 6 eksenli bir cayro ve ivmeölçerdir. Bu modül varsayılan olarak I2C seri iletişiminde çalışır, ancak kaydını yapılandırarak SPI arayüzü için yapılandırılabilir. I2C için bunun SDA ve SCL hatları vardır. Neredeyse tüm pinler çok işlevlidir ancak burada sadece I2C mod pinleri ile ilerliyoruz.
PIN konfigürasyonu:
Vcc: - bu pin MPU6050 modülüne toprağa göre güç sağlamak için kullanılır
GND: - bu bir topraklama pimi
SDA: - SDA pin, denetleyici ve mpu6050 modülü arasındaki veriler için kullanılır
SCL: - SCL pini saat girişi için kullanılır
XDA: - Bu, harici sensörlerden yapılandırma ve okuma için sensör I2C SDA Veri hattıdır ((isteğe bağlı) bizim durumumuzda kullanılmaz)
XCL: - Bu, harici sensörlerden yapılandırma ve okuma için sensör I2C SCL saat hattıdır ((isteğe bağlı) bizim durumumuzda kullanılmamaktadır)
ADO: - I2C Slave Adresi LSB (bizim durumumuzda geçerli değildir)
INT: - Verinin hazır olduğunu gösteren kesinti pini.
Daha önce MPU6050'yi Arduino ile arayüzlendirmiştik.
Açıklama:
Bu yazımızda Raspberry Pi ile MPU6050 kullanarak LCD üzerinden sıcaklık, cayro ve ivmeölçer okumalarını gösteriyoruz. Raspberry Pi'de yeniyseniz, Raspberry Pi eğitimleri bölümümüzü inceleyin ve Raspberry Pi'ye başlamayı öğrenin.
Bu projede öncelikle LCD üzerinden sıcaklık değerini gösterdik ve bir süre sonra cayro değerlerini gösterdik ve bir süre sonra aşağıdaki resimlerde gösterildiği gibi ivmeölçer okumalarına sahibiz:
Devre Şeması ve Açıklaması:
MPU6050'yi Raspberry Pi ile arayüzlemek için devre şeması çok basittir burada bir LCD ve MPU6050 kullandık. LCD'nin parlaklığını kontrol etmek için 10k'lik bir pot kullanılır. MPU6050 ile bağlantılı olarak, MPU6050'nin 3.3v güç kaynağı ve topraklamasını Raspberry Pi'nin 3.3v ve topraklamasına bağladığımız 4 bağlantı yaptık. MPU6050'nin SCL ve SDA pinleri, Raspberry'nin fiziksel pin 3 (GPIO2) ve pin 5 (GPIO3) ile bağlanır. LCD'nin RS, RW ve EN doğrudan GPIO18'e ve ahududu pi'nin 23'üne bağlanır. Veri pini doğrudan dijital pin numarası GPIO24, GPIO25, GPIO8 ve GPIO7'ye bağlanır. Raspberry Pi ile LCD arabirimi oluşturma hakkında buradan daha fazla bilgi edinin.
Raspberry Pi'yi MPU6050 Gyro sensörü için yapılandırma:
Programlamaya başlamadan önce, verilen yöntemi kullanarak Raspberry Pi'nin i2c'sini etkinleştirmemiz gerekir:
1. Adım: I2C iletişimini etkinleştirin
Adafruit SSD1306 kütüphanesini kurmadan önce Raspberry Pi'de I2C iletişimini etkinleştirmemiz gerekiyor.
Raspberry Pi konsolunda bu türü yapmak için:
sudo raspi -config
Ve sonra mavi bir ekran görünecektir. Şimdi arayüz seçeneğini seçin
Bundan sonra I2C'yi seçmemiz gerekiyor
Bundan sonra, evet'i seçmemiz ve enter'a basmamız ve ardından tamam'a basmamız gerekiyor
Bundan sonra, aşağıdaki komutu vererek raspberry pi'yi yeniden başlatmamız gerekiyor:
sodo yeniden başlat
Adım 2: python-pip ve GPIO Kitaplığını kurun
sudo apt-get install build-essential python-dev python-pip
Bundan sonra raspberry pi GPIO kütüphanesi kurmamız gerekiyor
sudo pip RPi.GPIO'yu yükler
3. Adım: smbus kitaplığını kurun
Son olarak, smbus kitaplığını verilen komutu kullanarak Raspberry Pi'ye kurmamız gerekiyor:
sudo apt-get install python-smbus
Adım 4: MPU6050 kitaplığını kurun
Bundan sonra verilen komutu kullanarak MPU6050 kütüphanesini kurmamız gerekiyor.
sudo pip yüklemek mpu6050
Şimdi örneklerde örnek kodlar bulabiliriz. Kullanıcı bu kodu doğrudan Raspberry Pi'ye yükleyerek test edebilir veya ihtiyaca göre özelleştirebilir. Burada MPU6050'nin X, Y ve Z eksen değerlerini 16x2 LCD ekranda görüntüledik. Python Kodunun tamamını Eğitimin sonunda bulabilirsiniz.
Programlama Açıklaması:
Tam Python Kodu burada sonunda verilmiştir, kodun birkaç önemli bölümünü açıklıyoruz.
Python Programında time, smbus ve GPIO gibi bazı gerekli kitaplıkları içe aktardık.
smbus içe aktarma zamanı içe aktarma RPi.GPIO'yu gpio olarak içe aktar
Bundan sonra, MPU6050'yi yapılandırmak ve aynı değerden değerler almak için bir kayıt adresi almamız gerekiyor. I2C için veriyolunu kalibre etmek ve başlatmak için bazı değişkenler de aldık.
PWR_M = 0x6B DIV = 0x19 CONFIG = 0x1A GYRO_CONFIG = 0x1B INT_EN = 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x47 TEMP = 0x68 cihaz adresi = sm AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Daha sonra 16x2LCD Sürüş için def begin (), def cmd (ch), def write (ch), def Print (str), def clear () vb . Gibi bazı işlevler yazdık. Raspberry Pi ile LCD Arayüzünü daha fazla kontrol edebilirsiniz.
Bundan sonra MPU6050 Modülünü başlatmamız gerekiyor
def InitMPU (): bus.write_byte_data (Device_Address, DIV, 7) bus.write_byte_data (Device_Address, PWR_M, 1) bus.write_byte_data (Device_Address, CONFIG, 0) bus.write_byte_data (Device_Address_dIG, GYRO_CON., INT_EN, 1) zaman.sleep (1)
Bundan sonra MPU6050'den değerleri okumak ve bunları LCD'ye göstermek için bazı fonksiyonlar yazmamız gerekiyor. Verilen işlev MPU6050'den veri okumak için kullanılır
def readMPU (addr): high = bus.read_byte_data (Device_Address, addr) low = bus.read_byte_data (Device_Address, addr + 1) value = ((yüksek << 8) - düşük) if (değer> 32768): değer = değer - 65536 dönüş değeri
Verilen işlev ivmeölçer ve cayro ölçer verilerini okumak için kullanılır
def accel (): x = readMPU (ACCEL_X) y = readMPU (ACCEL_Y) z = readMPU (ACCEL_Z) Ax = (x / 16384.0-AxCal) Ay = (y / 16384.0-AyCal) Az = (z / 16384.0-AzCal) #print "X =" + str (Ax) ekranı (Ax, Ay, Az) time.sleep (.01) def gyro (): global GxCal global GyCal global GzCal x = readMPU (GYRO_X) y = readMPU (GYRO_Y) z = readMPU (GYRO_Z) Gx = x / 131.0 - GxCal Gy = y / 131.0 - GyCal Gz = z / 131.0 - GzCal #print "X =" + str (Gx) ekran (Gx, Gy, Gz) time.sleep (. 01)
Bundan sonra bir sıcaklık okuma fonksiyonu yazdık
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "%. 2f"% tempC print tempC setCursor (0,0) Yazdır ("Temp:") Yazdır (str (tempC)) zaman.sleep (.2)
MPU6050'yi kalibre etmek için def calibrate () işlevi ve değerleri LCD'de görüntülemek için def display () işlevi kullanılır. Bu işlevleri aşağıda verilen tam kodda kontrol edin.
Bundan sonra initialize, LCD başlamış ve MPU6050 kalibre ve adres daha sonra ise biz MPU- gelen tüm değerleri her üç set çağrıda döngü sıcaklık, ivmeölçer ve jiroskop ve LCD üzerinde gösterdi.
başla(); Baskı ("MPU6050 Arayüzü") setCursor (0,1) Baskı ("Devre Özeti") time.sleep (2) InitMPU () kalibre ederken () 1: InitMPU () temizle () aralık (20): temp Aralık (30) içindeki i için () temizle () Baskı ("Hızlanma") zaman.sleep (1): hızlanma () temizle () Baskı ("Gyro") zaman.sleep (1) aralıktaki i için (30): gyro ()
MPU6050 cayro ve ivmeölçer, herhangi bir cihazın konumunu ve yönünü tespit etmek için kullanılır. Gyro, x, y ve z ekseni konumlarını belirlemek için yerçekimini kullanır ve ivmeölçer, hareketin değişim oranına göre tespit eder. İvmeölçeri Arduino ile zaten birçok projemizde kullandık:
- İvme Ölçer Tabanlı El Hareketi Kontrollü Robot
- Arduino Tabanlı Araç Kaza Uyarı Sistemi
- Arduino kullanarak Deprem Dedektörü Alarmı