38. Sensor Accelerometer & Gryroscope MPU6050
38. Sensor Accelerometer & Gryroscope MPU6050

Sensor MPU6050 merupakan modul gabungan sensor akselerometer dan giroskop, dimana kedua sensor ini dapat digunakan untuk menghasilkan data orientasi (kemiringan terhadap sumbu x, y, dan z). Sumbu x bekerja pada sudut phi  (kanan & kiri), sumbu y bekerja pada sudut thehta (atas dan bawah), dan sumbu z bekerja pada sudut psi (depan dan belakang).  

Kemampuan sensor ini dapat dikatakan akurat karena memiliki hardware yang bekerja untuk konversi data analog ke digital dengan resolusi 16-bit pada setiap channel-nya. Oleh  karena itu, modul ini mampu membaca data dari channel x, y, dan z secara bersamaan dalam 1 waktu.

Mengakses sensor MPU6050 dengan Mikrokontroler dapat dilakukan melalui komunikasi I2C melalui jalur pin SDA dan SCL. Sensor MPU6050 membutuhkan waktu jeda beberapa saat untuk melakukan kalibrasi. Proses kalibrasi tersebut berfungsi untuk memperoleh faktor koefisien pada perhitungan nilai orientasi.

Accelerometer

Untuk mengetahui cara kerja akselerometer, bayangkan sebuah bola di dalam ruangan berbentuk kubus (3D). Anggap saja kubus tersebut berada di luar angkasa dimana segala sesuatu dalam kondisi tidak memiliki massa. Dalam kondisi ini bola terseut akan melayang di tengah kubus (masing-masing dindingnya menunjukkan sumbu tertentu).

Jika kita memindahkan kotak kubus tersebut dengan percepatan 1g (1 G-force/1g  percepatan gravitasi 9.8 m/s2), maka bolanya akan menabrak dinding sumbu X. Jika kita mengukur gaya yang diberikan bola terhadap dinding sumbu X maka kita akan mendapatkan nilai gaya sebesar 1g pada sumbu X.

Jika kotak kubus kita letakkan di bumi maka bola akan jatuh pada dinding sumbu Z dan dinding akan mendapatkan gaya sebesar 1g. Pada kondisi seperti ini kotak kubus tidak bergerak tetapi masih bernilai sebesar 1g pada sumbu Z. Hal ini karena gaya gravitasi bumi sebesar 1g yang menurunkan bola pada dinding sumbu Z.

Sensor yang berfungsi untuk mengukur kecepatan suatu objek bergerak yang bersifat dinamis maupun statis. Pengukuran dinamis merupakan pengukuran percepatan pada objek yang bergerak. Sedangkan, pengukuran statis merupakan pengukuran percepatan objek terhadap gravitasi bumi.

Contoh penerapan akselerometer adalah game mobil-mobilan yang dimainkan dengan menggerakkan handphone ke kanan atau kiri, mengubah tampilan layar dari vertikal ke horizontal dengan memiringkan handphone, dan lainnya.

Sensor akselerometer yang dijalankan pada modul sensor MPU6050 menggunakan prinsip kerja akselerometer MEMS (Micro Electro Mechanical Systems), dimana sensor terdiri dari struktur mesin mikro yang dibangun di atas silicon wafer seperti Gambar di samping.

Struktur ini digantung oleh pegas Polysilicon. Hal ini memungkinkan struktur untuk membelok atau bergerak pada saat percepatan diterapkan pada sumbu tertentu. Karena pembelokan atau pergerakan ini, kapasitansi antara fixed plates dan suspended mass berubah. Perubahan kapasitansi ini sebanding dengan percepatan pada sumbu itu. Sensor kemudian memproses perubahan kapasitansi ini dan mengubahnya menjadi tegangan output analog.

Gyroscope

Merupakan sensor yang digunakan untuk menentukan orientasi gerak dengan bertumpu pada roda yang berotasi dengan cepat pada sumbu berdasarkan nilai momentum sudut. Oleh karena itu, sensor gyro dikenal sebagai sensor untuk mengukur nilai rotasi sudut. Untuk mengukur nilai tersebut, gyro memanfaatkan gaya efek Coriolis.

.

Efek Coriolis menyatakan bahwa ketika massa (m) bergerak ke arah tertentu dengan kecepatan (v) dan laju sudut eksternal (Ω) diterapkan (anak panah merah). Efek Coriolis menghasilkan gaya (anak panah kuning) yang menyebabkan perpindahan tegak lurus massa. Nilai perpindahan ini berhubungan langsung dengan laju sudut yang diterapkan.

Misalkan terdapat dua massa yang bergerak terus menerus dalam arah berlawanan. Ketika laju sudut diterapkan, maka efek Coriolis pada setiap massa juga dalam arah yang berlawanan. Hal ini menyebabkan adanya perubahan kapasitansi diantara keduanya. Perubahan tersebutlah yang akan dibaca oleh sensor sebagai data output tegangan analog.

.

Sama halnya dengan dengan Akselerometer, sensor giroskop yang dijalankan pada modul sensor MPU6050 juga menggunakan giroskop MEMS (Micro Electro Mechanical System). Sensor ini terdiri dari 4 massa (yaitu M1, M2, M3, dan M4) yang saling terhubung dalam suatu gerakan secara terus menerus, sehingga bereaksi terhadap efek Coriolis. Massa tersebut bergerak maju dan mundur secara bersamaan di bidang horizontal.

Ketika sensor mulai diputar, gaya Coriolis yang bekerja pada massa bergerak mengubah arah getaran/gerakan dari horizontal ke vertikal. Perubahan arah getaran tersebut bergantung pada sumbu gerak rotasi. Setiap kali efek Coriolis terdeteksi, gerakan massa yang terus menerus dapat menyebabkan perubahan kapasitansi yang dibaca oleh struktur sensor, dan kemudian diubah menjadi sinyal keluaran tegangan.

Roll Mode
Pitch Mode
Yaw Mode

Komponen Modul Sensor MPU6050

Komponen utama modul ini yaitu IC MPU6050 Motion Tracking 6-axis yang menggabungkan sensor giroskop 3-axis, akselerometer 3-axis, dan Digital Motion Processor (DMP). Oleh karena itu, sensor MPU6050 ini dapat digunakan untuk mengukur momentum sudut atau rotasi dalam 3 sumbu, pecepatan statis karena gravitasi, serta percepatan dinamis yang dihasilkan dari gerakan, shock, ataupun getaran.

Modul ini juga dilengkapi dengan IC regulator LD3985 yang digunakan untuk menurunkan tegangan kerja menjadi 3.3V sebagai sumber tegangan IC MPU6050. Oleh karena itu, modul ini dapat dioperasikan menggunakan mikrokontroler dengan sumber tegangan 5V. Selain itu, modul ini juga dilengkapi lampu indikator berupa LED yang akan menyala apabila modul sudah mendapatkan daya yang cukup.

Modul sensor MPU6050 ini dapat diakses oleh mikrokontroler menggunakan jalur komunikasi I2C. Terdapat 2 alamat I2C yang dapat digunakan pada modul ini yaitu 0x68HEX dan 0x69HEX. Pemilihan alamat tersebut ditentukan oleh pin AD0. Apabila pin AD0 dibiarkan (tidak dihubungkan dengan sumber tegangan) maka alamat modul berada pada default yaitu 0x68HEX.  Sedangkan, ketika pin ADO dihubungkan dengan sumber tegangan 3.3V, maka jalur rangkaian berubah kondisi menjadi HIGH, sehingga alamat I2C berubah menjadi 0x69HEX.

Pinout Modul Sensor MPU6050

Contoh Rangkaian Modul Sensor MPU6050 & Arduino Uno

Percobaan 54: Akses Sensor Accelerometer dan Gyroscope MPU6050

.

  1. Hubungkan SDA dengan pin A4 ATMEGA 328
  2. Hubungkan SCL dengan pin A5 ATMEGA 328
  3. Hubungkan board ATMEGA 328 dengan Komputer menggunakan kabel USB.
  4. Bukalah IDE Arduino, kemudian ketikkan kode program/sketch atau buka file GYRO_ACCELERO_MPU6050_plotter (MPU6050 PLOTTER) dan motion_detection_MPU6050 (MOTION DETECTION)
  5. Compile menggunakan verify button (tanda ceklist pada IDE arduino) untuk mengecek ada atau tidaknya error/kesalahan dalam pengetikan.
  6. Upload program ke arduino dengan cara, pilih File > Upload to I/O board, atau tekan tombol tanda panah pada jendela IDE arduino.

Code GYRO_ACCELERO_MPU6050_plotter (MPU6050 PLOTTER):

Setelah upload program ini, anda harus membuka serial plotter. (TAMPILKAN GYRO SENDIRI ACCELERO SENDIRI AGAR LEBIH MUDAH DIFAHAMI)

// Basic demo for accelerometer readings from Adafruit MPU6050

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;

void setup(void) {
  Serial.begin(9600);
  while (!Serial) {
    delay(10); // will pause Zero, Leonardo, etc until serial console opens
  }

  // Try to initialize!
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }

  mpu.setAccelerometerRange(MPU6050_RANGE_16_G);
  mpu.setGyroRange(MPU6050_RANGE_250_DEG);
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
  Serial.println("");
  delay(100);
}

void loop() {

  /* Get new sensor events with the readings */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);
// TAMPILKAN (GYRO SENDIRI ACCELERO SENDIRI AGAR LEBIH MUDAH DIFAHAMI)
  /* Print out the values */
//  Serial.print("AccelX:");
//  Serial.print(a.acceleration.x);
//  Serial.print(",");
//  Serial.print("AccelY:");
//  Serial.print(a.acceleration.y);
//  Serial.print(",");
//  Serial.print("AccelZ:");
//  Serial.print(a.acceleration.z);
//  Serial.print(", ");
  Serial.print("GyroX:");
  Serial.print(g.gyro.x);
  Serial.print(",");
  Serial.print("GyroY:");
  Serial.print(g.gyro.y);
  Serial.print(",");
  Serial.print("GyroZ:");
  Serial.print(g.gyro.z);
  Serial.println("");

  delay(10);
}

Video Demo:

.

Code motion_detection_MPU6050 (MOTION DETECTION):

Setelah upload program ini, anda harus membuka serial monitor. Program ini digunakan untuk mendeteksi pergerakan sensor.

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;

void setup(void) {
  Serial.begin(115200);
  while (!Serial)
    delay(10); // will pause Zero, Leonardo, etc until serial console opens

  Serial.println("Adafruit MPU6050 test!");

  // Try to initialize!
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");

  //setupt motion detection
  mpu.setHighPassFilter(MPU6050_HIGHPASS_0_63_HZ);
  mpu.setMotionDetectionThreshold(1);
  mpu.setMotionDetectionDuration(20);
  mpu.setInterruptPinLatch(true);	// Keep it latched.  Will turn off when reinitialized.
  mpu.setInterruptPinPolarity(true);
  mpu.setMotionInterrupt(true);

  Serial.println("");
  delay(100);
}

void loop() {

  if(mpu.getMotionInterruptStatus()) {
    /* Get new sensor events with the readings */
    sensors_event_t a, g, temp;
    mpu.getEvent(&a, &g, &temp);

    /* Print out the values */
    Serial.print("AccelX:");
    Serial.print(a.acceleration.x);
    Serial.print(",");
    Serial.print("AccelY:");
    Serial.print(a.acceleration.y);
    Serial.print(",");
    Serial.print("AccelZ:");
    Serial.print(a.acceleration.z);
    Serial.print(", ");
    Serial.print("GyroX:");
    Serial.print(g.gyro.x);
    Serial.print(",");
    Serial.print("GyroY:");
    Serial.print(g.gyro.y);
    Serial.print(",");
    Serial.print("GyroZ:");
    Serial.print(g.gyro.z);
    Serial.println("");
  }

  delay(10);
}

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *