Anda di halaman 1dari 77

i

RANCANG BANGUN SISTEM STABILIZER ROLLING KAPAL


PENUMPANG MENGGUNAKAN FIN STABILIZER DENGAN
KONTROLLER PID

SKRIPSI
KOSENTRASI TEKNIK KONTROL

Diajukan Untuk Memenuhi Persyaratan


Memperoleh Gelar Sarjana Teknik

Disusun Oleh:
MOHAMMAD SHIDDIQ PRATOMO
NIM. 145060301111038

KEMENTRIAN RISET, TEKNOLOGI DAN PENDIDIKAN TINGGI


UNIVERSITAS BRAWIJAYA
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
2018
ii
iii
iv
v
vi
vii

PERNYATAAN ORISINALITAS SKRIPSI

Saya menyatakan dengan sebenar-benarnya bahwa sepanjang pengetahuan saya dan


berdasarkan hasil penelusuran berbagai karya ilmiah, gagasan dan masalah ilmiah yang
diteliti dan diulas di dalam Naskah Skripsi ini adalah asli dari pemikiran saya. Tidak terdapat
karya ilmiah yang pernah diajukan oleh orang lain untuk memperoleh gelar akademik di
suatu Perguruan Tinggi, dan tidak terdapat karya atau pendapat yang pernah ditulis atau
diterbitkan oleh orang lain, kecuali yang secara tertulis dikutip dalam naskah ini dan
disebutkan dalam sumber kutipan dan daftar pustaka.
Apabila ternyata di dalam naskah Skripsi ini dapat dibuktikan terdapat unsur-unsur
jiplakan, saya bersedia Skripsi dibatalkan, serta diproses sesuai dengan peraturan perundang-
undangan yang berlaku (UU No. 20 Tahun 2003, pasal 25 ayat 2 dan pasal 70).

Malang, 3 Desember 2018

Mahasiswa,

MOHAMMAD SHIDDIQ PRATOMO


NIM. 145060301111038
viii

Teriring Ucapan Terima Kasih kepada:


Ayahanda dan Ibunda tercinta
ix
x

RINGKASAN

Kapal merupakan salah satu moda transportasi yang digunakan untuk keperluan jalur
perairan dan digunakan untuk berbagai kepentingan, baik transportasi barang, maupun
transportasi manusia. Akan tetapi kapal sering terkena gangguan berupa ombak yang
mengakibatkan guncangan dan mengurangi dari kenyamanan penumpang. Oleh karena itu
diperlukan alat penstabil kapal agar tidak oleng yaitu Fin stabilizer. Fin stabilizer adalah
suatu peralatan roll damping sistem yang dipasang pada lambung kanan dan kiri kapal
bagian bawah yang berfungsi untuk menjaga keseimbangan kapal. Untuk mengetahui
kemiringan kapal digunakan sensor MPU6050. Pada penelitian ini kontroler PID digunakan
untuk mengontrol Fin. Dari hasil pengujian menggunakan metode Handtuning didapat gain
yang digunakan pada penelitian ini yaitu Kp=30, Ki=0.02, dan Kd=10. Pada pengujian tanpa
gangguan didapat nilai overshoot sebesar 7.44% dan memiliki settling time sebesar 2.6 detik
dengan error steady sebesar 0 derajat dari kemiringan maksimal 30 derajat. Sedangkan pada
pengujian dengan diberikan tiga kali gangguan didapatkan nilai rata-rata settling time 3.69
detik, dan rata rata overshoot 8.82% dengan rata rata error steady sebesar 0.85 derajat dari
kemiringan maksimal.
Kata Kunci : Kapal, Fin stabilizer, kontroler PID,gerak rolling kapal.
xi

SUMMARY
Ships are one of the modes of transportation that are used for the purposes of waterways
and are used for various purposes, both transportation of goods and human transportation.
However, ships are often exposed to interference in the form of waves that cause shock and
reduce passenger comfort. Therefore, a ship stabilizer is needed so that it is not tilted,
namely the Fin stabilizer. Fin stabilizer is an equipment roll damping system that is mounted
on the right and left hulls of the lower part of the ship which serves to maintain the balance
of the ship. MPU6050 sensor is used to determine the slope of the ship. In this study the PID
controller is used to control Fins. From the test results using the Handtuning method, the
gain used in this study is Kp = 30, Ki = 0.02, and Kd = 10. In the test without interference,
the overshoot value is 7.44% and has a settling time of 2.6 seconds with a steady error of 0
degrees from a maximum slope of 30 degrees. Whereas in the testing given three times the
interference obtained the average settling time was 3.69 seconds, and the average overshoot
was 8.82% with a steady average error of 0.85 degrees of the maximum slope.
Keywords: Ship, Fin stabilizer, PID controller, rolling ship.
xii
i

PENGANTAR
Bismillahirrohmanirrohim. Alhamdulillah, puji dan syukur penulis panjatkan kepada
Allah SWT, karena atas segala petunjuk dan nikmat-Nya lah skripsi ini dapat diselesaikan.
Skripsi berjudul “RANCANG BANGUN SISTEM STABILIZER ROLLING KAPAL
PENUMPANG MENGGUNAKAN FIN STABILIZER DENGAN KONTROLLER PID ” ini
disusun untuk memenuhi persyaratan memperoleh gelar Sarjana Teknik di Jurusan Teknik
Elektro Universitas Brawijaya.
Penulis menyadari bahwa dalam penyusunan skripsi ini tidak terlepas dari bantuan
berbagai pihak. Oleh karena itu, dengan ketulusan dan kerendahan hati penulis
menyampaikan terima kasih kepada:
1. Kedua orang tua yang selalu menjadi motivator dalam pengerjaan skripsi ini.
2. Saudara-saudara saya di Pekalongan yang selalu memberi motivasi untuk bisa
mempercepat pengerjaan skripsi ini.
3. Bapak Ir. Hadi Suyono, S.T., M.T., Ph.D., IPM. selaku Ketua Jurusan Teknik Elektro
Fakultas Teknik Universitas Brawijaya.
4. Ibu Ir. Nurussa’adah, M.T. selaku Sekretaris Jurusan Teknik Elektro Fakultas Teknik
Universitas Brawijaya.
5. Bapak Ali Mustofa, S.T., M.T. selaku Ketua Program Studi Sarjana Jurusan Teknik
Elektro Fakultas Teknik Universitas Brawijaya.
6. Bapak Ir. Purwanto, M.T. selaku Ketua Kelompok Dosen Konsentrasi Teknik Kontrol
Jurusan Teknik Elektro Fakultas Teknik Universitas Brawijaya, serta sebagai
pembimbing saya yang memberikan pengarahan saran dan kritik selama proses
pengerjaan skripsi.
7. Segenap dosen pengajar dan staff administrasi Jurusan Teknik Elektro Fakultas Teknik
Universitas Brawijaya.
8. Sahabat-sahabat arek kontrakan (Reza, Ajib, Aldi, Ardi, Hasyim, Ulum) dalam
memberikan semangat dalam pengerjaan skripsi.
9. Teman-teman sebimbingan dan seperjuangan Pangky, Aldi rizaldi, Iqbal kurniawan atas
motivasi yang telah diberikan.
10. Meilan Sarbaini, Oktarudin, Alfian dalam memberikan saran, dan bantuannya dalam
pengerjaan skripsi.
11. Teman teman dolan Agus, Arifin surya, Dhani dalam memberikan semangat sewaktu
skripsian.
12. Teman-teman Konsentrasi Teknik Kontrol Universitas Brawijaya.
ii

13. Teman-teman Aslab Sistem Kontrol Universitas Brawijaya.


14. Teman-teman DIODA 2014 atas segala bantuan dan kebersamaan yang telah diberikan
selama masa studi.
15. Teman teman angkatan 19 SMA POMOSEL memberikan semangat dan motivasi untuk
mempercepat pengerjaan skripsi ini.
16. Teman teman Gema Purnama sebagai teman seperjuangan merantau ke malang.
17. Semua pihak yang telah memberikan bantuan dan dukungan baik secara langsung
maupun tidak langsung atas penyelesaian skripsi ini.
Dalam penyusunan skripsi ini, penulis menyadar bahwa masih terdapat kekurangan
karena kendala dan keterbatasan dalam pengerjaan skripsi ini. Oleh karena itu, penulis
berharap saran dan kritik yang membangun untuk penyempurnaan tulisan di masa yang akan
datang. Semoga tulisan ini dapat bermanfaat dan dapat digunakan untuk pengembangan
lebih lanjut.

Malang, Oktober 2018

Penulis
iii

DAFTAR ISI
PENGANTAR ....................................................................................................................... i
DAFTAR ISI ....................................................................................................................... iii
DAFTAR GAMBAR .......................................................................................................... iv
DAFTAR TABEL ................................................................................................................ v
BAB I PENDAHULUAN .................................................................................................... 1
1.1 Latar belakang ...................................................................................................... 1
1.2 Rumusan Masalah ................................................................................................ 2
1.3 Batasan Masalah ................................................................................................... 2
1.4 Tujuan .................................................................................................................... 2
1.5 Manfaat .................................................................................................................. 3
1.6 Sistematika Penulisan ........................................................................................... 3
BAB II TINJAUAN PUSTAKA ......................................................................................... 4
2.1 Fin Stabilizer .......................................................................................................... 4
2.2 Kapal ...................................................................................................................... 5
2.2.1 Kapal Niaga dan Komersi ............................................................................. 5
2.2.2 Kapal perang .................................................................................................. 6
2.2.3 Kapal kapal khusus ....................................................................................... 6
2.3 Motor DC servo ..................................................................................................... 7
2.4 Gelombang air laut ............................................................................................... 8
2.5 Mikrokontroller Arduino UNO ......................................................................... 10
2.6 Sensor MPU 6050 ................................................................................................ 11
2.7 Kontroler PID...................................................................................................... 12
BAB III METODE PENELITIAN ................................................................................... 14
3.1 Menentukan spesifikasi desain .......................................................................... 14
3.2 Perancangan Blok Diagram Sistem ................................................................... 14
3.3 Perancangan dan Pembuatan Perangkat Keras (Hardware) .......................... 15
3.3.1 Perancangan pembuatan kapal dan Fin Stabilizer ................................... 15
3.3.2 Perancangan Pembuatan Akuarium ......................................................... 16
3.4 Perancangan algoritma ...................................................................................... 16
3.4.1 Flowchart keseluruhan................................................................................ 16
3.4.2 Flowchart program...................................................................................... 17
3.5 Menentukan parameter dari PID ...................................................................... 18
3.5.1 Pengaturan nilai Kp .................................................................................... 19
3.5.2 Pengaturan nilai Kp,Kd .............................................................................. 21
iv

3.5.3 Pengaturan nilai Kp,Kd,Ki ........................................................................ 22


3.6 Pengujian per komponen ................................................................................... 24
3.6.1 Pengujian karakterisasi sensor MPU 6050 ............................................... 24
3.6.2 Pengujian karakterisasi motor dc Servo .................................................. 26
BAB IV HASIL DAN PEMBAHASAN ........................................................................... 29
4.1 Pengujian kondisi ideal ...................................................................................... 29
4.2 Pengujian dengan gangguan .............................................................................. 30
4.2.1 Pengujian pertama ...................................................................................... 30
4.2.2 Pengujian kedua .......................................................................................... 31
4.2.3 Pengujian ketiga .......................................................................................... 32
BAB V PENUTUP ............................................................................................................. 33
5.1 Kesimpulan .......................................................................................................... 33
5.2 Saran .................................................................................................................... 33
DAFTAR PUSTAKA ........................................................................................................ 34

DAFTAR GAMBAR
Gambar 2.1 Fin stabilizer pada kapal.................................................................................4
Gambar 2.2 Bentuk Fin stabilizer .......................................................................................5
Gambar 2.3 Motor DC servo ...............................................................................................8
Gambar 2.4 Arduino Uno ..................................................................................................11
Gambar 2.5 Sensor MPU6050 ...........................................................................................12
Gambar 3.1 Blok diagram kapal ......................................................................................15
Gambar 3.2 Flowchart keseluruhan alat dan perhitungan PID ....................................17
Gambar 3.3 Flowchart program .......................................................................................18
Gambar 3.4 Grafik Respon untuk Kp=20 .......................................................................19
Gambar 3.5 Grafik Respon untuk Kp=25 .......................................................................20
Gambar 3.6 Grafik Respon untuk Kp=30 .......................................................................20
Gambar 3.7 Grafik respon untuk Kp=30, Ki=0.1 ...........................................................21
Gambar 3.8 Grafik respon untuk Kp=30, Ki=0.02 .........................................................22
Gambar 3.9 Grafik respon untuk Kp=30, Ki=0.08 .........................................................22
Gambar 3.10. Grafik respon untuk Kp=30, Ki=0.02, Kd=1 ..........................................23
Gambar 3.11. Grafik respon untuk Kp=30, Ki=0.02, Kd=5 ..........................................23
Gambar 3.12 Grafik respon untuk Kp=30, Ki=0.02,dan Kd=10 ...................................24
Gambar 3.13 Grafik pengujian sensor MPU 6050 ..........................................................25
Gambar 3.14 Grafik pengujian motor DC servo kanan .................................................27
v

Gambar 3.15 Grafik pengujian motor DC servo kiri..................................................... 28


Gambar 4.1 Grafik pengujian kapal pada kondisi ideal ............................................... 29
Gambar 4.2 Grafik pengujian dengan gangguan pertama............................................ 31
Gambar 4.3 Grafik pengujian dengan gangguan kedua................................................ 31
Gambar 4.4 Grafik pengujian dengan gangguan ketiga................................................ 32

DAFTAR TABEL
Tabel 2.1 spesifikasi servo…………...…...………………..………………………………7
Tabel 2.2 Spesifikasi Arduino UNO.……………….……………………………..……...10

Tabel 2.3 Spesifikasi sensor MPU 6050………………………….....................................11

Tabel 3.1 Hasil pengujian sensor MPU 6050…….…..…………..…………….……......25


Tabel 3.2 Hasil pengujian motor DC servo kanan…….…………………………….......26
Tabel 3.3 Hasil pengujian motor DC servo kiri……….…………………………….......27
BAB I
PENDAHULUAN

1.1 Latar belakang


Kapal merupakan salah satu moda transportasi yang digunakan untuk keperluan jalur
perairan dan digunakan untuk berbagai kepentingan, baik transportasi barang, maupun
transportasi manusia. Dalam berbagai kepentingan diatas air, mengingat kebutuhan
masyarakat dan industri yang semakin pesat. Kapal digunakan oleh manusia untuk
mengarungi sungai atau lautan yang diawali oleh penemuan perahu. Biasanya pada masa
lampau masyarakat menggunakan kano, rakit ataupun perahu. Karena semakin besar
kebutuhan akan daya muat maka dibuatlah perahu atau rakit yang berukuran lebih besar yang
dinamakan kapal.

Kapal penumpang merupakan salah satu alat transportasi antar pulau, masyarakat sering
menggunakannya sebagai komoditas transportasi utama karena selain dapat mengangkut
pennumpang juga bisa mengangkut kendaraan bermotor. Tentunya kondisi ini memerlukan
suatu suasana yang nyaman karena banyak sekali gangguan seperti salah satunya gerak oleng
dari kapal itu sendiri yang disebabkan oleh ombak, angin, arus air laut dan lain sebagainya.
Faktor ini tentunya juga secara tidak langsung mempengaruhi keamanan dari penumpang itu
sendiri.

Pada dinamika kapal gerak translasi dibagi menjadi tiga yaitu surge, sway dan heave.
Sedangkan gerak rotasi dibagi menjadi tiga yaitu roll, pitch, dan yaw (Fossen, 2011). Kapal
sangat membutuhkan pergerakan yang stabil saat di laut. Pergerakan tersebut mempengaruhi
kenyamanan bagi penumpang, semakin stabil kapal tersebut maka akan semakin kecil juga
guncangan yang dirasakan oleh penumpang. Sistem fin merupakan aktuator untuk
mengendalikan heading kapal saat beroperasi dan mengurangi sudut roll kapal. Salah satu
factor yang mempengaruhi sudut roll kapal yaitu ombak dan arus air.

Pada masa ini banyak modifikasi dan perlakuan yang dilakukan terhadap sebuah kapal
demi memenuhi kebutuhan tersebut.Salah satu modifikasi yang dilakukan adalah dengan
adanya penambahan fins pada area dibawah lambung kapal, penambahan pada bagian ini
dilakukan dengan tujuan mengarahkan aliran fluida dibawah lambung kapal yang mengarah
pada propeller kapal lebih selaras. Penambahan Fins diharapkan mampu memperkecil
tahanan viskos kapal, sehingga mampu membuat kapal lebih seimbang dan mengurangi

1
2

guncangan yang diakibatkan oleh ombak. Pemilihan fin stabilizer digunakan karena untuk
efisiensi tempat didalam kapal. Jika menggunakan sistem balas maka tempat didalam kapal
semakin sempit. Stabilitas rolling kapal merupakan kemampuan sistem dalam merespon
gangguan untuk berusaha kembali ke keadaan normal. Untuk meredam gerakan oleng
digunakan alat yang dapat menjaga stabilitas kapal (Dontiawan,2012).

Metode yang digunakan adalah metode PID karena pengontrolan fin menggunakan
motor DC servo serta lebih tahan terhadap gangguan luar serta dapat diterapkan dalam
kondisi operasi yang bervariasi. Tetapi pengontrol PID perlu ditala secara benar yaitu
menentukan harga konstanta pengontrol proporsional, integral dan derivatif yang
mengoptimalkan kinerja sistem. Setelah tiga parameter tersebut ditala, maka nilai parameter
pengontrol tersebut pada PID biasanya dipertahankan tetap selama proses pengontrolan.

1.2 Rumusan Masalah


Berdasarkan uraian latar belakang di atas, dapat disusun rumusan masalah sebagai
berikut:
1. Bagaimana cara mengontrol fin stabilizer menggunakan metode PID?
2. Apa pengaruh metode PID pada Fin stabilizer?
3. Bagaimana cara merancang sistem pengendalian Fin stabilizer dengan
menggunakan PID?
1.3 Batasan Masalah
Berdasarkan rumusan masalah yang dibahas sebelumnya maka dibuat suatu batasan
batasan yaitu:
1. Kapal dalam keadaan diam.
2. Gangguan hanya dari arus gelombang air, angin diabaikan.
3. Menggunakan sensor MPU 6050.
4. Sistem pengontrol menggunakan PID.
5. Menggunakan mikrokontroler arduino uno.
6. Gerakan yang di stabilkan yaitu hanya gerakan Roll.
7. Kapal dan fin dengan desain sendiri.
1.4 Tujuan

Tujuan yang ingin dicapai dari penulisan penelitian ini adalah menentukan besar
parameter kontroler PID yang optimal pada pengontrolan fin stabilizer, sehingga didapat fin
yang bekerja secara otomatis dalam menyeimbangkan kapal secara cepat.
3

1.5 Manfaat
Manfaat dari hasil penelitian ini adalah sebagai berikut:
1. Dapat meningkatkan keseimbangan kapal.
2. Dapat mengurangi guncangan yang terjadi pada kapal.
3. Dapat mengontrol keseimbangan kapal secara cepat.

1.6 Sistematika Penulisan

Sistematika penulisan digunakan dalam penyusunan penelitian ini adalah sebagai berikut:

BAB I: PENDAHULUAN
Bab ini berisikan latar belakang masalah, rumusan masalah, tujuan penulisan,
batasan masalah, metode penulisan, dan sistematika penulisan.
BAB II: TINJAUAN PUSTAKA
Bab ini berisi teori yang digunakan untuk penelitian dan untuk mendukung
permasalahan yang diteliti.
BAB III: METODE PENELITIAN
Berisi tahapan penyeleseian penelitian ini yang meliputi studi literature,
spesifikasi alat alat, perencanaan blok diagram sisitem, Perancangan dan Pembuatan
Perangkat Keras (Hardware), Perancangan algoritma, dan Rencana kegiatan.
BAB IV: HASIL DAN PEMBAHASAN
Berisi pengujian dan pengambilan data hasil perancangan alat yang kemudian
digunakan untuk analisis.
BAB V: KESIMPULAN DAN SARAN
Berisi kesimpulan dari analisis hasil peneltian serta saran untuk penelitian
selanjutnya.
BAB II
TINJAUAN PUSTAKA

2.1 Fin Stabilizer

Fin stabilizer adalah suatu peralatan roll damping sistem yang dipasang pada lambung
kanan dan kiri kapal bagian bawah yang berfungsi untuk menjaga keseimbangan kapal pada
saat kapal berada di atas air dan bekerjanya berdasarkan prinsip pengontrolan posisi fin. Fin
stabilizer digunakan untuk mengatur aliran fluida di bawah lambung kapal dengan tujuan
mengarahkan aliran fluida bawah lambung kapal agar terpusat dan menuju ke propeller
dengan sempurna untuk menambah gaya dorong yang dihasilkan oleh kapal
(Jokosusilo.2013).

Fin stabilizer bekerja berdasarkan kecepatan kapal, dan amplitudo oleng kapal. Namun
pada penelitian ini kami hanya mengamati kapal dalam keadaan diam dengan
memperhatikan sudut kemiringan yang dipengaruhi oleh gelombang air laut. Pada saat
amplitudo oleng kapal tinggi maka sudut fin stabilizer akan besar dan bila amplitudo oleng
kapal rendah maka sudut fin stabilizer juga harus kecil. Amplitudo oleng kapal selalu
berubah-ubah sehingga sudut fin stabilizer juga harus berubah mengikuti perubahan
keduanya. Data amplitudo dan periode oleng kapal dihasilkan oleh rate gyro yang
terintegrasi langsung dengan sistem hidrolik dan mekanik dari fin stabilizer
(Johansyah,2011). Sistem fin stabilizer aktif terdiri dari sepasang pada sisi kanan dan kiri
kapal. Jika gerak kapal mengarah kekiri maka fin kapal bagian kiri akan bergerak ke atas dan
fin bagian kanan akan bergerak ke bawah, begitu juga sebaliknya dan fin akan kembali
normal ketika kapal dalam keadaan stabil tidak oleng (Kartikasari,2010).

Gambar 2.1 Fin stabilizer pada kapal


Sumber: https://www.marineinsight.com/naval-architecture/roll-stabilization-systems/

4
5

Gambar 2.2 Bentuk Fin stabilizer

Sumber: https://www.researchgate.net/figure/Principle-of-zero-speed-fin-
stabilizer_fig25_272370747

2.2 Kapal

Kapal, adalah kendaraan pengangkut penumpang dan barang di laut (sungai dsb)
seperti halnya sampan atau perahu yang lebih kecil. Kapal biasanya cukup besar untuk
membawa perahu kecil seperti sekoci. Sedangkan dalam istilah inggris, dipisahkan
antara ship yang lebih besar dan boat yang lebih kecil. Secara kebiasaannya kapal
dapat membawa perahu tetapi perahu tidak dapat membawa kapal. Ukuran sebenarnya
dimana sebuah perahu disebut kapal selalu ditetapkan oleh undang-undang dan peraturan
atau kebiasaan setempat (Sumaryanto.2013).

Pada dinamika kapal terdapat enam macam gerakan yang terjadi pada kapal saat dilautan.
Enam gerakan kapal tersebut dibagi menjadi dua macam yaitu translasi dan rotasi. Gerakan
transalasi dibagi menjadi tiga yaitu surge, sway, dan heave. Sedangakan gerakan rotasi dbagi
menjadi tiga yaitu roll, pitch dan yaw.

Saat ini terdapat banyak jenis kapal. Jenis kapal dibedakan berdasarkan fungsinya.
Diantaranya yaitu:

2.2.1 Kapal Niaga dan Komersi

Yang termasuk sebagai kapal niaga dan komersil antara lain adalah kapal angkut,
kapal penumpang, kapal ikan dan kapal tunda. Kapal angkut biasa berupa kapal cargo,
kapal container, maupun semi kontainer (perpaduan antara kapal cargo dan kontainer),
kapal feri dan juga kapal tangker.
6

Kapal tunda adalah kapal kecil yang beroperasi di pelabuhan guna membantu
maneuver kapal-kapal besar yang akan bersandar maupun berlabuh di pelabuhan,
meskipun kecil kapal tunda memiliki daya dorong yang besar agar mampu mengarahkan
kapal-kapal yang akan bersandar.

Untuk kapal tangker, cargo dan kapal ikan kenyamanan tidak menjadi pertimbangan.
Berbeda halnya dengan kapal penumpang, kenyamanan dan kemewahan kadang
diperlukan demi memuaskan para penumpang. Lain dari itu kapal penumpang harus
memiliki kemampuan bertahan hidup pada situasi darurat.

2.2.2 Kapal perang

Kapal perang diklasifikasi menjadi beberapa tipe antara lain kapal tempur, patroli,
kapal pendukung. Ada juga kapal perang yang dibuat secara khusus seperti kapal induk
yang mengangkut pesawat dalam jumlah besar, helicopter, tank dan peralatan tempur
lainnya. Kapal lain yang dirancang secara khusus antara lain kapal peluncur peluru
kendali, kapal penghancur dan kapal selam. Hal yang penting diperhatikan dalam
mendesign kapal perang antara lain:

1. Lambung berbentuk ramping untuk memungkinkan berlari cepat.

2. Mesin pendorong, mempunyai power yang besar.

3. Sistem kelistrikan lengkap, otomatis maupun manual.

4. Komando (kemampuan menerima perintah atasan dan memberi perintah

ke bawahan).

5. Peralatan pengintai, sesuai dengan fungsinya.

6. Persenjataan, sesuai dengan fungsinya; patroli, atau untuk bertempur.

Kecepatan menjadi penting karena kapal perang harus mampu bersaing dalam
pengejaran maupun melepaskan diri dari musuh. Sedangkan maneuver diperlukan
dalam hal kontak senjata. Untuk itu sistem penggerak kapal harus memenuhi kebutuhan
ini.

2.2.3 Kapal kapal khusus


7

Kapal yang mempunyai tugas khusus, artinya bukan untuk pengangkutan, disebut
juga sesuai dengan tugas pekerjaan yang dilaksanakan. Berikut ini adalah jenis jenis
kapal khusus:

1. Kapal Keruk (dredger).

2. Kapal Penangkap Ikan

3. Kapal Pemadam Kebakaran

4. Kapal Peneliti

5. Kapal Rumah Sakit

2.3 Motor DC servo


Motor dc servo adalah sebuah motor DC dengan sistem umpan balik tertutup di mana
posisi rotor-nya akan diinformasikan kembali ke rangkaian kontrol yang ada di dalam motor
servo. Motor ini terdiri dari sebuah motor DC, serangkaian gear, potensiometer, dan
rangkaian kontrol. Potensiometer berfungsi untuk menentukan batas sudut dari putaran
servo. Sedangkan sudut dari sumbu motor servo diatur berdasarkan lebar pulsa yang dikirim
melalui kaki sinyal dari kabel motor servo. Motor DC servo digunakan sebagai aktuator
utama dalam menggerakkan Fin stabilizer. Servo mendapat sinyal dari mikrokontroler untuk
menentukan besar sudut yang digerakkan. Untuk menjalankan atau mengendalikan motor
servo berbeda dengan motor DC. Karena untuk mengedalikan motor servo perlu diberikan
sumber tegangan dan sinyal kontrol. Besarnya sumber tegangan tergantung dari spesifikasi
motor servo yang digunakan.
Tabel 2.1 spesifikasi servo

Dimensi 39.88 x 19.81 x 36.32mm


Berat 1.52oz (43g)
Range Tegangan 4.8V - 6.0V
Kecepatan Tanpa Beban (4.8V) 0.19sec/60°
Kecepatan Tanpa Beban (6.0V) 0.15sec/60°
Torsi (4.8V) 42 oz/in (3.0 kg/cm)
Torsi (6.0V) 51 oz/in (3.7 kg/cm)
Max Range Sinyal PWM (Standard) 553-2450μsec
Pulse Amplitude 3-5V
Arus (4.8V) 7.4mA
Arus (6.0V) 7.7mA
Arus – Tanpa Beban (4.8V) 160mA
Arus – Tanpa Beban (6V) 180mA
8

Tipe Motor Cored Metal Brush


Potentiometer Drive 4 Slider/Direct Drive

Gambar 2.3 Motor DC servo


Sumber: https://www.amainhobbies.com/hitec-hs322hd-standard-heavy-duty-servo-
hrc33322s/p18367
2.4 Gelombang air laut
Seperti benda padat, cairan juga bisa memiliki gerakan translasi, rotasi, dan osilasi.
Gerakan translasi air hadir saat arus sungai mengalir, gerak rotasi di pusaran air, dan gerakan
osilasi dalam distorsi bentuk yang melaju ke luar (Bhattacharyya.1978). Seperti distorsi
bentuk bergerak dari permukaan air dikenal sebagai gelombang air. Dalam kasus gelombang
sinusoidal, elevasi dapat didefinisikan sebagai gerakan harmonik sederhana dan
digambarkan secara analitis sebagai berikut:
𝜁 = 𝜁𝑎 sin 𝜔𝑤 𝑡 (2.1)
Atau lebih umumnya
𝜁 = 𝜁𝑎 sin(𝜔𝑤 𝑡 + 𝜀) (2.2)
Dimana 𝜁𝑎 = amplitude gelombang
𝜀 = sudut fasa yang menggeser kurva sepanjang sumbu t
𝜔𝑤 = frekuensi melingkar dari gelombang

t = ukuran waktu

Persamaan ini ditunjukkan secara grafis yaitu kurva sinus. Kami menganggap gelombang
sinusoidal pertama yang merupakan gelombang yang dapat diwakili oleh sebuah kurva sinus
atau kosinus. Persamaan kurva ini ditulis sebagai
𝜁 = 𝜁𝑎 sin 𝑘𝑥 (2.3)
Dimana
9

2𝜋
𝑘 = 𝐿 , diketahui sebagai nomor gelombang
𝑤

Jadi
2𝜋
𝜁 = 𝜁𝑎 sin 𝐿 𝑥 (2.4)
𝑤

Perlu diperhatikan bahwa, kurva yang digambarkan adalah bentuk yang stasioner dan tidak
bergerak maju seperti gelombang progresif dalam air.
Tanpa menempatkan batasan besarnya kedalaman air, h, relatif terhadap panjang
gelombang, gelombang sinusoidal telah dipelajari dan kecepatan gelombang (dikenal juga
sebagai fase kecepatan atau celeritas) telah ditemukan.
𝑔𝐿𝑤 2𝜋ℎ
𝑉𝑤 = tanh (2.5)
2𝜋 𝐿𝑤

Dimana Vw adalah kecepatan gelombang atau seleritas, Lw adalah panjang gelombang, dan
h adalah kedalaman air.
Jika kedalaman kedalaman air sangat jauh lebih kecil dari pada panjang gelombangnya
(h/Lw →0) maka,
2𝜋ℎ 2𝜋ℎ
tan ℎ → = 𝑘ℎ (2.6)
𝐿𝑤 𝐿𝑤

Subtitusi dengan persamaan 2.5 maka didapat


𝑉𝑤 = √𝑔ℎ (2.7)
Ini berarti bahwa di perairan dangkal semua gelombang bergerak dengan kecepatan yang
sama terlepas dari panjang gelombangnya. Di sisi lain, bila kedalaman air menjadi besar
dibandingkan dengan panjang gelombang, yaitu ketika h / Lw sangat besar, maka
𝑔𝐿𝑤
𝑉𝑤 = (2.8)
2𝜋

Persamaan 2.8 menunjukkan Tidak seperti gelombang air dangkal, gelombang air dalam
merambat pada kecepatan tergantung pada panjangnya. Seperti yang kita ketahui
sebelumnya, panjang gelombang diukur dari puncak ke puncak. Jika Tw adalah waktu yang
dibutuhkan untuk sebuah partikel pada puncak tertentu untuk mencapai puncak berikutnya,
maka
𝐿𝑤 = 𝑉𝑤 𝑇𝑤 (2.9)

Dimana Lw = panjang gelombang


Vw = kecepatan gelombang
Tw = Periode gelombang

Atau
10

2𝜋𝐿𝑤
𝑇𝑤 = √ (2.10)
𝑔

= 0,442 √𝐿𝑤 in fps unit

= 0,800 √𝐿𝑤 in cgs unit

Dari hubungan kecepatan, panjang, dan periode gelombang, persamaan gelombang


sinusoidal dapat dinyatakan sebagai
𝜁 = 𝜁𝑎 cos 𝑘 (𝑥 − 𝑉𝑤 𝑡) (2.11)
2𝜋 𝑔𝐿𝑤
= 𝜁𝑎 cos(𝑘𝑥 − 𝐿 √ 𝑡)
𝑤 2𝜋

= 𝜁𝑎 cos(𝑘𝑥 − 𝜔𝑤 𝑡)

2.5 Mikrokontroller 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
digunakan sebagai mikrokontroller utama sebagai komponen untuk menerima data dari
sensor gyroscope yang kemudian diolah dan diteruskan ke motor dc servo sebagai aktuator.

Berdasarkan data sheet arduino memiliki spesifikasi sebagai berikut:


Tabel 2.2 Spesifikasi Arduiono UNO
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50 mA
Clock Speed 16 MHz
SRAM 2 KB (ATmega328)
EEPROM (ATmega328)
Flash Memory 32 KB (ATmega328)
11

Gambar 2.4 Arduino Uno

Sumber: https://www.marineinsight.com/naval-architecture/roll-stabilization-systems/

2.6 Sensor MPU 6050

MPU 6050 adalah berupa sensor untuk menentukan orientasi gerak dengan bertumpu
pada roda atau cakram yang berotasi dengan cepat pada sumbu. MPU 6050 sensor bisa
mendeteksi gerakan sesuai gravitasi, MPU 6050 pada penelitian ini digunakan untuk
mengukur sumbu kemiringan kapal. Sebelum digunakan, sensor MPU 6050 terlebih dahulu
dilakukan proses kalibrasi dengan menggunakan bandul. Proses kalibrasi tersebut berfungsi
untuk memperoleh nilai faktor kalibrasi. MPU 6050 memiliki keluaran berupa kecepatan
sudut dari arah 3 sumbu yaitu: sumbu x yang nantinya akan menjadi sudut phi (kanan dan
kiri) dari sumbu y nantinya menjadi sudut theta (atas dan bawah), dan sumbu z nantinya
menjadi sudut psi (depan dan belakang).

Modul ini menggunakan IC InvenSense MPU-6050 yang merupakan komponen


elektronika pertama dan satu-satunya di dunia yang memadukan fungsi gyroscope dan
akselerometer dalam satu sirkit terpadu (IC / integrated circuit). Adapun spesifikasinya
berdasarkan datasheet yaitu:

Tabel 2.3 Spesifikasi sensor MPU 6050


VDD 2.375V-3.46V
VLOGIC 1.8V±5%
Ta 25°C
Full-Scale Range FS_SEL=0 ±250º/s
Full-Scale Range FS_SEL=1 ±500º/s
Full-Scale Range FS_SEL=2 ±1000º/s
12

Full-Scale Range FS_SEL=3 ±2000º/s


Acceleration range ± 2 ± 4 ± 8 ± 16 g
Gyroscope mechanical frequencies X-Axis 30-36 kHz
Gyroscope mechanical frequencies Y-Axis 27-33 kHz
Gyroscope mechanical frequencies Z-Axis 24-30 kHz
Dimensi modul 20.3mm x 15.6mm
Jarak antar pin header 2.54 mm
Chip built-in 16 bit AD converter 16 bits data output
Communication standard I2C

Gambar 2.5 Sensor MPU 6050

Sumber: https://www.robotistan.com/mpu6050-6-axis-acceleration-and-gyro-sensor-6-dof-
3-axis-accelerometer-and-gyros

2.7 Kontroler PID


Kontroler PID (dari singkatan bahasa Inggris: Proportional–Integral–
Derivativecontroller) merupakan kontroler mekanisme umpan balik yang biasanya dipakai
pada sistem kontrol industri. Sebuah kontroler PID secara kontinyu menghitung nilai
kesalahan sebagai beda antara setpoint yang diinginkan dan variabel proses terukur.
Konroler PID digunakan karena dapat mempercepat reaksi sebuah sistem mencapai set
point-nya, menghilangkan offset, menghasilkan perubahan awal yang besar dan
mengurangi overshoot, sehingga cocok digunakan pada fin stabilizer kapal yang
membututuhkan respon cepat. Sebagaimana akan disajikan kemudian, fungsi alih Gc(s) alat
kontrol PID adalah
1
𝐺𝑐 (𝑠) = 𝐾𝑝 (1 + 𝑇 𝑠 + 𝑇𝑑 𝑠) (2.12)
𝑖
13

Dengan Kp= penguatan proporsional


Ti = waktu integral
Td= waktu turunan

Jika e(t) adalah masukan ke alat kontrol PID, keluaran u(t) dari alat kontrol ini adalah

1 𝑡 𝑑𝑒(𝑡)
𝑢(𝑡) = 𝐾𝑝 [𝑒(𝑡) + 𝑇 ∫−∞ 𝑒(𝑡)𝑑𝑡 + 𝑇𝑑 ] (2.13)
𝑖 𝑑𝑡

Konstanta-konstanta Kp,Ti,Td adalah parameter parameter alat kontrol persamaan (6.1) juga
dapat dituliskan sebagai

𝐾𝑖
𝐺𝑐 𝑠 = 𝐾𝑝 + + 𝐾𝑑 𝑠
𝑠

Dengan Kp= penguatan proporsional


Ki = penguatan integral
Kd= penguatan turunan (derivative)

Dalam hal ini Kp,Ki,Kd menjadi parameter parameter alat kontrol. Proses pemilihan
parameter parameter alat kontrol agar menghasilkan spesifikasi kerja disebut penyepadanan
alat kontrol (controller tuning) (Ogata.1997).
BAB III
METODE PENELITIAN

Skripsi ini adalah perancangan sistem kontrol pada fin stabilizer kapal menggunakan
metode PID. Untuk menyelesaikan rumusan masalah dan merealisasikan tujuan dari skripsi
ini maka diperlukan langkah untuk menyelesaikan masalah tersebut. Adapun langkah
tersebut adalah:

1. Menentukan spesifikasi desain


2. Perancangan block diagram
3. Perancangan alat
4. Perancangan algoritma
5. Menentukan parameter PID yang optimal
6. Hasil uji perkomponen
3.1 Menentukan spesifikasi desain
1. Rangka dari kapal berbahan dasar kayu balsa dengan dimensi maksimum 43 cm x 15 cm
x 13 cm.
2. Mikrokontroler yang digunakan adalah Arduino Uno pabrikan Arduino.
3. Pemrograman mikrokontroler Arduino Uno ditulis dalam bahasa C dan menggunakan
Arduino IDE.
4. Aktuator yang digunakan adalah 2 unit motor DC servo sebagai penggerak fin kapal.
5. Sensor yang digunakan sebagai umpan balik sistem kapal adalah sensor MPU 6050.
6. Fin digunakan untuk mengatur stabilizer rolling kapal, berbahan alumunium.
3.2 Perancangan Blok Diagram Sistem

Berdasarkan spesifikasi desain dan spesifikasi alat yang telah ditentukan sebelumnya,
maka dapat dibuat blok diagram sistem yang dapat menjabarkan sistem secara garis besar.
Blok diagram sistem dapat dilihat pada Gambar 3.1.

14
15

Gambar 3.1 Blok diagram kapal


Penjelasan Blok Diagram :

1. Setpoint adalah sudut yang diinginkan, dengan nilai 0 derajat

2. Kontroler yang digunakan yaitu Mikrokontroler berupa Arduino Uno.

3. Plant adalah objek fisik yang di kontrol dalam sistem berupa Kapal dan Fin.

4. Aktuator atau penggerak Plant berupa motor DC servo.

5. Sensor yang digunakan untuk kemiringan kapal yaitu sensor MPU6050.

Pada blok diagram gambar 3.1 terlihat blok diagram kendali yang digunakan dalam
penelitian ini dimana pemberian input berupa error dari set point dikurangi dengan sudut
yang dibaca oleh sensor MPU6050. Error tersebut kemudian menjadi input dari perhitungan
PID, yang mana output perhitungan PID berupa nilai tegangan dan PWM yang akan menjadi
nilai manipulasi untuk gerak motor DC servo sebagai aktuator utama alat untuk
menyeimbangkan kapal. Kemudian sensor membaca sudut dari kemiringan kapal setelah
servo bergerak sebelumnya hal ini menjadi nilai feedback dari sistem dimana PID akan
menghitung lagi nilai hingga error yang didapat menjadi 0 sesuai dengan setpoint.

3.3 Perancangan dan Pembuatan Perangkat Keras (Hardware)


Sistem mekanika yang baik, merupakan fondasi yang mendukung navigasi kapal
menjadi lebih baik pula. Oleh sebab itu perancangan mekanika kapal harus proporsional
dengan berat, panjang, lebar, serta tinggi dari kapal. Agar beban kapal tidak terlalu berat,
maka rangka kapal dibuat dari kayu balsa.
3.3.1 Perancangan pembuatan kapal dan Fin Stabilizer
Kapal dan Fin Stabilizer dirancang berdasarkan desain sendiri, keduanya
menggunakan kayu balsa dengan spesifikasi ukuran sebagai berikut:
16

1. Panjang Kapal: 43 cm
2. Lebar Kapal: 15 cm
3. Tinggi Kapal: 13 cm
4. Lebar Fin: 3 cm
5. Panjang Fin: 5 cm
6. Tinggi Fin: 0,5 cm
3.3.2 Perancangan Pembuatan Akuarium
Pada prosedur disini akan dibahas langkah-langkah yang dilakukan dalam
pembuatan Miniatur Pembangkit Gelombang Laut (Ombak). Wadah yang
digunakan yaitu akuarium sebagai miniatur gelombang air laut, dimana akuarium
ini dibuat sendiri dan spesifikasinya ditentukan sendiri, diantaranya:
1. Bahan yang digunakan adalah kaca.
2. Ukuran akuarium Panjang 55 cm, lebar 40 cm, tinggi 30 cm
3.4 Perancangan algoritma
Perancangan perangkat lunak (software) dibutuhkan agar mikrokontroler dapat
mengendalikan sistem sesuai dengan yang diharapkan. Desain algoritma yang akan
diterapkan ke dalam mikrokontroler Arduino UNO.
Proses diawali dengan pembacaan dari sensor MPU6050 untuk mengetahui sudut
kemiringan kapal, kemudian data berupa sudut dikirimkan ke mikrokontroller yang
kemudian diolah agar disesuaikan dengan aktuator yang nantinya akan mengubah sudut
kemiringan dari kapal agar bisa menjadi seimbang.
3.4.1 Flowchart keseluruhan

Gambar 3.2 merupakan flowchart sistem secara keseluruhan yang juga berkaitan
dengan flowchart program pada software Arduino.
17

Start
start

Baca SP
Init error,
Kp,Ki,Kd
dan sudut

Hitung
Hitung error
PID

FIN Program
bergerak PID

Pengiriman
Selesai
data

Gambar 3.2 Flowchart keseluruhan alat dan perhitungan PID

Flowchart gambar 3.2 merupakan alur kerja alat secara keseluruhan dimana pembacaan
setpoint dan feedback sudut akan diteruskan sebagai input dari PID. Kemudian input tersebut
dihitung pada program PID dengan Kp,Ki,dan Kd yang telah ditentukan terlebih dahulu dan
hasil dari perhitungan PID tersebut akan menggerakkan fin stabilizer.

3.4.2 Flowchart program

Flowchart program merupakan alur kerja dari program yang digunakan pada
penelitian ini yang ditunjukkan pada gambar 3.3.
18

start

kiri Baca sensor, kanan


miring kapal

Init SP, error,


Init SP, error,
Kp,Ki,Kd
Kp,Ki,Kd

Hitung Hitung
PID PID

Fin kiri ke atas, Fin kanan ke


fin kanan ke atas, fin kiri ke
bawah bawah

Gambar 3.3 Flowchart program

Dapat dilihat pada flowchart gambar 3.3 program berjalan diawali dengan
pembacaan sensor, ketika keadaan kapal miring kekanan maka fin bagian kanan
bergerak ke atas dan fin kiri bergerak kebawah begitu juga sebaliknya. Sensor akan
mendeteksi berapa derajat kemiringan kapal yang kemudian dikurangi dengan setpoint
yang nantinya menjadi input dari PID. PID akan menghitung input error beserta nilai
Kp,Ki,Kd yang sebelumnya sudah ditentukan terlebih dahulu. Hasil dari perhitungan
PID akan menentukan berapa besar gerak yang diperlukan fin stabilizer untuk bergerak
guna menyeimbangkan kapal.

3.5 Menentukan parameter dari PID


Karakteristik pengontrol PID sangat dipengaruhi oleh kontribusi besar dari ketiga
parameter P, I dan D. Penyetelan konstanta Kp, Ki, dan Kd akan mengakibatkan penonjolan
sifat dari masing-masing elemen. Oleh karena itu dibutuhkan suatu penelitian agar parameter
tersebut optimal atau sesuai dengan sinyal output dari kebutuhan dari fin stabilizer. Untuk
menentukan parameter Kp, Ki, dan Kd tersebut skripsi ini menggunakan pendekatan hand
tuning.
Menurut Smith (1979), untuk melakukan hand tuning prosedur yang dilakukan adalah
sebagai berikut:
1. Melepaskan kontroler integral dan diferensial dengan memberikan nilai Ki=0 dan
Kd=0
19

2. Mengatur nilai Kp hingga didapatkan respon yang diinginkan, dengan mengabaikan


offset dari setpoint.
3. Dengan terus menaikkan nilai Kp dari Kd dinaikkan untuk mengurangi overshoot
yang terjadi.
4. Naikkan nilai Ki untuk mengurangi offset.

Dengan menggunakan metode hand tuning nilai parameter PID perlu diubah ubah secara
trial and error agar respon yang diperoleh sesuai dengan yang diinginkan. Proses tuning PID
ini dilakukan dengan cara menaikkan nilai Kp hingga didapatkan respon sistem yang cepat.

3.5.1 Pengaturan nilai Kp

Untuk nilai Kp= 20, Ki=0, dan Kd=0 diperoleh grafik seperti pada gambar 3.4

Gambar 3.4 Grafik respon untuk Kp=20


562.15−553
Grafik gambar 3.4 memiliki 𝑀𝑝 = × 100% = 1.654% dan ts sebesar 1.5 detik
553

dengan error steady 3 derajat.

Untuk nilai Kp=25, Ki=0, dan Kd=0 diperoleh grafik sperti pada gambar 3.5
20

Gambar 3.5 Grafik Respon untuk Kp=25


562.15−553
Grafik gambar 3.5 memiliki 𝑀𝑝 = × 100% = 1.654% dan ts sebesar 1.3 detik
553

dengan error steady 2 derajat.

Untuk nilai Kp=30, Ki=0,dan Kd=0 diperoleh grafik sperti pada gambar 3.6

Gambar 3.6 Grafik respon untuk Kp=30


580.45−553
Grafik gambar 3.6 memiliki 𝑀𝑝 = × 100% = 4.963% dan ts sebesar 1.3 detik
553

dengan error steady 3 derajat.


21

Pada tuning ini dipilih Kp sebesar 30 karena memiliki respon yang paling cepat serta
sedangkan pada tuning nilai Kp diatas 30 menimbulkan error semakin besar, serta nilai
Kp=30 memiliki waktu steady (ts) yang relative cepat yaitu 1.3 detik.

3.5.2 Pengaturan nilai Kp,Kd

Untuk nilai Kp=30, Ki=0, dan Kd=1 diperoleh grafik sperti pada gambar 3.7

Gambar 3.7 Grafik respon untuk Kp=30, Kd=1


626.5−553
Grafik gambar 3.7 memiliki 𝑀𝑝 = × 100% = 13.23% dan ts sebesar 3.78 detik
553

dengan error steady 1.5 derajat.

Untuk nilai Kp=30, Ki=0, dan Kd=5 diperoleh grafik sperti pada gambar 3.8

Gambar 3.8 Grafik respon untuk Kp=30, Kd=5


22

607.9−553
Grafik gambar 3.8 memiliki 𝑀𝑝 = × 100% = 9.92% dan ts sebesar 4 detik
553

dengan error steady 0.3 derajat.

Untuk nilai Kp=30, Ki=0,dan Kd=10 diperoleh grafik sperti pada gambar 3.9

Gambar 3.9 Grafik respon untuk Kp=30, Kd=10


589.6−553
Grafik gambar 3.9 memiliki 𝑀𝑝 = × 100% = 6.61% dan memiliki ts sebesar 3
553

detik dengan error steady 0 derajat.

Pada tuning ini nilai Kd= 10 dipilih karena nilai lebih besar dari 10 maka respon akan
mengalami noise atau gangguan sehingga membuat respon gerak dari fin stabilizer
terganggu/ tersendat, sedangkan pada sistem ini diperlukan gerak fin yang lancar agar dapat
menyeimbangkan dengan maksimal. Untuk nilai Kd yang lebih kecil dari 1 didapat respon
yang kurang dapat meredam overshoot. Nilai Kd=10 dipilih juga karena memiliki ts yang
paling cepat yaitu 3 detik.

3.5.3 Pengaturan nilai Kp,Kd,Ki

Untuk nilai Kp=30, Ki=0.02,dan Kd=10 diperoleh grafik sperti pada gambar 3.10
23

Gambar 3.10. Grafik respon untuk Kp=30, Ki=0.02, Kd=10


594.175−553
Grafik gambar 3.10 memiliki 𝑀𝑝 = × 100% = 7.44% dan memiliki ts sebesar
553

2.6 detik dengan error steady 0 derajat.

Untuk nilai Kp=30, Ki=0.08, dan Kd=10 diperoleh grafik sperti pada gambar 3.11.

Gambar 3.11 Grafik respon untuk Kp=30, Ki=0.08, dan Kd=10


598.75−553
Grafik gambar 3.11 memiliki 𝑀𝑝 = × 100% = 8.273% dan memiliki ts sebesar
553

4 detik dengan error steady 0 derajat.

Untuk nilai Kp=30, Ki=0.1, dan Kd=10 diperoleh grafik sperti pada gambar 3.12
24

Gambar 3.12 grafik respon untuk Kp=30, Ki=0.1, dan Kd=10


607.9−553
Grafik gambar 3.12 memiliki 𝑀𝑝 = 553
× 100% = 9.92% dan memiliki ts sebesar

3.4 detik dengan error steady 0 derajat.

Pada hasil tuning kontroler Kp,Ki,Kd ini dipilih nilai Kp=30, Ki=0.02,dan Kd=10
karena pada nilai kontroler tersebut memiliki respon yang paling baik karena dapat meredam
overshoot hingga sekecil mungkin serta memiliki error steady state yang kecil. Pada tuning
ini dipilih nilai Ki sebesar 0.02 karena memiliki overshoot yang kecil dibandingkan nilai
yang lain,serta tidak mempunyai error steady state. Nilai tersebut juga memiliki respon yang
paling cepat karena semakin besar nilai Ki maka respon akan semakin lambat. Pada dasarnya
semakin besar nilai Ki akan memperbaiki nilai error steady yang ada, akan tetapi pada
skripsi ini dibutuhkan respon yang cepat pada fin agar dapat menyeimbangkan kapal,
dikarenakan pada nilai Ki yang lebih besar dari 0.1 akan memperlambat respon gerak dari
fin stabilizer maka semakin kecil nilai Ki maka respon dari fin akan semakin cepat
pula.sedangkan untuk nilai yang kurang dari 0.02 sistem tersebut kurang bisa untuk
memperbaiki error steady state yang ada.

3.6 Pengujian per komponen


Uji per komponen bertujuan untuk mengetahui keandalan dari masing masing
komponen alat yang ada sehingga dapat menghasilkan output sistem yang maksimal.

3.6.1 Pengujian karakterisasi sensor MPU 6050


Pengujian sensor MPU 6050 dilakukan untuk mengetahui sudut kemiringan kapal
yang terbaca oleh alat telah sesuai dengan yang diinginkan. Pengujian sensor dilakukan
25

dengan membaca hasil pembacaan sudut yang dilakukan MPU6050 dengan tegangan
yang diukur dengan menggunakan voltmeter yang kemudian didapat nilai Gain Steady
state. Hasil pengujian ditunjukkan pada table 3.1.

Tabel 3.1 Hasil pengujian karakterisasi sensor MPU 6050


Sudut Tegangan
0 3.098
10 3.0995
20 3.101
30 3.1025
40 3.104
50 3.1055
60 3.107
70 3.1085
80 3.11
90 3.1115
100 3.113
110 3.1145
120 3.116
130 3.1175
140 3.119
150 3.1205
160 3.122
170 3.1235
180 3.125

Dari tabel 3.1 diperoleh grafik pembacaan antara sudut dengan sudut tegangan
seperti pada gambar 3.13

Gambar 3.13 Grafik pengujian sensor MPU 6050


26

Dari hasil grafik diatas didapat persamaan sebagai berikut:


𝑥 − 3.126 𝑦 − 180
=
3.098 − 3.126 0 − 180
𝑥 − 3.126 𝑦 − 180
=
−0.028 −180
−180𝑥 + 562.68 = −0.028𝑦 + 5.04
−180𝑥 = −0.028𝑦 − 557.64
180𝑥 = 0.028𝑦 − 557.64
𝑥 = 0.00015𝑦 − 3.098
Gain steady state= 0.00015
3.6.2 Pengujian karakterisasi motor dc Servo

Pengujian motor dc Servo ini dilakukan untuk mengetahui output sudut motor dc
servo yang dihasilkan, dengan masukannya berupa pulse sehingga dapat diketahui
sudutnya yang diukur dengan busur. Berdasarkan datasheet dari motor dc servo HITEC
HS-322 pulse yang dibutuhkan untuk menggerakkan servo yaitu 533-2200 antara rentang
sudut 0-180 dengan begitu didapat untuk menggerakkan sudut sebesar 1 derajat
membutuhkan pertambahan pulsa sebesar 9.15. Berikut tabel hasil pengujian motor DC
servo bagian kanan ditunjukkan pada tabel 3.2.
Tabel 3.2 Hasil pengujian karakterisasi motor DC servo kanan
No pulse Sudut Sudut Error
servo nyata
1 553 0 0 0
2 644.5 10 10 0
3 736 20 20 0
4 827.5 30 30 0
5 919 40 40 0
6 1010.5 50 50 0
7 1102 60 60 0
8 1193.5 70 70 0
9 1285 80 80 0
10 1376.5 90 90 0
11 1468 100 100 0
12 1559.5 110 112 2
13 1651 120 121 1
14 1742.5 130 130 0
15 1834 140 141 1
16 1925.5 150 152 2
17 2017 160 162 2
18 2108.5 170 170 0
19 2200 180 180 0
27

Dari tabel 3.2 diperoleh grafik hubungan antara sudut (derajat) dengan pulse disertai
dengan perbandingan antara sudut nyata dan sudut servo seperti pada gambar 3.14.

Gambar 3.14 Grafik karakteristik pengujian motor DC servo kanan

Berikut tabel hasil pengujian motor DC servo bagian kiri yang ditunjukkan pada
tabel 3.3.

Tabel 3.3 Hasil pengujian karakterisasi motor DC servo kiri


No pulse Sudut Sudut Error
servo nyata
1 553 0 0 0
2 644.5 10 10 0
3 736 20 20 0
4 827.5 30 30 0
5 919 40 40 0
6 1010.5 50 50 0
7 1102 60 60 0
8 1193.5 70 70 0
9 1285 80 80 0
10 1376.5 90 90 0
11 1468 100 100 0
12 1559.5 110 110 0
13 1651 120 121 1
14 1742.5 130 130 0
15 1834 140 140 0
16 1925.5 150 150 0
17 2017 160 160 0
18 2108.5 170 170 0
19 2200 180 180 0
28

Dari tabel 3.3 diperoleh grafik hubungan antara sudut (derajat) dengan pulse disertai
dengan perbandingan antara sudut nyata dan sudut servo seperti pada gambar 3.15.

Gambar 3.15 Grafik karakteristik pengujian motor DC servo kiri

Dari pengujian karakteristik dari kedua servo berdasarkan tabel 3.2 dan tabel 3.3
dapat diambil kesimpulan bahwa servo tersebut identik dan hampir sama antara kanan dan
kiri, meskipun dari pengujian servo kiri lebih baik dari kanan karena servo kiri memiliki
error yang kecil.
BAB IV
HASIL DAN PEMBAHASAN

Hasil dan pembahasan dilakukan dengan melakukan pengujian sistem secara


menyeluruh. Pengujian bertujuan untuk menguji apakah sistem hasil perancangan sudah
sesuai dengan spesifikasi desain yang diinginkan serta untuk mengetahui hasil responnya.
Pengujian ini meliputi pengujian kondisi ideal (tanpa gangguan) dan pengujian dengan
menambahkan gangguan, dimana pada masing masing pengujian ini akan dilihat bagaimana
respon sistem menyeimbangkan kapal dengan error berupa kemiringan.

Pengujian sistem secara keseluruhan dilakukan untuk mengetahui kerja dari perangkat
keras dan perangkat lunak serta respon aktuator terhadap kemiringan kapal dalam
menyeimbangkannya pada kondisi ideal. Hal ini dilakukan dengan menetapkan setpoint 0
derajat atau dalam keadaan tegak, kemudian error didapat dengan pembacaan kemiringan
sensor MPU 6050 sebagai input dari kontroler PID.

4.1 Pengujian kondisi ideal

Pengujian ini dilakukan dengan mengamati kondisi kapal yang menggunakan kontroller
dengan kondisi awal kapal bergerak dan tanpa diberi gangguan berupa ombak serta
menggunakan gain Kp=30,Ki=0.02,Kd=10. Kemudian kapal diamati waktu untuk mencapai
keadaan steady. Kapal digerakkan kearah kiri agar kapal dapat melakukan gerakan rolling.
Pada kondisi ideal ini keadaan permukaan air tenang dan tidak bergelombang. Berikut hasil
pengujian ditunjukkan pada gambar 4.1

Gambar 4.1 Grafik pengujian kapal pada kondisi ideal


29
30

594.175−553
Pada pengujian ini didapat 𝑀𝑝 = × 100% = 7.44% dan memiliki ts sebesar 2.6
553

detik. Dapat dilihat pada grafik diatas kapal dapat menyeimbangkan kembali setelah
diimiringkan terlebih dahulu selama kurang lebih 2.6 detik untuk mencapai keadaan steady/
seimbang, dengan error steady sekitar 0 derajat.
4.2 Pengujian dengan gangguan

Pengujian sistem secara keseluruhan dengan menambahkan gangguan bertujuan untuk


mengetahui output dari sistem, respon dari sistem serta bagaimana fin dapat merespon
kemiringan dan menyeimbangkan kapal yang diberi gangguan berupa ombak. Hal ini
dilakukan dengan menetapkan kapal dalam kondisi awal diam serta menetapkan setpoint
sebesar 0 derajat, kemudian error didapat dengan pembacaan kemiringan sensor MPU 6050
sebagai input dari kontroler PID.

Pada pengujian ini kapal diberi gangguan berupa ombak dan kemudian diamati waktu
yang dibutuhkan agar mencapai keadaan steady kembali. Pada pengujian ini ombak
diberikan dengan keadaan acak dengan pengujian 3 kali serta menggunakan gain
Kp=30,Ki=0.02, dan Kd=10.

4.2.1 Pengujian pertama

Pada pengujian ini dilakukan dengan mengamati kondisi kapal ketika


menggunakan kontroler yang kemudian kapal akan diberi gangguan ombak secara
acak, sehingga menyebabkan kapal melakukan gerakan rolling. Ketika kemiringan
ini terjadi kontroler akan berusaha menyeimbangkan kapal kembali ke keadaan
steady, yang kemudian akan diamati waktu yang dibutuhkan kapal untuk mencapai
keadaan steady sesuai dengan set point. Pada pengujian ini ombak diberikan dengan
keadaan acak. Berikut hasil hasil dari pengujian pertama ditunjukkan pada gambar
4.2.
31

Gambar 4.2 Grafik pengujian dengan gangguan pertama


598.75−553
Pada pengujian pertama ini didapat 𝑀𝑝 = 553
× 100% = 8.27% dan

memiliki ts sebesar 3.87 detik, dengan error steady 0.88 derajat.

4.2.2 Pengujian kedua

Pengujian ini dilakukan sama dengan pengujian sebelumnya yaitu kapal diberi
gangguan ombak secara acak. Kapal akan didiamkan dalam kondisi awal
dimiringkan terlebih dahulu yang kemudian diberi gangguan berupa ombak atau
gelombang air sehingga menyebabkan kapal melakukan gerakan rolling. Kemudian
kapal akan diamati waktu yang dibutuhkan untuk mencapai keadaan steady. Berikut
hasil hasil dari pengujian pertama ditunjukkan pada gambar 4.3.

Gambar 4.3 Grafik pengujian dengan gangguan kedua


32

589.6−553
Pada pengujian kedua ini didapat 𝑀𝑝 = × 100% = 6.61% dan memiliki
553

ts sebesar 4.2 detik, dengan error steady 1.47 derajat.

4.2.3 Pengujian ketiga

Pada pengujian ketiga perlakuan yang dilakukan kepada kapal sama seperti
sebelumnya, kapal diberikan gangguan gelombang air secara acak. Kapal akan
didiamkan dalam kondisi awal dimiringkan terlebih dahulu yang kemudian diberi
gangguan berupa ombak atau gelombang air sehingga menyebabkan kapal
melakukan gerakan rolling. Kemudian kapal akan diamati waktu yang dibutuhkan
untuk mencapai keadaan steady. Berikut hasil hasil dari pengujian pertama
ditunjukkan pada gambar 4.4.

Gambar 4.4 Grafik pengujian dengan gangguan ketiga


617.05−553
Pada pengujian ketiga ini didapat 𝑀𝑝 = × 100% = 11.58% dan
553

memiliki ts sebesar 3 detik, dengan error steady 0.2 derajat.

Dari ketiga pengujian dengan menggunakan gangguan berupa gelombang air acak dapat
dilihat kapal mempunyai waktu steady rata rata 3.69 detik, dengan rata rata error steady
sebesar 0.85 derajat dan rata rata overshoot sebesar 8.82%.
BAB V
PENUTUP

5.1 Kesimpulan

Dari perancangan, pengujian dan pengamatan yang telah dilakukan dapat diambil
kesimpulan sebagai berikut:

1. Dari respon sistem yang diperoleh dari pengujian dengan menggunakan metode
Hand tuning, parameter kontroler PID didapat dengan nilai Kp=30, Ki=0.02, dan
Kd=10.
2. Pada pengujian tanpa gangguan dengan menggunakan kontroler PID didapat nilai
overshoot sebesar 7.44%, memiliki ts sebesar 2.6 detik, dan dengan error steady 0
derajat. Sedangkan pada pengujian dengan gangguan gelombang air acak dengan
kontroler PID didapat waktu steady rata rata 3.69 detik, dengan rata rata error steady
sebesar 0.85 derajat dan rata rata overshoot sebesar 8.82%.
3. Fin stabilizer pada skripsi ini telah berhasil dibuat dengan menggunakan sensor
MPU6050 dan motor DC servo hitec hs322. Fin stabilizer dapat menyeimbangkan
kapal meski diganggu menggunakan kontroler PID. Respon kapal juga sesuai dengan
yang diinginkan meskipun masih ada overshoot, tetapi waktu yang dibutuhkan fin
untuk menyeimbangkan kapal cukup singkat yaitu sekitar 3.69 detik.
5.2 Saran

Pada perancangan dan pembuatan alat ini masih terdapat kelemahan, untuk memperbaiki
kinerja alat dan pengembangan lebih lanjut disarankan beberapa hal sebagai berikut:

1. Disarankan pada saat pengambilan data menggunakan nirkabel agar tidak


mengganggu fin saat menyetabilkan kapal
2. Skripsi ini masih dapat dikembangkan dengan menambahkan motor penggerak
kapal, dengan mengamati penyeimbangan kapal saat keadaan bergerak.

33
34

DAFTAR PUSTAKA

Arduino Uno. (2018, Maret 6). Retrieved from farnell:


https://www.farnell.com/datasheets/1682209.pdf
Bhattacharyya, R. (1972). Dynamic of Marine Vehicle. New York: John Willey and Son.
Fossen, T. (2011). Handbook of Marine Craft Hydrodynamics and Motion Control. New York:
John Willey and Son.
Invensense. (2018, Maret 5). Retrieved from
https://store.invensense.com/datasheets/invensense/MPU-6050_DataSheet_V3%204.pdf
Johansyah, F. (2011). Kontrol Automatis pada Fin Stabilizer Kapal Perang Tipe FPB-57 dengan
Berbasiskan Mikrokontroller MC68HC11F1. Electrical Engineering Diponegoro
University, Semarang.
Joko Susilo, A. S. (2013). Simulasi penggunaan Fin Undership terhadap tahanan dan gaya dorong
kapal dengan metode analisa CFD. Jurnal Teknik POMITS Vol. 3, No. 2, G-174 - G-179.
Kartika, T. E. (2010). Sistem Pengendalian Fin Stabilizer Pada Fast Patrol Boat Menggunakan
Logika Fuzzy. Fakultas Sains dan Teknologi Universitas Airlangga, Surabaya.
ogata, k. (1997). Teknik Kontrol Automatik. Jakarta: Erlangga.
Sumaryanto. (2013). Konsep Dasar Kapal. Jakarta: Kementrian Pendidikan dan Kebudayaan.
Vibro Yulian Dontiawan, A. S. (2013). Perancangan sistem kendali stabilitas rolling kapal pada
kapal perang kawal rudal kelas sigma. Jurnal Teknik POMITS.
35

LAMPIRAN 1
Foto alat
36
37

LAMPIRAN 2
Listing program dan data
38

Listing program utama


#include <Wire.h>
#include "Kalman.h"
#include <Servo.h>
#include <PID_v1.h>

#define RESTRICT_PITCH // Comment out to restrict roll to ±90deg instead - please read:
http://www.freescale.com/files/sensors/doc/app_note/AN3461.pdf
#define RESTRICT_YAW

float PWMOutput;
int error;
float PID, pwmLeft, pwmRight, previous_error;
float elapsedTime, time, timePrev;
float rad_to_deg = 180/3.141592654;
float desired_angle = 0;//I am setting it to move through 100 degrees
float pid_p=0;
float pid_i=0;
float pid_d=0;
float changeError = 0;
float totalError = 0;
float pidTerm = 0;

double kp=30;//3.55 600


double ki=0.02;//0.003 0.23
double kd=10;//2.05 0.02875

Kalman kalmanX; // Create the Kalman instances


Kalman kalmanY;
Kalman kalmanZ;
Servo servo1;
Servo servo2;

/* IMU Data */
double accX, accY, accZ;
double gyroX, gyroY, gyroZ;
double magX, magY, magZ;
double yaw;
int16_t tempRaw;

double gyroXangle, gyroYangle, gyroZangle; // Angle calculate using the gyro only
double compAngleX, compAngleY, compAngleZ; // Calculated angle using a
complementary filter
double kalAngleX, kalAngleY, kalAngleZ; // Calculated angle using a Kalman filter

uint32_t timer;
39

uint8_t i2cData[14]; // Buffer for I2C data

// TODO: Make calibration routine

void setup() {
Serial.begin(115200);
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
servo1.attach(3);
servo2.attach(5);

TWBR = ((F_CPU / 400000L) - 16) / 2; // Set I2C frequency to 400kHz

i2cData[0] = 7; // Set the sample rate to 1000Hz - 8kHz/(7+1) = 1000Hz


i2cData[1] = 0x00; // Disable FSYNC and set 260 Hz Acc filtering, 256 Hz Gyro filtering,
8 KHz sampling
i2cData[2] = 0x00; // Set Gyro Full Scale Range to ±250deg/s
i2cData[3] = 0x00; // Set Accelerometer Full Scale Range to ±2g
while (i2cWrite(0x19, i2cData, 4, false)); // Write to all four registers at once
while (i2cWrite(0x6B, 0x01, true)); // PLL with X axis gyroscope reference and disable
sleep mode

while (i2cRead(0x75, i2cData, 1));


if (i2cData[0] != 0x68) { // Read "WHO_AM_I" register
Serial.print(F("Error reading sensor"));
while (1);
}

while (i2cWrite(0x02, 0x00, true)); // Configure device for continuous mode


i2cWrite(0x00, 0x11, true);
delay(100); // Wait for sensor to get ready

i2cWrite(0x00, 0x10, true); // Back to normal

delay(100); // Wait for sensor to stabilize

/* Set kalman and gyro starting angle */


while (i2cRead(0x3B, i2cData, 14));
accX = (i2cData[0] << 8) | i2cData[1];
accY = (i2cData[2] << 8) | i2cData[3];
accZ = (i2cData[4] << 8) | i2cData[5];
tempRaw = (i2cData[6] << 8) | i2cData[7];
gyroX = -(i2cData[8] << 8) | i2cData[9];
40

gyroY = (i2cData[10] << 8) | i2cData[11];


gyroZ = -(i2cData[12] << 8) | i2cData[13];

// Source: http://www.freescale.com/files/sensors/doc/app_note/AN3461.pdf eq. 25 and eq.


26
// atan2 outputs the value of -π to π (radians) - see http://en.wikipedia.org/wiki/Atan2
// It is then converted from radians to degrees
#ifdef RESTRICT_PITCH // Eq. 25 and 26
double roll = atan2(accY, accZ) * RAD_TO_DEG;
double pitch = atan(-accX / sqrt(accY * accY + accZ * accZ)) * RAD_TO_DEG;
#else // Eq. 28 and 29
double roll = atan(accY / sqrt(accX * accX + accZ * accZ)) * RAD_TO_DEG;
double pitch = atan2(-accX, accZ) * RAD_TO_DEG;
#endif
/*
magX *= -1; // Invert axis - this it done here, as it should be done after the calibration
magZ *= -1;

magX *= magGain[0];
magY *= magGain[1];
magZ *= magGain[2];

magX -= magOffset[0];
magY -= magOffset[1];
magZ -= magOffset[2];

double rollAngle = roll * DEG_TO_RAD;


double pitchAngle = pitch * DEG_TO_RAD;

double Bfy = magZ * sin(rollAngle) - magY * cos(rollAngle);


double Bfx = magX * cos(pitchAngle) + magY * sin(pitchAngle) * sin(rollAngle) + magZ
* sin(pitchAngle) * cos(rollAngle);
yaw = atan2(-Bfy, Bfx) * RAD_TO_DEG;

yaw *= -1;*/

kalmanX.setAngle(roll); // Set starting angle


kalmanY.setAngle(pitch);
//kalmanZ.setAngle(yaw);
gyroXangle = roll;
gyroYangle = pitch;
//gyroZangle = yaw;
compAngleX = roll;
compAngleY = pitch;
//compAngleZ = yaw;

time = millis();

} //end of void setup


41

void loop() {

/* Update all the values */


while (i2cRead(0x3B, i2cData, 14));
accX = ((i2cData[0] << 8) | i2cData[1]);
accY = ((i2cData[2] << 8) | i2cData[3]);
accZ = ((i2cData[4] << 8) | i2cData[5]);
tempRaw = (i2cData[6] << 8) | i2cData[7];
gyroX = (i2cData[8] << 8) | i2cData[9];
gyroY = (i2cData[10] << 8) | i2cData[11];
gyroZ = (i2cData[12] << 8) | i2cData[13];

double dt = (double)(micros() - timer) / 1000000; // Calculate delta time


timer = micros();

// Source: http://www.freescale.com/files/sensors/doc/app_note/AN3461.pdf eq. 25 and eq.


26
// atan2 outputs the value of -π to π (radians) - see http://en.wikipedia.org/wiki/Atan2
// It is then converted from radians to degrees
#ifdef RESTRICT_PITCH // Eq. 25 and 26
double roll = atan2(accY, accZ) * RAD_TO_DEG;
double pitch = atan(-accX / sqrt(accY * accY + accZ * accZ)) * RAD_TO_DEG;
#else // Eq. 28 and 29
double roll = atan(accY / sqrt(accX * accX + accZ * accZ)) * RAD_TO_DEG;
double pitch = atan2(-accX, accZ) * RAD_TO_DEG;
#endif

double gyroXrate = gyroX / 131.0; // Convert to deg/s


double gyroYrate = gyroY / 131.0; // Convert to deg/s
double gyroZrate = gyroZ / 131.0; // Convert to deg/s

#ifdef RESTRICT_PITCH
// This fixes the transition problem when the accelerometer angle jumps between -180 and
180 degrees
if ((roll < -90 && kalAngleX > 90) || (roll > 90 && kalAngleX < -90)) {
kalmanX.setAngle(roll);
compAngleX = roll;
kalAngleX = roll;
gyroXangle = roll;
} else
kalAngleX = kalmanX.getAngle(roll, gyroXrate, dt); // Calculate the angle using a
Kalman filter

if (abs(kalAngleX) > 90)


gyroYrate = -gyroYrate; // Invert rate, so it fits the restriced accelerometer reading
42

kalAngleY = kalmanY.getAngle(pitch, gyroYrate, dt);


#else
// This fixes the transition problem when the accelerometer angle jumps between -180 and
180 degrees
if ((pitch < -90 && kalAngleY > 90) || (pitch > 90 && kalAngleY < -90)) {
kalmanY.setAngle(pitch);
compAngleY = pitch;
kalAngleY = pitch;
gyroYangle = pitch;
} else
kalAngleY = kalmanY.getAngle(pitch, gyroYrate, dt); // Calculate the angle using a
Kalman filter

if (abs(kalAngleY) > 90)


gyroXrate = -gyroXrate; // Invert rate, so it fits the restriced accelerometer reading
kalAngleX = kalmanX.getAngle(roll, gyroXrate, dt); // Calculate the angle using a Kalman
filter
#endif

double rollAngle = kalAngleX; //* DEG_TO_RAD;


double pitchAngle = kalAngleY; //* DEG_TO_RAD;

double Bfy = magZ * sin(rollAngle) - magY * cos(rollAngle);


double Bfx = magX * cos(pitchAngle) + magY * sin(pitchAngle) * sin(rollAngle) + magZ
* sin(pitchAngle) * cos(rollAngle);
yaw = atan2(-Bfy, Bfx) * RAD_TO_DEG;

yaw *= -1;

// This fixes the transition problem when the yaw angle jumps between -180 and 180
degrees
if ((yaw < -90 && kalAngleZ > 90) || (yaw > 90 && kalAngleZ < -90)) {
kalmanZ.setAngle(yaw);
compAngleZ = yaw;
kalAngleZ = yaw;
gyroZangle = yaw;
} else
kalAngleZ = kalmanZ.getAngle(yaw, gyroZrate, dt); // Calculate the angle using a
Kalman filter

if (abs(kalAngleZ) > 90)


gyroZrate = -gyroZrate; // Invert rate, so it fits the restriced accelerometer reading
kalAngleZ = kalmanZ.getAngle(yaw, gyroZrate, dt); // Calculate the angle using a Kalman
filter

gyroXangle += gyroXrate * dt; // Calculate gyro angle without any filter


gyroYangle += gyroYrate * dt;
gyroZangle += gyroZrate * dt;
//gyroXangle += kalmanX.getRate() * dt; // Calculate gyro angle using the unbiased rate
43

//gyroYangle += kalmanY.getRate() * dt;

compAngleX = 0.93 * (compAngleX + gyroXrate * dt) + 0.07 * roll; // Calculate the angle
using a Complimentary filter
compAngleY = 0.93 * (compAngleY + gyroYrate * dt) + 0.07 * pitch;
compAngleZ = 0.93 * (compAngleZ + gyroZrate * dt) + 0.07 * yaw;

// Reset the gyro angle when it has drifted too much


if (gyroXangle < -180 || gyroXangle > 180)
gyroXangle = kalAngleX;
if (gyroYangle < -180 || gyroYangle > 180)
gyroYangle = kalAngleY;
if (gyroZangle < -180 || gyroZangle > 180)
gyroZangle = kalAngleZ;

//PID calculation
error = kalAngleX - desired_angle;
pid_p = kp*error;
if(-3 <error <3)
{
pid_i = pid_i+(ki*error);
}
pid_d = kd*((error - previous_error));
PID = pid_p + pid_i + pid_d;

// limit the PID to the resolution we have for the PWM variable
if(PID < -1000)
{
PID=-1000;
}
if(PID > 1000)
{
PID=1000;
}

//output coba baru


PWMOutput = PID + 1350;

pwmLeft = abs(roll + PID); //make sure it's a positive value


pwmRight= abs(roll - PID); //make sure it's a positive value

/* Print Data */
#if 0 // Set to 1 to activate
Serial.print(accX); Serial.print("\t");
Serial.print(accY); Serial.print("\t");
Serial.print(accZ); Serial.print("\t");
44

Serial.print(gyroX); Serial.print("\t");
Serial.print(gyroY); Serial.print("\t");
Serial.print(gyroZ); Serial.print("\t");

Serial.print("\t");
#endif
Serial.print(pid_d); Serial.print("\t");
Serial.print(PID); Serial.print("\t");
Serial.print((int)error); Serial.print("\t");
Serial.print(PWMOutput); Serial.print("\t");

Serial.print(roll); Serial.print("\t");
//Serial.print(gyroXangle); Serial.print("\t");
Serial.print(compAngleX); Serial.print("\t");
Serial.println(kalAngleX);Serial.print("\t");

servo1.writeMicroseconds(PWMOutput); Serial.print("\t"); // untuk menggerakkan servo


berdasarkan variabel roll
servo2.writeMicroseconds(PWMOutput); Serial.print("\t");

previous_error = error;
// Serial.print("\t");
//
// Serial.print(pitch); Serial.print("\t");
// //Serial.print(gyroYangle); Serial.print("\t");
// //Serial.print(compAngleY); Serial.print("\t");
// Serial.print(kalAngleY); Serial.print("\t");
//
// Serial.print("\t");
//
// Serial.print(yaw); Serial.print("\t");
//Serial.print(gyroZangle); Serial.print("\t");
//Serial.print(compAngleZ); Serial.print("\t");
// Serial.print(kalAngleZ); Serial.print("\t");

#if 0 // Set to 1 to print the temperature


Serial.print("\t");

double temperature = (double)tempRaw / 340.0 + 36.53;


Serial.print(temperature); Serial.print("\t");
#endif

Serial.print("\r\n");
delay(2);
}
45

Listing program I2C


const uint8_t IMUAddress = 0x68; // AD0 is logic low on the PCB
const uint16_t I2C_TIMEOUT = 1000; // Used to check for errors in I2C communication

uint8_t i2cWrite(uint8_t registerAddress, uint8_t data, bool sendStop) {


return i2cWrite(registerAddress, &data, 1, sendStop); // Returns 0 on success
}

uint8_t i2cWrite(uint8_t registerAddress, uint8_t *data, uint8_t length, bool sendStop) {


Wire.beginTransmission(IMUAddress);
Wire.write(registerAddress);
Wire.write(data, length);
uint8_t rcode = Wire.endTransmission(sendStop); // Returns 0 on success
if (rcode) {
Serial.print(F("i2cWrite failed: "));
Serial.println(rcode);
}
return rcode; // See: http://arduino.cc/en/Reference/WireEndTransmission
}

uint8_t i2cRead(uint8_t registerAddress, uint8_t *data, uint8_t nbytes) {


uint32_t timeOutTimer;
Wire.beginTransmission(IMUAddress);
Wire.write(registerAddress);
uint8_t rcode = Wire.endTransmission(false); // Don't release the bus
if (rcode) {
Serial.print(F("i2cRead failed: "));
Serial.println(rcode);
return rcode; // See: http://arduino.cc/en/Reference/WireEndTransmission
}
Wire.requestFrom(IMUAddress, nbytes, (uint8_t)true); // Send a repeated start and then
release the bus after reading
for (uint8_t i = 0; i < nbytes; i++) {
if (Wire.available())
data[i] = Wire.read();
else {
timeOutTimer = micros();
while (((micros() - timeOutTimer) < I2C_TIMEOUT) && !Wire.available());
if (Wire.available())
data[i] = Wire.read();
else {
Serial.println(F("i2cRead timeout"));
return 5; // This error value is not already taken by endTransmission
}
}
}
return 0; // Success
}
46

Listing Program Kalman.h


#ifndef _Kalman_h
#define _Kalman_h

class Kalman {
public:
Kalman() {
/* We will set the variables like so, these can also be tuned by the user */
Q_angle = 0.001;
Q_bias = 0.003;
R_measure = 0.03;

angle = 0; // Reset the angle


bias = 0; // Reset bias

P[0][0] = 0; // Since we assume that the bias is 0 and we know the starting angle (use
setAngle), the error covariance matrix is set like so - see:
http://en.wikipedia.org/wiki/Kalman_filter#Example_application.2C_technical
P[0][1] = 0;
P[1][0] = 0;
P[1][1] = 0;
};
// The angle should be in degrees and the rate should be in degrees per second and the
delta time in seconds
double getAngle(double newAngle, double newRate, double dt) {
// KasBot V2 - Kalman filter module - http://www.x-firm.com/?page_id=145
// Modified by Kristian Lauszus
// See my blog post for more information: http://blog.tkjelectronics.dk/2012/09/a-
practical-approach-to-kalman-filter-and-how-to-implement-it

// Discrete Kalman filter time update equations - Time Update ("Predict")


// Update xhat - Project the state ahead
/* Step 1 */
rate = newRate - bias;
angle += dt * rate;

// Update estimation error covariance - Project the error covariance ahead


/* Step 2 */
P[0][0] += dt * (dt*P[1][1] - P[0][1] - P[1][0] + Q_angle);
P[0][1] -= dt * P[1][1];
P[1][0] -= dt * P[1][1];
P[1][1] += Q_bias * dt;

// Discrete Kalman filter measurement update equations - Measurement Update


("Correct")
// Calculate Kalman gain - Compute the Kalman gain
/* Step 4 */
S = P[0][0] + R_measure;
/* Step 5 */
47

K[0] = P[0][0] / S;
K[1] = P[1][0] / S;

// Calculate angle and bias - Update estimate with measurement zk (newAngle)


/* Step 3 */
y = newAngle - angle;
/* Step 6 */
angle += K[0] * y;
bias += K[1] * y;

// Calculate estimation error covariance - Update the error covariance


/* Step 7 */
P[0][0] -= K[0] * P[0][0];
P[0][1] -= K[0] * P[0][1];
P[1][0] -= K[1] * P[0][0];
P[1][1] -= K[1] * P[0][1];

return angle;
};
void setAngle(double newAngle) { angle = newAngle; }; // Used to set angle, this should
be set as the starting angle
double getRate() { return rate; }; // Return the unbiased rate

/* These are used to tune the Kalman filter */


void setQangle(double newQ_angle) { Q_angle = newQ_angle; };
void setQbias(double newQ_bias) { Q_bias = newQ_bias; };
void setRmeasure(double newR_measure) { R_measure = newR_measure; };

double getQangle() { return Q_angle; };


double getQbias() { return Q_bias; };
double getRmeasure() { return R_measure; };

private:
/* Kalman filter variables */
double Q_angle; // Process noise variance for the accelerometer
double Q_bias; // Process noise variance for the gyro bias
double R_measure; // Measurement noise variance - this is actually the variance of the
measurement noise

double angle; // The angle calculated by the Kalman filter - part of the 2x1 state vector
double bias; // The gyro bias calculated by the Kalman filter - part of the 2x1 state vector
double rate; // Unbiased rate calculated from the rate and the calculated bias - you have to
call getAngle to update the rate

double P[2][2]; // Error covariance matrix - This is a 2x2 matrix


double K[2]; // Kalman gain - This is a 2x1 vector
double y; // Angle difference
double S; // Estimate error
};
#endif
48

Data pengujian tanpa gangguan


Data Sudut Data Sudut Data Sudut
ke pembacaan ke pembacaan ke pembacaan
1 -51.54 46 -1.22 91 -0.24
2 -51.14 47 -1 92 -0.13
3 -50.99 48 -0.77 93 -0.06
4 -50.8 49 -0.71 94 0
5 -50.62 50 -0.77 95 0.07
6 -50.46 51 -0.71 96 0.11
7 -50.04 52 -0.55 97 0.17
8 -49.86 53 -0.36 98 0.14
9 -47.78 54 -0.27 99 0.09
10 -37.84 55 -0.28 100 0.01
11 -24.27 56 -0.39
12 -11.95 57 -0.39
58 -0.73
13 -2.68
59 -0.9
14 2.26
60 -1
15 3.27
61 -0.99
16 2.93
62 -0.84
17 2.27
63 -0.58
18 1.12
64 -0.33
19 -0.25
65 -0.12
20 -1.59
66 -0.02
21 -2.54 67 0
22 -3.26 68 -0.14
23 -3.82 69 -0.32
24 -4.18 70 -0.35
25 -4.4 71 -0.24
26 -3.85 72 -0.16
27 -2.75 73 -0.18
28 -1.46 74 -0.14
29 -0.34 75 0.03
30 0.85 76 0.1
31 1.87 77 0.04
32 2.43 78 -0.17
33 2.53 79 -0.33
34 2.36 80 -0.28
35 1.94 81 -0.17
36 1.54 82 -0.18
37 0.92 83 -0.24
38 0.28 84 -0.25
39 -0.28 85 -0.11
40 -0.68 86 -0.06
41 -1.05 87 -0.1
42 -1.14 88 -0.26
43 -1.1 89 -0.36
44 -1.1 90 -0.35
45 -1.23
49

Data pengujian dengan gangguan ketiga

Data Sudut Data Sudut Data Sudut


ke pembacaan ke pembacaan ke pembacaan
1 -38.91 45 2.05 90 -2.62
2 -53.91 46 0.99 91 -2.5
3 -52.36 47 0.45 92 -2.2
4 -49.05 48 0.58 93 -1.6
5 -47.45 49 0.91 94 -1.95
6 -45.84 50 0.72 95 -3.06
7 -40.11 51 -0.21 96 -3.73
8 -30.46 52 -1.21 97 -3.2
9 -21.33 53 -1.64 98 -2.17
10 -14.92 54 -1.45 99 -1.38
11 -10.4 55 -1.12 100 -0.91
12 -5.33 56 -0.97
13 -0.42 57 -0.85
14 1.07 58 -0.56
15 -0.8 59 -0.15
16 -4.6 60 0.21
17 -6.51 61 0.21
18 -5.4 62 0.16
19 -1.92 63 0.16
64 -0.27
20 0.71
65 -1.08
21 0.08
66 -1.45
22 -2.25
67 -1.36
23 -2.06
68 -0.73
24 1.29
69 -0.26
25 5.21
70 -0.56
26 6.99
71 -1.66
27 5.14
72 -1.98
28 2.06 73 -1.47
29 0.26 74 -0.09
30 1.27 75 0.86
31 3.82 76 0.8
32 5.21 77 -0.18
33 4.33 78 -1.93
34 1.91 79 -2.71
35 -0.17 80 -2.25
36 0.17 81 -1.81
37 2.02 82 -2.51
38 2.99 83 -3.61
39 1.85 84 -4.57
40 -0.29 85 -4.65
41 -1.27 86 -3.16
42 0 87 -1.58
43 1.93 88 -1.28
44 2.83 89 -1.97
50

LAMPIRAN 3
Datasheet
51

Datasheet Arduino UNO


52
53
54
55

Datasheet MPU6050
56
57
58
59

Datasheet Servo Hitec HS-322Hd

Anda mungkin juga menyukai