Anda di halaman 1dari 6

Inter-Integrated Circuit (I2C)

I. Tujuan :
1. Mengetahui cara kerja Inter-Integrated Circuit (I2C)
2. Mengetahui cara mengatur port I2C.
3. Mengetahui cara mengakses sensor MPU6050 dengan Arduino

II. Teori
Inter-Integrated Circuit atau dalam dunia komputer sering disebut I2C merupakan
protokol untuk komunikasi multi-master serial computer bus yang berfungsi untuk
menghubungkan 2 atau lebih perangkat yang terintegrasi, seperti sensor, RTC, dan juga
EEPROM. I2C hanya memliki 2 jalur yaitu Serial data line (SDA) dan Serial Clock Line
(SCL).

Gambar 1. Tampilan Arduino Uno


Sumber: components101.com
Untuk melakukan komunikasi Arduino dengan perangkat sensor yang menggunakan
komunikasi I2C. Pada pin A4 yaitu SDA harus dihubungkan pada pin SDA perangkat sensor,
sedangkan pada pin A5 yaitu SCL harus dihubungkan pada pin SCL perangkat sensor. Pada
penghubungan antara Arduino dan perangkat sensor menggunakan I2C harus memastikan pin
terhubung telah sesuai, sehingga kedua perangkat tersebut dapat terhubung.
Salah satu perangkat sensor yang berkerja menggunakan system komunikasi I2C yaitu
MPU-6050. MPU-6050 adalah sebuah chip / IC yang diproduksi oleh Invensense yang
mengkombinasikan 3 axis accelerometer dan 3 axis gyroscope dengan sebuah on-board
digital motion processor. Pada Module ini juga sudah terdapat sensor suhu yang embedded.
Gambar 2. Tampiran Modul Sensor MPU-6050
Sumber: https://playground.arduino.cc/Main/MPU-6050/

Module ini sangat akurat dan sudah terdapat hardware ADC untuk masing-masing
channel untuk membaca x,y,z channels pada waktu yang sama. MPU-6050 terdiri dari 3 axis
gyroscope yang dapat mendeteksi kecepatan putaran pada x,y,z axis. Terdapat juga 3 axis
accelerometer yang dapat mendeteksi sudut pada sumbu x,y,z dengan teknologi Micro
Electro Mechanical System (MEMS).

III. Alat Percobaan :


 Komputer atau Laptop
 Board Arduino Uno
 Kabel USB
 MPU6050
 Kabel penghubung

IV. Langkah Percobaan:


1. Hubungkan modul sensor MPU6050 dengan Pin Arduino seperti dalam Gambar 3.

Gambar 3. Rangkaian Percobaan


2. Bukalah IDE Arduino, kemudian hubungkan computer dengan board Arduino dengan
menggunakan kabel USB.
3. Instal Library MPU-6050 dengan Klik menu Sketch, pilih Include Library,
selanjutnya pilih Add.ZIP Library, Setelah itu pilih file Arduino-MPU6050.zip yang
terlah diberikan,
4. Tuliskan program pada editor IDE.

#include <Wire.h>
#include <MPU6050.h>
MPU6050 mpu;

void setup()
{
Serial.begin(115200);

Serial.println("Initialize MPU6050");

while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
{
Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
delay(500);
}

checkSettings();
}

void checkSettings()
{
Serial.println();

Serial.print(" * Sleep Mode: ");


Serial.println(mpu.getSleepEnabled() ? "Enabled" : "Disabled");

Serial.print(" * Clock Source: ");


switch(mpu.getClockSource())
{
case MPU6050_CLOCK_KEEP_RESET: Serial.println("Stops the clock and keeps
the timing generator in reset"); break;
case MPU6050_CLOCK_EXTERNAL_19MHZ: Serial.println("PLL with external 19.2MHz
reference"); break;
case MPU6050_CLOCK_EXTERNAL_32KHZ: Serial.println("PLL with external
32.768kHz reference"); break;
case MPU6050_CLOCK_PLL_ZGYRO: Serial.println("PLL with Z axis gyroscope
reference"); break;
case MPU6050_CLOCK_PLL_YGYRO: Serial.println("PLL with Y axis gyroscope
reference"); break;
case MPU6050_CLOCK_PLL_XGYRO: Serial.println("PLL with X axis gyroscope
reference"); break;
case MPU6050_CLOCK_INTERNAL_8MHZ: Serial.println("Internal 8MHz
oscillator"); break;
}
Serial.print(" * Accelerometer: ");
switch(mpu.getRange())
{
case MPU6050_RANGE_16G: Serial.println("+/- 16 g"); break;
case MPU6050_RANGE_8G: Serial.println("+/- 8 g"); break;
case MPU6050_RANGE_4G: Serial.println("+/- 4 g"); break;
case MPU6050_RANGE_2G: Serial.println("+/- 2 g"); break;
}

Serial.print(" * Accelerometer offsets: ");


Serial.print(mpu.getAccelOffsetX());
Serial.print(" / ");
Serial.print(mpu.getAccelOffsetY());
Serial.print(" / ");
Serial.println(mpu.getAccelOffsetZ());

Serial.println();
}

void loop()
{
Vector rawAccel = mpu.readRawAccel();
Vector normAccel = mpu.readNormalizeAccel();

Serial.print(" Xraw = ");


Serial.print(rawAccel.XAxis);
Serial.print(" Yraw = ");
Serial.print(rawAccel.YAxis);
Serial.print(" Zraw = ");

Serial.println(rawAccel.ZAxis);
Serial.print(" Xnorm = ");
Serial.print(normAccel.XAxis);
Serial.print(" Ynorm = ");
Serial.print(normAccel.YAxis);
Serial.print(" Znorm = ");
Serial.println(normAccel.ZAxis);

delay(10);
}

5. Compile dan upload program ke board Arduino.


6. Klik menu Tools dan pilih menu Serial Monitor.
7. Saat muncul window Serial Monitor, pilih kecepatan 115200 baud sesuai dengan
kecepatan data serial yang ditentukan dalam program di atas. Maka akan muncul tampilan
jarak pada window Serial Monitor.
8. Amati perubahan data pada Serial Monitor
9. Selanjutnya cabut koneksi kabel dari SDA SCL Sensor dengan Pin A4 dan Pin A5
Arduino. Amati perubahan yang terjadi pada Serial Monitor, Tunjukan dan jelaskan
program mana yang mengakibatkan perubahan tersebut.
10. Selanjutnya tuliskan program pada editor IDE
#include <Wire.h>
#include <MPU6050.h>

MPU6050 mpu;

void setup()
{
Serial.begin(115200);

Serial.println("Initialize MPU6050");

while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
{
Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
delay(500);
}
}

void loop()
{
float temp = mpu.readTemperature();

Serial.print(" Temp = ");


Serial.print(temp);
Serial.println(" *C");

delay(500);
}

11. Buka window Serial Monitor, amati perubahan data yang terjadi pada Serial Monitor.
12. Jelaskan program apa digunakan untuk memunculkan nilai Suhu pada Serial Monitor.
13. Selanjutnya buatlah rangkaian seperti gambar dibawah ini.
14. Tuliskan program pada editor IDE.

#include <Wire.h>
#include <MPU6050.h>

MPU6050 mpu;

void setup()
{
Serial.begin(115200);

Serial.println("Initialize MPU6050");

while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
{
Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
delay(500);
}
}

void loop()
{
// Read normalized values
Vector normAccel = mpu.readNormalizeAccel();

// Calculate Pitch & Roll


int pitch = -(atan2(normAccel.XAxis, sqrt(normAccel.YAxis*normAccel.YAxis +
normAccel.ZAxis*normAccel.ZAxis))*180.0)/M_PI;
int roll = (atan2(normAccel.YAxis, normAccel.ZAxis)*180.0)/M_PI;

// Output
Serial.print(" Pitch = ");
Serial.print(pitch);
Serial.print(" Roll = ");
Serial.print(roll);

Serial.println();

delay(10);
}

15. Buka window Serial Monitor, amati perubahan data yang terjadi pada Serial Monitor.
16. Untuk percobaan berikutnya, tentukan lima nilai putar(roll) sebagai nilai perubahan rotasi
sensor. Kemudian lakukan modifikasi, dengan menggunakan 5 LED sesuai dengan
rangkaian pada Langkah 13, pada LED dibagian tengah sebagai Nilai Putar 0, kemudian
LED kanan dan kiri sesuaikan dengan nilai putar yang telah ditentukan.

Anda mungkin juga menyukai