artikel / selayang pandang modul sensor mpu6050

Selayang Pandang Modul Sensor MPU6050

Selayang Pandang Modul Sensor MPU6050

MPU6050 adalah papan sensor yang menggabungkan sensor percepatan (accelerometer) dan sensor putaran (gyroscope) dalam satu paket chip. Modul ini sangat populer dalam proyek-proyek elektronik dan robotika karena mampu memberikan informasi mengenai percepatan linier dan rotasi pada tiga sumbu (x, y, dan z). Berikut beberapa hal dasar mengenai MPU6050:

  • Accelerometer, Gyroscope, Thermometer Accelerometer di MPU6050 dapat mendeteksi percepatan karena gerakan atau gravitasi di tiga sumbu, sedangkan gyroscope mendeteksi kecepatan rotasi di tiga sumbu. Gabungan data dari kedua sensor ini memungkinkan pengembangan aplikasi yang bisa mengerti orientasi, gerakan, dan gestur. Sensor ini juga memiliki sensor suhu. Sensor ini terutama untuk mengukur seberapa besar panas yang dihasilkan modul sehingga berpotensi merusak pengukuran.

  • Komunikasi I2C MPU6050 menggunakan protokol komunikasi I2C (Inter-Integrated Circuit) untuk berkomunikasi dengan mikrokontroler atau mikroprosesor, memudahkan integrasi dengan berbagai sistem embedded dan mikrokontroler seperti Arduino, ESP32, atau Raspberry Pi.

  • Sensitivitas yang Dapat Dikonfigurasi: Sensor di MPU6050 memiliki tingkat sensitivitas yang dapat dikonfigurasi. Untuk accelerometer, rentangnya bisa dari ±2g hingga ±16g, sedangkan untuk gyroscope dari ±250°/s hingga ±2000°/s. Ini memungkinkan penggunaan modul dalam aplikasi yang memerlukan tingkat presisi yang berbeda.

  • DMP (Digital Motion Processor) Beberapa varian MPU6050 memiliki DMP, sebuah prosesor tambahan yang bisa mengolah data dari accelerometer dan gyroscope untuk memberikan output yang lebih stabil dan akurat tanpa membebani mikrokontroler utama.

  • Aplikasi MPU6050 digunakan dalam berbagai aplikasi seperti stabilisasi drone, pengenalan gestur, navigasi inersial, dan alat-alat olahraga untuk menganalisis gerakan.

  • Kalibrasi Untuk mendapatkan hasil yang akurat, MPU6050 perlu dikalibrasi. Kalibrasi membantu mengurangi noise dan bias dari pembacaan sensor.

  • Pustaka dan SDK Terdapat banyak pustaka dan Software Development Kit (SDK) yang tersedia untuk memudahkan pengembangan aplikasi menggunakan MPU6050, baik untuk Arduino, Raspberry Pi, maupun platform lainnya.

Kode C untuk Mikrokontroler (Arduino, ESP8266, dll)

// Kode sederhana untuk menggunakan Adafruit MPU6050


#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!");

  mpu.setAccelerometerRange(MPU6050_RANGE_2_G);
  Serial.print("Accelerometer range set to: ");
  switch (mpu.getAccelerometerRange()) {
  case MPU6050_RANGE_2_G:
    Serial.println("+-2G");
    break;
  case MPU6050_RANGE_4_G:
    Serial.println("+-4G");
    break;
  case MPU6050_RANGE_8_G:
    Serial.println("+-8G");
    break;
  case MPU6050_RANGE_16_G:
    Serial.println("+-16G");
    break;
  }
  mpu.setGyroRange(MPU6050_RANGE_250_DEG);
  Serial.print("Gyro range set to: ");
  switch (mpu.getGyroRange()) {
  case MPU6050_RANGE_250_DEG:
    Serial.println("+- 250 deg/s");
    break;
  case MPU6050_RANGE_500_DEG:
    Serial.println("+- 500 deg/s");
    break;
  case MPU6050_RANGE_1000_DEG:
    Serial.println("+- 1000 deg/s");
    break;
  case MPU6050_RANGE_2000_DEG:
    Serial.println("+- 2000 deg/s");
    break;
  }

  mpu.setFilterBandwidth(MPU6050_BAND_5_HZ);
  Serial.print("Filter bandwidth set to: ");
  switch (mpu.getFilterBandwidth()) {
  case MPU6050_BAND_260_HZ:
    Serial.println("260 Hz");
    break;
  case MPU6050_BAND_184_HZ:
    Serial.println("184 Hz");
    break;
  case MPU6050_BAND_94_HZ:
    Serial.println("94 Hz");
    break;
  case MPU6050_BAND_44_HZ:
    Serial.println("44 Hz");
    break;
  case MPU6050_BAND_21_HZ:
    Serial.println("21 Hz");
    break;
  case MPU6050_BAND_10_HZ:
    Serial.println("10 Hz");
    break;
  case MPU6050_BAND_5_HZ:
    Serial.println("5 Hz");
    break;
  }

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

void loop() {

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

  /* Print out the values */
  Serial.print("Acceleration X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");

  Serial.print("Rotation X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" rad/s");

  Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println(" degC");

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

Kode C untuk Raspberry Pi/Armbian

#include  <  wiringPiI2C.h >
#include  <  wiringPi.h >
#include  <  stdio.h >
#include  <  math.h >

int fd;
int acclX, acclY, acclZ;
int gyroX, gyroY, gyroZ;
double acclX_scaled, acclY_scaled, acclZ_scaled;
double gyroX_scaled, gyroY_scaled, gyroZ_scaled;

int read_word_2c(int addr)
{
    int val;
    val = wiringPiI2CReadReg8(fd, addr);
    val = val  <  <  8;
    val += wiringPiI2CReadReg8(fd, addr + 1);
    if (val >= 0x8000)
        val = -(65536 - val);

    return val;
}

double dist(double a, double b)
{
    return sqrt((a * a) + (b * b));
}

double get_y_rotation(double x, double y, double z)
{
    double radians;
    radians = atan2(x, dist(y, z));
    return -(radians * (180.0 / M_PI));
}

double get_x_rotation(double x, double y, double z)
{
    double radians;
    radians = atan2(y, dist(x, z));
    return (radians * (180.0 / M_PI));
}

int main()
{
    fd = wiringPiI2CSetup(0x68);
    wiringPiI2CWriteReg8(fd, 0x6B, 0x00); // disable sleep mode
    printf("set 0x6B=%X\n", wiringPiI2CReadReg8(fd, 0x6B));

    while (1)
    {

        acclX = read_word_2c(0x3B);
        acclY = read_word_2c(0x3D);
        acclZ = read_word_2c(0x3F);

        acclX_scaled = acclX / 16384.0;
        acclY_scaled = acclY / 16384.0;
        acclZ_scaled = acclZ / 16384.0;

        printf("My acclX_scaled: %f\n", acclX_scaled);
        printf("My acclY_scaled: %f\n", acclY_scaled);
        printf("My acclZ_scaled: %f\n", acclZ_scaled);

        printf("My X rotation: %f\n", get_x_rotation(acclX_scaled, acclY_scaled, acclZ_scaled));
        printf("My Y rotation: %f\n", get_y_rotation(acclX_scaled, acclY_scaled, acclZ_scaled));

        delay(100);
    }
    return 0;
}

Selayang pandang proyek Perpustakaan Nirkabel

Perpustakaan Nirkabel (wireless library) is a 12-year-old project bringing digital technology to remote areas in Indonesia, empowering basic education and bridging the gap in education. It enables students in remote areas to access knowledge and resources previously out of reach. Witness the tech enthusiasts' brainchild with a heart for education.

detail