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ı
| Üretici | InvenSense |
|---|---|
| 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 | … |
| Paket | QFN |
| 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ı

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).
/*
*
* 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();
}
}
/*
*
* 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
-
AmazonPurchase MPU-6050 from Amazonamzn.to
Kaynaklar ve referanslar
-
DışManufacturer websiteinvensense.com
Dosyalar📁
Arduino Kütüphaneleri (zip)
-
Arduino library for MPU9250
robojax-MPU9250-master.zip3.38 MB
Diğer dosyalar
-
33 MHz 4 kanallı uzaktan röle: Toplam modül akım ihtiyacı
robojax-MPU6050_tockn-master.zip