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).
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


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.
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)
/*
* 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
-
EksternalDatasheet for MPU-9250invensense.com
-
EksternalGet the MPU-9250 library from GitHubgithub.com
-
EksternalMPU-9250 register mapinvensense.com
Berkas📁
Tidak ada file tersedia.