Search Code

Kode MPU-9250 Akselerometer, Giroskop, dan Magnetometer

Kode MPU-9250 Akselerometer, Giroskop, dan Magnetometer

Dalam tutorial ini, kita akan menjelajahi cara menggunakan sensor MPU-9250, yang menggabungkan akselerometer, giroskop, dan magnetometer dalam satu modul yang ringkas. Di akhir panduan ini, Anda akan dapat membaca data sensor dan menafsirkan maknanya dalam proyek Anda. Sensor ini sangat berguna untuk aplikasi seperti robotika dan drone, di mana pelacakan orientasi dan gerakan sangat penting. Anda dapat merujuk ke video untuk klarifikasi tambahan tentang pengaturan dan kode (di video pada 00:20).

ELE_MPU6050_208
ELE_MPU6050_208

Penjelasan Perangkat Keras

Modul MPU-9250 mengintegrasikan tiga sensor: akselerometer, giroskop, dan magnetometer. Akselerometer mengukur gaya percepatan, memungkinkan Anda untuk menentukan kecepatan dan orientasi. Giroskop memberikan kecepatan sudut, membantu Anda memahami perubahan orientasi dari waktu ke waktu. Terakhir, magnetometer berfungsi sebagai kompas, menyediakan data medan magnet yang membantu dalam navigasi.

Kombinasi sensor ini sangat bermanfaat dalam aplikasi yang memerlukan pelacakan gerakan yang presisi, seperti pada drone atau ponsel pintar. MPU-9250 berkomunikasi melalui I2C atau SPI, menjadikannya serbaguna untuk berbagai pengaturan mikrokontroler.

Detail Datasheet

Produsen InvenSense
Nomor bagian MPU-9250
Tegangan logika/IO 1,8 V (I/O), 3,3 V (catu daya)
Tegangan catu daya 2,4 - 3,6 V
Arus keluaran (per saluran) 3,2 mA (operasi normal)
Arus puncak (per saluran) 19,8 mA (maks)
Panduan frekuensi PWM T/A
Ambang logika masukan 0,3 * VDD (rendah), 0,7 * VDD (tinggi)
Penurunan tegangan / RDS(on) / saturasi T/A
Batas termal -40 hingga 85 °C
Kemasan QFN
Catatan / varian Termasuk regulator tegangan internal
  • Pastikan catu daya yang tepat (2,4 - 3,6 V) untuk menghindari kerusakan modul.
  • Gunakan resistor pull-up untuk jalur SDA dan SCL jika belum disertakan pada papan breakout Anda.
  • Verifikasi alamat I2C (default adalah 0x68) dan sesuaikan pin ADO untuk alamat alternatif.
  • Periksa koneksi untuk stabilitas guna mencegah pembacaan yang salah.
  • Kalibrasi sensor secara teratur untuk pengukuran yang akurat.

Instruksi Pengkabelan

Pengkabelan Arduino untuk MPU6050 menggunakan A4 dan A4 untuk SDA dan SCL
Pengkabelan Arduino untuk MPU6050 menggunakan A4 dan A4 untuk SDA dan SCL
Arduino Wiring for MPU-6050
Arduino Wiring for MPU-6050
Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL

Untuk menghubungkan MPU-9250 ke Arduino Anda, mulailah dengan menghubungkan pin VCC pada MPU-9250 ke pin 5V pada Arduino. Modul ini memiliki regulator internal, jadi aman untuk memberi daya dengan 5V. Selanjutnya, hubungkan pin GND ke ground (GND) pada Arduino. Untuk komunikasi data, hubungkan pin SDA ke pin A4 pada Arduino dan pin SCL ke pin A5. Konfigurasi ini standar untuk banyak papan Arduino.

Jika Anda menggunakan Arduino Mega, pin SDA dan SCL terletak di pin 20 dan 21, masing-masing. Pastikan koneksi aman untuk menghindari kesalahan komunikasi. Jika Anda perlu mengubah alamat I2C dari MPU-9250, hubungkan pin ADO ke 5V untuk mengaturnya ke 0x69. Melepaskannya akan mengembalikannya ke 0x68.

Skema Arduino untuk MPU6050 menggunakan A4 dan A4 untuk SDA dan SCL
Skema Arduino untuk MPU6050 menggunakan A4 dan A4 untuk SDA dan SCL

Contoh Kode & Penjelasan

Dalam sketsa Arduino, kita mulai dengan menyertakan pustaka MPU9250 dan membuat instance dari sensor:

#include "MPU9250.h"
MPU9250 IMU(Wire,0x68);

Kode menginisialisasi sensor dan memulai komunikasi dalam fungsi setup():

void setup() {
  Serial.begin(115200);
  status = IMU.begin();
  if (status < 0) {
    Serial.println("Inisialisasi IMU tidak berhasil");
    while(1) {}
  }
}

Dalam fungsi loop(), kita terus membaca dan mencetak data sensor:

void loop() {
  IMU.readSensor();
  Serial.print("AccelX: ");
  Serial.print(IMU.getAccelX_mss(),6);
  // Pernyataan cetak lainnya untuk sumbu lainnya
}

Bagian ini membaca nilai akselerometer, giroskop, dan magnetometer, menampilkannya di Serial Monitor. Pastikan untuk memeriksa kode lengkap yang dimuat di bawah artikel untuk implementasi penuh.

Demonstrasi / Apa yang Diharapkan

Ketika Anda menjalankan kode, Anda akan melihat nilai sensor diperbarui secara real-time di Serial Monitor. Nilai akselerometer akan berfluktuasi saat Anda menggerakkan sensor, sementara nilai giroskop akan menunjukkan laju rotasi. Magnetometer akan memberi Anda kekuatan medan magnet dalam tiga sumbu, yang dapat digunakan untuk menentukan orientasi. Berhati-hatilah dengan input yang mengambang, karena dapat menyebabkan pembacaan yang tidak akurat (di video pada 12:30).

Bab

  • Pendahuluan (00:00)
  • Penjelasan Perangkat Keras (01:30)
  • Instruksi Pengkabelan (04:00)
  • Contoh Kode & Panduan (06:00)
  • Demonstrasi (10:00)

Gambar

ELE_MPU6050_208
ELE_MPU6050_208
Arduino Wiring for MPU-6050
Arduino Wiring for MPU-6050
Arduino Schematic for  MPU6050 using A4 and A4 for SDA and SCL
Arduino Schematic for MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL
126-Arduino code for an MPU-9250 accelerometer, gyroscope, and magnetometer
Bahasa: C++
/*
 * Library: https://github.com/bolderflight/MPU9250
Basic_I2C.ino
Brian R Taylor
brian.taylor@bolderflight.com

Copyright (c) 2017 Bolder Flight Systems

Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
and associated documentation files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, publish, distribute, 
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or 
substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
 * Updated by Ahmad Shamshiri on July 9, 2018 for Robojax.com
 * in Ajax, Ontario, Canada
 * Watch instruction video for this code: 
For this sketch you need to connect:
VCC to 5V and GND to GND of Arduino
SDA to A4 and SCL to A5

S20A is 3.3V voltage regulator MIC5205-3.3BM5
*/

#include "MPU9250.h"

// An MPU9250 object with the MPU-9250 sensor on I2C bus 0 with address 0x68
MPU9250 IMU(Wire,0x68);
int status;

void setup() {
  // Serial to display data
  Serial.begin(115200);
  while(!Serial) {}

  // Start communication with IMU 
  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    Serial.println("Check IMU wiring or try cycling power");
    Serial.print("Status: ");
    Serial.println(status);
    while(1) {}
  }
}

void loop() {
  // Read the sensor
  IMU.readSensor();
  // Display the data
  Serial.print("AccelX: ");
  Serial.print(IMU.getAccelX_mss(),6);
  Serial.print("\t");
  Serial.print("AccelY: ");  
  Serial.print(IMU.getAccelY_mss(),6);
  Serial.print("\t");
  Serial.print("AccelZ: ");  
  Serial.println(IMU.getAccelZ_mss(),6);
  
  Serial.print("GyroX: ");
  Serial.print(IMU.getGyroX_rads(),6);
  Serial.print("\t");
  Serial.print("GyroY: ");  
  Serial.print(IMU.getGyroY_rads(),6);
  Serial.print("\t");
  Serial.print("GyroZ: ");  
  Serial.println(IMU.getGyroZ_rads(),6);

  Serial.print("MagX: ");  
  Serial.print(IMU.getMagX_uT(),6);
  Serial.print("\t");  
  Serial.print("MagY: ");
  Serial.print(IMU.getMagY_uT(),6);
  Serial.print("\t");
  Serial.print("MagZ: ");  
  Serial.println(IMU.getMagZ_uT(),6);
  
  Serial.print("Temperature in C: ");
  Serial.println(IMU.getTemperature_C(),6);
  Serial.println();
  delay(200);
}

Sumber daya & referensi

Berkas📁

Tidak ada file tersedia.