Cara Akses MPU6050 Pakai Arduino Kode Dasar

Posted on

Akses MPU6050 Arduino

A. Penjelasan MPU6050 Arduino

MPU050 adalah sebuah IC yang didalamnya telah ada sensor Accelerometer, Gyroscope, dan  Temperature. Untuk dapat mengambil data dari sensor tersebut, kita harus tahu Cara Akses MPU6050 Pakai Arduino Kode Dasar.

MPU6050 arduino termasuk kedalam perangkat IMU (Inertial Measurement Unit). Contoh umum Penggunaan / Aplikasi perangkat IMU adalah seperti:

  • Pesawat Tanpa Awak
  • QuadCopter
  • Robot Cerdas
  • Smarthphone
  • Game konsole
  • Gimbal untuk Video Image Stabilization
  • Headset Gaming
  • Virtual Reality
  • dll

Nah teman-teman semua, sebelum kita memasuki program MPU6050 Arduino, mari kita memahami dasar dari Accelerometer, Gyroscope dan Sensor temperatur.

1. Dasar Teori Accelerometer MPU6050

Accelerometer adalah perangkat yang berfungsi untuk menentukan orientasi (arah) berdasarkan percepatan yang diukur. Nah, Percepatan adalah laju perubahan kecepatan dari suatu benda. Ketika suatu benda digerakkan dengan kocepatan konstan, maka benda tersebut dikatakan tidak memiliki percepatan. Namun, ketika suatu benda digerakkan dengan kecepatan tidak konstan, maka benda tersebut dikatakan memiliki percepatan.

Untuk dapat membayangkan hal ini perhatikan gambar berikut:

Cara Akses MPU6050 Pakai Arduino Kode Dasar

Contoh penggunaan Accelerometer adalah pada smartphone seperti mengganti wallpaper hanya dengan gerakan.

Accelerometer tidak menggunakan gravitasi bumi dalam pengoperasiannya, namun accelerometer perlu memperhitungkan percepatan statis seperti gaya gravitasi saat proses kerjanya.

Fitur:

  • 3 Axis
  • Programmable full scale range of ±2g, ±4g, ±8g and ±16g
  • 16-bit ADC
  • Arus Low power mode: 10µA at 1.25Hz, 20µA at 5Hz, 60µA at 20Hz, 110µA at 40Hz
  • Arus Normal mode: 500µA
  • Untuk lebih lengkap, silahkan lihat datasheet pada halaman ke 10.

2. Dasar Teori Gyroscope MPU6050

Gyroscope adalah perangkat yang berfungsi untuk menentukan rotasi (perputaran). Untuk dapat membayangkan hal ini perhatikan gambar berikut:

Cara Akses MPU6050 Pakai Arduino Kode Dasar

Gyroscope menggunakan gravitasi bumi dalam pengoperasiannya.

Fitur:

  • 3 Axis
  • Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with a user-programmable fullscale range of ±250, ±500, ±1000, and ±2000°/sec untuk pelacakan presisi dari gerakan cepat dan lambat.
  • 16-bit ADC
  • Standby current: 5µA
  • Operating current: 3.6mA

3. Temperature Sensore MPU6050

Didalam chip juga terdapat sensor temperatur yang dapat kita gunakan bersamaan dengan pembacaan Akselerometer dan Giroskop.

Fitur :

  • – 40 hingga + 85 °C
  • Sensitifitas 340 LSB/°C (tanpa di trim)
  • Akurasi +1°C

B. Bagaimana MPU6070 Bekerja?

Sebagaimana telah dijelaskan pada dasar teori diatas, chip mpu memiliki akselerometer, giroskop dan sensor suhu. Ketika mpu melakukan operasi, maka semua data nilai dari ke tiga sensor tersebut akan masuk ke Digital Motion Processor (DPM). DMP akan mengeluarkan data tersebut menggunakan komunikasi I2C (SDA & SCL). 

C. MPU6050 Pinout & Rangkaian Arduino

Untuk dapat menghubungkan modul MPU6050 ke Arduino, kita perlu mengetahui pinout yang ada pada modul. Adapun pinout dapat anda lihat pada gambar berikut:

pinout rangkaian mpu 6050 arduino

Penjelasan PinOut:

  • Pada dasarnya, chip bekerja dengan tengangan 3.3V. Menggunakan ic regulator seperti “4B2X” dengan output 3.3V, kita dapat menggunakan VCC dengan nilai +5V.
  • I2C Clock dan Data digunakan untuk komunikasi dengan mikrokontroller seperti Arduno Uno.
  • Eksternal I2C Data dan Clock digunakan untuk berkomunikasi  ke sensor eksternal.
  • Address Bit I2C digunakan untuk mengubah alamat I2C internal dari modul jika alamat default dari modul bentrok dengan perangkat I2C lain.
    Jika pin AD0 LOW, maka alamatnya adalah 0x68 (default).
    Jika pin AD0 HIGH, maka alamatnya adalah 0x69.
  • Interrupt adalah output interupsi.

Adapun rangkaian mpu6050 ke arduino adalah sebagai berikut:

rangkaian mpu 6050 arduino

D. Library MPU6050 Arduino

Sekarang kita telah masuk ke inti dari yaitu bagaimana cara kita menggunakan MPU6050 menggunakan Arduno. Untuk data-data yang dikirimkan dari modul dapat kita ambil dengan mudah, dibantu sebuah library yang telah dibuat oleh ElectronicCats.

Untuk instalasi library silahkan menuju Library Manager dengan cara:

  • Klik menu Sketch
  • klik Include Library -> Manage Libraries
  • Cari MPU6050 -> pilih by Electronic Cats
  • Lalu klik Install

Setelah library terinstall, maka selanjutnya kita akan program arduino dengan program yang saya sediakan dibawah. Tedapat 6 mode program, silahkan diupload ke Arduino teman-teman.

E. MPU6050 Kode Program Arduino

1. Mode Yaw Pitch Roll (3D)

Mode Yaw Pitch Roll adalah teknik pergerakan dalam 3 dimensi. Mode mengikuti prinsip pesawat terbang, dimana perputaran/perpindahan terjadi dalam 3 axis atau 3 sumbu, yaitu Yaw, Pitch dan Roll, dimana :

  • Yaw adalah perputaran objek pada sumbu vertikal.
  • Pitch adalah perputaran objek pada sumbu lateral.
  • Roll adalah perputaran objek pada sumbu longitudinal.

Untuk jelasnya perhatikan pada gambar berikut:

Mode Yaw Pitch Roll (3D) MPU6050
Sumber : Wikipedia

Silahkan upload program dibawah , kemudian buka serial monitor Arduino teman-teman.

#include "MPU6050_6Axis_MotionApps20.h"
#include "Wire.h"

MPU6050 mpu;

Quaternion q;
VectorFloat gravity;
uint8_t fifoBuffer[64];

uint16_t packetSize;
uint16_t fifoCount;
float ypr[3];

void setup() {
  Serial.begin(115200);
  Wire.begin();
  TWBR = 24;
  mpu.tialize();
  mpu.dmpInitialize();

  //Nilai offset  dapat diubah sesuai kebutuhan
  mpu.setXAccelOffset(-1343);
  mpu.setYAccelOffset(-1155);
  mpu.setZAccelOffset(1033);
  mpu.setXGyroOffset(19);
  mpu.setYGyroOffset(-27);
  mpu.setZGyroOffset(16);
  mpu.setDMPEnabled(true);
  packetSize = mpu.dmpGetFIFOPacketSize();
  fifoCount = mpu.getFIFOCount();

  Serial.println("Proses penstabilan sensor... Mohon tunggu...");
  delay(18000);
  mpu.resetFIFO();
}

void loop() {
  while (fifoCount < packetSize) {
    fifoCount = mpu.getFIFOCount();
  }

  if (fifoCount == 1024) {

    mpu.resetFIFO();
    Serial.println(F("FIFO overflow!"));
  }
  else {

    if (fifoCount % packetSize != ) {

      mpu.resetFIFO();
    }
    else {

      while (fifoCount >= packetSize) {
        mpu.getFIFOBytes(fifoBuffer, packetSize);
        fifoCount -= packetSize;
      }
      mpu.dmpGetQuaternion(&q, fifoBuffer);
      mpu.dmpGetGravity(&gravity, &q);
      mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);

      Serial.print("yprt");
      Serial.print(ypr[] * 180 / PI);
      Serial.print("t");
      Serial.print(ypr[1] * 180 / PI);
      Serial.print("t");
      Serial.print(ypr[2] * 180 / PI);
      Serial.println();
    }
  }
}
Cara Akses MPU6050 Pakai Arduino Kode Dasar

2. Mode Quaternion (4 Dimensi)

Mode Quaternion adalah teknik pergerakan objek kedalam 4 dimensi. Sekarang, kita akan mencoba program dibawah untuk menampilkan nilai-nilai dalam teknik Quartenion:

#include "MPU6050_6Axis_MotionApps20.h"
#include "Wire.h"

MPU6050 mpu;

Quaternion q;
uint8_t fifoBuffer[64];
uint16_t packetSize;
uint16_t fifoCount;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  TWBR = 24;
  mpu.tialize();
  mpu.dmpInitialize();

  //Nilai offset  dapat diubah sesuai kebutuhan
  mpu.setXAccelOffset(-1343);
  mpu.setYAccelOffset(-1155);
  mpu.setZAccelOffset(1033);
  mpu.setXGyroOffset(19);
  mpu.setYGyroOffset(-27);
  mpu.setZGyroOffset(16);
  mpu.setDMPEnabled(true);
  packetSize = mpu.dmpGetFIFOPacketSize();
  fifoCount = mpu.getFIFOCount();

  Serial.println("Proses penstabilan sensor... Mohon tunggu...");
  delay(18000);
  mpu.resetFIFO();
}

void loop() {
  while (fifoCount < packetSize) {
    fifoCount = mpu.getFIFOCount();
  }

  if (fifoCount == 1024) {

    mpu.resetFIFO();
    Serial.println(F("FIFO overflow!"));
  }
  else {

    if (fifoCount % packetSize != ) {

      mpu.resetFIFO();
    }
    else {

      while (fifoCount >= packetSize) {
        mpu.getFIFOBytes(fifoBuffer, packetSize);
        fifoCount -= packetSize;
      }
      mpu.dmpGetQuaternion(&q, fifoBuffer);
      Serial.print("quatt");
      Serial.print(q.w);
      Serial.print("t");
      Serial.print(q.x);
      Serial.print("t");
      Serial.print(q.y);
      Serial.print("t");
      Serial.println(q.z);
    }
  }
}

Maka hasilnya adalah sebagai berikut:

Cara Akses MPU6050 Pakai Arduino Kode Dasar

3. Mode Euler (Derajat)

Mode Euler adalah menampilkan hasil pergerakan sudut dari 3 dimensi kedalam besaran derajat. Berikut adalah programnya:

#include "MPU6050_6Axis_MotionApps20.h"
#include "Wire.h"

MPU6050 mpu;

Quaternion q;
uint8_t fifoBuffer[64];
uint16_t packetSize;
uint16_t fifoCount;

float euler[3];

void setup() {
  Serial.begin(115200);
  Wire.begin();
  TWBR = 24;
  mpu.tialize();
  mpu.dmpInitialize();

  //Nilai offset  dapat diubah sesuai kebutuhan
  mpu.setXAccelOffset(-1343);
  mpu.setYAccelOffset(-1155);
  mpu.setZAccelOffset(1033);
  mpu.setXGyroOffset(19);
  mpu.setYGyroOffset(-27);
  mpu.setZGyroOffset(16);
  mpu.setDMPEnabled(true);
  packetSize = mpu.dmpGetFIFOPacketSize();
  fifoCount = mpu.getFIFOCount();

  Serial.println("Proses penstabilan sensor... Mohon tunggu...");
  delay(18000);
  mpu.resetFIFO();
}

void loop() {
  while (fifoCount < packetSize) {
    fifoCount = mpu.getFIFOCount();
  }

  if (fifoCount == 1024) {

    mpu.resetFIFO();
    Serial.println(F("FIFO overflow!"));
  }
  else {

    if (fifoCount % packetSize != ) {

      mpu.resetFIFO();
    }
    else {

      while (fifoCount >= packetSize) {
        mpu.getFIFOBytes(fifoBuffer, packetSize);
        fifoCount -= packetSize;
      }

      mpu.dmpGetQuaternion(&q, fifoBuffer);
      mpu.dmpGetEuler(euler, &q);
      Serial.print("eulert");
      Serial.print(euler[] * 180 / M_PI);
      Serial.print("t");
      Serial.print(euler[1] * 180 / M_PI);
      Serial.print("t");
      Serial.println(euler[2] * 180 / M_PI);
    }
  }
}

Maka hasilnya yang ditampilkan dari serial monitor adalah sebagai berikut:

Cara Akses MPU6050 Pakai Arduino Kode Dasar

4. Mode RealAccel (Real Acceleration)

Mode RealAccel adalah menampilkan data real dari akselerasi tanpa mempertimbangkan gravitasi. Adapun programnya adalah sebagai berikut:

#include "MPU6050_6Axis_MotionApps20.h"
#include "Wire.h"

MPU6050 mpu;

Quaternion q;
uint8_t fifoBuffer[64];
uint16_t packetSize;
uint16_t fifoCount;
VectorInt16 aa;
VectorInt16 aaReal;
VectorFloat gravity;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  TWBR = 24;
  mpu.tialize();
  mpu.dmpInitialize();

  //Nilai offset  dapat diubah sesuai kebutuhan
  mpu.setXAccelOffset(-1343);
  mpu.setYAccelOffset(-1155);
  mpu.setZAccelOffset(1033);
  mpu.setXGyroOffset(19);
  mpu.setYGyroOffset(-27);
  mpu.setZGyroOffset(16);
  mpu.setDMPEnabled(true);
  packetSize = mpu.dmpGetFIFOPacketSize();
  fifoCount = mpu.getFIFOCount();

  Serial.println("Proses penstabilan sensor... Mohon tunggu...");
  delay(18000);
  mpu.resetFIFO();
}

void loop() {
  while (fifoCount < packetSize) {
    fifoCount = mpu.getFIFOCount();
  }

  if (fifoCount == 1024) {

    mpu.resetFIFO();
    Serial.println(F("FIFO overflow!"));
  }
  else {

    if (fifoCount % packetSize != ) {

      mpu.resetFIFO();
    }
    else {

      while (fifoCount >= packetSize) {
        mpu.getFIFOBytes(fifoBuffer, packetSize);
        fifoCount -= packetSize;
      }

      mpu.dmpGetQuaternion(&q, fifoBuffer);
      mpu.dmpGetAccel(&aa, fifoBuffer);
      mpu.dmpGetGravity(&gravity, &q);
      mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
      Serial.print("arealt");
      Serial.print(aaReal.x);
      Serial.print("t");
      Serial.print(aaReal.y);
      Serial.print("t");
      Serial.println(aaReal.z);
    }
  }
}

Adapun hasilnya adalah sebagai berikut:

Cara Akses MPU6050 Pakai Arduino Kode Dasar

5. Mode WorldAccel (World-Frame Acceleration)

Mode WorldAccel adalah mode dimana perputaran berdasarkan orientasi yang diketahui dari quaternion  dan gravitasi tidak diperhitungkan. Adapun programnya adalah:

#include "MPU6050_6Axis_MotionApps20.h"
#include "Wire.h"

MPU6050 mpu;

Quaternion q;
uint8_t fifoBuffer[64];
uint16_t packetSize;
uint16_t fifoCount;
VectorInt16 aa;
VectorInt16 aaReal;
VectorFloat gravity;
VectorInt16 aaWorld;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  TWBR = 24;
  mpu.tialize();
  mpu.dmpInitialize();

  //Nilai offset  dapat diubah sesuai kebutuhan
  mpu.setXAccelOffset(-1343);
  mpu.setYAccelOffset(-1155);
  mpu.setZAccelOffset(1033);
  mpu.setXGyroOffset(19);
  mpu.setYGyroOffset(-27);
  mpu.setZGyroOffset(16);
  mpu.setDMPEnabled(true);
  packetSize = mpu.dmpGetFIFOPacketSize();
  fifoCount = mpu.getFIFOCount();

  Serial.println("Proses penstabilan sensor... Mohon tunggu...");
  delay(18000);
  mpu.resetFIFO();
}

void loop() {
  while (fifoCount < packetSize) {
    fifoCount = mpu.getFIFOCount();
  }

  if (fifoCount == 1024) {

    mpu.resetFIFO();
    Serial.println(F("FIFO overflow!"));
  }
  else {

    if (fifoCount % packetSize != ) {

      mpu.resetFIFO();
    }
    else {

      while (fifoCount >= packetSize) {
        mpu.getFIFOBytes(fifoBuffer, packetSize);
        fifoCount -= packetSize;
      }

     mpu.dmpGetQuaternion(&q, fifoBuffer);
      mpu.dmpGetAccel(&aa, fifoBuffer);
      mpu.dmpGetGravity(&gravity, &q);
      mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
      mpu.dmpGetLinearAccelInWorld(&aaWorld, &aaReal, &q);
      Serial.print("aworldt");
      Serial.print(aaWorld.x);
      Serial.print("t");
      Serial.print(aaWorld.y);
      Serial.print("t");
      Serial.println(aaWorld.z);
    }
  }
}

Adapun hasilnya adalah sebagai berikut:

Cara Akses MPU6050 Pakai Arduino Kode Dasar

Sekian. Semoga artikel cara Akses MPU6050 Pakai Arduino bermanfaat.

Jika terdapat kesalahan pada , mohon kirimkan koreksinya kepada saya. Alamat email saya telah tercantum pada halaman Contact.

Artikel menarik lainnya:
> Apa itu Universal Serial Interface (USI)?
> sudo add-apt-repository command not found dan cara perbaikinya
> Cara Buka Website Reddit Pakai DNS Di Chrome