Rabu, 29 Januari 2014

PERANCANGAN APLIKASI MIKROKONTROLER ARDUINO PADA KOMPAS DIGITAL


Kevin Kurnianto Oktavian; Sheilla Nadia Valina; Taufiq Hidayat.

Program Studi Teknik Elektronika Jurusan Teknik Elektro
Politeknik Negeri Semarang
Jln. Prof. H. Sudarto, S.H., Tembalang, Semarang, Jawa Tengah, Indonesia. 50275.
Telp. (024)7473417, Website : www.polines.ac.id, email : sekretariat@polines.ac.id


ABSTRACT - In this paper describe the design of a digital compass that uses Aruino as signal conditioning. Put the compass sensor used and the output HMC5883L 16x2 LCD. Sensor three-axis magnetometer compass HMC5883L have resolisi ± 2.0mili-gauss, the level of accuracy of 1 ° - 2 °, easy to control the I2C interface, compatible on voltage of 3.3V or 5.0V, and the price is relatively cheaper. The digital compass is designed to menampilakan 8 cardinal directions from the North, Southwest, West, and so on. The test results showed that the digital compass is made ​​of precision and yet still stable in the display direction of the wind.
ABSTRAK - Pada paper ini mendiskripsikan perancangan kompas digital yang menggunakan Aruino sebagai pengkondisian sinyalnya. Masukan yang digunakan yakni sensor kompas HMC5883L dan keluarannya adalah LCD 16x2. Sensor kompas HMC5883L magnetometer tiga sumbu memiliki resolisi ±2.0mili-gauss, tingkat akurasi 1° - 2°, mudah untuk mengontrol interface I2C, kompatibel pada tegangan 3.3V atau 5.0V, dan harganya relatif lebih murah. Kompas digital yang dirancang ini dapat menampilakan 8 arah mata angin mulai dari Utara, Barat Daya, Barat, dan seterusnya. Hasil pengujian menunjukan bahwa kompas digital yang dibuat masih belum presisi dan belum stabil dalam menampilkan arah mata angin.
Kata Kunci: kompas digital, HMC5883L, arduino, LCD 16x2.


                                                                                                                                     I. Pendahuluan

K
ompas merupakan salah satu alat penting dalam navigasi yang berfungsi sebagai penunjuk arah berdasarkan posisi kutub bumi. Pada paper ini akan membahas tantang perancangan kompas digital dengan mikrokontroler arduino sebagai sistem pengkondisian sinyal, LCD 16x2 sebagai displai yang akan menampilkan arah mata angin, dan HMC5883L sebagai sensor kompasnya.
file:///C:/Users/Kevin%20Kurnianto%20O/Downloads/Documents/HMC5883L%20Compass%20Tutorial%20with%20Arduino%20Library%20-%20Tutorials%20-%20Love%20Electronics_files/hmc5883l1.png
Gambar 1. Sensor Kompas HMC5883L
file:///C:/Users/Kevin%20Kurnianto%20O/Downloads/Documents/karakteristik%20arduino%20uno%20r3_files/ArduinoUno_R3_Front.jpg
Gambar 2. Arduino Uno R3
Gambar 3. LCD 16x2

                                                                                                                                                                      II. Dasar Teori

II.1. Sistem Kontrol Kompas Magnetik Digital
Secara umum, blok diagram dari sistem kompas digital yang dibuat adalah seperti pada Gambar 4. Untuk mendapatkan  arah mata angin digunakan kompas konvensional sebagai referensi. Hasil pengelolaan oleh mikrokontroler arduino ditampilkan melaui LCD.
Gambar 4. Blok Diagram Kompas Digital
II.2. Informasi Arah Mata Angin
Informasi  arah mata angin diperoleh dari sensor kompas HMC5883L dengan magnetometer 3 sumbu. Pada  HMC5883L terdapat Magnetik Deklinasi dimana pada umumnya kompas menunjuk ke Utara Magnetik, dan itu bukan utara yang sebenarnya.
II.3. Pengkodean Program
Dalam pengkodean HMC5883L sedikit lebih kompleks, maka dari itu perlu adanya library HMC5883L untuk mendukung program utama. Jadi, tambahkan library HMC5883L pada folder software arduino. Atur library HMC5883L menjadi default library arduino, sehingga nantinya pada program hanya tinggal memanggil library tersebut.
file:///C:/Users/Kevin%20Kurnianto%20O/Downloads/Documents/HMC5883L%20Compass%20Tutorial%20with%20Arduino%20Library%20-%20Tutorials%20-%20Love%20Electronics_files/hmc5883l-tut1-example1.png
Gambar 5. HMC5883L Library
II.4. HMC5883L
Sebuah kompas bekerja dengan menyelaraskan medan magnet bumi. Karena jarum kompas terbuat dari bahan besi, yang sejalan dengan ayunan pada bantalan di pusat seperti medan magnet bumi menariknya ke dalam keselarasan. Medan magnet ini berkembang di seluruh permukaan bumi sehingga dapat digunakan untuk membantu dalam menunjuk arah mata angin.
Magnetometer menggunakan medan magnet tersebut, namun tidak menarik pada jarum kecil di dalamnya. Di dalam magnetometer terdapat tiga sensor magneto - resistif pada tiga sumbu. Hal tersebut menjelaskan bahwa efek medan magnet pada sensor ini mengatur aliran arus melalui sensor. Dengan menerapkan skala (milli-gauss).
The Honeywell HMC5883L adalah permukaan -mount, modul multi - chip yang dirancang untuk medan magnet rendah penginderaan dengan antarmuka digital untuk aplikasi seperti murah compassing dan magnetometry. HMC5883L termasuk state-of - the-art, resolusi tinggi seri HMC118X magneto - resistif sensor kami ditambah amplifikasi ASIC mengandung, driver tali degaussing otomatis, mengimbangi pembatalan, dan ADC 12 - bit yang memungkinkan 1° sampai 2° kompas pos akurasi. The I2C serial bus memungkinkan untuk antarmuka yang mudah. HMC5883L adalah permukaan gunung 3.0x3.0x0.9mm 16 - pin Chip leadless pembawa ( LCC ). Aplikasi untuk HMC5883L termasuk Mobile Phones, Netbooks, Consumer Electronics, Sistem Navigasi Auto, dan Personal Navigation Devices.
HMC5883L ini memanfaatkan Anisotropic Magnetoresistive (AMR) teknologi Honeywell yang memberikan keuntungan lebih dari teknologi sensor magnetik lainnya. Ini anisotropic, directional sensor memiliki presisi dalam sumbu sensitivitas dan linearitas. Konstruksi solid-state sensor ini ' dengan sensitivitas cross- sumbu yang sangat rendah dirancang untuk mengukur baik arah dan besarnya medan magnet bumi, dari mili - gauss sampai 8 gauss. Sensor Magnetic Honeywell adalah salah satu sensor medan rendah paling sensitif dan dapat diandalkan dalam industri.
II.5. Arduino Uno
Arduino UNO adalah sebuah board mikrokontroler yang didasarkan pada ATmega328 (datasheet). Arduino UNO mempunyai 14 pin digital input/output (6 di antaranya dapat digunakan sebagai output PWM), 6 input analog, sebuah osilator Kristal 16 MHz, sebuah koneksi USB, sebuah power jack, sebuah ICSP header, dan sebuat tombol reset. Arduino UNO memuat semua yang dibutuhkan untuk menunjang mikrokontroler, mudah menghubungkannya ke sebuah computer dengan sebuah kabel USB atau mensuplainya dengan sebuah adaptor AC ke DC atau menggunakan baterai untuk memulainya.
Arduino Uno berbeda dari semua board Arduino sebelumnya, Arduino UNO tidak menggunakan chip driver FTDI USB-to-serial. Sebaliknya, fitur-fitur Atmega16U2 (Atmega8U2 sampai ke versi R2) diprogram sebagai sebuah pengubah USB ke serial. Revisi 2 dari board Arduino Uno mempunyai sebuah resistor yang menarik garis 8U2 HWB ke ground, yang membuatnya lebih mudah untuk diletakkan ke dalam DFU mode. Revisi 3 dari board Arduino UNO memiliki fitur-fitur baru sebagai berikut:
    Pinout 1.0: ditambah pin SDA dan SCL yang dekat dengan pin AREF dan dua pin baru lainnya yang diletakkan dekat dengan pin RESET, IOREF yang memungkinkan shield-shield untuk menyesuaikan tegangan yang disediakan dari board. Untuk ke depannya, shield akan dijadikan kompatibel/cocok dengan board yang menggunakan AVR yang beroperasi dengan tegangan 5V dan dengan Arduino Due yang beroperasi dengan tegangan 3.3V. Yang ke-dua ini merupakan sebuah pin yang tak terhubung, yang disediakan untuk tujuan kedepannya
    Sirkit RESET yang lebih kuat Atmega 16U2 menggantikan 8U2.
“Uno” berarti satu dalam bahasa Italia dan dinamai untuk menandakan keluaran (produk) Arduino 1.0 selanjutnya. Arduino UNO dan versi 1.0 akan menjadi referensi untuk versi-versi Arduino selanjutnya. Arduino UNO adalah sebuah seri terakhir dari board Arduino USB dan model referensi untuk papan Arduino, untuk suatu perbandingan dengan versi sebelumnya, lihat indeks dari board Arduino.
Arduino UNO dapat disuplai melalui koneksi USB atau dengan sebuah power suplai eksternal. Sumber daya dipilih secara otomatis.
Suplai eksternal (non-USB) dapat diperoleh dari sebuah adaptor AC ke DC atau battery. Adaptor dapat dihubungkan dengan mencolokkan sebuah center-positive plug yang panjangnya 2,1 mm ke power jack dari board. Kabel lead dari sebuah battery dapat dimasukkan dalam header/kepala pin Ground (Gnd) dan pin Vin dari konektor POWER.
Board Arduino UNO dapat beroperasi pada sebuah suplai eksternal 6 sampai 20 Volt. Jika disuplai dengan yang lebih kecil dari 7 V, kiranya pin 5 Volt mungkin mensuplai kecil dari 5 Volt dan board Arduino UNO bisa menjadi tidak stabil. Jika menggunakan suplai yang lebih dari besar 12 Volt, voltage regulator bisa kelebihan panas dan membahayakan board Arduino UNO. Range yang direkomendasikan adalah 7 sampai 12 Volt.
Pin-pin dayanya adalah sebagai berikut:
·         VIN. Tegangan input ke Arduino board ketika board sedang menggunakan sumber suplai eksternal (seperti 5 Volt dari koneksi USB atau sumber tenaga lainnya yang diatur). Kita dapat menyuplai tegangan melalui pin ini, atau jika penyuplaian tegangan melalui power jack, aksesnya melalui pin ini.
·         5V. Pin output ini merupakan tegangan 5 Volt yang diatur dari regulator pada board. Board dapat disuplai dengan salah satu suplai dari DC power jack (7-12V), USB connector (5V), atau pin VIN dari board (7-12). Penyuplaian tegangan melalui pin 5V atau 3,3V membypass regulator, dan dapat membahayakan board. Hal itu tidak dianjurkan.
·         3V3. Sebuah suplai 3,3 Volt dihasilkan oleh regulator pada board. Arus maksimum yang dapat dilalui adalah 50 mA.
·         GND. Pin ground.
ATmega328 mempunyai 32 KB (dengan 0,5 KB digunakan untuk bootloader). ATmega 328 juga mempunyai 2 KB SRAM dan 1 KB EEPROM (yang dapat dibaca dan ditulis (RW/read and written) dengan EEPROM library).
Setiap 14 pin digital pada Arduino Uno dapat digunakan sebagai input dan output, menggunakan fungsi pinMode(), digitalWrite(), dan digitalRead(). Fungsi-fungsi tersebut beroperasi di tegangan 5 Volt. Setiap pin dapat memberikan atau menerima suatu arus maksimum 40 mA dan mempunyai sebuah resistor pull-up (terputus secara default) 20-50 kOhm. Selain itu, beberapa pin mempunyai fungsi-fungsi spesial:
    Serial: 0 (RX) dan 1 (TX). Digunakan untuk menerima (RX) dan memancarkan (TX) serial data TTL (Transistor-Transistor Logic). Kedua pin ini dihubungkan ke pin-pin yang sesuai dari chip Serial Atmega8U2 USB-ke-TTL.
    External Interrupts: 2 dan 3. Pin-pin ini dapat dikonfigurasikan untuk dipicu sebuah interrupt (gangguan) pada sebuah nilai rendah, suatu kenaikan atau penurunan yang besar, atau suatu perubahan nilai. Lihat fungsi attachInterrupt() untuk lebih jelasnya.
    PWM: 3, 5, 6, 9, 10, dan 11. Memberikan 8-bit PWM output dengan fungsi analogWrite().
    SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Pin-pin ini mensupport komunikasi SPI menggunakan SPI library.
    LED: 13. Ada sebuah LED yang terpasang, terhubung ke pin digital 13. Ketika pin bernilai HIGH LED menyala, ketika pin bernilai LOW LED mati.
Arduino UNO mempunyai 6 input analog, diberi label A0 sampai A5, setiapnya memberikan 10 bit resolusi (contohnya 1024 nilai yang berbeda). Secara default, 6 input analog tersebut mengukur dari ground sampai tegangan 5 Volt, dengan itu mungkin untuk mengganti batas atas dari rangenya dengan menggunakan pin AREF dan fungsi analogReference(). Di sisi lain, beberapa pin mempunyai fungsi spesial:
    TWI: pin A4 atau SDA dan pin A5 atau SCL. Mensupport komunikasi TWI dengan menggunakan Wire library
Ada sepasang pin lainnya pada board:
    AREF. Referensi tegangan untuk input analog. Digunakan dengan analogReference().
    Reset. Membawa saluran ini LOW untuk mereset mikrokontroler. Secara khusus, digunakan untuk menambahkan sebuah tombol reset untuk melindungi yang memblock sesuatu pada board.
Lihat juga pemetaan antara pin Arduino dengan port Atmega328. Pemetaan untuk Atmega8, 168, dan 328 adalah identik.
Arduino UNO mempunyai sejumlah fasilitas untuk komunikasi dengan sebuah komputer, Arduino lainnya atau mikrokontroler lainnya. Atmega 328 menyediakan serial komunikasi UART TTL (5V), yang tersedia pada pin digital 0 (RX) dan 1 (TX). Sebuah Atmega 16U2 pada channel board serial komunikasinya melalui USB dan muncul sebagai sebuah port virtual ke software pada komputer. Firmware 16U2 menggunakan driver USB COM standar, dan tidak ada driver eksternal yang dibutuhkan. Bagaimanapun, pada Windows, sebuah file inf pasti dibutuhkan. Software Arduino mencakup sebuah serial monitor yang memungkinkan data tekstual terkirim ke dan dari board Arduino. LED RX dan TX pada board akan menyala ketika data sedang ditransmit melalui chip USB-to-serial dan koneksi USB pada komputer (tapi tidak untuk komunikasi serial pada pin 0 dan 1).
Sebuah SoftwareSerial library memungkinkan untuk komunikasi serial pada beberapa pin digital UNO.
Atmega328 juga mensupport komunikasi I2C (TWI) dan SPI. Software Arduino mencakup sebuah Wire library untuk memudahkan menggunakan bus I2C, lihat dokumentasi untuk lebih jelas. Untuk komunikasi SPI, gunakan SPI library.

                                                                                                                                                   III. Hasil dan Pembahasan

III.1. Flowchart
Gambar 6. Flowchart Program




III.2. Rangkaian
file:///C:/Users/Kevin%20Kurnianto%20O/Downloads/Documents/Google%20Translate%20--%20compass%20bildr.org_files/translate_p_data/HMC5883L_arduino_hookup-400x342.png
Gambar 7. HMC5883L dengan Arduino (masukan)
Gambar 8. Arduino dengan LCD (keluaran)

III.3. Kode Program

//1. masukan library yang akan dipakai
#include <Wire.h> //referensi I2C library
#include <LiquidCrystal.h> //referensi LCD library
#include <HMC5883L.h> //referensi modul compass library

//2. deklarasikan pin lcd yang akan dipakai
LiquidCrystal lcd(12,11,5,4,3,2); //pin-pin lcd yang digunakan

//3. deklarasikan modul compass yang digunakan
HMC5883L compass; //menyimpan commpass kita sbg variabel

//4. deklarasikan kesalahan pada modul compass yg bernilai integer
int error = 0; //mengkoleksi bnyk kesalahan pada compass

//5. atur tampilan pada lcd
void Output(MagnetometerRaw raw, MagnetometerScaled scaled, float heading, float headingDegrees)
{
   Serial.print("Raw:t");
   Serial.print(raw.XAxis);
   Serial.print("   ");  
   Serial.print(raw.YAxis);
   Serial.print("   ");  
   Serial.print(raw.ZAxis);
   Serial.print("   Scaled:");
  
   Serial.print(scaled.XAxis);
   Serial.print("   ");  
   Serial.print(scaled.YAxis);
   Serial.print("   ");  
   Serial.print(scaled.ZAxis);

   Serial.print("   Heading:");
   Serial.print(heading);
   Serial.print(" Radians   ");
   Serial.print(headingDegrees);
   Serial.println(" Degrees   ");
  
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("compas");
   lcd.setCursor(0,1);
   if ((headingDegrees >= 355 && headingDegrees <= 360) || headingDegrees <= 5) {
     lcd.print("UTARA -> ");
   } else if (headingDegrees >= 35 && headingDegrees <= 55) {
     lcd.print("TIM LAUT -> ");
   } else if (headingDegrees >= 85 && headingDegrees <= 95) {
     lcd.print("TIMUR -> ");
   } else if (headingDegrees >= 125 && headingDegrees <= 145) {
     lcd.print("TENGGARA -> ");
   } else if (headingDegrees >= 185 && headingDegrees <= 175) {
     lcd.print("SELATAN -> ");
   } else if (headingDegrees >= 215 && headingDegrees <= 235) {
     lcd.print("BAR DAYA-> ");
   } else if (headingDegrees >= 265 && headingDegrees <= 275) {
     lcd.print("BARAT -> ");
   } else if (headingDegrees >= 305 && headingDegrees <= 325) {
     lcd.print("BAR LAUT -> ");
   } else {
     lcd.print("g' tau? -> ");
   }
   lcd.print(headingDegrees);
     
}

//6. atur konfigurasi microcontroller dan compass
void setup()
{
 
  Serial.begin(9600); //mengidentifikasi serial port

  Serial.println("Starting the I2C interface.");
  Wire.begin(); //mulai komunikasi I2C

  Serial.println("Constructing new HMC5883L");
  compass = HMC5883L(); //konstruksi baru compass
   
  Serial.println("Setting scale to +/- 1.3 Ga");
  error = compass.SetScale(1.3); // mengatur skala compass
  if(error != 0) // jika eror maka compass get error text
    Serial.println(compass.GetErrorText(error));
 
  Serial.println("Setting measurement mode to continous.");
  error = compass.SetMeasurementMode(Measurement_Continuous); // mengatur pengukuran
  if(error != 0) // jika eror maka compas get error text
    Serial.println(compass.GetErrorText(error));
   
  lcd.begin(16,2);
  
  lcd.setCursor(0,0);
  lcd.print("compas");
  
}

//7. mengatur program perulangan
void loop()
{
  MagnetometerRaw raw = compass.ReadRawAxis(); //mengatur nilai kasar dari compass
 
  MagnetometerScaled scaled = compass.ReadScaledAxis(); //mengatur nilai skala atau derajat dari compass
 
  int MilliGauss_OnThe_XAxis = scaled.XAxis; //mengakses nilai YAxis atau ZAxis
 
  float heading = atan2(scaled.YAxis, scaled.XAxis); //menghitung heading ketika magnetmeter berubah kemudian disinkronkan dg sinyal axis
 
  float declinationAngle = 0.0457;
  heading += declinationAngle;
 
  //mengecek saat sinyal berbalik
  if(heading < 0)
    heading += 2*PI;
   
  //mengecek tambahan deklinasi
  if(heading > 2*PI)
    heading -= 2*PI;
  
  float headingDegrees = heading * 180/M_PI; //mengubah rads ke derajad untuk dapat dibaca

  Output(raw, scaled, heading, headingDegrees); //mengeluarkan data dengan serial port
}


III.4. Tampilan Keluaran
Gambar 9. Tampilan LCD Kompas Digital

                                                                                                                                                                          IV. Penutup

Berdasarkan praktikum yang tlah dilakukan, maka dapat diambil simpulan sebagai berikut:
1.     Melalui uji coba rangkaian kompas digital mampu untuk menunjukan arah mata angin, hanya saja belum persisi dan belum stabil dalam penunjukan arah, perlu adanya perbaikan pada bagian program.
2.     HMC5883L dapat menjadi sensor kompas yang cukup baik dan murah, walaupun masih terdapat kekurangan. Cocok untuk bereksperimen.
3.     Description: E:\Acer\andro new\New folder\Photos\DSC_0186.JPGSaat digunakan kompas digital harus diletakan pada bidang datar yang statik agar penunjukannya lebih akurat.

                                                                                                                                                                V. Daftar Pustaka

Paper ini mereferensi pada sumber berupa jurnal dan artikel dari internet.

[1]     Fahmi Fardiyan Arief, Muchlas, Tole Sutikno. "Kompas Digital dengan Output Suara Berbasis Mikrokontroler AT89S52". Center for Electrical Engineering Research and Solution. Yogyakarta.
[2]     Honeywell. datasheet. 3-Axis Digital Compass IC HMC5883L

Description: E:\Bali (gendut)\KKL ke Bali\P1010431.JPGNama penulis Kevin Kurnianto Oktavian. Penulis dilahirkan di kabupaten Semarang tanggal 27 Oktober 1993. Penulis telah menempuh pendidikan formal di, SDN Palebon 04-05 Semarang, SMPN 14 Semarang, dan SMKN 2 Semarang. Tahun 2011 penulis telah menyelesaikan pendidikan SMK. Pada tahun 2011 penulis mengikuti seleksi mahasiswa baru diploma (D3) dan diterima menjadi mahasiswa baru diploma (D3) di kampus Politeknik Negeri Semarang (Polines) dengan Program Studi D3 Teknik Elektronika, Jurusan Teknik Elektro. Penulis terdaftar dengan NIM. 3.32.11.1.13. Apabila ada kritik, saran dan pertanyaan mengenai penelitian ini, bisa menghubungi 087832571417 atau melalui via email: Kevin.k.oktavian@gmail.com.

Description: E:\Bali (gendut)\bali (Sela)\IMG_4686.JPGNama penulis Sheilla Nadia Valina. Penulis dilahirkan di kabupaten Batang tanggal 11 Januari 1994. Penulis telah menempuh pendidikan formal di SDN 03 Parakan Kauman, SMPN 3 Temanggung, dan SMK 1 Telkom Sandy Putra Purwokerto. Tahun 2011 penulis telah menyelesaikan pendidikan SMA. Pada tahun 2011 penulis mengikuti seleksi mahasiswa baru diploma (D3) dan diterima menjadi mahasiswa baru diploma (D3) di kampus Politeknik Negeri Semarang (Polines) dengan Program Studi D3 Teknik Elektronika, Jurusan Teknik Elektro. Penulis terdaftar dengan NIM. 3.32.11.1.21. Apabila ada kritik, saran dan pertanyaan mengenai penelitian ini, bisa menghubungi 08562765594 atau melalui via email: nadiavalinas@yahoo.com

Nama penulis Taufiq Hidayat. Penulis dilahirkan di kabupaten Jepara tanggal 13 Februari 1994. Penulis telah menempuh pendidikan formal di TK Bhayangkari, SDN 3 Barongan, SMP 4 Kudus, dan SMAN 1 Bae Kudus. Tahun 2011 penulis telah menyelesaikan pendidikan SMA. Pada tahun 2011 penulis mengikuti seleksi mahasiswa baru diploma (D3) dan diterima menjadi mahasiswa baru diploma (D3) di kampus Politeknik Negeri Semarang (Polines) dengan Program Studi D3 Teknik Elektronika, Jurusan Teknik Elektro. Penulis terdaftar dengan        NIM. 3.32.11.1.22. Apabila ada kritik, saran dan pertanyaan mengenai penelitian ini, bisa menghubungi 085741382880 atau melalui via email: taufiqh83@yahoo.co.id

1 komentar: