mikrodetik. Setelah semua data diambil, CS diberi logika 1 untuk mengakhiri konversi.
Pengambilan data accelerometer dari H48C belum memberikan nilai accelerometer yang sesungguhnya. Data ini perlu dikonversi sehingga menjadi
nilai g-force. Kode ini didapat dari persamaan 14. Pengkonversian dilakukan oleh fungsi berikut:
f l oat k onv er s i i nt v Ref , i nt v Ax i s { f l oat f ;
i f v Ax i s =v Ref f = v Ax i s - v Ref 0. 0022; i f v Ax i s v Ref f =- v Ref - v Ax i s 0. 0022;
r et ur n f ; }
4.3.5. Pengambilan data suhu dari sensor DS1820
Sensor suhu DS1820 berkomunikasi dengan mikrokontroler menggunakan komunikasi 1-Wire. Komunikasi ini hanya membutuhkan satu kabel yang
terhubung pada sensor dan mikrokontroler. Komunikasi ini berbeda dengan komunikasi I2C yang membutuhkan dua kabel untuk berkomunikasi.
Hal yang pertama dilakukan dalam mendefinisikan maksimum device yang dapat diakses dengan kode “define MAX_DS1820 8”. Kode ini
mengartikan bahwa sensor DS1820 yang dapat diakses maksimum delapan. Inisialisasi variabel dilakukan pada kode berikut:
uns i gned c har ds 1820_dev i c es ; uns i gned c har ds 1820_r om_c odes [ MAX_DS1820] [ 9] ;
Variabel ds1820_devices digunakan untuk menyimpan nilai dari jumlah device yang terhubung ke mikrokontroler melalui komunikasi 1-Wire. Variabel
ds1820_rom_codes digunakan untuk memberikan nilai device ROM codes storage area.
Di dalam fungsi “void main” ditulis kode “w1_init” untuk menginisialisasi device yang terhubung dengan mikrokontroler. Kode
“ds1820_devices=w1_search 0xf0,ds1820_rom_codes” digunakan mencari device yang terhubung ke mikrokontroler dengan menggunakan komunikasi 1-
Wire. Kode “temp=ds1820_temperature_10ds1820_rom_codes[0][0]” digunakan untuk mengambil nilai suhu yang diukur oleh sensor DS1820. Suhu
yang terukur memiliki satuan derajat celcius °C.
4.3.6. Penyusunan format data dan pengiriman ke komputer
Penyusunan format data dilakukan dengan kode program berikut. Data akan dikirim apabila “transmisi=1”. Kode ini diletakkan dalam fungsi “while 1”
agar perulangan tetap dilakukan. Kodenya sebagai berikut:
i f t r ans mi s i ==1 {
as m c l i ; ar ah=c mps 10 2 8;
ar ah+=c mps 10 3 ; p1=c mps 10 4 ;
r ol l =c mps 10 5 ; pi t c h2=k emi r i ngan p1 ;
v X=r ead_HC 0 ; v Y=r ead_HC 1 ;
v Z=r ead_HC 2 ; v Ref =r ead_HC 3 ;
ax =k onv er s i v Ref , v X ; ay =k onv er s i v Ref , v Y ;
az =k onv er s i v Ref , v Z ; t emp=ds 1820_t emper at ur e_10 ds 1820_r om_c odes [ 0] [ 0] ;
pr i nt f 4. 2f , ax ; put c har 0x 20 ;
pr i nt f 4. 2f , ay ; put c har 0x 20 ;
pr i nt f 4. 2f , az ; put c har 0x 20 ;
pr i nt f u. u , ar ah 10, ar ah10 ;
put c har 0x 20 ; pr i nt f 5. 2f , pi t c h2 1. 41176470588235 ;
put c har 0x 20 ; pr i nt f 5. 2f , r ol l 1. 41176470588235 ;
put c har 0x 20 ; pr i nt f - i . - u\ n\ r , t emp 100, abs t emp10 ;
put c har 13 ; put c har 10 ;
del ay _ms 1000 ; as m s ei ;
} ;
Pada kode program di atas, pengambilan data yang pertama ialah pengambilan data dari CMPS10. Variabel arah, p1, pitch2 dan roll didefinisikan
dulu sebelumnya di bawah “void main” dengan menuliskan kode int arah, p1, roll dan float pitch2. “arah=cmps102” menjelaskan bahwa variabel arah bertipe
integer dan digunakan untuk mengambil data CMPS10 pada register 2 yaitu register untuk mengambil data arah heading. “arah+=cmps103” mengartikan
bahwa mode register yang digunakan adalah 16 bit dimana register 2 diambil dulu sebagai high byte kemudian register 3 diambil sebagai low byte. Variabel p1 akan
menyimpan data pitch yang diambil dari register 4 CMPS10. Variabel roll akan menyimpan data roll dari register 5 CMPS10. “pitch2=kemiringan p” berarti
nilai p yang didapat dari data pitch dimasukkan ke dalam fungsi kemiringan agar nilai yang keluar berupa nilai derajat dari 0° – +180° dan 0° – -180°. Fungsi ini
diperlukan karena komponen abakus TABVCInd yang diletakkan pada program delphi memiliki rentang nilai pitch dari 0° – +180° dan 0° – -180°. Fungsi
kemiringan diletakkan di luar program utama “void main” dengan kode seperti berikut:
f l oat k emi r i ngan f l oat pi t c h { f l oat p;
i f pi t c h=128
{ p=pi t c h; }
i f pi t c h128 { p= pi t c h - 255;
} r et ur n p;
}
Pengambilan data berikutnya ialah data accelerometer. Data accelerometer ini diambil pada tiap sumbu. Variabel yang diperlukan adalah vX,
vY, vZ, dan vRef dengan tipe integer dan ax, ay, az dengan tipe float. Variabel ini
diinisialisasi di bawah void main dengan kode int vX, vY, vZ, vRef dan float
ax, ay, az. Kemudian data accelerometer dibaca dengan kode read_HC axis dimana axis bernilai sesuai dengan kanal yang akan digunakan. Setelah data
diambil, konversi dilakukan agar memperoleh data accelerometer dalam satuan g- force.
Data arah,
pitch, roll, accelerometer, dan suhu kompartemen yang telah diperoleh kemudian disusun untuk dikirim ke mikrokontroler. Data yang keluar
akan memiliki format berbentuk seperti Tabel 9. Kode pengiriman data dilakukan dengan menulis perintah “printf” untuk
mengirim data dalam bentuk kalimat dan putchar dalam bentuk karakter. Sebagai contoh printf4.2f, ax memiliki arti bahwa data yang keluar adalah data
tipe f float dengan banyaknya angka 4 dimana 2 angkanya adalah angka di belakang koma dan diperoleh dari variabel ax.
Pada bagian pengiriman data pitch dan roll, ada perkalian data dengan konstanta sebesar 1,41176470588235. Konstanta ini diperlukan untuk membuat data pitch
dan roll bernilai 0° – 360° dikarenakan keluaran nilai pitch dan roll memiliki rentang 0 – 255 untuk nilai 0° – 360°.
Tabel 9. Format pengiriman data
B y
t e
1 2
3 4
5 6
7 8
9 10
11 12
13 14
15 16
17 18
19 20
21 22
23 24
25 26
27 28
29 30
31 32
33 34
35 36 37
D a
t a
A c
c X
20 H
A c
c Y
20 H
A c
c Z
20 H
A r
a h
20 H
P i
t c
h 20
H R
o l
l 20
H S
u h
u 0D
H 0A
H
4.3.7. Pergerakan thruster