Pembacaan Sudut dengan CMPS11 dan Arduino

Bismillah, Alhamdulillah pada kesempatan kali ini saya akan berbagi tentang cara membaca sudut pada CMPS11. Berikut daftar isi dari tulisan ini:

  • Deskripsi CMPS 11
  • Format Data CMPS 11
  • Wiring CMPS11 Arduino
  • Program CMPS 11 Arduino

A. Deskripsi CMPS 11

Kelebihan CMPS11 adalah dapat mengukur sudut arah mata angin  walaupun sensor dalam posisi miring. Hal ini karena CMPS11 memiliki kemampuan untuk mendeteksi Roll dan Pitch. Berikut cara membaca sudut arah mata angin dengan CMPS11 dan Arduino

B. Format Data CMPS 11

Berikut format data CMPS 11 yang merupakan respon setelah dikirimnya request dari master dalam hal ini adalah Arduino.

Struktur Data CMPS 11
Struktur Data CMPS 11

C. Wiring CMPS 11 Arduino

Ikuti wiring sesuai dengan gambar berikut

Resistor pullup dapat dihilangkan karena Arduino (Atemega) sudah memiliki Resistor Pull-UP Internal

Modul ini memiliki LED INDICATOR berwarna merah yang akan menyala jika modul ini mendapatkan supplay tegangan. Pastikan VCC dan GND tidak terbalik, jika terbalik modul akan langsung panas dan lampu indicator tidak akan hidup. Segera Cabut karena jika berlangsung lama, Modul akan rusak. Pada PIN GND terdapat simbol G.

D. Program CMPS 11 Arduino

Program berikut saya ambil dari CMPS 11 Source Code , namun saya modifikasi sehingga hanya terdapat data heading atau sudut yang sudah siap untuk digunakan.

/*****************************************
*     CMPS11 I2C example for Arduino     *
*        By James Henderson, 2014        *
******************************************/
#include <Wire.h>;

#define CMPS11_ADDRESS 0x60  // Address of CMPS11 shifted right one bit for arduino wire library
#define ANGLE_8  1           // Register to read 8bit angle from

unsigned char high_byte, low_byte, angle8;
char tmp; // Variabel untuk menyimpan data yang tidak diperlukan (Roll & Pitch)
unsigned int angle16;

float heading;
void setup()
{
  Serial.begin(9600);  // Start serial port
  Wire.begin();
}

void loop()
{

  Wire.beginTransmission(CMPS11_ADDRESS);  //starts communication with CMPS11
  Wire.write(ANGLE_8);                     //Sends the register we wish to start reading from
  Wire.endTransmission();

  // Request 5 bytes from the CMPS11
  // this will give us the 8 bit bearing,
  // both bytes of the 16 bit bearing, pitch and roll
  Wire.requestFrom(CMPS11_ADDRESS, 5);       

  while(Wire.available() < 5);        // Wait for all bytes to come back

  angle8 = Wire.read();               // Baca 3 Byte data kompas
  high_byte = Wire.read();
  low_byte = Wire.read();
  tmp = Wire.read();  // Abaikan 2 byte terahir (Data Roll & Pitch)
  tmp = Wire.read();

  angle16 = high_byte;                 // Calculate 16 bit angle
  angle16 <<= 8;
  angle16 += low_byte;

  heading = (angle16 / 10) + (angle16 % 10);
  Serial.print("Sudut: ");
  Serial.println(heading);

  delay(100);                           // Short delay before next loop
}

Sekian tulisan saya mengenai CMPS 11. Semoga bermanfaat >_

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s