Pendahuluan MPU-9250 AK8963
Salah satu sensor yang dapat diandalkan dalam proses pembuatan kompas adalah Magnetometer. Pada artikel ini saya akan membagikan kode dasar untuk dapat baca magnetometer MPU9250 dengan Arduino.
Sebelum lanjut, mengutip datasheet bahwa IC MPU-9250 ini terdiri dari 2 bagian blok sensor. Blok pertama terdiri dari Akselerometer dan Giroskop, sedangkan blok lainnya adalah sensor magnetometer AK8963 3-Axis dari Asahi Kasei Microdevices Corporation. Oleh karena itu, sensor magnetometer dapat diakses sendiri tanpa mengakses akselerometer dan giroskop.
Pada gambar dibawah ini merupakan blok diagram yang dapat anda lihat bahwa magnetometer (X, Y dan Z Compas) berbeda tempat dengan yang lain.
Magnetometer 3-sumbu menggunakan teknologi sensor Hall yang sangat sensitif. Bagian magnetometer IC menggabungkan sensor magnetik untuk mendeteksi magnet terestrial di X-, Y-, dan Z-Axes.
Rangkaian
Untuk merangkaikan sensor ini ke Arduino sangat mudah, karena komunikasi yang digunakan adalah I2C. Dimana hanya menggunakan dua kabel saja. Hubungkan ke Arduino board seperti pada gambar disamping ini: |
Kode Program
Untuk menjalankan kode program dibawah, saya gunakan library dari SparkFun yaitu SparkFun MPU-9250. Cara menambahkan library ini pada Arduino IDE versi 2 adalah seperti ditunjukkan pada gambar berikut ini:
Setelah itu, compile dan upload kode program berikut ini ke board Arduino. Lalu buka Serial monitor dan set BaudRate ke 9600.
#include "quaternionFilters.h"
#include "MPU9250.h"
#define I2Cclock 400000
#define I2Cport Wire
#define MPU9250_ADDRESS MPU9250_ADDRESS_AD0
MPU9250 myIMU(MPU9250_ADDRESS, I2Cport, I2Cclock);
void setup() {
Wire.begin();
Serial.begin(9600);
myIMU.initMPU9250();
byte d = myIMU.readByte(AK8963_ADDRESS, WHO_AM_I_AK8963);
if (d == 0x48) // WHO_AM_I should always be 0x71
{
Serial.println(F("Magnetometer is online..."));
} else {
Serial.println(F("Magnetometer is offline..."));
Serial.flush();
abort();
}
// Get magnetometer calibration from AK8963 ROM
// Initialize device for active mode read of magnetometer
myIMU.initAK8963(myIMU.factoryMagCalibration);
// Get sensor resolutions, only need to do this once
myIMU.getMres();
// The next call delays for 4 seconds, and then records about 15 seconds of
// data to calculate bias and scale.
myIMU.magCalMPU9250(myIMU.magBias, myIMU.magScale);
}
void loop() {
myIMU.readMagData(myIMU.magCount); // Read the x/y/z adc values
// Calculate the magnetometer values in milliGauss
// Include factory calibration per data sheet and user environmental
// corrections
// Get actual magnetometer value, this depends on scale being set
myIMU.mx = (float)myIMU.magCount[0] * myIMU.mRes
* myIMU.factoryMagCalibration[0]
- myIMU.magBias[0];
myIMU.my = (float)myIMU.magCount[1] * myIMU.mRes
* myIMU.factoryMagCalibration[1]
- myIMU.magBias[1];
myIMU.mz = (float)myIMU.magCount[2] * myIMU.mRes
* myIMU.factoryMagCalibration[2]
- myIMU.magBias[2];
// Must be called before updating quaternions!
myIMU.updateTime();
// Sensors x (y)-axis of the accelerometer is aligned with the y (x)-axis of
// the magnetometer; the magnetometer z-axis (+ down) is opposite to z-axis
// (+ up) of accelerometer and gyro! We have to make some allowance for this
// orientationmismatch in feeding the output to the quaternion filter. For the
// MPU-9250, we have chosen a magnetic rotation that keeps the sensor forward
// along the x-axis just like in the LSM9DS0 sensor. This rotation can be
// modified to allow any convenient orientation convention. This is ok by
// aircraft orientation standards! Pass gyro rate as rad/s
MahonyQuaternionUpdate(myIMU.ax, myIMU.ay, myIMU.az, myIMU.gx * DEG_TO_RAD, myIMU.gy * DEG_TO_RAD, myIMU.gz * DEG_TO_RAD, myIMU.my, myIMU.mx, myIMU.mz, myIMU.deltat);
Serial.println((String) "X:" + myIMU.mx + " Y:" + myIMU.my + " Z" + myIMU.mz);
delay(200);
}
Kalibrasi
Setelah kode program diatas berhasil di upload ke Arduino Board, sekarang silahkan anda membuka serial monitor.
Untuk pertama kali, serial monitor akan memberitahukan kepada anda untuk menggerakkan sensor MPU 9250 seperti angka 8 seperti instruksi berikut:
Untuk memberikan ilustrasi dalam proses kalibrasi diatas, perhatikan pada gambar berikut:
Hasil
Jika kalibrasi sudah selesai, anda dapat melihat hasil yang ditunjukkan pada Serial Monitor seperti pada gambar berikut:
Semoga artikel Baca Nilai Magnetometer MPU9250 Dengan Arduino ini bermanfaat.
Baca artikel bermanfaat lainnya:
- Baca Data dari MPU-9250 Menggunakan Arduino
- Cara Menggunakan MPU-6050 GY-521 Pada Arduino
- MPU6050 Arduino Ukur Sudut Derajat
- Cara Akses MPU6050 Pakai Arduino Kode Dasar
- Tampilkan Gambar ke OLED Arduino Pakai u8g2
- Penjelasan Serial.print(F()) Pada Arduino