Search Code

MPU-6050 İvmeölçer ve Jiroskop Modülü Nasıl Kullanılır

MPU-6050 İvmeölçer ve Jiroskop Modülü Nasıl Kullanılır

MPU-6050, tek bir pakette 3 eksenli bir ivmeölçer ve 3 eksenli bir jiroskopu birleştiren çok yönlü bir sensördür. Bu eğitimde, bu modülü bir Arduino ile arayüzleyerek ivmeyi ve açısal hızı nasıl ölçeceğimizi keşfedeceğiz. Sonuç, sensörden gerçek zamanlı verileri görüntüleyen ve cihazınızın hem ivmesini hem de yönünü izlemenize olanak tanıyan basit bir program olacaktır.

Bu kılavuzu takip ederek, donanımı nasıl kuracağınızı, bileşenleri doğru şekilde nasıl bağlayacağınızı ve MPU-6050'yi çalıştırmak için gerekli kodu nasıl yazacağınızı öğreneceksiniz. Bu, hareket algılama ve yön tespiti içeren ileri projeler için size bir temel sağlayacaktır. Ek netlik için, bu eğitime eşlik eden videoyu mutlaka izleyin (videoda 00:00'da).

Donanım Açıklaması

Bu projedeki ana bileşen, hem ivmeölçer hem de jiroskop verileri sağlayan MPU-6050 sensörüdür. İvmeölçer, X, Y ve Z eksenleri boyunca doğrusal ivmeyi ölçerken, jiroskop aynı eksenler etrafındaki dönüş hızlarını ölçer. Bu kombinasyon, MPU-6050'yi hareket takibi gerektiren uygulamalar için mükemmel bir seçim haline getirir.

Ayrıca modül, iletişim için bir I2C arayüzü kullanır; bu, bağlantıları basitleştirir ve aynı veri yolu üzerinde birden fazla cihazın bağlanmasına olanak tanır. Sensör, tipik olarak 3.3V ile 5V arasında bir voltaj gerektiren VCC pini üzerinden beslenir. Toprak, Arduino'nun ortak toprağına bağlanır.

Veri Sayfası Detayları

ÜreticiInvenSense
Parça numarasıMPU-6050
Mantık/G/Ç voltajı3.3 – 5 V
Besleme voltajı3.3 – 5 V
Çıkış akımı (kanal başına)
Tepe akımı (kanal başına)
PWM frekansı yönergesi
Giriş mantık eşikleri
Gerilim düşümü / RDS(on) / doyum
Termal limitler
PaketQFN
Notlar / varyantlar

  • VCC pinini 3.3V veya 5V'a bağlayın.
  • GND pinini toprağa bağlayın.
  • SDA (veri) ve SCL (saat) üzerinden I2C iletişimini kullanın.
  • SDA ve SCL hatlarında çekme dirençlerinin bulunduğundan emin olun.
  • Sensöre zarar vermemek için uygun voltaj seviyelerini kontrol edin.

Bağlantı Talimatları

arduino_wiring_MPU-6050

MPU-6050'yi Arduino'nuzla bağlamak için, MPU-6050'nin VCC pinini Arduino'daki 5V pinine bağlayarak başlayın. Ardından, MPU-6050'nin GND pinini Arduino'daki GND pinlerinden birine bağlayın. I2C iletişimi için, MPU-6050'nin SDA pinini Arduino'nun A4 pinine ve SCL pinini A5 pinine bağlayın. Kodunuza uygun kütüphaneleri ekleyerek Arduino'nuzun I2C iletişimini kullanacak şekilde ayarlandığından emin olun.

Sistemi çalıştırmadan önce bağlantılarınızı tekrar kontrol edin. Bir breadboard kullanıyorsanız, bağlantıların güvenli olduğundan ve kısa devre olmadığından emin olun. Modül beklenildiği gibi yanıt vermezse, kablolamayı doğrulayın ve kodunuzdaki MPU-6050'nin I2C adresini kontrol edin.

Kod Örnekleri ve Açıklaması

Aşağıdaki kod parçası MPU-6050'yi başlatır ve ondan veri okumaya başlar. Anahtar tanımlayıcılar, MPU6050 sınıfının bir örneği olan mpu6050 ve veri çıkışının zamanlamasını kontrol etmek için kullanılan timer içerir.

MPU6050 mpu6050(Wire);
long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

Bu kurulum fonksiyonunda, seri iletişimi ve MPU-6050 sensörünü başlatıyoruz. mpu6050.calcGyroOffsets(true) çağrısı çok önemlidir çünkü jiroskop ofsetlerini kalibre ederek doğru okumalar sağlar.

Döngü fonksiyonunda, sensör verilerini sürekli olarak günceller ve seri monitöre yazdırırız. Aşağıdaki kod parçası, sıcaklık ve ivme verilerinin nasıl okunacağını ve yazdırılacağını gösterir:

if(millis() - timer > 1000){
  Serial.print("temp : ");Serial.println(mpu6050.getTemp());
  Serial.print("accX : ");Serial.print(mpu6050.getAccX());
  Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
  Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
}

Bu blok, son çıktıdan bu yana bir saniye geçip geçmediğini kontrol eder. Ardından MPU-6050'den sıcaklık ve ivme değerlerini alır ve bunları seri monitöre yazdırır. Bu değerlerin gerçek zamanlı olarak güncellendiğini gözlemleyebilirsiniz.

Gösterim / Beklentiler

Her şey bağlandıktan ve kod yüklendikten sonra, seri monitörde her saniye sıcaklık ve ivme verilerinin yazdırıldığını görmeyi bekleyebilirsiniz. MPU-6050'yi eğerseniz veya hareket ettirirseniz, ivme değerleri buna göre değişmelidir. Yanlış kablolama veya yetersiz güç kaynağının düzensiz okumalara veya hiç veri gelmemesine yol açabileceğini unutmayın (videoda 01:30'da).

Görseller

arduino_wiring_MPU-6050
arduino_wiring_MPU-6050
MPU-6050-module-1
MPU-6050-module-1
MPU-6050-module-2
MPU-6050-module-2
MPU-6050-module-schematic
MPU-6050-module-schematic
MPU-6050-module-1
MPU-6050-module-1
116-Arduino code for the MPU-6050 accelerometer and gyroscope sensor (all data)
Dil: C++
/*
 * 
 * This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
 * 
 * This code displays all data:
 * -Gyroscope X, Gyroscope Y, Gyroscope Z
 * -Gyroscope Angle X, Gyroscope Angle Y, Gyroscope Angle Z 
 * -Accel X, Accel Y, Accel Z
 * -Accel Angle X, Accel Angle Y, Accel Angle Z,
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
 * 
 */
#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

void loop() {
  mpu6050.update();

  if(millis() - timer > 1000){
    
    Serial.println("=======================================================");
    Serial.print("temp : ");Serial.println(mpu6050.getTemp());
    Serial.print("accX : ");Serial.print(mpu6050.getAccX());
    Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
    Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
  
    Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
    Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
    Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
  
    Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
    Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
  
    Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
    Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
    Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
    
    Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
    Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
    Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
    Serial.println("=======================================================\n");
    timer = millis();
    
  }

}
117-Arduino code for an MPU-6050 accelerometer and gyroscope sensor (just angle)
Dil: C++
/*
 * 
 * This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
 * 
 * This code displays:
 * - Angle X, Angle Y, Angle Z,
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
 * 
 */
#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

void loop() {
  mpu6050.update();

  if(millis() - timer > 1000){
    
    Serial.println("=======================================================");
    Serial.print("temp : ");Serial.println(mpu6050.getTemp());
    Serial.print("accX : ");Serial.print(mpu6050.getAccX());
    Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
    Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
  
    Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
    Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
    Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
  
    Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
    Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
  
    Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
    Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
    Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
    
    Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
    Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
    Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
    Serial.println("=======================================================\n");
    timer = millis();
    
  }

}

İhtiyacın olabileceğini düşünüyor

Kaynaklar ve referanslar

Dosyalar📁

Arduino Kütüphaneleri (zip)

Diğer dosyalar