Membuat
Alat Penunjuk Arah atau Kompas HMC5883L
Pada
kesempatan yang berbahagia kali ini, akan dibahas bagaimana cara membuat alat
untuk mengetahui arah atau sebagai penunjuk arah, arah tersebut yaitu arah
utara, selatan, timur dan barat, kalau urusan tenggara, selatan barat daya dll
tidak di bahas, hal itu bisa di tambahkan sendiri dengan membaca output sensor
pada computer.
Alat yang akan dibuat kali ini
menggunakan sensor compass yaitu sensor yang memliki respon terhadap rotasi
atau putaran, jadi sensor ini akan memiliki nilai yang berbeda saat dia berada
dengan posisi hadap yang berbeda, misal jika sensor ini menghadap ke utara
dengan ke selatan, maka hasilnya saat posisi menghadap ke utara akan berbeda
dengan pada saat sensor menghadap ke posisi selatan, begitulah cara kerja
sensor compass, sensor kompas yang dipakai kali ini adalah sensor compass
HMC5883L yang mana sensor ini jauh lebih murah dibanding sensor kompas yang
lain.
Alat ini juga dilengkapi 4 buah led
sebagai output yang bermacam-macam warna, dimaksudkan agar dapat dengan mudah
diketahui arah hadap dari sensor kompas ini, Alat ini
menggunakan mikrokontroller ATMega16
sebagai otak pengendali sekaligus pengatur jalannya output dari sinyal
masukan
sensor compass, sehingga jika dilihat secara keseluruhan alat ini sangat
sederhana, tidaklah menggunakan alat yang bermacam-macam, hanya perlu
mikrokontroler (minimum Sistem), output led dan sensor compass HMC5883L
Skematik Minimum System
Sensor HMC5883L
Sensor
HMC5883L ini adalah sensor yang sangat sensitif sekali terhadap rotasi dan arah
hadap sensor, dikarenakan sensor ini menggunakan medan magnet sebagai acuan
dari pendeteksiannya. Data yang telah didapat untuk 4 buah mata angin yaitu.
Arah Mata Angin
|
Data
|
Utara
|
255 < X < 257
|
Selatan
|
79 < X < 81
|
Timur
|
16 < X < 18
|
Barat
|
148 < X < 150
|
Sensor ini memiliki port koneksi ke
mikrokontroller yaitu SDA, SCL, VCC dan GND, sehingga port I2C ini
adalah port I/O dari sensor ini, jika dihubungkan ke port mikrokontroller maka
dihubungkan ke PortC.0 (SCL) dan PortC.1 (SDA). Berikut Gambar dan
konfigurasinya
Program Bascom AVR
$regfile = "m16def.dat"
$crystal = 12000000
$baud = 9600
$hwstack = 64
$swstack = 64
$framesize = 64
'--------------------------------------------------------------------
'=====[ Global Vars & Constants ]========
Dim Hmc_x As Integer
Dim Hmc_xl As Byte At Hmc_x + 0 Overlay
Dim Hmc_xh As Byte At Hmc_x + 1 Overlay
Dim Hmc_y As Integer
Dim Hmc_yl As Byte At Hmc_y + 0 Overlay
Dim Hmc_yh As Byte At Hmc_y + 1 Overlay
Dim Hmc_z As Integer
Dim Hmc_zl As Byte At Hmc_z + 0 Overlay
Dim Hmc_zh As Byte At Hmc_z + 1 Overlay
Dim Hmc_status As Byte
Dim X As Single
Dim Y As Single
Dim Z As Single
Dim Angle As Single
Ddrb = &B11111111
Const Hmc_w = &H3C
Const Hmc_r = &H3D
'---------------------------------------------------------------------
'=====[ Misc. config ]==============
Config Scl = Portc.0
Config Sda = Portc.1
Config Twi = 400000
I2cinit
Print "{027}[2J{027}[1;1H";
Print "Starting..."
Print
Gosub Hmc_initialize
'----------------------------------------------------------------------
'*****[ Start of main loop ]*******
Do
Gosub Hmc_readdata
Gosub Hmc_readstatus
'
convert integer to float
X =
Hmc_x
Y =
Hmc_y
Z =
Hmc_z
Angle = Atn2(y , X)
Angle = Angle * 57.29577951
Angle = Angle + 180
Print "{027}[3;1H";
Print "Angle : " ;
Fusing(angle , "#.#") ; "{027}[K"
Print "Status : " ; "&h" ; Hex(hmc_status) ;
"{027}[K"
Waitms 100
If
Angle > 16 And Angle < 18 Then 'timur
Portb.0 = 0
Portb.1 = 1
Portb.2 = 0
Portb.3 = 0
Elseif Angle > 79 And Angle < 81 Then 'selatan
Portb.0 = 0
Portb.1 = 0
Portb.2 = 1
Portb.3 = 0
Elseif Angle > 148 And Angle < 150 Then 'barat
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Elseif Angle > 255 And Angle < 257 Then 'utara
Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Else
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
End
If
Loop
End
'---------------------------------------------------------------------
'=====[ Initialize HMC Compass ]========
Hmc_initialize:
I2cstart
I2cwbyte Hmc_w
I2cwbyte &H00
I2cwbyte &B0101_1000
I2cwbyte &H0010_0000
I2cwbyte &H0000_0000
I2cstop
Return
'---------------------------------------------------------------------
'=====[ Read HMC Compass ]===========
Hmc_readstatus:
' Read HMC Compass status
I2cstart
I2cwbyte Hmc_w
I2cwbyte &H09
I2cstart
I2cwbyte Hmc_r
I2crbyte Hmc_status , Nack
I2cstop
Return
'----------------------------------------------------------------------
'=====[ Read HMC Compass ]=========
Hmc_readdata:
I2cstart
I2cwbyte Hmc_w
I2cwbyte &H03
I2cstart
I2cwbyte Hmc_r
I2crbyte Hmc_xh , Ack
I2crbyte Hmc_xl , Ack
I2crbyte Hmc_zh , Ack
I2crbyte Hmc_zl , Ack
I2crbyte Hmc_yh , Ack
I2crbyte Hmc_yl , Nack
I2cstop
Return
'------------------------------------------------------------------------
Cara Penggunaan Alat
Untuk
menggunakan alat ini yaitu pertama menghidupkan alat dengan mengaktifkan sumber
catu daya sebagai VCC dan GND, kemudian menghubungkan rangkaian sensor HMC5883L
ke minimum system, setelah itu alat siap untuk digunakan, untuk mengetahui arah
mata angin dengan cara memutarkan / menghadapkan sensot ke arah utara, selatan,
barat dan timur jika led menyala berarti arah yang dituju telah tepat namun
jika belum ada led yang menyala berarti arah hadap sensor masih salah, atau
kurang tepat. Tampilan hasil secara detailnya seperti berikut
Arah
Hadap
|
Range
Data
|
Led
Merah
|
Led
Biru
|
Led
Hijau
|
Led
Kuning
|
Utara
|
255 < X < 257
|
On
|
Off
|
Off
|
Off
|
Selatan
|
79 < X < 81
|
Off
|
On
|
Off
|
Off
|
Timur
|
16 < X < 18
|
Off
|
Off
|
On
|
Off
|
Barat
|
148 < X < 150
|
Off
|
Off
|
Off
|
On
|
yang lainnya
|
-
|
Off
|
Off
|
Off
|
Off
|
Mantap gan...
ReplyDelete