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.
Gambar 1. Sensor Kompas HMC5883L
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.
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
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. Saat
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
Nama 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.
Nama 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
gambarnya pada kmana tuh gan..?
BalasHapus