Anda di halaman 1dari 130

HALAMAN JUDUL

TUGAS AKHIR – TE 145561

RANCANG BANGUN SISTEM KENDALI UNMANNED SURFACE


VEHICLE (USV) DENGAN SISTEM NAVIGASI BERBASIS GPS
DAN KOMPAS

Ahmad Reza Fahlovi


NRP 2214030065

Dosen Pembimbing
Dr. Ir. Hendra Kusuma, M.Eng.SC.

PROGRAM STUDI KOMPUTER KONTROL


Departemen Teknik Elektro Otomasi
Fakultas Vokasi
Institut Teknologi Sepuluh Nopember
Surabaya 2017

i
ii
HALAMAN JUDUL

FINAL PROJECT – TE 145561

DESIGN OF UNMANNED SURFACE VEHICLE CONTROL


SYSTEM WITH GPS BASED NAVIGATION SYSTEM AND
COMPASS

Ahmad Reza Fahlovi


NRP 2214030065

Supervisor
Dr. Ir. Hendra Kusuma, M.Eng.Sc.

COMPUTER CONTROL STUDY PROGRAM


DEPARTEMENT OF ELECTRICAL ENGINEERING AUTOMATION
Faculty of Vokasi
Sepuluh Nopember Insitute of Technology
Surabaya 2017

iii
iv
PERNYATAAN KEASLIAN
PERNYATAAN KEASLIAN TUGAS AKHIR
Dengan ini saya menyatakan bahwa isi sebagian maupun keseluruhan
Tugas Akhir saya dengan judul “Rancang Bangun Sistem Kendali
Unmanned Surface Vehicle (USV) dengan Sistem Navigasi Berbasis
GPS Dan Kompas” adalah benar-benar hasil karya intelektual mandiri,
diselesaikan tanpa menggunakan bahan-bahan yang tidak diijinkan dan
bukan merupakan karya pihak lain yang saya akui sebagai karya sendiri.
Semua referensi yang dikutip maupun dirujuk telah ditulis secara
lengkap pada daftar pustaka.
Apabila ternyata pernyataan ini tidak benar, saya bersedia menerima
sanksi sesuai peraturan yang berlaku.

Surabaya, 18 Juli 2017

Ahmad Reza Fahlovi


NRP 2214030065

v
-----Halaman ini sengaja dikosongkan-----

vi
HALAMAN PENGESAHAN
RANCANG BANGUN SISTEM KENDALI UNMANNED
SURFACE VEHICLE (USV) DENGAN SISTEM NAVIGASI
BERBASIS GPS DAN KOMPAS

TUGAS AKHIR

Diajukan Guna Memenuhi Sebagian Persyaratan


Untuk Memperoleh Gelar Ahli Madya
Pada
Program Studi Komputer Kontrol
Departemen Teknik Elektro Otomasi
Fakultas Vokasi
Institut Teknologi Sepuluh Nopember

Menyetujui:

Dosen Pembimbing

Dr. Ir. Hendra Kusuma, M.Eng.Sc.


NIP. 1964 09 02 1989 03 1003

SURABAYA
JULI, 2017

vii
-----Halaman ini sengaja dikosongkan-----

viii
RANCANG BANGUN SISTEM KENDALI UNMANNED
SURFACE VEHICLE (USV) DENGAN SISTEM NAVIGASI
BERBASIS GPS DAN KOMPAS

Nama : Ahmad Reza Fahlovi


NRP : 2214 030 065

Pembimbing : Dr. Ir. Hendra Kusuma, M.Eng.Sc.


NIP : 196409021989031003

ABSTRAK
Unmanned Surface Vehicle (USV) adalah kendaraan tanpa awak
yang beroperasi di permukaan air. Sistem kendaraan USV ini digunakan
untuk berbagai aplikasi militer dan komersial. Penggunaan USV ini
sangat mempermudah pekerjaan manusia di permukaan air.
Sistem kendali dari robot USV di Tugas Akhir ini ada dua macam,
yaitu kendali secara manual dan kendali otomatis (autonomus). Pada
tahap kendali manual ini user menggunakan komputer untuk
mengendalikan USV. Dalam pengujian menggunakan komunikasi
wireless HC-12, user dapat dengan efektif mengendalikan USV sampai
pada jarak 1 km. Ketika USV sudah berada pada titik operasi dan
kecepatan yang diinginkan maka user akan mengaktifkan sistem kendali
autonomus. Sistem autonomus ini meliputi, GPS Tracking System untuk
menjaga agar USV berada pada koordinat yang telah ditentukan. Sistem
autonomus ini juga dibantu dari navigasi yang terdapat pada USV, yang
menggunakan GPS dan Kompas. Kemudian untuk menampilkan posisi
koordinat USV secara real time menggunakan software LabVIEW.
Tujuan dari Tugas Akhir ini adalah untuk mempermudah
pengendalian jarak jauh pada USV dengan memanfaatkan GPS untuk
mengirimkan lokasi. Didapatkan tracking waypoint GPS yang sesuai
dengan error radius GPS sebesar kurang lebih 2,5 meter.

Kata Kunci : Sistem Navigasi, Unmanned Surface Vehichle, GPS,


Kompas, LabVIEW.

ix
-----Halaman ini sengaja dikosongkan-----

x
DESIGN OF UNMANNED SURFACE VEHICLE CONTROL
SYSTEM WITH GPS-BASED NAVIGATION SYSTEM AND
COMPASS

Name : Ahmad Reza Fahlovi


Register Number : 2214 030 065

Supervisor : Dr. Ir. Hendra Kusuma, M.Eng.Sc.


ID : 196409021989031003

ABSTRACT
Unmanned Surface Vehicle (USV) is an unmanned vehicle
operating on the water surface. This USV vehicle system is used for
various military and commercial applications. Use of USV is greatly
facilitate human work on the water surface.
Control system of USV Robot in this Final Project there are two
kinds, namely manual control and automatic control (autonomus). At
this manual control stage user uses computer to control USV. In testing
using HC-12 wireless communications, users can effectively control
USV up to a distance of 1 km. When USV is at the point of operation and
the desired speed the user will activate the autonomous control system.
This autonomous system includes, GPS Tracking System to keep the
USV is in the coordinates that have been determined. This autonomous
system is also aided by the navigation contained in USV, which uses
GPS and Compass. Then to display the position of coordinates USV in
real time using LabVIEW software.
The purpose of this Final Project is to facilitate remote control on
USV by utilizing GPS to transmit location. Obtained GPS waypoint
tracking in accordance with GPS radius error of approximately 2.5
meters..

Keywords : Navigation System, Unmanned Surface Vehicle, GPS,


Compass, LabVIEW.

xi
-----Halaman ini sengaja dikosongkan-----

xii
KATA PENGANTAR
Puji syukur atas kehadirat Allah SWT karena berkat rahmat dan
hidayah-Nya penulis dapat menyusun dan menyelesaikan laporan Tugas
Akhir dengan judul:

Rancang Bangun Sistem Kendali Unmanned Surface Vehicle (USV)


Dengan Sistem Navigasi Berbasis GPS Dan Kompas.

Penulis ingin berterima kasih kepada beberapa pihak yang telah


membantu dalam penyusunan dan penyelesaian dari Tugas Akhir ini,
diantaranya:
1. Kedua orang tua yang selalu memberikan dukungan, semangat,
dan doa kepada penulis.
2. Bapak Dr. Ir. Hendra Kusuma, M.Eng.Sc. selaku Dosen
Pembimbing atas bantuan dan bimbingan hingga Tugas Akhir ini
terselesaikan.
3. Anggota kelompok Tugas Akhir atas bantuan dan kerjasama yang
telah diberikan.
4. Tim Barunastra ITS yang telah memberikan pengalaman dan
membantu kami dalam pembuatan lambung kapal USV.
5. Teman - teman di Departemen Teknik Elektro Otomasi ITS,
yang telah banyak memberi bantuan dan semangat serta
dukungan pada penulis.
Harapan besar penulis bahwa buku Tugas Akhir ini dapat
memberikan informasi dan manfaat bagi pembaca pada umumnya dan
mahasiswa Departemen Teknik Elektro Otomasi ITS pada khususnya.
Penulis juga mengharapkan kritik dan saran atas buku Tugas Akhir ini
karena penulis menyadari bahwa dalam penyusunan Tugas Akhir ini
banyak terdapat kekurangan.

Surabaya, 18 Juli 2017

Penulis

xiii
-----Halaman ini sengaja dikosongkan-----

xiv
DAFTAR ISI

HALAMAN

HALAMAN JUDUL................................................................................ i
HALAMAN JUDUL.............................................................................. iii
PERNYATAAN KEASLIAN TUGAS AKHIR ..................................... v
HALAMAN PENGESAHAN ............................................................... vii
ABSTRAK ............................................................................................. ix
ABSTRACT ............................................................................................. xi
KATA PENGANTAR ......................................................................... xiii
DAFTAR ISI ......................................................................................... xv
DAFTAR GAMBAR ........................................................................... xix
DAFTAR TABEL ................................................................................ xxi
BAB I PENDAHULUAN ....................................................................... 1
1.1 Latar Belakang ............................................................................. 1
1.2 Permasalahan ............................................................................... 2
1.3 Batasan Masalah........................................................................... 2
1.4 Tujuan .......................................................................................... 2
1.5 Metodologi Penelitian .................................................................. 2
1.6 Sistematika Laporan ..................................................................... 3
1.7 Relevansi ...................................................................................... 4
BAB II TEORI DASAR ......................................................................... 5
2.1 Unmanned Surface Vehichle (USV)............................................. 5
2.2 Sistem Propulsi ............................................................................ 6
2.2.1 Propeller (Baling-Baling Kapal) ....................................... 6
2.2.2 Rudder (Kemudi)............................................................... 6
2.3 Sistem Navigasi ............................................................................ 6
2.4 Sistem Komunikasi Wireless ........................................................ 7
2.4.1 Data ................................................................................... 7
2.4.2 Transmitter dan Receiver .................................................. 7
2.5 LabVIEW (Laboratory Virtual Instrumentation Engineering
Workbench) .................................................................................. 7
2.6 Mikrokontroler STM32F4 ............................................................ 8
2.7 CooCox IDE (CoIDE) .................................................................. 9
2.8 Modul GPS NE-O6 .................................................................... 10

xv
2.9 Modul Kompas GY-273 ............................................................ 11
2.10 Modul HC-12 ............................................................................. 13
2.11 Motor Servo ............................................................................... 15
2.12 Motor DC Brushless .................................................................. 16
2.13 ESC (Electronic Speed Control) ................................................ 17
2.14 IP Camera .................................................................................. 17
BAB III PERANCANGAN SISTEM KONTROL ............................... 19
3.1 Pembuatan Perangkat Elektronik ............................................... 19
3.2 Pembuatan Perangkat Elektronik ............................................... 20
3.2.1 Skematik Sistem USV ..................................................... 21
3.2.2 Pengkabelan HC-12 dengan USB to TTL ....................... 23
3.2.3 Pengkabelan HC-12 dengan STM32F4........................... 24
3.2.4 Pembuatan Perangkat Elektronik .................................... 24
3.3 Perancangan Sistem Navigasi .................................................... 25
3.3.1 Akses dan Kalibrasi Modul Kompas ............................... 25
3.3.2 Akses Data GPS UBLOX NEO6M................................. 27
3.4 Perancangan Algoritma Sistem Kendali .................................... 29
3.4.1 Mode Manual .................................................................. 29
3.4.2 Mode Autonomus ............................................................ 30
3.4.3 Perancangan Kontroler Untuk Propulsi .......................... 33
3.5 Desain Perangkat Mekanik ........................................................ 34
3.6 Pembuatan Perangkat Lunak ...................................................... 35
3.6.1 Pembuatan Flowchart Program Parsing Data ................ 35
3.6.2 Pembuatan Flowchart Program Monitoring Kamera ...... 36
3.6.3 Konfigurasi Port Serial dengan Visa .............................. 37
3.6.4 Program Parsing Data ..................................................... 37
3.6.5 Program untuk Pemilihan Waypoint ............................... 38
3.6.6 Program untuk Mengirim Data ke STM32F4 ................. 39
3.6.7 Program Delay Antar Data .............................................. 39
3.6.8 Program untuk Memasukan Gambar Maps. .................... 40
3.6.9 Program untuk Kendali Manual dan Otomatis ................ 40
3.6.10 Program Menampilkan Video ......................................... 41
3.6.11 Konfigurasi IP Camera ................................................... 42
3.6.12 Mapping Area Danau Graha ........................................... 43
3.6.13 Tampilan GUI (Graphical User Interface) LabVIEW.... 44
BAB IV HASIL SIMULASI DAN IMPLEMENTASI ........................ 47
4.1 Pengujian Sensor Kompas dengan LabVIEW ........................... 47
4.2 Pengujian Modul GPS dengan LabVIEW ................................. 55

xvi
4.3 Pengujian Manuver dan Speed USV .......................................... 57
4.4 Pengujian Sistem Kendali .......................................................... 57
4.4.1 Pengujian Mode Manual ................................................. 57
4.4.2 Pengujian Mode Autonomus ............................................ 58
BAB V PENUTUP................................................................................ 61
DAFTAR PUSTAKA ........................................................................... 63
LAMPIRAN A ...................................................................................... 65
A.1. Program LabVIEW Keseluruhan ............................................... 65
A.2. Listing Program Keseluruhan ..................................................... 67
LAMPIRAN B ...................................................................................... 99
B.1. Datasheet/Specification Modul HC-12 ...................................... 99
B.2. Datasheet STM32F4................................................................ 102
RIWAYAT HIDUP............................................................................. 107

xvii
-----Halaman ini sengaja dikosongkan-----

xviii
DAFTAR GAMBAR

HALAMAN

Gambar 2.1 STM32F4........................................................................... 9


Gambar 2.2 Modul GPS NEO^MV2 ................................................... 10
Gambar 2.3 Bentuk Fisik Sensor Kompas HMC5883L ...................... 12
Gambar 2.4 Bentuk Fisik Modul HC-12 ............................................. 13
Gambar 2.5 Bentuk Fisik Motor Servo................................................ 15
Gambar 2.6 Pulsa Kendali Motor Servo .............................................. 16
Gambar 2.7 Bentuk Fisik Motor DC Brushless ................................... 16
Gambar 2.8 Bentuk Fisik ESC (Electronic Speed Control) ................ 17
Gambar 3.1 Blok Fungsional Sistem ................................................... 19
Gambar 3.2 Rangkaian Power Supply ................................................. 21
Gambar 3.3 Skematik Diagram Elektronik USV ................................ 22
Gambar 3.4 Pengkabelan HC-12 dengan USB to TTL ....................... 24
Gambar 3.5 Pengkabelan HC-12 dengan STM32F4 ........................... 24
Gambar 3.6 Layout PCB Tampak Atas ............................................... 25
Gambar 3.7 Layout PCB Tampak Bawah ........................................... 25
Gambar 3.8 Flowchart Kalibrasi Modul Kompas HMC5883l ............ 26
Gambar 3.9 Flowchart Akses dan Konversi Data GPS ....................... 27
Gambar 3.10 Flowchart Kendali dengan Remote Control .................... 30
Gambar 3.11 Flowchart Algoritma untuk Waypoint GPS Tracking ..... 31
Gambar 3.12 Posisi USV pada Koordinat Kartesius ............................. 32
Gambar 3.13 Sudut Arah Mata Angin Berdasar Kompas ..................... 33
Gambar 3.14 Blok Diagram Sistem Kendali ......................................... 34
Gambar 3.15 Desain Body Hull dari Sistem Mekanik USV .................. 34
Gambar 3.16 Flowchart Program Parsing Data .................................... 35
Gambar 3.17 Flowchart Program Kamera untuk Monitoring ............... 36
Gambar 3.18 Program Untuk Konfigurasi Serial Port .......................... 37
Gambar 3.19 Program Parsing Data ..................................................... 37
Gambar 3.20 Program untuk Pemilihan Waypoint ................................ 38
Gambar 3.21 Program untuk Mengirim Data ke STM32F4 .................. 39
Gambar 3.22 Program Delay Antar Data .............................................. 39
Gambar 3.23 Program untuk Memasukan Gambar Maps ..................... 40
Gambar 3.24 Program untuk Kendali Manual dan Otomatis ................ 40
Gambar 3.25 Program Menampilkan Video.......................................... 41

xix
Gambar 3.26 Tampilan Aplikasi IP Webcam........................................ 42
Gambar 3.27 Tampilan Kamera dari Aplikasi IP Webcam ................... 43
Gambar 3.28 Mapping Area Danau Graha............................................ 43
Gambar 3.29 Tampilan GUI TAB 1 ..................................................... 44
Gambar 3.30 Tampilan GUI TAB 2 ..................................................... 44
Gambar 3.31 Tampilan GUI TAB 3 ..................................................... 45
Gambar 3.32 Tampilan GUI TAB 4 ..................................................... 45
Gambar 4.1 Bentuk Fisik Keseluruhan Alat ....................................... 47
Gambar 4.2 Wiring Modul HMC58883l dengan STM32F4 ............... 48
Gambar 4.3 Listing Program Mengakses Kompas .............................. 48
Gambar 4.4 Arah Heading Sudut Kompas HMC58883l .................... 49
Gambar 4.5 Plotting Data Kompas 0o ................................................. 52
Gambar 4.6 Plotting Data Kompas 90o ............................................... 52
Gambar 4.7 Plotting Data Kompas 180o ............................................. 52
Gambar 4.8 Plotting Data Kompas 270o ............................................. 53
Gambar 4.9 Plotting Data Kompas 90 o yang Terganggu Magnet ...... 54
Gambar 4.10 Plotting Sudut Kompas 2700 dengan LabVIEW ............. 55
Gambar 4.11 Wiring antara GPS dengan STM32F4 ............................. 55
Gambar 4.12 Listing Program Konversi DMS ke Decimal Degree ..... 56
Gambar 4.13 Plotting Longitude Modul GPS U-Blox .......................... 56
Gambar 4.14 Plotting Latitude Modul GPS U-Blox ............................. 56
Gambar 4.15 Pengujian Thrust USV di Atas Permukaan Air ............... 57
Gambar 4.16 Pengujian Gerak Propeller dan Rudder .......................... 57
Gambar 4.17 Tampilan Tab Monitoring di LabVIEW ketika Mode
Manual ............................................................................ 58
Gambar 4.18 USV Bergerak ke Waypoint1 .......................................... 59
Gambar 4.19 USV Bergerak ke Waypoint2 .......................................... 59
Gambar 4.20 USV Bergerak ke Utara................................................... 60
Gambar 4.21 USV Bergerak Semakin ke Utara .................................... 60

xx
DAFTAR TABEL

HALAMAN

Tabel 2.1 GPS Performance ................................................................. 10


Tabel 2.2 Data Arah Mata Angin pada HMC5883L ............................. 12
Tabel 2.3 Konfigurasi Pin dari HMC5883L .......................................... 13
Tabel 2.4 Fungsi Masing-Masing Pin HC-12 ....................................... 14
Tabel 3.1 Konfigurasi antar Pin pada STM32F4................................... 22
Tabel 3.2 Format GPRMC Message ..................................................... 28
Tabel 3.3 Spesifikasi Sistem Mekanik USV ......................................... 34
Tabel 4.1 Nilai Sudut Kompas .............................................................. 49
Tabel 4.2 Nilai Sudut Kompas dengan Gangguan Magnet ................... 53
Tabel 4.3. Hasil Percobaan Kendali pada Mode Manual atau Remote ... 58
Tabel 4.4. Titik Longitude dan Latitude ................................................. 59

xxi
-----Halaman ini sengaja dikosongkan-----

xxii
BAB I PENDAHULUAN
PENDAHULUAN

1.1 Latar Belakang


Indonesia adalah Negara Maritim, karena wilayah perairan atau
lautnya lebih luas dari daratannya. Selain itu Negara Indonesia juga
merupakan Negara kepulauan. Dikarenakan banyak sekali pulau-pulau
yang tersebar mulai dari Sabang sampai Merauke. Dengan luasnya
wilayah laut Indonesia serta jumlah pulau yang sangat banyak, semakin
kompleks pula masalah yang akan dihadapi, terlebih ditambah oleh
ancaman global maupun dari Negara tetangga.
Oleh karena itu dibutuhkan suatu armada laut yang dapat
digunakan untuk mempermudah pekerjaan di perairan laut, salah
satunya adalah dengan Unmanned Surface Vehicle (USV). Kendaraan
laut tanpa awak ini banyak sekali fungsinya, seperti dalam bidang
militer diantaranya untuk robot pengintai, robot penjaga perbatasan di
laut, keperluan intelijen, Anti Submarine Warfare (ASW), dan lain-lain.
Sedangkan dalam bidang komersial diantaranya untuk eksplorasi dan
konstruksi minyak dan gas, Pendataan Oceanographic, Hidrografi,
Oseanografi dan Survei Lingkungan. Selain itu USV juga sangat
membantu dalam bidang Search and Rescue, seperti untuk pencarian
kapal atau pesawat yang jatuh, pencarian korban penumpang atau awak
kapal yang hilang, dan masih banyak lagi.
Pada Tugas Akhir dibuat pengendali robot USV yang dapat
dikendalikan secara otomatis maupun manual. Pengendali otomatis
bekerja berdasarkan letak titik-titik koordinat yang telah ditentukan oleh
user, dimana titik-titik koordinat diletakan secara bebas dan acak.
Kemudian untuk mengetahui letak dari robot USV digunakan GPS agar
letak kapal tersebut dapat dipantau secara realtime melalui layar
monitor. Sedangkan untuk mengetahui arah mata angin digunakan
sensor kompas. Pengiriman data GPS dan Kompas ke layar monitor
menggunakan mikrokontroler dan pengiriman sinyal dari komputer ke
kapal menggunakan modul wireless HC-12. Dengan dibuatnya alat ini
diharapkan untuk mempermudah pengendalian USV secara otomatis dan
mempermudah pemantauan area (mapping area) dipermukaan air.

1
1.2 Permasalahan
Pada Tugas Akhir ini yang menjadi permasalahan utama adalah
sulitnya mengendalikan pergerakan USV menggunakan modul GPS dan
kompas untuk melakukan manuver berdasarkan titik koordinat waypoint
yang telah ditentukan oleh user.
1.3 Batasan Masalah
Untuk menghindari pembahasan yang meluas maka ditentukan
batasan masalah sebagai berikut :
1. Area percobaan dilakukan pada pada danau yang memiliki luas
kurang dari 200x100 meter.
2. Range jangkauan komunikasi wireless maksimal 500 meter
pada keadaan line of sight.
3. Menggunakan komputer untuk pengendalian secara manual dan
otomatis dengan antarmuka LabVIEW.
4. Tidak ada ombak besar seperti halnya dipantai atau laut.
5. Tidak adanya penghalang dalam track yang akan dilalui kapal
ketika dalam kendali otomatis baik tracking GPS maupun
kompas.
1.4 Tujuan
Tujuan utama dari Tugas Akhir ini memiliki 2 tujuan, tujuan
pertama dilakukan oleh Ahmad Reza Fahlovi dan tujuan kedua
dilakukan oleh Suwarno, yaitu bertujuan:
1. Merancang sistem navigasi otomatis dan manual pada
Unmanned Surface Vehicle dengan bantuan GPS dan Kompas.
2. Merancang sistem kendali dan monitoring Unmanned Surface
Vehicle secara manual maupun autonomus dengan antarmuka
LabVIEW.
1.5 Metodologi Penelitian
Penelitian ini dilakukan melalui beberapa tahapan metodologi,
yaitu: tahap studi pustaka dan survei awal, tahap perencanaan dan
pembuatan alat, tahap perencanaan dan pembuatan software, tahap uji
coba dan analisis data, dan yang terakhir adalah penyusunan laporan
berupa buku Tugas Akhir.
Pada tahap persiapan akan dipelajari mengenai konsep
pengendalian Unmanned Survace Vehicle (USV) jarak jauh meng-
gunakan GPS dan sensor kompas. Pada tahap perencanaan dan
pembuatan alat, akan dilakukan perancangan rangkaian elektronik yang

2
menjadi masukan dan keluaran dari sistem, setelah perancangan
rangkaian selesai dilanjutkan pembuatan program untuk mengendalikan
motor brushless dan motor servo dari STM32F407VG dengan bahasa
pemrograman C++. Kemudian pembuatan program untuk GPS dan
sensor kompas HMC5883L. Setelah dilakukan perencanaan dan
pembuatan alat, pengujian yang telah diperoleh selanjutnya akan
dianalisis. Dari hasil analisis, akan ditarik kesimpulan dari penelitian
yang telah dilakukan. Tahap akhir penelitian adalah penyusunan laporan
penelitian.
1.6 Sistematika Laporan
Pembahasan Tugas Akhir ini akan dibagi menjadi lima Bab
dengan sistematika sebagai berikut:

Bab I Pendahuluan
Bab ini meliputi latar belakang, permasalahan, tujuan
penelitian, metodologi penelitian, sistematika laporan,
dan relevansi.

Bab II Teori Dasar


Bab ini menjelaskan tentang tinjauan pustaka, konsep
dari STM32F407VG, Motor Brushless, Motor Servo,
Modul GPS, Sensor Kompas HMC5388L, HC-12.

Bab III Perancangan Sistem


Bab ini membahas tentang penjelasan dari metodologi
yang digunakan dan implementasinya pada unmanned
surface vehichle.

Bab IV Simulasi, Implementasi dan Analisis Sistem


Bab ini memuat tentang pemaparan dan analisis hasil
pengujian alat pada keadaan sebenarnya. Seperti
pengujian aktivitas motor brushless pada propeller,
motor servo pada rudder, GPS dan sensor kompas.
Pada tiap pengujian akan ada analisis terkait metode
yang digunakan.

3
Bab V Penutup
Bab ini berisi kesimpulan dan saran dari hasil
pembahasan yang telah diperoleh.
1.7 Relevansi
Hasil yang diperoleh dari Tugas Akhir ini diharapkan dapat
mempermudah pengendalian kapal tanpa awak dengan jarak jauh
dengan memanfaatkan GPS untuk mengirimkan lokasi secara realtime,
serta untuk mendapatkan lokasi keberadaan dan arah mata angin kapal
yang ditampilkan pada PC dengan memanfaatkan sensor kompas dan
GPS.

4
2BAB II TEORI DASAR
TEORI DASAR

Pada bab ini akan dibahas mengenai teori – teori yang berkaitan
dengan peralatan yang akan dirancang. Teori yang mendukung
penyelesaian tugas akhir ini diantaranya adalah mengenai : Sistem
Kemudi dan propulsi, Sistem Navigasi, Sistem Komunikasi Wireless,
LabVIEW, STM32F407VG, Modul GPS NEO6MV2, Modul Kompas
GY-273, Modul HC-12, Motor Servo, Motor DC Brushless dan ESC (
Electronic Speed Control). Pada poin 2.1-2.3, 2.6-2.9 dan 2.11-2.13
merupakan tugas dari Ahmad Reza Fahlovi dan poin 2.4-2.5, 2.10 dan
2.14 merupakan tugas dari Suwarno. Pada Tugas Akhir ini desain dari
lambung dari USV menggunakan tipe Trimaran dimana pembuatan
lambung USV dikerjakan oleh tim Barunastra ITS.
2.1 Unmanned Surface Vehichle (USV) [1]
Unmanned Surface Vehicle (USV) merupakan wahana tanpa awak
yang dapat dioperasikan di atas permukaan air. Dalam penelitian sistem
kendali Unmanned Surface Vehichle menggunakan STM32F4 sebagai
mikrokontroler, motor servo untuk menggerakan rudder yang berfungsi
untuk membelokan kapal, dan motor brushless untuk menggerakan
propeller, serta menggunakan modul kompas dan GPS untuk sistem
navigasi. Untuk mempermudah penggunaan, dibuat antarmuka yang
berbasis LabVIEW.
Unmanned Surface Vehichle dapat dikendalikan secara langsung
oleh pengguna, pengendalian dapat dilakukan secara manual maupun
otomatis. Untuk pengendalian manual kapal dikontrol menggunakan
remot kontrol, sedangkan untuk pengendalian otomatis pengguna dapat
menggunakan komputer dan data yang dikirim oleh komputer menuju
STM32F407VG yang berfungsi untuk memproses dan mengolah data
dari program untuk mengirimkan perintah untuk menggerakan motor
servo maupun motor brushless. Motor servo berfungsi untuk
menggerakan rudder yang digunakan untuk kapal saat berbelok,
sedangkan motor brushless digunakan untuk menggerakan propeller
yang berfungsi untuk mendorong kapal agar bergerak. Sementara untuk
mengetahui keberadaan kapal menggunakan sensor kompas yang
berfungsi untuk menunjukan arah kapal dan GPS untuk menunjukan
lokasi kapal.

5
Sistem komunikasi untuk menggerakan kapal menggunakan sistem
komunikasi Half Duplex dimana perintah untuk menggerakan kapal
melalui komputer dikirimkan ke STM32F407VG, dan untuk mengetahui
keberadaan kapal STM32F407VG akan mengirim data longitude dan
latitude yang kemudian akan ditampilkan pada Visual LabVIEW.
Hardware yang digunakan untuk komunikasi wireless ini adalah
menggunakan HC-12, sementara untuk interfacing antara komputer
dengan perangkat kendali menggunakan software LabVIEW.

2.2 Sistem Propulsi [1]


Sistem kemudi dan propulsi ini memungkinkan agar USV dapat
bergerak dan bermanuver dengan baik. Alat penggerak pada kapal
bermacam-macam, namun pada USV ini menggunakan alat penggerak
berupa propeller (baling-baling) dan rudder,dimana propeller berfungsi
untuk menimbulkan gaya dorong (thruster) pada kapal, propeller
dipasang dibelakang badan kapal.
2.2.1 Propeller (Baling-Baling Kapal)
Propeller merupakan sekelompok sayap berputar yang dibentuk
bengkok, yang ditujukan agar menciptakan arah dari resultan gaya
angkat yang menuju ke depan. Pada umumnya propeller terdiri dari dua
atau lebih baling yang dihubungkan ke central hub yang merupakan
bagian dimana baling – baling pesawat tersambung. Propeller berfungsi
untuk mengubah gaya rotasi dari mesin menjadi gaya propulsif sebagai
gaya dorong (thrust) untuk kapal/pesawat. (Kroes, 1994).
2.2.2 Rudder (Kemudi)
Kemudi kapal merupakan suatu alat kapal yang digunakan untuk
mengubah dan menentukan arah gerak kapal, baik arah lurus maupun
belok kapal, kemudi kapal ditempatkan diujung belakang lambung
kapal/ buritan di belakang propeller kapal. Prinsip kerja kemudi kapal
yaitu dengan mengubah arah arus cairan yang mengakibatkan perubahan
arah kapal. Cara kerja kemudi kapal yaitu kemudi digerakkan secara
mekanis atau hidrolik dari anjungan dengan menggerakkan roda kemudi.

2.3 Sistem Navigasi [2]


Navigasi adalah ilmu pengetahuan dalam menentukan posisi kapal
di laut dengan mengemudikan (steering) kapal secara aman dari suatu
tempat ke tempat lain. Sistem navigasi biasanya terdiri dari beberapa
perangkat digital maupun analog, untuk yang analog biasanya

6
dilengkapi dengan kompas analog yang dapat mengetahui arah mata
angin yang berguna sebagai acuan arah kapal, untuk perangkat digital
sudah terdapat GPS atau Global Positioning System yaitu sebuah
perangkat yang dapat menerima lokasi keberadaan kapal dengan
mengacu pada satelit yang bergerak mengitari bumi. GPS menerima
data yang dikirim dari satelit berupa data NMEA 0183. NMEA
(National Marine Electronics Association) adalah standar yang
digunakan dalam pengiriman data gps yang berupa protokol data, garis
lintang, garis bujur, ketinggian, dan waktu.

2.4 Sistem Komunikasi Wireless [3]


Wireless yaitu koneksi antar suatu perangkat dengan perangkat
lainnya tanpa menggunakan kabel atau metode untuk mengirimkan
sinyal melalui suatu ruangan bukannya menggunakan kabel. Gelombang
radio dan sinar infra merah biasa digunakan untuk komunikasi wireless.
Dalam sistem komunikasi wireless ada bagian umum gelombang
yang berperan menjadi bagian utuh untuk komunikasi, yaitu: gelombang
radio, gelombang mikro, gelombang infra merah dan gelombang
elektromagnetik. Di dalam sistem komunikasi wireless biasanya terdiri
dari perangkat-perangkat data, transmitter dan receiver.

2.4.1 Data
Data dalam komunkasi wireless ini bisa berupa video, audio, dan
data-data yang lain. Data yang masuk sebagai masukan analog akan
diubah menjadi data digital lalu ditransmisikan dan diterima receiver
berikutnya akan diubah dari data digital menjadi data analog.

2.4.2 Transmitter dan Receiver


Transmitter adalah bagian dari sistem komunikasi wireless yang
berfungi untuk mengirimkan data ke tempat lain berupa gelombang
radio. Receiver merupakan bagian yang berfungsi untuk menerima
sinyal atau data yang dikirimkamn oleh transmitter.

2.5 LabVIEW (Laboratory Virtual Instrumentation Engineering


Workbench) [4]
LabVIEW (Laboratory Virtual Instrumentation Engineering
Workbench) adalah produk dari National Instruments yang berupa
software pengembangan program aplikasi dan hardware input-output
untuk keperluan akusisi dan pengendalian. Perangkat lunak (software)

7
ini dapat dijalankan pada sistem operasi Linux, Unix, Mac OS X dan
Windows. LabVIEW menggunakan gambar atau grafis sebagai fungsi
(Grapichal Programming Language atau Visual Programming
Language). Jika pada pemograman lainnya menggunakan teks untuk
membuat sebuah fungsi, bahasa pemograman ini menginterpretasikan
sebuah grafis sebagai suatu fungsi. Program LabVIEW disebut dengan
Virtual Instrumen (VI) karena beberapa tampilan dan operasi pada
program LabVIEW menyerupai suatu instrumen seperti osiloskop dan
multimeter. Setiap VI menggunakan fungsi-fungsi yang memanipulasi
input dari user interface atau sumber lain dan menampilkan informasi
tersebut atau memindahkan informasi tersebut ke file atau komputer
lain.
Terdapat tiga desain antarmuka yang digunakan dalam LabVIEW.
Yang pertama adalah Front Panel adalah desain antarmuka yang dapat
digunakan untuk memberi masukan atau sebagai keluaran. Sebagai
contoh numeric control adalah sebuah kontrol yang dapat memberi
masukan berupa angka atau image display yang dapat menampilkan
gambar. Ada beberapa grafis fungsi yang tidak dapat dipakai pada front
panel.
Kedua, Block Diagram yaitu desain antarmuka yang berisi grafis
fungsi-fungsi perhitungan yang digunakan dalam LabVIEW
programming. Grafis fungsi yang ada kita hubungkan untuk membuat
persamaan atau untuk menghasilkan nilai - nilai yang kita inginkan.
Ketiga, Controls and Functions Palettes. Pada functions and
Controls palettes terdapat semua grafis fungsi yang dimiliki LabVIEW
yang dapat kita gunakan pada front panel maupun block diagram.

2.6 Mikrokontroler STM32F4 [5]


STM32F4 discovery adalah modul dari ST Electronic berbasiskan
mikrokontroler arsitektur ARM 32bit dengan prosesor STM32F407V-
GT6 dan termasuk sebuah ST-LINK/V2 sebagai alat debug mempunyai
banyak fitur seperti digital accelerometer, ST MEMS digital
microphone, audio DAC yang reintegrasi pengendali speaker kelas D,
Led, tombol dan sebuah konektor USB OTG Micro-AB. Untuk Chip
STM32F407VGT6 mempunyai banyak fitur yang dapat digunakan,
seperti I/O, Timer, ADC, dan DMA. Kecepatan clock nya bisa mencapai
168Mhz, sehingga memungkinkan untuk mengerjakan perintah program
yang cukup yang panjang dalam cukup singkat. Pada Gambar 2.1
merupakan fisik dari Board STM32 discovery:

8
Gambar 2.1 STM32F4
STM32F4 memiliki 3 ADC didalamnya yaitu ADC1, ADC2, dan
ADC3. Setiap ADC memiliki resolusi maksimal 12 bit dan bisa diatur
10 bit, 8 bit atau 6 bit. Ada 16 pin (channel) yang tersedia untuk input
sinyal analog dan tambahan tiga input untuk pengukuran suhu chip
(Vtemp), tegangan referensi (Vref) dan tegangan baterai (Vbat). ADC3
hanya terhubung dengan 8 channel sedangkan ADC1 dan ADC2
terhubung 16 channel dan untuk Vtemp, Vref, serta Vbat hanya
terhubung ke ADC1 sebagai master. Tipe ADC yang terdapat pada
internal STM32 adalah tipe flash ADC, sehingga waktu konversi untuk
setiap blok ADC bias mencapai 0,5 us.

2.7 CooCox IDE (CoIDE) [5]


Coocox adalah bahasa pemrograman yang tidak berbayar
(freeware), digunakan untuk melakukan pemrograman untuk mikro-
kontroler ARM cortex Cortex M0, M3 dan M4. CoIDE ini
menggunakan bahas C yang merupakan bahasa yang umum digunakan
dalam bahasa pemerograman. Selain itu CoIDE menawarkan fitur-fitur
menarik sebagai sebuah IDE, seperti adanya komponen (atau library),
code completion dan lain-lain.

9
2.8 Modul GPS NE-O6 [6]
Seri modul NEO-6 adalah keluarga dari Stand-alone receiver GPS
yang menampilan performa tinggi mesin posisi u-blox 6. Mesin posisi u-
blox-6 untuk 50 channel menawarkan Time-To-First_Fix (TTFF) kurang
dari 1 detik. Mesin akuisisi khusus dengan 2 juta korelator mampu
melakukan pencarian waktu paralel/ pencarian ruang frekuensi, sehingga
memungkinkan untuk menemukan satelit secara instan.
Modul NEO-6 terdapat 3 model diantaranya NEO-6G, NEO-6Q,
NEO-6M. NEO-6G beroperasi dengan suplai 1,75 sampai 2,0V
sedangkan untuk NE)-6Q dan NEO-6M beroperasi pada tegangan 2,7
sampai 3,6V. Interface yang digunakan untuk modul NEO-6 diantaranya
UART, USB, SPI, DDC (IPC Compliant). Pada Gambar 2.2 merupakan
bentuk fisik dari GPS NEO-06.

Gambar 2.2 Modul GPS NEO^MV2


Performa dari Modul NEO-6 Series dapat ditunjukan pada Tabel 2.1
berikut:
Tabel 2.1 GPS Performance

Parameter Specification
Receiver 50 Channels
Type GPS L1 Frequency, C/A Code
SBAS : WAAS, EGNOS, MSAS, GAGAN
Time-To- NEO-6G/Q NEO-6M
First-Fix1 Cold Start (Autonomous) 29 s 32 s
Warm Start 29 s <32 s
(Autonomous)
Hot Start (Autonomous) <1 s <3 s
Aided Starts2 <1 s <3 s

10
Parameter Specification
Sensitivity3 NEO-6G/Q NEO-6M
Tracking & Navigation -160 dBm -160 dBm
Reacquisition -160 dBm -160 dBm
Cold Start (Autonomous) -147 dBm -146 dBm
Maximum 5 Hz
Navigation
update rate
Horizontal Autonomous 2,5 m
position SBAS 2,0 m
accuracy4
Configurabl 0,1 Hz to 1
e Timepulse kHz
frequency
range
Velocity 0,1 m/s
accuracy
Heading 0,5 degrees
accuracy
Operational Dynamics ≤4 g
Limits Altitude5 50.000 m
Velocity5 500 m
Keterangan:
1. Semua satelit di -130 dBm
2. Bergantung pada kecepatan koneksi data dan latency
3. Ditunjukkan dengan antena aktif yang bagus
4. Di bawah kondisi sinyal GPS yang bagus
5. Dengan asumsi platform airborne <4g

2.9 Modul Kompas GY-273 [7]


Modul Kompas GY-273 adalah sebuah modul yang digunakan
untuk menunjukkan arah mata angin digital, atau juga disebut kompas
digital. Modul ini menggunakan komponen utama berupa IC
HMC5883L yang merupakan IC kompas digital 3 axis yang memiliki
interface berupa 2 pin I2C. HMC5883 memiliki sensor magneto-
resistive HMC118X series beresolusi tinggi, ditambah ASIC dengan
konten amplification, automatic degaussing strap driver, offset

11
cancellation dan 12 bit ADC yang memungkinkan keakuratan kompas
mencapai 1 sampai 2 derajat. Untuk bentuk fisik dari sensor kompas
HMC5883L dapat dilihat pada Gambar 2.3.
Data yang telah didapat dari acuan pendeteksi medan magnet
untuk 4 buah mata angin ditunjukan pada Tabel 2.2 berikut:
Tabel 2.2 Data Arah Mata Angin pada HMC5883L
Arah Mata Angin Data
Utara 255 < X < 257
Selatan 79 < X < 81
Timur 16 < X < 18
Barat 148 < X < 150

Gambar 2.3 Bentuk Fisik Sensor Kompas HMC5883L


Spesifikasi dari IC HMC5883L adalah sebagai berikut:
1. Memerlukan catu daya 2,7-6,5 VDC dengan konsumsi arus yang
rendah (hingga 100uA).
2. Memiliki sensor magnet dengan jenis magnetoresistif 3 sumbu.
3. Memiliki jangkauan pembacaan medan magnet sampai dengan
±8 Gauss dengan resolusi 5 miligauss.
4. Memiliki akurasi kompas hingga 1º sampai 2º.
5. Kecepatan keluaran maksimal data hingga 160 Hz (Single
Measurement Mode).
6. Kecepatan keluaran maksimal data 0,75 Hz s.d. 75 Hz
(Continuous Measurement Mode).
Konfigurasi pin dari HMC5883L dapat dijelaskan pada Tabel 2.3
berikut:

12
Tabel 2.3 Konfigurasi Pin dari HMC5883L
Pin Nama Tipe Fungsi
1 GND G Ground
Sumber tegangan -2,7 sampai 6,5 VDC
2 VIN P
(Modul dapat diatur pada 2,5 VDC)
3 DRDY I Data ready, Interupt
4 SCL I Serial Clock ( clock 160Hz default)
5 SDA IO Serial Data

2.10 Modul HC-12 [8]


Modul HC-12 adalah modul generasi terbaru yang memiliki multi-
channel jalur transmisi data. HC-12 bekerja pada pita frekuensi 4333,4
sampai 473,0 MHz, dan beberapa channel dapat diatur dengan loncatan
400kHz dari total 100 channel. Daya transmisi maksimum untuk modul
ini adalah 100 mW (20 dBm), sensitivitas penerimaan adalah -117 dBm
pada tingkat 5000 bps di udara. Modul ini mampu menempuh jarak
1000 meter (FU3 mode dengan kecepatan serial 4800 bps) di ruang
terbuka, 1800 meter dengam FU4 mode.

Gambar 2.4 Bentuk Fisik Modul HC-12


Spesifikasi dari Modul HC-12 adalah sebagai berikut:
1. Bekerja pada sumber tegangan 3,2 V- 5,5 V dengan kapasitas
beban tidak kurang dari 200mA.
2. Transmisi jarak jauh (FU3: 1000 meter diruang terbuka, dengan
kecepatan 5000 bps dan FU4 :1800 meter diruang terbuka dengan
kecepatan 500 bps di udara).
3. Rentang frekuensi kerja antara 433,4-473,0 MHz dengan 100
channel komunikasi.

13
4. Maksimum daya pengiriman adalah 100 mW (20dBm) dengan 8
tingkat daya dapat diatur.
5. Built-in MCU untuk melakukan komunikasi dengan perangkat
eksternal melalui port serial, tidak memerlukan program dan
konfigurasi untuk penggunaan dasar.
Modul HC-12 memiliki 9 pin dan satu socket antena RF (ANT1),
penjelasan dari masing-masing pin ditunjukan pada Tabel 2.4 berikut:
Tabel 2.4 Fungsi Masing-Masing Pin HC-12
Pin Definisi Arah I/O Keterangan
Masukan power suplai DC 3,2
V-5,5V dengan kapasitas beban
tidak kurang dari 200 mA.
Catatan: Jika modul bekerja
pada transmisi untuk jangka
1 VCC panjang disarankan agar dioda
1N4007 dihubungkan secara seri
jika tegangan suplai lebih besar
dari 4,5V, sehingga untuk
menghindari overhating
regulator LDO.
2 GND Commond Ground
Input Output data UART, Level TTL.
3 RxD (weak pullup) 1k resistor dihubungkan secara
seri dengan modul.
Output Output data UART, level TTL.
4 TxD 1 k resistor dihubungkan secara
seri dengan modul.
Input Parameter kontrol pengaturan
(10k pullup) pin, aktif low. 1k resistor
5 SET
dihubungkan secara seri dengan
modul.
6 ANT Input/Output Pin 433MHz antenna
7 GND Common Ground
8 GND Common Ground
No Connection, digunakan
untuk memperbaiki sistem
9 NC
mekanik, yang kompatibel
dengan posisi pin modul HC-11

14
Pin Definisi Arah I/O Keterangan
Input/Output IPEX20279-001E-03 socket
ANT1 ANT
antenna.
ANT2 ANT Input/Output 433MHz Spring lubang antena.

2.11 Motor Servo [9]


Motor 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.
Secara putaran terdapat dua jenis motor servo, yaitu motor servo
standar dan motor servo continuous. Motor servo standar sering dipakai
pada sistem robotika, misalnya untuk membuat Robot Arm (Robot
Lengan) sedangkan motor servo continuous sering dipakai untuk Mobile
Robot. Pada bagian servo tertulis tipe servo yang bersangkutan. Contoh
motor servo bisa dilihat pada Gambar 2.5.
Penggunaan motor servo di bidang robotika tentu ada alasannya.
Pertama adalah motor servo memiliki putaran yang lambat dengan torsi
yang kuat (berkat adanya sistem roda gigi). Hal ini cocok dengan bidang
robotika.

Gambar 2.5 Bentuk Fisik Motor Servo


Operasional motor servo dikendalikan oleh sebuah sinyal
berperiode ± 20 ms, dimana lebar pulsa antara 1 ms dan 2 ms
menyatakan akhir dari jangkauan sudut maksimum. Pada Gambar 2.6,
jika motor servo diberikan pulsa dengan lebar 1,5 ms maka posisi yang
dihasilkan adalah 90°. Jika diberikan pulsa kurang dari 1,5 ms maka

15
posisi mendekati 0°. Jika diberikan pulsa lebih dari 1,5 ms maka posisi
mendekati 180°.

Gambar 2.6 Pulsa Kendali Motor Servo

2.12 Motor DC Brushless [10]


Motor Brushless adalah jenis motor yang memiliki konstruksi
magnet permanen dan sebuah stator berkutub yang dililit kawat. Energi
listrik diubah menjadi energi mekanik oleh pengaruh daya tarik menarik
antara kekuatan magnet permanen dengan stator berkutub yang dililit
kawat tembaga. Contoh motor brushless dapat dilihat pada Gambar 2.7.
Bagian-bagian brushless motor adalah sebagai berikut:
a. Stator
Dasar dari stator brushless motor adalah sebuah stator dengan
memiliki tiga buah gulungan.
b. Rotor
Rotor pada brushless motor terdiri dari beberapa magnet
permanen. Jumlah kutub magnet di rotor juga mempengaruhi
ukuran langkah dan riak torsi dari motor. Jumlah kutub yang
banyak akan memberikan gerakan presisi dan riak torsi yang
kecil. Magnet permanen terdiri dari 1 sampai 5 pasang kutub.
Dalam kasus tertentu bisa 8 pasang kutub.

Gambar 2.7 Bentuk Fisik Motor DC Brushless

16
2.13 ESC (Electronic Speed Control) [10]
Motor brushless memiliki sebuah ESC (Elektronic Speed Control)
yang berfungsi sebagai pengatur kecepatan motor, selain itu juga
berfungsi untuk menaikan jumlah arus yang diperlukan oleh motor.
Kecepatan untuk motor yang keluar dari ESC diatur melalui pulsa dari
mikrokontroler. Gambar 2.8 merupakan bentuk fisik dari ESC.

Gambar 2.8 Bentuk Fisik ESC (Electronic Speed Control)

2.14 IP Camera [11]


IP camera atau ada juga yang menyebutnya Netcam (Network
Camera) merupakan perangkat peng-capture dan recording objek
terkini yang memiliki kemampuan memproses visual dan audio serta
dapat diakses PC secara langsung, atau melalui LAN, Internet, dan
jaringan telepon seluler.
Terdapat empat keunggulan yang dimiliki dari IP Camera antara
lain: Sistem yang digunakan mengadopsi IP Address seperti yang
diterapkan pada jaringan internet. Di sini terjadi proses perubahan sinyal
menjadi digital. Display pada IP camera dapat dipantau melalui monitor
PC, layar ponsel, dan layar TV. Lokasi monitor IP camera dapat
dipantau dari lokasi lain yang terkoneksi dengan jaringan LAN, internet,
atau jaringan seluler/ponsel. IP camera dapat diakses dari PC yang
terhubung langsung melalui LAN, internet, atau jaringan seluler

17
-----Halaman ini sengaja dikosongkan-----

18
3 BAB III PERANCANGAN SISTEM KONTROL

PERANCANGAN SISTEM KONTROL

Pada bab ini berisi tahapan yang dilakukan dalam perencanaan dan
pembuatan alat yang berfokus pada pengendalian pergerakan manuver
Unmanned Surface Vehichle (USV) agar dapat berjalan di atas
permukaan air secara otomatis (autonomus) maupun manual dengan
remote control menggunakan PC. Sistem otomatis pada USV ini
menggunakan GPS tracking untuk menuju titik-titik koordinat waypoint
yang telah ditentukan oleh user. Pada bab ini lebih lanjut akan dibahas
tentang pengolahan data NMEA standart, metode parsing data GPS,
kalibrasi sensor kompas, algoritma untuk GPS waypoint tracking, sistem
komunikasi antara komputer dengan USV dan GUI untuk memonitor
pergerakan kapal melalui antarmuka LabVIEW. Pada poin 3.2.1, 3.2.3,
3.2.4, 3.3, 3.4 merupakan tugas penelitian Ahmad Reza Fahlovi dan poin
3.2.2, 3.4.1, 3.6 merupakan tugas penelitian Suwarno.

3.1 Pembuatan Perangkat Elektronik

---- Ahmad Reza Fahlovi


---- Suwarno
Gambar 3.1 Blok Fungsional Sistem
Agar sistem Unmanned Surface Vehichle (USV) dapat berjalan
dan berkomunikasi secara optimal dibutuhkan beberapa komponen
berikut:

19
1. Modul kompas HMC5883L, berfungsi sebagai penunjuk arah
mata angin pada USV, sehingga memudahkan dalam
mengendalikan arah manuver USV.
2. Modul GPS UBLOX NEO6M, berfungsi sebagai receiver data
Global Positioning System (GPS) dari satelit yang mengorbit di
atas permukaan bumi, untuk mendapatkan titik koordinat data
longitude dan latitude.
3. STM32F407 Discovery, berfungsi sebagai pusat pengendali,
pengolah dan pemroses data maupun sinyal masuk dan keluar
pada USV.
4. Motor servo, berfungsi sebagai aktuator untuk menggerakan
rudder sehingga USV dapat berhaluan ke kanan maupun ke kiri.
5. Motor brushless, berfungsi sebagai aktuator untuk menggerakan
propeller sehingga menimbulkan gaya dorong yang
mengakibatkan USV bergerak maju. Putaran motor brushless ini
akan menggerakan propeller USV.
6. Modul HC-12 wireless, berfungsi untuk komunikasi antara PC ke
USV ataupun sebaliknya, media komunikasi ini menggunakan
media udara. Dengan adanya modul ini dimungkinkan data pada
USV dapat dimonitoring pada PC.
7. Antenna, berfungsi untuk penerima dan pemancar sinyal yang
dihasilkan oleh modul HC12.
8. IP Camera, berfungsi untuk memantau keadaan di sekitar USV,
IP Camera ini menggunakan smartphone android.
9. Komputer, berfungsi untuk memonitoring pergerakan USV dan
untuk remote USV ketika berada pada kondisi mode manual
melalui tampilan antarmuka LabVIEW.
Adapun penjelasan dari diagram blok pada Gambar 3.1 dan juga tahapan
untuk menggerakkan USV oleh motor servo hingga mencapai derajat
tertentu dan motor brushless untuk melakukan putaran propeller.
Penjelasan dari masing-masing bagian dijelaskan pada sub bab
pembuatan perangkat elektronik, pembuatan perangkat mekanik dan
pembuatan perangkat lunak.

3.2 Pembuatan Perangkat Elektronik


Dalam perangkat elektronik, terdapat beberapa elemen yang harus
disusun untuk dapat menggerakan motor servo dengan baik dan untuk
menerima data dari USV menuju ke komputer dengan baik salah
satunya adalah modul HC-12 wireless.

20
3.2.1 Skematik Sistem USV
Pusat kendali utama dari USV ini menggunakan mikrokontroler
STM32F4, data dari modul GPS Ublox NEO6M dan modul kompas
HMC58883l dibaca dan diproses oleh STM32F4 yang kemudian akan
diolah menjadi sinyal kontrol untuk mengendalikan gerak motor servo
dan motor brushless. Dimana motor servo terhubung untuk
menggerakkan rudder kendali manuver USV, sedangkan motor
brushless digunakan untuk menggerakkan propeller. GPS diakses oleh
STM32F4 dengan menggunakan komunikasi UART, sedangkan kompas
diakses dengan komunkasi I2C. Pada Gambar 3.2 merupakan power
supply dari sistem elektronik USV menggunakan tegangan dengan besar
5V dan 12V dengan arus beban sampai 5A.

Gambar 3.2 Rangkaian Power Supply


Tegangan 5V digunakan untuk mensuplai STM32F4 ,modul
kompas, GPS, receiver remote, HC12, LCD display dan motor servo.
Untuk tegangan 12V digunakan untuk mensuplai motor brushless.
Untuk diagram skematik USV dapat dilihat pada Gambar 3.3, berikut:

21
Gambar 3.3 Skematik Diagram Elektronik USV
Untuk lebih memperjelas tentang koneksi antar pin komponen pada
STM32F4 dapat dilihat pada Tabel 3.1 berikut:
Tabel 3.1 Konfigurasi antar Pin pada STM32F4
Koneksi pin
No Komponen / modul Keterangan
Pin modul STM32F4
Tx PA3
1 GPS u Ublox NEO6M Vcc 5V UART2
Gnd Gnd
Vcc 5V
Gnd Gnd
2 Kompas HMC58883l I2C1
SDA PB10
SCL PB11

22
Koneksi pin
No Komponen / modul Keterangan
Pin Modul STM32F4
Vcc 5V
Gnd Gnd
3 HC12 wireless modul UART1
Tx PA10
Rx PB6
Vcc 5V
Gnd Gnd
RS PD7
RW PA15
4 LCD 16x4 display E PC10 GPIO
D4 PC11
D5 PC12
D6 PD0
D7 PD1
Vcc +5V
6 Motor Servo Gnd GND Timer 4
Data PD12
Gnd GND
7 ESC Motor Brushless Timer 3
Data PB1

3.2.2 Pengkabelan HC-12 dengan USB to TTL


HC-12 berfungsi sebagai sistem komunikasi untuk mengirim data
dari komputer ke STM32F4 atau menerima data dari STM32F4 menuju
komputer. Sistem komunikasi pada penelitian ini menggunakan
komunikasi half duplex, dimana kamunikasi dapat dikirim ke dua arah
secara bergantian. Pin TXD HC-12 untuk menerima data dari dari USB
to TTL, pin RXD HC-12 berfungsi untuk mengirim data dari USB to
TTL. Untuk memperjelas wiring HC-12 dengan USB dapat dilihat pada
Gambar 3.4.

23
Gambar 3.4 Pengkabelan HC-12 dengan USB to TTL

3.2.3 Pengkabelan HC-12 dengan STM32F4


STM32F4 berfungsi untuk mengolah sinyal yang dikirim atau
diterima dari HC-12 untuk mengetahui arah mata angin dan letak posisi
kapal berada melalui GPS. Dimana STM32F4 akan mengirimkan data
ke komputer melalui HC-12 untuk dimonitor lokasi keberadaan kapal
dan mengetahui kapal bergerak ke arah mana. Pin A10 berfungsi untuk
komunikasi UART sebagai pengiriman data (TX), dan Pin B6 berfungsi
untuk komunikasi UART sebagai penerimaan data (RX). Wiring dari
HC-12 dengan STM32 F4 dapat dilihat pada Gambar 3.5 berikut:

Gambar 3.5 Pengkabelan HC-12 dengan STM32F4

3.2.4 Pembuatan Perangkat Elektronik


Pembuatan hardware Elektronik dimulai dari pembuatan board
PCB untuk Sistem elektronika pada USV. Selanjutnya komponen dalam
board PCB tersebut ditempatkan pada project box agar lebih praktis.
Desain board PCB ini menggunakan software eagle. Rancangan layout
PCB tampak atas dapat dilihat pada Gambar 3.6 dan tampak bawah
Gambar 3.7.

24
Gambar 3.6 Layout PCB Tampak Atas

Gambar 3.7 Layout PCB Tampak Bawah

3.3 Perancangan Sistem Navigasi


Agar USV dapat melakukan navigasi diperlukan perancangan
sistem navigasi yang terintegrasi dengan menggunakan GPS dan
kompas. Sistem navigasi ini kemudian akan dikombinasikan dengan
sistem kendali agar USV dapat bermanuver dan berjalan dengan lancar,
baik secara manual maupun autonomous.

3.3.1 Akses dan Kalibrasi Modul Kompas


Untuk mengakses data kompas HMC58883l digunakan
mikrokontroler, dalam tugas akhir ini menggunakan STM32F4.

25
Komunikasi antara HMC58883l dengan STM32F4 menggunakan data
serial dengan protokol I2C. Dimana perlu dilakukan konfigurasi pada
STM32F4 agar dapat berkomunikasi dengan modul kompas hmc58883l.
Konfigurasi ini meliputi:
a) Wiring antara kompas dengan STM32F4
b) Inisialisasi register I2C STM32F4 pada Coocox IDE
c) Akses address data dari modul hmc58883l
d) Buat buffer data untuk menampung hasil pembacaan.
Setelah melakukan konfigurasi tersebut, dapat diketahui nilai data
pada pembacaan modul kompas HMC58883l. Data yang dibaca oleh
kompas berupa data mentah pada tiap-tiap sumbunya. Sehingga data
tersebut tidak dapat langsung diproses secara langsung, perlu dilakukan
konversi data dan kalibrasi pada kompas tersebut. Beberapa tahap
kalibrasi dan konversi data kompas HMC58883l dapat dilihat lebih jelas
pada flowchart yang ditunjukan pada Gambar 3.8 berikut:

Gambar 3.8 Flowchart Kalibrasi Modul Kompas HMC5883l


Dari Gambar 3.8 dapat dijelaskan beberapa tahapnya sebagai
berikut:
1. Menghitung heading radian tiap sumbu
2. Menghitung sudut deklinasi kompas di lokasi tersebut
3. Konversi data radian ke data sudut.

26
3.3.2 Akses Data GPS UBLOX NEO6M
Setelah mengkases data modul kompas, langkah selanjutnya adalah
mengakses data pada modul GPS Ublox Neo6M. Jalur komunikasi data
antara GPS dan STM32 adalah UART TTL dengan output message
NMEA standard. Output dari NMEA Standard bermacam-macam, pada
metode parsing data ini hanya mengambil data berformat GPRMC. Data
berformat GPRMC berisi data rekomendasi minimum untuk GPS
sehingga format cocok untuk informasi pengambilan data koordinat dan
posisi. Untuk akses dan konversi data GPS ditunjukan pada flowchart
3.9 berikut:

Gambar 3.9 Flowchart Akses dan Konversi Data GPS


Output data NMEA Standard akan disimpan dalam buffer data string,
buffer data tersebut berupa message GPRMC yang telah dipecah-pecah
(parsing data) .Berikut adalah contoh nilai dari GPRMC Message
berdasarkan NMEA Standard:
$GPRMC ,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10

27
Tabel 3.2 Format GPRMC Message
Nama Contoh Satuan Keterangan
Message ID $GPRMC RMC protocol header
Status A Hhmmss.sss
UTC Time 161229,487 A=data valid V= data
tidak valid
Latitude 3723,2475 ddmm.mmmm
N/S Indicator N N=north or S=south
Longitude 12158,3416 dddmm.mmmm
E/W indicator W E=east or W=west
Speed Over 0,13 Knots
Ground
Course Over 309,62 Degrees True
Ground
Date 120598 Ddmmyy
Magnetic Variation Degrees E=east or W=west
East/West E E= east
Indicator
Mode A A=Autonomous,
D=DGPS, E=DR
Checksum *10
<CR><LF> End of message
termination
Dari Tabel 3.2 dibutuhkan 4 data untuk diolah lebih lanjut
menjadi data koordinat data tersebut yaitu, data latitude, N/S indicator,
Longitude, E/W indicator. Setelah didapatkan 4 data tersebut dilakukan
beberapa proses konversi data ke desimal, karena 4 data tersebut masih
merupakan data yang berformat DMS (Degree Minute Second). Proses
yang dilakukan meliputi:
1. Konversi tipe data
Karena output message dari modul GPS berupa tipe data string,
maka sebelum diolah oleh STM32 data tersebut harus
dikonversi menjadi data number, dalam hal ini diubah menjadi
tipe data double karena tipe data ini mempunyai digit presisi
tinggi, sehingga cocok untuk konversi data koordinat GPS yang
mempunyai presisi 5 sampai 6 digit dibelakang koma. Pada

28
bahasa C konversi dari string ke double menggunakan perintah
atof.
2. Penentuan letak E/W dan N/S
Penentuan ini berdasarkan letak posisi garis bujur dan garis
lintang. E/W indicator untuk menentukan apakah nilai dari
longitude positif atau negatif, jika E (east) maka posisi
longitude bernilai positif, namun jika W (West) maka nilainya
negatif. Sedangkan untuk N/S indicator untuk menentukan
apakah nilai dari latitude itu positif atau negatif, jika N (North)
maka posisi latitude berada di atas garis khatulistiwa sehingga
nilainya positif, jika S (South) maka posisi latitude berada di
bawah garis khatulistiwa dan bernilai negatif.
3. Konversi koordinat DMS (Degree Minutes Second) ke Desimal
Konversi ini dilakukan untuk mempermudah perhitungan
dalam pembuatan algotritma kendali untuk Waypoint GPS
tracking. Koordinat DMS mempunyai format ddmm mmmm, d
adalah Degree, m adalah Minute. Berdasarkan rumus 1
Degree=60’ dan 1’=60’’, maka digit pada format mm.mmmm
perlu dikonversi ke derajat setelah itu nilai konversi tersebut
dijumlahkan dengan nilai pada format dd.

3.4 Perancangan Algoritma Sistem Kendali


Setelah mendapatkan data pada modul kompas dan GPS langkah
selanjutnya adalah membuat perancangan sistem kendali pada USV oleh
karenanya diperlukan algoritma untuk dapat memecahkan persolan yang
akan dihadapi. Pada Sistem kendali USV di tugas akhir ini ada 2 mode
utama yang akan diterapkan yaitu mode manual (Manual Mode) dan
mode otomatis (Autonomus Mode).

3.4.1 Mode Manual


Pada mode manual ini, pergerakan USV dikendalikan oleh
remote control yang diakses oleh PC. Dimana ada dua bagian utama dari
remote control ini, yaitu receiver dan transmitter. Transmitter adalah
device untuk mengirimkan sinyal yang selanjutnya sinyal tersebut akan
diterima oleh radio receiver, device penerima ini akan terpasang pada
USV, sedangkan transmitter terpasang pada PC yang terdapat di darat.
Unit receiver dan transmitter ini menggunakan HC-12 module. Gambar
3.10 merupakan flowchart dari mode manual menggunakan remote
control PC.

29
Gambar 3.10 Flowchart Kendali dengan Remote Control

3.4.2 Mode Autonomus


Pada mode ini ada dua macam kendali otomatis yaitu kendali
untuk waypoint tracking GPS, serta kendali dengan kompas. Untuk
waypoint USV akan bergerak secara otomoatis menuju titik titik
koordinat yang telah ditentukan. Metode ini umum disebut dengan
waypoint GPS Tracking. Titik-titik koordinat tersebut dikirim oleh PC,
sehingga posisi pergerakan USV dapat dimonitor dari jauh dengan
komunikasi serial menggunakan media udara (wireless). Pada mode ini
diperlukan akurasi dari modul GPS dan Kompas agar arah dan
pergerakan USV dapat berjalan dengan benar, ketidakakurasian data
akan menyebabkan sistem navigasi menjadi kacau sehingga akan
mempengaruhi arah manuver USV. Beberapa tahapan untuk merancang
mode otomatis ini dapat dilihat pada flowchart yang ditunjukan pada
Gambar 3.11 berikut:

30
Gambar 3.11 Flowchart Algoritma untuk Waypoint GPS Tracking
Dari flowchart tersebut dapat dijabarkan mengenai beberapa tahap
sebagai berikut:
1. Menentukan titik koordinat awal dan tujuan
Titik koordinat awal adalah posisi dari USV berdasarkan
data GPS yang diterima dari satelit yang mengorbit. Koordinat
tujuan adalah koordinat yang akan dituju oleh USV. Dari kedua
koordinat ini terbentuklah suatu garis lurus.
2. Menghitung parameter output
Setelah menentukan koordinat tersebut, untuk memper-
mudah perhitungan maka koordinat tersebut dipindah ke titik
(0,0) yaitu pada pusat koordinat kartesius menggunakan per-
hitungan sebagai berikut:
XTujuan = Longitude Tujuan – Longitude GPS
YTujuan = Latitude Tujuan – Latitude GPS

31
Gambar 3.12 Posisi USV pada Koordinat Kartesius
Berdasarkan kedua koodinat yang ditunjukan Gambar 3.12 dapat
ditentukan panjang atau jarak lintasan yang akan ditempuh, untuk
mencari jarak lintasan tersebut dapat digunakan theorama phytagoras
kemudian hasilnya dikalikan dengan 110574,61087757687 meter.
Karena 10 = 110574,61087757687 meter. Satuan dari panjang lintasan
yang dilalui adalah meter.

Plintasan  Xtujuan 2 Ytujuan 2  110574,61087757687 meter


Setelah menemukan panjang atau jarak lintasan yang dilalui, langkah
selanjutnya adalah menghitung besar sudut mata angin titik koordinat
tujuan terhadap posisi USV di titik (0,0). Berdasarkan Gambar 3.12
dapat dihitung besar sudut tangen menggunakan fungsi arctan atau
antitangen. Didalam bahasa C digunakan fungsi atan untuk mengetahui
besar sudut tangen, namun sebelum dimasukkan kedalam fungsi atau
perlu dihitung nilai tangen antara panjang X dibagi Y, karena tangen
adalan sin/cos. Satuan sudut yang dibuat dari fungsi atau masih
menggunakan satuan radian sehingga untuk mengubahnya kedalam
satuan derajat perlu dikali dengan 180/3,14 karena 180/3,14 =
57,324840. Setelah mendapatkan nilai sudut tangen, selanjutnya adalah

32
menggeser sudut tangen tersebut menjadi sudut acuan untuk arah mata
angin, karena pada tugas akhir ini menggunakan sensor magnetometer
atau kompas untuk menentukan arah mata angin. Pada Gambar 3.13
merupakan nilai sudut tangen berdasarkan sudut mata angin.

Gambar 3.13 Sudut Arah Mata Angin Berdasar Kompas


Dari proses yang telah dilakukan akan didapatkan dua parameter utama
yang akan dijadikan acuan dalam mendesain kontroler untuk gerak
rudder dan propeller, parameter tersebut yaitu:
1.Jarak yang ditempuh (m)
2.Sudut kompas tujuan (derajat)
Nilai parameter tersebut akan sangat menentukan arah haluan USV
di atas permukaan air, oleh karenanya perhitungan tersebut harus
mempunyai error sekecil mungkin.

3.4.3 Perancangan Kontroler Untuk Propulsi


Sistem propulsi pada USV ini menggunakan sebuah propeller dan
sebuah rudder. Rudder yang terpasang digerakkan oleh motor servo dan
propeller digerakkan oleh motor brushless. Perancangan kontroler ini
bertujuan untuk mengendalikan servo dan motor brushless agar USV
dapat bergerak ke titik koordinat tujuan, dimana kontroler ini memiliki
acuan terhadap parameter yang telah dihitung berdasarkan algoritma

33
waypoint GPS Tracking. Sistem propulsi dikendalikan oleh kontroler
yang terpisah, propeller berputar terhadap nilai acuan jarak yang
ditempuh, sedangkan untuk rudder bergerak terhadap nilai acuan sudut
arah kompas. Pada Gambar 3.14 merupakan blok diagram dari sistem
kendali USV.

Gambar 3.14 Blok Diagram Sistem Kendali

3.5 Desain Perangkat Mekanik


Pemilihan jenis hull kapal trimaran adalah untuk mendapatkan
kapal yang memiliki stabilitas tinggi, melihat kapal akan memiliki
sistem sensor guna membuat keakuratan sensor lebih terjaga. Selain itu
kapal jenis trimaran akan memiliki kecepatan yang sangat tinggi karena
bentuk body kapal akan runcing namun bisa membawa beban yang
cukup besar. Desain body hull dapat dilihat pada Gambar 3.15,
sedangkan spesifikasinya dapat dilihat pada Tabel 3.3.

Gambar 3.15 Desain Body Hull dari Sistem Mekanik USV


Tabel 3.3 Spesifikasi Sistem Mekanik USV
Jenis Hull Kapal Trimaran
Panjang 800 mm
Dimensi Lebar 480 mm
Tinggi 60 mm
Displacement ±12,00 kg
Kecepatan Maksimal 5 Km/h
Material/Bahan Fiberglass

34
3.6 Pembuatan Perangkat Lunak
Dalam perangkat lunak, terdapat beberapa program yang harus
dibuat untuk dapat mengetahui pergerakan kapal. Tahapan pembuatan
tersebut adalah sebagai berikut:

3.6.1 Pembuatan Flowchart Program Parsing Data

Gambar 3.16 Flowchart Program Parsing Data


Pada Gambar 3.16 merupakan diagram alur dari program yang
telah dibuat di LabVIEW. Pertama yangY harus dilakukan adalah pilih
port serial yang akan digunakan untuk sistem komunikasi antara
komputer dengan mikrokontroler STM32F4. Jika port serial sudah
terdeteksi maka data GPS berupa longitude dan latitude, sudut dari
modul kompas, kecepatan brushless, duty cycle akan dibaca oleh VISA
read LabVIEW. Setelah dibaca data longitude, latitude, sudut kompas,

35
kecepatan brushless dan duty cycle akan ditampilkan pada front panel
LabVIEW, untuk data longitude dan latitude tampilkan di XY-Graph.
Untuk dapat mengetahui tempat tujuan dari USV maka
disediakan dua waypoint, dimana setiap satu waypoint disediakan dua
titik yang akan menjadi tujuan dari USV yang kemudian akan
ditampilkan pada XY-Graph, setelah memilih waypoint maka data
longitude dan latitude yang terdapat pada waypoint tersebut harus
dikirimkan ke STM32F4 untuk dapat melakukan manuver kapal dengan
baik sesuai tujuan yang telah ditentukan oleh user.

3.6.2 Pembuatan Flowchart Program Monitoring Kamera

Gambar 3.17 Flowchart Program Kamera untuk Monitoring

36
Pada Gambar 3.17 merupakan diagram alur dari perekam video.
Perekam video merupakan pelengkap yang digunakan untuk memantau
area sekitar USV ketika sedang sedang beroperasi di perairan. Agar
kamera android dapat terhubung dengan LabVIEW, hal yang harus
dilakukan adalah meng-instal aplikasi IP Webcam. Setelah aplikasi
terinstal hubungkan android dan PC dengan jaringan wireless yang
sama. Sehingga di dalam selector LabVIEW terdapat dua pilihan
kamera yaitu “cam0” merupakan webcam yang terdapat di PC dan
“cam1” merupakan kamera yang terdapat di android dimana sebelumnya
telah terhubung dengan komputer yang memiliki alamat IP sama.
Setelah memilih Webcam yang digunakan maka di LabVIEW akan
menampilkan kondisi yang terekam oleh kamera yang telah dipilih.

3.6.3 Konfigurasi Port Serial dengan Visa

Gambar 3.18 Program Untuk Konfigurasi Serial Port


VISA configure serial port pada LabVIEW berfungsi untuk
menginisialisasi port serial yang ditentukan oleh VISA resource name ke
pengaturan yang ditentukan. Garis penghubung ke input VISA resource
name dapat dipilih secara manual. Baut rate yang digunakan untuk
komunikasi ini adalah 9600 disesuaikan dengan laju transmisi yang
dimiliki oleh modul HC-12. VISA read function berfungsi untuk
membaca jumlah byte yang terbaca dari device atau interface yang
ditentukan oleh VISA resource name dan mengembalikan data ke read
buffer. Untuk konfigurasi serial port dapat ditunjukan pada Gambar 3.18

3.6.4 Program Parsing Data

Gambar 3.19 Program Parsing Data

37
Data yang diterima dari VISA read function merupakan data yang
secara mentahan diterima dari STM32F4 yang ditampilkan pada serial
read data string, kemudian akan dipisah menjadi data longitude, latitude
dan derajat kompas. Fungsi dari concatenate string function adalah
untuk menggabungkan input string menjadi single output string, yang
kemudian lanjut ke Match patern function. Match patern function dalam
program ini berfungsi untuk regular expression pada data string yang
diterima dari VISA read function, kemudian data tersebut diberi karakter
“a” pada regular expression yang menandakan awal dari sebuah
pengiriman data serial, selanjutnya data string akan dikeluarkan melalui
after substring yang mengandung semua karakter yang ditemukan oleh
match pattern. Karakter “,” (koma) berfungsi untuk pemisah antar data
yang telah diterima dari VISA read function dan karakter “b”
menandakan bahwa pengiriman data serial telah berakhir. Fract/Exp
String to Number Function dalam program ini berfungsi untuk
menafsirkan data string menjadi tipe data double yang kemudian akan
digunakan untuk menampilkan data tersebut ke indikator kompas.
Gambar 3.19 merupakan program parsing data GPS.

3.6.5 Program untuk Pemilihan Waypoint

Gambar 3.20 Program untuk Pemilihan Waypoint


Pada program yang ditunjukan Gambar 3.20, penentuan waypoint
menggunakan case structure digunakan untuk memilih data longitude
dan latitude yang disajikan dalam bentuk titik, dimana titik-titik tersebut
akan menjadi tempat yang akan dituju oleh USV. Terdapat 2 waypoint
yang telah ditentukan, dimana satu waypoint terdiri dari dua titik yang
telah ditentukan oleh user. Pemilihan waypoint pada program ini
menggunakan case selector yang digunakan untuk menjalankan nilai
data yang telah di masukan ke dalam sub diagram. Didalam sub
diagram terdapat pula pilihan agar USV bergerak kearah utara

38
berdasarkan data yang diterima dari sensor kompas. Pemberian nama
selector label akan disesuaikan dengan nama yang digunakan pada case
selector. Pada program Gambar 3.20 data-data tersebut digunakan untuk
di tampilkan ke dalam XY-Graph, sedangkan data yang akan dikirimkan
ke mikrokontroler akan dijelaskan pada sub bab berikutnya.

3.6.6 Program untuk Mengirim Data ke STM32F4

Gambar 3.21 Program untuk Mengirim Data ke STM32F4


Pada program yang ditunjukan pada Gambar 3.21, data tersebut
dalam bentuk array 2 dimensi, dimana data tersebut akan dikirimkan ke
mikrokontroler STM32F4 agar titik waypoint yang telah ditentukan
dapat terdeteksi oleh GPS, sehingga GPS tersebut dapat menggerakan
USV dari titik longitude dan latitude dari satu tujuan ke tujuan yang
lain. Untuk data “go to north” dimaksudkan agar USV bergerak lurus
dari selatan menuju ke utara.

3.6.7 Program Delay Antar Data

Gambar 3.22 Program Delay Antar Data


Program pada Gambar 3.22, merupakan program untuk
mengetahui delay antar data yang dikirim melalui HC-12. Disini dapat
diketahui lama waktu pengiriman data dari STM32F4 menuju ke
komputer yang kemudian delay tersebut ditampilkan ke GUI LabVIEW.
Gate date / time in second function berfungai untuk mendapatkan waktu
dalam satuan detik.

39
3.6.8 Program untuk Memasukan Gambar Maps.

Gambar 3.23 Program untuk Memasukan Gambar Maps


Pada Gambar 3.23, terdapat program untuk memasukan gambar
yang berfungsi untuk background dalam XY-Graph. File Type berfungsi
untuk memilih format gambar yang akan digunakan, terdapat tiga
pilihan format gambar yang disediakan dalam program ini diantaranya
format gambar JPG, PNG dan BMP. Path to Image digunakan untuk
memilih gambar yang akan digunakan sebagai background XY-Graph.
Sedangkan Property node pada Gambar 3.23 menunjukan bahwa
program tersebut terhubung dengan tampilan XY-Graph.

3.6.9 Program untuk Kendali Manual dan Otomatis

Gambar 3.24 Program untuk Kendali Manual dan Otomatis


Pada Gambar 3.24 merupakan program untuk sistem kendali
USV secara manual maupun otomatis. Karena dalam pengendalian
secara otomatis terdapat pilihan yang menggunakan sensor kompas agar
USV bergerak ke utara maka digunakan VISA Configure Serial Port
untuk membaca data kompas dari mikrokontroler. Initialize Keyboard

40
digunakan untuk mendeteksi keberadaan keyboard yang terhubung
dengan komputer, selanjutnya terhubung dengan Acquire Input Data
untuk menentukan tombol keyboard mana yang telah dipilih oleh user.
Sebelum melakukan pengendalian atur switch data terlebih dahulu
dalam mode manual atau otomatis. Jika ingin mode manual nyalakan
switch data kirim, kemudian tombol tekan tombol keyboard UP untuk
kapal bergerak maju, LEFT untuk kapal belok ke kiri dan RIGHT agar
kapal bergerak ke kanan. Kemudian VISA Serial Write digunakan untuk
mengirimkan data dari keyboard untuk dikirim ke mikrokontroler.
Jika user menginginkan mode otomatis maka matikan terlebih
dahulu switch data kirim. Untuk mode otomatis user tidak perlu
menekan tombol keyboard untuk manuver USV, karena kapal akan
secara otomatis bergerak menuju waypoint yang telah ditentukan oleh
user sebelumnya.

3.6.10 Program Menampilkan Video

Gambar 3.25 Program Menampilkan Video


Pada Gambar 3.25, menunjukan bahwa program tersebut
berfungsi untuk memperlihatkan pergerakan yang terdapat disekitar
kapal USV. Open camera berfungsi untuk memilih dan melakukan
konfigurasi kamera yang akan digunakan sebagai perekam video.
Didalam function terdapat session in yang berfungsi untuk masukan
selector pemilih kamera dan session out yang merupkan keluaran dari
open camera. Setelah dari open camera proses akan berlanjut ke
Configure grab, dimana configure grab berfungsi untuk
mengkonfigurasi dan memulai akuisisi grab. Setelah grab terambil dan
dilakukan konfigurasi IMAQdx grab akan mengakuisisi frame terbaru
menjadi keluaran gambar, sehingga kamera dapat bekerja dan
ditampilkan di front panel. Didalam IMAQdx grab terdapat jalur image
in yang akan terhubung dengan image create yang berfungsi sebagai
lokasi penyimpanan gambar baru. Setelah keseluruhan proses selesai

41
IMAQdx grab akan terhubung dengan close camera yang berfungsi
untuk menghentikan proses akuisisi yang sedang berjalan.

3.6.11 Konfigurasi IP Camera


Agar program dari LabVIEW dapat mengakses IP Camera, PC
atau laptop yang digunakan harus tersambung dengan jaringan lokal
yang sudah terkoneksi dengan IP camera. Pada tugas akhir ini
digunakan smartphone android sebagai IP Camera dengan bantuan
aplikasi IP webcam, aplikasi tersebut dapat didownload di google
playstore. Jaringan lokal pada tugas akhir ini menggunakan hotspot dari
smartphone android. Setelah PC tersambung pada jaringan lokal dari
hotspot smartphone, baru kemudian aplikasi tersebut dijalankan dan
mengubah setting dari webcam PC ke IP Camera sesuai dengan URL
yang telah ditampilkan oleh aplikasi IP webcam.

Gambar 3.26 Tampilan Aplikasi IP Webcam


Pada Gambar 3.26 merupakan tampilan awal dari aplikasi IP
Webcam, untuk memulai stream video dengan cara memilih opsi Start
server.

42
Gambar 3.27 Tampilan Kamera dari Aplikasi IP Webcam
Pada Gambar 3.27 lingkaran berwarna merah menunjukkan URL
yang harus dimasukkan pada setting webcam PC agar IP Camera dapat
terdeteksi.

3.6.12 Mapping Area Danau Graha

2
1

2
1

Gambar 3.28 Mapping Area Danau Graha


Gambar 3.28 merupakan maps danau graha yang akan digunakan
untuk lokasi pengujian unmanned surface vehicle setelah selesai
perancangan, dimana titik berwarna merah 1 menuju ke merah 2
merupakan waypoint1 dan titik berwarna kuning 1 menuju ke kuning 2
merupakan waypoint2. Letak titik koordinat danau graha yang akan
digunakan diantara -7,277327; 112,790304 sampai -7,276601;
112,790927 yang memiliki luas kurang lebih 81,70 x 68,68 meter.
Pengukuran ini dilakukan dengan measurement distance di google maps.

43
3.6.13 Tampilan GUI (Graphical User Interface) LabVIEW
Pada tampilan GUI LabVIEW yang terdapat dalam perancangan
sistem kendali USV ini terdapat empat tab tampilan yang digunakan.
Tampilan tab 1 seperti Gambar 3.29 digunakan untuk menampilkan data
longitude, latitude kompas, pemilihan port serial, pemilihan waypoint
dan menampilkan maps serta menampilkan jeda pengiriman antar data
dalam satuan detik.

Gambar 3.29 Tampilan GUI TAB 1


Tab 2 seperti Gambar 3.30 digunakan untuk menampilkan data
serial secara keseluruhan yang diterima dari mikrokontroler,
memasukan gambar maps dan memilih tipe file dari gambar, memilih
dan menampikan data yang akan dikirim ke mikrokontroler, serta
menentukan mode pengendalian secara manual atau otomatis.

Gambar 3.30 Tampilan GUI TAB 2

44
Tab 3 seperti yang ditunjukan Gambar 3.31 digunakan untuk
menampilkan kecepatan USV saat berjalan berdasarkan GPS, kamera
yang digunakan untuk memantau keadaan disekitar area USV serta
tombol yang digunakan untuk melakukan kontrol manual kapal USV.

Gambar 3.31 Tampilan GUI TAB 3


Tab ke 4 seperti yang ditunjukan Gambar 3.32 berguna untuk
menampilkan grafik hasil pembacaan data longitude, latitude dan sudut
kompas yang diterima dari STM32F4.

Gambar 3.32 Tampilan GUI TAB 4

45
-----Halaman ini sengaja dikosongkan-----

46
4 BAB IV HASIL SIMULASI DAN IMPLEMENTASI
HASIL SIMULASI DAN IMPLEMENTASI

Untuk mengetahui bahwa sistem kendali Unmnned Surface


Vehicle (USV) telah bekerja dengan benar maka perlu dilakukan
pengujian dan pengambilan data dari tiap-tiap sensor. Sensor yang
digunakan meliputi magnetometer atau kompas serta modul GPS
receiver yang digunakan untuk navigasi dalam USV. Setelah dilakukan
pengujian pada bagian sensor dilakukan percobaan atau trial pada sistem
USV untuk mengetahui respon dari sistem. Trial atau percobaan sistem
kendali ini meliputi trial mode manual (Manual mode) dan trial mode
otomatis (Autonomus mode). Alat yang telah selesai dapat dilihat pada
Gambar 4.1. Pada poin 4.3 dan 4.4 merupakan tugas penelitian Ahmad
Reza Fahlovi dan poin 4.1 dan 4.2 merupakan tugas penelitian Suwarno.

Gambar 4.1 Bentuk Fisik Keseluruhan Alat

4.1 Pengujian Sensor Kompas dengan LabVIEW


Simulasi dilakukan dengan mengambil kondisi awal untuk posisi
sudut kompas berada di sudut 0, 90, 180 dan 270 derajat. Cara
pengambilan data yang digunakan adalah dengan memprogram
STM32F4 dengan membaca komunikasi serial, untuk mengetahui
besarnya sudut yang ditampilkan pada LabVIEW. Sebelum melakukan
pengambilan data perlu dicek wiring antara modul kompas HMC58883l
dengan STM32F4. Berikut ini adalah langkah-langkah dalam pengujian
dan pembacaan kompas.
1. Buat wiring antara STM32 dengan kompas menggunakan
komunikasi I2C.

47
2. Wiring kompas HMC5883l dan STM32 seperti pada Gambar
4.2

Modul Kompas
HMC588831

Gambar 4.2 Wiring Modul HMC58883l dengan STM32F4


3. Konversi nilai sudut heading kompas
4. Atur offset untuk sudut deklinasi sesuai dengan daerah.
5. Dengan menggunakan CooCoox IDE dibuat suatu program
untuk membaca data dari modul kompas HMC5883L, listing
program dapat dilihat pada Gambar 4.3.

Gambar 4.3 Listing Program Mengakses Kompas


6. Kemudian setelah berhasil mengakses modul kompas
HMC58883l, modul kompas HMC58883l mempunyai sudut
heading seperti yang ditunjukkan pada Gambar 4.4.
Selanjutnya data dari modul tersebut dikirim ke PC dengan
pengiriman data serial untuk dilihat respon kompasnya.

48
Gambar 4.4 Arah Heading Sudut Kompas HMC58883l
Pada modul kompas HMC58883l arah heading kompas
berada pada sumbu X, untuk mengetahui respon sistem dan
error pembacaan data, dilakukan pengambilan data pada 4 arah
mata angin, yaitu utara (0o), timur (90o), selatan (180o) dan
barat (270o). Kompas ini harus diputar sejajar dengan
permukaan bumi ,agar tidak terpengaruh oleh sudut inklinasi
kompas.
Tabel 4.1 Nilai Sudut Kompas

Sudut Kompas
Time
o o
0 90 180o 270o
0 0,556 90,869 180,356 270,983
1 0,983 90,753 180,355 270,697
2 0,274 90,868 180,732 271,405
3 0,409 90,868 180,731 270,840
4 0,556 90,641 180,607 270,699
5 0,560 90,525 180,355 270,842
6 0,700 90,983 180,732 270,701
7 0,840 90,641 179,976 270,703
8 0,417 91,098 180,229 270,983

49
Sudut Kompas
Time 0
0 900 1800 2700
9 0,413 90,983 180,232 270,698
10 0,841 90,754 180,604 270,983
11 0,698 90,413 180,480 270,701
12 0,413 90,983 180,731 270,701
13 0,841 90,753 180,349 270,557
14 0,699 91,098 180,733 271,124
15 0,414 90,754 180,227 270,842
16 0,418 90,521 180,232 270,701
17 0,701 90,868 180,605 270,557
18 0,841 91,098 180,222 270,699
19 0,555 90,528 180,352 270,560
20 0,841 90,405 180,353 270,983
21 0,553 90,526 180,480 270,842
22 0,556 90,639 180,475 270,561
23 0,556 90,868 180,603 270,699
24 0,701 90,983 180,479 271,125
25 0,556 90,754 180,480 270,699
26 0,840 90,753 180,353 270,983
27 0,700 90,983 180,480 270,701
28 0,126 90,640 180,352 270,842
29 0,696 90,753 180,352 270,560
30 0,842 90,639 180,607 270,414
31 0,269 90,983 180,105 270,699
32 0,556 90,868 180,731 270,841
33 0,560 90,868 180,226 270,983
34 0,417 90,637 180,729 270,841
35 0,554 90,868 180,229 270,556

50
Sudut Kompas
Time 0
0 900 1800 2700
36 0,411 90,526 180,353 270,559
37 0,559 90,637 180,481 270,840
38 0,698 91,097 180,478 270,413
39 0,983 90,640 180,346 270,843
40 0,841 90,868 180,103 270,703
41 0,556 90,639 180,103 270,413
42 0,418 90,409 180,731 270,700
43 0,560 90,520 180,229 270,841
44 0,841 90,868 180,606 270,555
45 0,840 90,525 180,605 270,841
46 0,128 90,754 180,477 270,279
47 0,555 90,983 180,355 270,843
48 0,413 90,639 180,606 270,559
49 0,841 90,639 180,351 270,699
50 0,558 91,098 180,478 270,559
51 0,272 90,637 180,476 270,983
52 0,699 90,754 180,730 270,420
53 0,841 90,868 180,353 270,842
54 0,700 90,868 180,606 270,842
55 0,699 90,636 180,483 270,983
56 0,274 90,754 180,103 270,699
57 0,267 91,212 180,226 271,125
58 0,840 90,752 180,483 270,697
59 0,558 91,098 180,477 270,700
60 0,699 90,868 180,353 270,560
Data dari Tabel 4.1 merupakan data yang ditampilkan pada
LabVIEW yang merupakan hasil pembacaan komunikasi serial. Data

51
tersebut juga dapat disajikan dalam grafik yang diperlihatkan pada
Gambar 4.5, 4.6, 4.7 dan Gambar 4.8.

Gambar 4.5 Plotting Data Kompas 0o

Gambar 4.6 Plotting Data Kompas 90o

Gambar 4.7 Plotting Data Kompas 180o

52
Gambar 4.8 Plotting Data Kompas 270o
Hasil pembacaan sensor kompas dapat mudah terganggu jika
peletakaannya didekatkan dengan benda logam maupun medan magnet.
Dari hasil pengujian nilai error pembacaan kompas akan semakin besar
yakni antara 0 sampai 18 o.
Tabel 4.2 Nilai Sudut Kompas dengan Gangguan Magnet

No Sudut No Sudut No Sudut


1 90,855 13 85,411 25 89,232
2 90,599 14 92,318 26 89,707
3 90,983 15 86,818 27 90,849
4 88,919 16 89,487 28 91,775
5 90,6 17 89,944 29 94,04
6 89,886 18 90,467 30 87,665
7 85,214 19 96,352 31 92,323
8 89,724 20 90,184 32 92,14
9 84,239 21 90,714 33 89,819
10 81,289 22 90,286 34 98,096
11 87,485 23 87,591 35 87,242
12 89,255 24 84,033 36 87,631

53
No. Sudut No. Sudut No. Sudut
37 91,111 45 88,546 53 94,14
38 89,5 46 85,349 54 90,596
39 90,595 47 92,596 55 90,607
40 90,598 48 89,021 56 90,73
41 90,856 49 84,552 57 92,442
42 80,092 50 91,64 58 89,268
43 92,269 51 82,023 59 91,492
44 91,244 52 91,323 60 82,617
Min 81,289
Maks 96,352
Error 15,063
Data yang ditunjukan pada Tabel 4.2 merupakan data yang
diambil dengan gangguan medan magnet. Dari data tersebut dapat
disajikan pula dalam bentuk grafik seperti Gambar 4.9 dan Gambar 4.10
berikut:

Gambar 4.9 Plotting Data Kompas 90 o yang Terganggu Magnet

54
0 101

Gambar 4.10 Plotting Sudut Kompas 2700 dengan LabVIEW

4.2 Pengujian Modul GPS dengan LabVIEW


Tujuan dari pengambilan data ini adalah untuk mendapatkan titik
longitude dan latitude dari modul GPS dan melihat tingkat kepresisian.
Selain itu pengujian ini juga untuk mendapatkan titik waypoint yang
cocok untuk manuver secara otomatis agar USV tidak keluar dari titik
koordinat yang telah ditentukan secara manual oleh user. Salah satu
sampel data longitude pada Gambar 4.13 dan latitude Gambar 4.14 yang
telah terekam oleh LabVIEW, sedangkan untuk listing program pada
Gambar 4.12. Wiring antara GPS dengan STM32F4 dapat ditunjukan
pada Gamabar 4.11 berikut:

Modul GPS
NEO-06

VCC

TX
GND

Gambar 4.11 Wiring antara GPS dengan STM32F4


Output GPS NEO-06 ini berupa NMEA Standard , data koordinat
yang asli masih berupa Degree Minute Second (DMS). Sehingga perlu
dikonfersi ke Decimal Degree untuk mempermudahkan perhitungan.

55
Gambar 4.12 Listing Program Konversi DMS ke Decimal Degree

Gambar 4.13 Plotting Longitude Modul GPS U-Blox

Gambar 4.14 Plotting Latitude Modul GPS U-Blox

56
4.3 Pengujian Manuver dan Speed USV
Sebelum dilakukan running test pada sistem kendali manual, perlu
dilakukan pengujian dari sistem propulsi atau penggerak yang terpasang
pada USV. Pengujian ini dilakukan di danau Graha ITS. Pengujian
thrust dilakukan untuk mengetahui USV dapat berjalan maju, seperti
yang diperlihatkan pada Gambar 4.15, sedangkan pada Gambar 4.16
merupakan kondisi rudder dan propeller ketika di air.

Gambar 4.15 Pengujian Thrust USV di Atas Permukaan Air

Gambar 4.16 Pengujian Gerak Propeller dan Rudder

4.4 Pengujian Sistem Kendali


Pengujian ini dilakukan untuk mengetahui apakah sistem berjalan
sesuai dengan keinginan. Pada masing-masing mode diuji pergerakan
pada aktuatornya yang terdiri dari motor brushless dan motor servo.

4.4.1 Pengujian Mode Manual


Mode ini digunakan untuk mengendalikan gerak USV di atas air
dengan menggunakan keyboard PC, LabVIEW mengakses data pada
keyboard yang kemudian dikirimkan ke STM32F4. Gambar 4.17

57
merupakan tampilan untuk mengetahui mode yang sedang berjalan
dapat dilihat pada tab monitoring.

Gambar 4.17 Tampilan Tab Monitoring di LabVIEW ketika Mode Manual


Tabel 4.3. Hasil Percobaan Kendali pada Mode Manual atau Remote
Labview STM32F4
BLDC Servo Keterangan
Keyboard ASCII
(Duty Cycle) (sudut)
UP 102 50% 90 o Thrust maju
LEFT 68 30% 60 o Halauan kiri
Halauan
RIGHT 92 30% 120 o
kanan
DOWN,
dan tombol - - - Berhenti
lain
Dari hasil uji coba seperti Tabel 4.3 didapat data di STM32F4,
data tersebut dikonversi agar dapat menggerakkan actuator, ketika
tombol UP ditekan USV berjalan maju,ketika RIGHT ditekan USV
halauan kanan, sedangkan LEFT ditekan USV halauan kiri. Dan ketika
ketiga tombol tersebut tidak ditekan maka USV berhenti berjalan.

4.4.2 Pengujian Mode Autonomus


A. Waypoint GPS Tracking
Fungsi dari mode autonomus yang paling utama adalah
dengan menelusuri waypoint GPS yang dikirim oleh user
melalui PC. Pada pengujian ini dikirimkan 2 macam waypoint
GPS ke STM32F4, masing-masing waypoint mempunyai 2
lokasi titik koordinat. Titik koordinat yang dijadikan waypoint
dapat dilihat pada Tabel 4.4 berikut:

58
Tabel 4.4. Titik Longitude dan Latitude
Waypoint 1 Waypoint 2
Koor
latt Long Latt long
dinat
1 -7,277060 112,7906115 -7,276825 112,7906650
2 -7,276801 112,7905343 -7,276921 112,7905220
Dari hasil trial di Danau graha ITS, USV dapat bergerak ke
titik koordinat tujuan dari masing – masing waypoint yang dikirim
ke STM32F4. Hasil pengujian dapat dilihat pada Gambar 4.18
untuk waypoint1 dan Gambar 4.19 untuk waypoint2.

Gambar 4.18 USV Bergerak ke Waypoint1

Gambar 4.19 USV Bergerak ke Waypoint2

59
B. Kendali dengan Kompas
Agar USV dapat berjalan kearah mata angin tertentu,
diperlukan nilai sudut kompas untuk dijadikan acuan kontroler
dalam mengontrol halauan USV. Dalam percobaan ini nilai
acuan sudut kompas yang dipakai adalah nilai sudut dari arah
utara yaitu 00.

Gambar 4.20 USV Bergerak ke Utara

Gambar 4.21 USV Bergerak Semakin ke Utara


Dari hasil percobaan didapatkan USV selalu bergerak menuju
kearah utara walaupun dihadapkan pada sudut manapun.
Seperti yang diperlihatkan pada Gambar 4.20 dan Gambar 4.21.

60
5 BAB V PENUTUP
PENUTUP

Dari hasil pengujian sistem, dapat diambil kesimpulan bahwa


sistem navigasi yang digunakan meliputi, sensor kompas mempunyai
rata-rata kesalahan yang terjadi sebesar 0,198978 % dengan kesalahan
sudut rata-rata sebesar 0,5372 derajat. Sedangkan untuk kesalahan pada
GPS kurang lebih sebesar 2,5 meter dengan uji coba di luar ruangan.
Tampilan antarmuka LabVIEW cukup bagus untuk proses memonitoring
area sekita USV dengan menggunakan kamera dan memiliki respon
yang cukup akurat untuk pengontrolan jarak jauh menggunakan tombol
keyboard komputer.
Saran untuk penelitian selanjutnya adalah sebaiknya menggunakan
GPS dengan tingkat akurasi kurang dari 2,5 meter untuk mendapatkan
titik koordinat yang lebih akurat. Dan menggunakan modul komunikasi
wireless yang mampu melakukan pengiriman data dengan delay yang
kecil.

61
-----Halaman ini sengaja dikosongkan-----

62
6 DAFTAR PUSTAKA

[1] Justin E. Manley. Unmanned Surface Vehicle, 15 Years of


Development. Wahington St. Duxbury. 2008.
[2] Dhanasingaraja R, Kalaimagal S dan Muralidharan G.
Autonomous Vehichle Navigation and Mapping System. Jurnal
Teknik. Madras Institute of Tecnology. India. 2014.
[3] Stallings, William. Wireless Communications and Network.
United States of America : Prentice Hall. 2005
[4] Bitter, Rick, Taqi Mohiuddin, dan Matt Nawrocki. LabVIEW :
Advanced Programming Techniques. New York : CRC Press.
2006.
[5] Rosario, Yosa. Sistem Navigasi Ruangan Quadcopter dengan
Menggunakan Sensor Ultrasonik. Tugas Akhir. Jurusan Teknik
Elektro. Fakultas Teknologi Industri. Institut Teknologi Sepuluh
Nopember. Surabaya. 2014.
[6] Nurhartono, Agus. Perancangan Sistem Keamanan Untuk
Mengetahui Posisi Kendaraan Yang Hilang Berbasis GPS dan
ditampilkan dengan Smarthphone. Tugas Akhir. Jurusan Teknik
Elektronika, Fakultas Teknik. Universitas Negeri Yogyakarta.
Yogyakarta. 2015.
[7] Adifurball. Interfacing Digital Compass (HMC5883L) With
Raspberry Pi 2 Using Python3. http://www.instructables.com/id/
Interfacing-Digital-Compass-HMC5883L-with-Raspberr/. 2016.
[8] Rozee, Robert. HC-12 Wireless Serial Port Communication
Module. Datasheet. 2016
[9] Iqbal Maulana dan Kharisma Nur H. Motor Servo DC. Jurusan
Elektro. Politeknik Negeri Bandung. Bandung. 2014.
[10] Risha Anugerah Nenu Lema. Flight Controller pada Sistem
Quatcopter menggunakan Sensor IMU (Internal Measurement
Unit) Berbasis Mikrokontoller Atmega 2560. Tugas Akhir.
Teknik Elektro. Fakultas Sains dan Teknologi. Universitas Sanata
Dharma. Yogyakarta. 2016.

63
[11] Aryanto, Mahmud. IP Camera dan Aplikasinya. Jakarta : PT Elex
Media Komputindo. 2010.

64
7 LAMPIRAN A
A.1. Program LabVIEW Keseluruhan

65
66
A.2. Listing Program Keseluruhan
#include "stm32f4xx.h"
#include "stm32f4xx_conf.h"
#include "stdio.h"
#include "delay.h"
#include "stdlib.h"
#include "lcd_biasa.h"
#include "math.h"
#include "filter.h"
#include "string.h"
#define data_state data_android[24]
#define tidak_ada_bola_terdeteksi 3
#define SLAVE_ADDRESS_KOMPAS 0x1E
#define time_out_i2c 100
#define PI 3.14159265
#define tombol GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define buzzer_on
GPIO_WriteBit(GPIOC,GPIO_Pin_1,1)
#define buzzer_off
GPIO_WriteBit(GPIOC,GPIO_Pin_1,0)
void monitoring_data();
void ambildata();
void kirim_data_ke_pc(char data);
void toChar(double dataConvert);
void toChar2(double dataConvert);
int mode_usv=0;
//variabel persamaan garis kanan
float y_kanan_0=283;
float y_kanan_1=178;
float x_kanan_0=378;
float x_kanan_1=337;
float m_kanan;
//variabel persamaan garis kiri
float y_kiri_0=270;
float y_kiri_1=207;
float x_kiri_0=50;
float x_kiri_1=227;
float m_kiri;

67
float p_kontrol_lurus=3;//;1.5;
float d_kontrol_lurus=2;//10;
int x,y;
char status_bola;
char tampil[32];
char tampil2[32];
char tampil3[32];
char tampil4[32];
float data_x=240;
float data_y=160;
float data_r;
float data_kompas360;
float data_kompas180;
float data_y_trigger=225;
char data_android[30];
char karakter[50];
char karakter2[50];
char kirimString[100];
#define out1 TIM3->CCR1
#define out2 TIM3->CCR2
#define out3 TIM3->CCR3
#define out4 TIM3->CCR4
#define out5 TIM4->CCR1
#define out6 TIM4->CCR2
#define out7 TIM4->CCR3
#define out8 TIM4->CCR4
signed long int data1[2];
signed long int data2[2];
signed long int data3[2];
signed long int data4[2];
signed long int data5[2];
signed long int data6[2];
signed long int data7[2];
signed long int data8[2];
long int pewaktu;
long int pewaktu_i2c;
long int pewaktu1ms;
long int pewaktu100ms;
long int pewaktu_kontrol;

68
/******variabel kompas*****/
double sudut180_kompas=0;
double sudut_kompas;
double offset_sudut_kompas=90;
int buffer_data_raw_kompas[6];
signed short int data_raw_kompas_X;
signed short int data_raw_kompas_Y;
signed short int data_raw_kompas_Z;
double array_filter_kompas[40];
double array_filter_lattitude[40];
double array_filter_longitude[40];
float Degrees;
int DegreesInt;
signed long int lebar_pulsa1=3000;
signed long int lebar_pulsa2=3000;
signed long int lebar_pulsa3=3000;
signed long int lebar_pulsa4=3000;
signed long int lebar_pulsa5=3000;
signed long int lebar_pulsa6=3000;
signed long int lebar_pulsa7=3000;
signed long int lebar_pulsa8=3000;
// variabel waypoint
double set_poinX=0;
double set_poinY=0;
double result;
double P_lintasan;
double latt_target=-7.277657;
double lon_target=112.798263;
float tangen;
float set_poinKompas=0;
float sudutKompas;
//variable waypoin 6 titik
double waypoint_latt1;
double waypoint_lon1;
double waypoint_latt2;
double waypoint_lon2;
double waypoint_latt3;
double waypoint_lon3;
double waypoint_latt4;

69
double waypoint_lon4;
double waypoint_latt5;
double waypoint_lon5;
double waypoint_latt6;
double waypoint_lon6;
int hitung;
char data_siap;
long int data_capture1;
int dapatkan_set_poin_kanan(int data_y)
{int data x=(data_y+m_kanan*x_kanan_0-y_kanan_0/m_kanan;
return data_x;}
int dapatkan_set_poin_kiri(int data_y)
{ int data_x =(data_y + m_kiri*x_kiri_0 - y_kiri_0)/m_kiri;
return data_x;}
int state_remot=0;
int pid_control(int p,int d, int set_point, int kondisi,int
nilai_tengah);
//untuk status capture
#define falling 1
#define rising 0
#define kondisi_polaritas1_rising ((TIM1->CCER)>>1 & 1)==0
#define kondisi_polaritas1_falling ((TIM1->CCER)>>1 & 1)==1
#define kondisi_polaritas2_rising ((TIM1->CCER)>>5 & 1)==0
#define kondisi_polaritas2_falling ((TIM1->CCER)>>5 & 1)==1
#define kondisi_polaritas3_rising ((TIM1->CCER)>>9 & 1)==0
#define kondisi_polaritas3_falling ((TIM1->CCER)>>9 & 1)==1
#define kondisi_polaritas4_rising ((TIM1->CCER)>>13 & 1)==0
#define kondisi_polaritas4_falling ((TIM1->CCER)>>13 & 1)==1
#define kondisi_polaritas5_rising ((TIM8->CCER)>>1 & 1)==0
#define kondisi_polaritas5_falling ((TIM8->CCER)>>1 & 1)==1
#define kondisi_polaritas6_rising ((TIM8->CCER)>>5 & 1)==0
#define kondisi_polaritas6_falling ((TIM8->CCER)>>5 & 1)==1
#define kondisi_polaritas7_rising ((TIM8->CCER)>>9 & 1)==0
#define kondisi_polaritas7_falling ((TIM8->CCER)>>9 & 1)==1
#define kondisi_polaritas8_rising ((TIM8->CCER)>>13 & 1)==0
#define kondisi_polaritas8_falling ((TIM8->CCER)>>13 & 1)==1
#define polaritas1_falling (TIM1->CCER|=(1<<1))
#define polaritas1_rising (TIM1->CCER &= ~(1<<1))
#define polaritas2_falling (TIM1->CCER|=(1<<5))

70
#define polaritas2_rising (TIM1->CCER &= ~(1<<5))
#define polaritas3_falling (TIM1->CCER|=(1<<9))
#define polaritas3_rising (TIM1->CCER &= ~(1<<9))
#define polaritas4_falling (TIM1->CCER|=(1<<13))
#define polaritas4_rising (TIM1->CCER &= ~(1<<13))
#define polaritas5_falling (TIM8->CCER|=(1<<1))
#define polaritas5_rising (TIM8->CCER &= ~(1<<1))
#define polaritas6_falling (TIM8->CCER|=(1<<5))
#define polaritas6_rising (TIM8->CCER &= ~(1<<5))
#define polaritas7_falling (TIM8->CCER|=(1<<9))
#define polaritas7_rising (TIM8->CCER &= ~(1<<9))
#define polaritas8_falling (TIM8->CCER|=(1<<13))
#define polaritas8_rising (TIM8->CCER &= ~(1<<13))
#define periode_tim1 40000-1
#define periode_tim8 40000-1
#define SERVO out5//=out2
#define MOTOR out4//out7=out8
void kontrol_kompas_reza();
/////////////////////////deklarasi fungsi////////////////////
void halauan_kanan(float halauan_max,float waktu_halauan,int
waktu_halauan_tetap,int waktu_kembali);
void halauan_kiri(float halauan_max,float waktu_halauan,int
waktu_halauan_tetap,int waktu_kembali);
void halauan_kanan2(float halauan_max,float waktu_halauan,int
waktu_halauan_tetap,int waktu_kembali);
void halauan_kiri2(float halauan_max,float waktu_halauan,int
waktu_halauan_tetap,int waktu_kembali);
void halauan_kanan3(float halauan_max,float waktu_halauan,int
waktu_halauan_tetap);
void halauan_kiri3(float halauan_max,float waktu_halauan,int
waktu_halauan_tetap);
void ambil_waypoint_pc();
void convert_waypoin();
char status_halauan_kanan2=0;
char status_halauan_kiri2=0;
void lcd(char kolom,char baris,char*string)
{ lcd_gotoxy(kolom,baris);
lcd_puts(string);}
/**********************I2c***********************/

71
void init_I2C2(void) //inisialisasi I2C
{ GPIO_InitTypeDef GPIO_InitStruct;
I2C_InitTypeDef I2C_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2,
ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,
ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; //
we are going to use PB6 and PB7
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource10,
GPIO_AF_I2C2); // SCL
GPIO_PinAFConfig(GPIOB, GPIO_PinSource11,
GPIO_AF_I2C2); // SDA
I2C_InitStruct.I2C_ClockSpeed = 100000; // 100kHz
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
// I2C mode
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; // 50%
duty cycle --> standard
I2C_InitStruct.I2C_OwnAddress1 = 0x00;
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; // disable
acknowledge when reading (can be changed later on)
I2C_InitStruct.I2C_AcknowledgedAddress =
I2C_AcknowledgedAddress_7bit; // set address length to 7 bit
addresses
I2C_Init(I2C2, &I2C_InitStruct);
I2C_Cmd(I2C2, ENABLE);}
_start(I2C_TypeDef* I2Cx, uint8_t address, uint8_t direction)
{ pewaktu_i2c=0;
while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY))
{if(pewaktu_i2c>time_out_i2c)break;
}
// Send I2C2 START condition
I2C_GenerateSTART(I2Cx, ENABLE);

72
while(!I2C_CheckEvent(I2Cx,
I2C_EVENT_MASTER_MODE_SELECT))if(pewaktu_i2c>time_out_i
2c)break;;
I2C_Send7bitAddress(I2Cx, address, direction);
if(direction == I2C_Direction_Transmitter){
while(!I2C_CheckEvent(I2Cx,
I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
{ if(pewaktu_i2c>time_out_i2c)break;}}
else if(direction == I2C_Direction_Receiver){
while(!I2C_CheckEvent(I2Cx,
I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))if(pewaktu
_i2c>time_out_i2c)break; }
}
void I2C_write(I2C_TypeDef* I2Cx, uint8_t data)
{
pewaktu_i2c=0;
I2C_SendData(I2Cx, data);
while(!I2C_CheckEvent(I2Cx,
I2C_EVENT_MASTER_BYTE_TRANSMITTED))if(pewaktu_i2c>tim
e_out_i2c)break;
}
uint8_t I2C_read_ack(I2C_TypeDef* I2Cx){
pewaktu_i2c=0;
I2C_AcknowledgeConfig(I2Cx, ENABLE);
while( !I2C_CheckEvent(I2Cx,
I2C_EVENT_MASTER_BYTE_RECEIVED))if(pewaktu_i2c>time_ou
t_i2c)break;
uint8_t data = I2C_ReceiveData(I2Cx);
return data;}
uint8_t I2C_read_nack(I2C_TypeDef* I2Cx){
pewaktu_i2c=0;
I2C_AcknowledgeConfig(I2Cx, DISABLE);
I2C_GenerateSTOP(I2Cx, ENABLE);
while( !I2C_CheckEvent(I2Cx,
I2C_EVENT_MASTER_BYTE_RECEIVED)
)if(pewaktu_i2c>time_out_i2c)break;
uint8_t data = I2C_ReceiveData(I2Cx);
return data;
}

73
void I2C_stop(I2C_TypeDef* I2Cx){
// Send I2C2 STOP Condition
I2C_GenerateSTOP(I2Cx, ENABLE);}
void inisialisasi_pwm()
{ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,
ENABLE); //aktifkan clock timer 3
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,
ENABLE); //aktifkan clock timer 4
GPIO_InitTypeDef definisi_pin;
definisi_pin.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
definisi_pin.GPIO_Mode = GPIO_Mode_AF;
definisi_pin.GPIO_OType = GPIO_OType_PP;
definisi_pin.GPIO_Speed = GPIO_Speed_50MHz;
definisi_pin.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &definisi_pin);
definisi_pin.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
definisi_pin.GPIO_Mode = GPIO_Mode_AF;
definisi_pin.GPIO_OType = GPIO_OType_PP;
definisi_pin.GPIO_Speed = GPIO_Speed_50MHz;
definisi_pin.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &definisi_pin);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource1,
GPIO_AF_TIM3);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource0,
GPIO_AF_TIM3);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6,
GPIO_AF_TIM3);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7,
GPIO_AF_TIM3);
TIM_OCInitTypeDef definisi_OC;
TIM_TimeBaseInitTypeDef definisi_timebase;
definisi_timebase.TIM_Prescaler = 83; //200hz
definisi_timebase.TIM_Period = 20000-1 ; //periode-
1;
definisi_timebase.TIM_ClockDivision =
TIM_CKD_DIV1;
definisi_timebase.TIM_CounterMode =
TIM_CounterMode_Down;
TIM_TimeBaseInit(TIM3, &definisi_timebase);

74
TIM_ARRPreloadConfig(TIM3, ENABLE);
definisi_OC.TIM_OCMode = TIM_OCMode_PWM1;
definisi_OC.TIM_OutputState =
TIM_OutputState_Enable;
definisi_OC.TIM_OCPolarity =
TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &definisi_OC);
TIM_OC2Init(TIM3, &definisi_OC);
TIM_OC3Init(TIM3, &definisi_OC);
TIM_OC4Init(TIM3, &definisi_OC);
TIM_OCPreload_Enable);
TIM_OC1PreloadConfig(TIM3,
TIM_OCPreload_Disable);
TIM_OC2PreloadConfig(TIM3,
TIM_OCPreload_Disable);
TIM_OC3PreloadConfig(TIM3,
TIM_OCPreload_Disable);
TIM_OC4PreloadConfig(TIM3,
TIM_OCPreload_Disable);
TIM_CtrlPWMOutputs(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE);
/////////Inisialisasi PWM Timer 4///////////////
definisi_pin.GPIO_Pin = GPIO_Pin_12 |
GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
definisi_pin.GPIO_Mode = GPIO_Mode_AF;
definisi_pin.GPIO_OType = GPIO_OType_PP;
definisi_pin.GPIO_Speed = GPIO_Speed_50MHz;
definisi_pin.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD, &definisi_pin);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource12,
GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource13,
GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource14,
GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource15,
GPIO_AF_TIM4);
definisi_timebase.TIM_Prescaler = 83; //200hz

75
definisi_timebase.TIM_Period = 20000-1 ; //periode-
1;
definisi_timebase.TIM_ClockDivision =
TIM_CKD_DIV1;
definisi_timebase.TIM_CounterMode =
TIM_CounterMode_Down;
TIM_TimeBaseInit(TIM4, &definisi_timebase);
TIM_ARRPreloadConfig(TIM4, ENABLE)
definisi_OC.TIM_OCMode = TIM_OCMode_PWM1;
definisi_OC.TIM_OutputState =
TIM_OutputState_Enable;
definisi_OC.TIM_OCPolarity =
TIM_OCPolarity_High;
TIM_OC1Init(TIM4, &definisi_OC);
TIM_OC2Init(TIM4, &definisi_OC);
TIM_OC3Init(TIM4, &definisi_OC);
TIM_OC4Init(TIM4, &definisi_OC);
TIM_OC1PreloadConfig(TIM4,
TIM_OCPreload_Disable);
TIM_OC2PreloadConfig(TIM4,
TIM_OCPreload_Disable);
TIM_OC3PreloadConfig(TIM4,
TIM_OCPreload_Disable);
TIM_OC4PreloadConfig(TIM4,
TIM_OCPreload_Disable);
TIM_CtrlPWMOutputs(TIM4, ENABLE);
TIM_Cmd(TIM4, ENABLE);}
void TIM1_CC_IRQHandler()
{ if(TIM_GetFlagStatus(TIM1,TIM_FLAG_CC1)!=0)
{ if(kondisi_polaritas1_rising)
{ data1[0]=TIM_GetCapture1(TIM1);
polaritas1_falling;
data_siap=0;}
else if(kondisi_polaritas1_falling)
{ data1[1]=TIM_GetCapture1(TIM1);
polaritas1_rising;
if(data1[0]<data1[1])lebar_pulsa1=data1[1]-
data1[0];

76
else lebar_pulsa1=data1[1]+periode_tim1-
data1[0];
data_siap=1;}
TIM_ClearFlag(TIM1,TIM_FLAG_CC1);}
if(TIM_GetFlagStatus(TIM1,TIM_FLAG_CC2)!=0)
{ if(kondisi_polaritas2_rising)
{ data2[0]=TIM_GetCapture2(TIM1);
polaritas2_falling;
data_siap=0;}
else if(kondisi_polaritas2_falling)
{ data2[1]=TIM_GetCapture2(TIM1);
polaritas2_rising;
if(data2[0]<data2[1])lebar_pulsa2=data2[1]-
data2[0];
else lebar_pulsa2=data2[1]+periode_tim1-
data2[0];
data_siap=1;}
TIM_ClearFlag(TIM1,TIM_FLAG_CC2);}
if(TIM_GetFlagStatus(TIM1,TIM_FLAG_CC3)!=0)
{ if(kondisi_polaritas3_rising)
{ data3[0]=TIM_GetCapture3(TIM1);
polaritas3_falling;
data_siap=0;}
else if(kondisi_polaritas3_falling)
{ data3[1]=TIM_GetCapture3(TIM1);
polaritas3_rising;
if(data3[0]<data3[1])lebar_pulsa3=data3[1]-
data3[0];
else lebar_pulsa3=data3[1]+periode_tim1-
data3[0];
data_siap=1;}
TIM_ClearFlag(TIM1,TIM_FLAG_CC3);}
if(TIM_GetFlagStatus(TIM1,TIM_FLAG_CC4)!=0)
{ if(kondisi_polaritas4_rising)
{ data4[0]=TIM_GetCapture4(TIM1);
polaritas4_falling;
data_siap=0;}
else if(kondisi_polaritas4_falling)
{

77
data4[1]=TIM_GetCapture4(TIM1);
polaritas4_rising;
if(data4[0]<data4[1])lebar_pulsa4=data4[1]-
data4[0];
else lebar_pulsa4=data4[1]+periode_tim1-
data4[0];
data_siap=1;}
TIM_ClearFlag(TIM1,TIM_FLAG_CC4);}
}
void TIM8_CC_IRQHandler()
{ if(TIM_GetFlagStatus(TIM8,TIM_FLAG_CC1)!=0)
{ if(kondisi_polaritas5_rising)
{ data5[0]=TIM_GetCapture1(TIM8);
polaritas5_falling;
data_siap=0;}
else if(kondisi_polaritas5_falling)
{ data5[1]=TIM_GetCapture1(TIM8);
polaritas5_rising;
if(data5[0]<data5[1])lebar_pulsa5=data5[1]-
data5[0];
else lebar_pulsa5=data5[1]+periode_tim8-
data5[0];
data_siap=1;}
TIM_ClearFlag(TIM8,TIM_FLAG_CC1);
}
if(TIM_GetFlagStatus(TIM8,TIM_FLAG_CC2)!=0)
{ if(kondisi_polaritas6_rising)
{ data6[0]=TIM_GetCapture2(TIM8);
polaritas6_falling;
data_siap=0;}
else if(kondisi_polaritas6_falling)
{ data6[1]=TIM_GetCapture2(TIM8);
polaritas6_rising;
if(data6[0]<data6[1])lebar_pulsa6=data6[1]-
data6[0];
else lebar_pulsa6=data6[1]+periode_tim8-
data6[0];
data_siap=1;}
TIM_ClearFlag(TIM8,TIM_FLAG_CC2);}

78
if(TIM_GetFlagStatus(TIM8,TIM_FLAG_CC3)!=0)
{ if(kondisi_polaritas7_rising)
{ data7[0]=TIM_GetCapture3(TIM8);
polaritas7_falling;
data_siap=0;}
else if(kondisi_polaritas7_falling)
{ data7[1]=TIM_GetCapture3(TIM8);
polaritas7_rising;
if(data7[0]<data7[1])lebar_pulsa7=data7[1]-
data7[0];
else lebar_pulsa7=data7[1]+periode_tim8-
data7[0];
data_siap=1;}
TIM_ClearFlag(TIM8,TIM_FLAG_CC3);}
if(TIM_GetFlagStatus(TIM8,TIM_FLAG_CC4)!=0)
{ if(kondisi_polaritas8_rising)
{ data8[0]=TIM_GetCapture4(TIM8);
polaritas8_falling;
data_siap=0;}
else if(kondisi_polaritas8_falling)
{ data8[1]=TIM_GetCapture4(TIM8);
polaritas8_rising;
if(data8[0]<data8[1])lebar_pulsa8=data8[1]-
data8[0];
else lebar_pulsa8=data8[1]+periode_tim8-
data8[0];
data_siap=1;}
TIM_ClearFlag(TIM8,TIM_FLAG_CC4);
}
void inisialisasi_timer6()
{ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,
ENABLE);
TIM_TimeBaseInitTypeDef definisi_timebase;
definisi_timebase.TIM_Prescaler = 90-1
definisi_timebase.TIM_Period =1000-1; //periode-1;
definisi_timebase.TIM_ClockDivision = TIM_CKD_DIV1;
// lihat reference manual hal.367
definisi_timebase.TIM_CounterMode =
TIM_CounterMode_Up;

79
TIM_TimeBaseInit(TIM6, &definisi_timebase);
TIM_ARRPreloadConfig(TIM6, ENABLE);
TIM_Cmd(TIM6, ENABLE);
NVIC_InitTypeDef definisi_NVIC;
definisi_NVIC.NVIC_IRQChannel = TIM6_DAC_IRQn;
definisi_NVIC.NVIC_IRQChannelCmd = ENABLE;
definisi_NVIC.NVIC_IRQChannelPreemptionPriority=1;
NVIC_Init(&definisi_NVIC);
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
TIM_ClearFlag(TIM6,TIM_FLAG_Update);
}
void inisialisasi_io()
{ GPIO_InitTypeDef io;
io.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPI
O_Pin_14|GPIO_Pin_15;
io.GPIO_Pin=GPIO_Pin_15;
io.GPIO_Mode=GPIO_Mode_OUT;
io.GPIO_Speed=GPIO_Speed_50MHz;
io.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOD,&io);
io.GPIO_Pin=GPIO_Pin_0; //tombol
io.GPIO_Mode=GPIO_Mode_IN;
io.GPIO_Speed=GPIO_Speed_50MHz;
io.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_Init(GPIOA,&io);
io.GPIO_Pin=GPIO_Pin_1; //buzzer
io.GPIO_Mode=GPIO_Mode_OUT;
io.GPIO_Speed=GPIO_Speed_50MHz;
io.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOC,&io);
}
void TIM6_DAC_IRQHandler()
{ TIM_ClearFlag(TIM6,TIM_FLAG_Update);
pewaktu1ms++;
pewaktu_i2c++;
baca_kondisi_remot();
if(state_remot==0)olah_pwm_remot();
if(pewaktu1ms%100==0)
{pewaktu_kontrol++;

80
pewaktu++;}
}
void inisialisasi_USART1()
{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,
ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,E
NABLE);
GPIO_InitTypeDef inisialisasi_GPIO;
USART_InitTypeDef definisi_USART;
NVIC_InitTypeDef definisi_NVIC;
inisialisasi_GPIO.GPIO_Pin = GPIO_Pin_10;
inisialisasi_GPIO.GPIO_Mode = GPIO_Mode_AF;
inisialisasi_GPIO.GPIO_PuPd = GPIO_PuPd_UP;
inisialisasi_GPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &inisialisasi_GPIO);
inisialisasi_GPIO.GPIO_Pin = GPIO_Pin_6;
inisialisasi_GPIO.GPIO_Mode = GPIO_Mode_AF;
inisialisasi_GPIO.GPIO_PuPd = GPIO_PuPd_UP;
inisialisasi_GPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &inisialisasi_GPIO);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10,
GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6,
GPIO_AF_USART1);
definisi_USART.USART_BaudRate = 9600;//9600;
definisi_USART.USART_Mode = USART_Mode_Rx |
USART_Mode_Tx;
definisi_USART.USART_WordLength =
USART_WordLength_8b;
definisi_USART.USART_StopBits = USART_StopBits_1;
definisi_USART.USART_Parity = USART_Parity_No;
definisi_USART.USART_HardwareFlowControl =
USART_HardwareFlowControl_None;
USART_Init(USART1, &definisi_USART);
definisi_NVIC.NVIC_IRQChannel = USART1_IRQn;
definisi_NVIC.NVIC_IRQChannelCmd = ENABLE;
definisi_NVIC.NVIC_IRQChannelPreemptionPriority=0;
definisi_NVIC.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&definisi_NVIC);

81
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);}
void inisialisasi_USART2()
{ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,
ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,EN
ABLE);
GPIO_InitTypeDef inisialisasi_GPIO;
USART_InitTypeDef definisi_USART;
NVIC_InitTypeDef definisi_NVIC;
inisialisasi_GPIO.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_2;
inisialisasi_GPIO.GPIO_Mode = GPIO_Mode_AF;
inisialisasi_GPIO.GPIO_PuPd = GPIO_PuPd_UP;
inisialisasi_GPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &inisialisasi_GPIO);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3,
GPIO_AF_USART2); //rx
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2,
GPIO_AF_USART2); //tx
definisi_USART.USART_BaudRate = 9600;
definisi_USART.USART_Mode = USART_Mode_Rx |
USART_Mode_Tx;
definisi_USART.USART_WordLength =
USART_WordLength_8b;
definisi_USART.USART_StopBits = USART_StopBits_1;
definisi_USART.USART_Parity = USART_Parity_No;
definisi_USART.USART_HardwareFlowControl =
USART_HardwareFlowControl_None;
USART_Init(USART2, &definisi_USART);
definisi_NVIC.NVIC_IRQChannel = USART2_IRQn;
definisi_NVIC.NVIC_IRQChannelCmd = ENABLE;
definisi_NVIC.NVIC_IRQChannelPreemptionPriority=0;
definisi_NVIC.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&definisi_NVIC);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
USART_Cmd(USART2, ENABLE);}
char penanda=0;
char penanda2=10;
char penanda3=100;

82
char data_ke;
char data_usart;
char cek_data_ke=0;
char cek_data[10];
static int j=0;
static int j2=0;
static int j3=0;
char buffer[100];
char buffer2[100];
char buffer3[100];
int data1Int=1500;
int data2Int=1500;
int data3Int=1500;
double data1Float=0;
double data2Float=0;
double data3Float=0;
void mode_remote()
{ switch(data1Int)
{
/////// State program thrust manual///////
case 100: SERVO = 1500; //Netral
MOTOR = 1200;
break;
case 102: SERVO = 1500; //maju 1
MOTOR = 1250;
break;
case 103: SERVO = 1500; //maju 2
MOTOR = 1350;
break;
case 104: SERVO = 1500; //maju 3
MOTOR = 1400;
break;
case 68: SERVO = 1100; //kiri
MOTOR = 1100;
break;
case 92: SERVO = 1900; //kanan
MOTOR = 1100;
break;
case 0: SERVO = 1500; //stop

83
MOTOR = 1000;
break;}
}
void parsing_from_pc()
{ if(penanda==0)
{ if(data_usart=='x') penanda=2;
else penanda=0;}
else if(penanda==2)
{if(data_usart!='*')
{
buffer[j++]= data_usart;
mode_usv=1;}
else if(data_usart=='*')
{ j=0;
penanda=0;}
data1Int=atoi(buffer);// data X
}
////////////////////// DATA WAYPOINT GPS/////////////////////////
/* Data 2 dari Serial read */
if(penanda2==10)
{ if(data_usart=='y') penanda2=30;
else penanda2=10;
}//hapus baris
else if(penanda2==30)
{ if(data_usart!='*')
{
buffer2[j2++]= data_usart;
mode_usv=2;
}
else if(data_usart=='*')
{
j2=0;
penanda2=10;
ambil_waypoint_pc();
}
}
////////////////////// DATA KONTROL KOMPAS/////////////////////////////
/* Data 3 dari Serial read */
if(penanda3==100)

84
{ if(data_usart=='z') penanda3=200;
else penanda3=100;
}//hapus baris
else if(penanda3==200)
{ if(data_usart!='*')
{
buffer3[j3++]= data_usart;
mode_usv=3;
}
else if(data_usart=='*')
{ j3=0;
penanda3=100;
}
}
}
int penanda_waypoint=0;
char buffer_waypoint[100];
int pindah;
void parsing_waypoint()
{ if(penanda_waypoint==0)
{ if(data_usart=='a')penanda_waypoint=1;
else penanda_waypoint = 0; }
else if(penanda_waypoint==1)
{ if(data_usart=='d')penanda_waypoint=2;
else penanda_waypoint = 0;}
else if(penanda_waypoint==2)
{ if(data_usart=='f')penanda_waypoint=3;
else penanda_waypoint = 0;}
else if(penanda_waypoint==3)
{ if(data_usart!='b')
{ buffer_waypoint[pindah++]= data_usart;}
else
{ penanda_waypoint=0;
pindah=0;
}
}
}
char lattitude1[50];
char longitude1[50];

85
char lattitude2[50];
char longitude2[50];
char lattitude3[50];
char longitude3[50];
char lattitude4[50];
char longitude4[50];
char lattitude5[50];
char longitude5[50];
char lattitude6[50];
char longitude6[50];
char lattitude7[50];
char longitude7[50];
char lattitude8[50];
char longitude8[50];
double waypoint_lattitude[10];
double waypoint_longitude[10];
void convert_waypoint()
{ waypoint_lattitude[0]=atof(lattitude1);
waypoint_lattitude[1]=atof(lattitude2);
waypoint_lattitude[2]=atof(lattitude3);
waypoint_lattitude[3]=atof(lattitude4);
waypoint_lattitude[4]=atof(lattitude5);
waypoint_lattitude[5]=atof(lattitude6);
waypoint_longitude[0]=atof(longitude1);
waypoint_longitude[1]=atof(longitude2);
waypoint_longitude[2]=atof(longitude3);
waypoint_longitude[3]=atof(longitude4);
waypoint_longitude[4]=atof(longitude5);
waypoint_longitude[5]=atof(longitude6);
}
void ambil_waypoint_pc()
{ int cont=0;
int x=0;
int ulang=0;
for(x=0;x<=strlen(buffer2);x++)
{ if (buffer2[x] == ',')
{
cont++;
ulang=0;}

86
else
{ if(cont==0)
{ lattitude1[ulang]= buffer2[x];
ulang++;}
if(cont==1)
{ longitude1[ulang]= buffer2[x];
ulang++;}
if(cont==2)
{ lattitude2[ulang]= buffer2[x];
ulang++;}
if(cont==3)
{ longitude2[ulang]= buffer2[x];
ulang++;}
if(cont==4)
{ lattitude3[ulang]= buffer2[x];
ulang++;}
if(cont==5)
{ longitude3[ulang]= buffer2[x];
ulang++; }
if(cont==6)
{ lattitude4[ulang]= buffer2[x];
ulang++;}
if(cont==7)
{ longitude4[ulang]= buffer2[x];
ulang++;}
if(cont==8)
{ lattitude5[ulang]= buffer2[x];
ulang++;}
if(cont==9)
{ longitude5[ulang]= buffer2[x];
ulang++;}
if(cont==10)
{ lattitude6[ulang]= buffer2[x];
ulang++; }
if(cont==11)
{ longitude6[ulang]= buffer2[x];
ulang++;}
}
}

87
convert_waypoint();}
void USART1_IRQHandler(void)
{ if(USART_GetITStatus(USART1, USART_IT_RXNE))
{ data_usart=USART_ReceiveData(USART1);
parsing_from_pc();
USART_ClearITPendingBit(USART1,
USART_IT_RXNE);}
}
int data_usart2;
char penanda_gps=0;
char buffer_gps[100];
int t;
void USART2_IRQHandler(void)
{ if(USART_GetITStatus(USART2, USART_IT_RXNE))
{ data_usart2=USART_ReceiveData(USART2);
if(penanda_gps==0)
{ if(data_usart2=='G')penanda_gps=1;
else penanda_gps = 0;}
else if(penanda_gps==1)
{
if(data_usart2=='P'||data_usart2=='N')penanda_gps=2;
else penanda_gps = 0;}
else if(penanda_gps==2)
{ if(data_usart2=='R')penanda_gps=3;
else penanda_gps = 0;}
else if(penanda_gps==3)
{ if(data_usart2=='M')penanda_gps=4;
else penanda_gps = 0;}
else if(penanda_gps==4)
{ if(data_usart2=='C')penanda_gps=5;
else penanda_gps = 0;}
else if(penanda_gps==5)
{ if(data_usart2!='$')
{ buffer_gps[t++]= data_usart2;}
else
{ penanda_gps=0;
t=0;
ambildata();}
}

88
}
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
char a[20];
char b[20];
char c[20];
char d[20];
char e[20];
char f[20];
char g[20];
char h[20];
char i2[20];
char j7[20];
char k[20];
void ambildata()
{ int i=1;
int j=0;
while(buffer_gps[i]!=',')
{ a[j++]=buffer_gps[i++];}
i++;j=0;
while(buffer_gps[i]!=',')
{ b[j++]=buffer_gps[i++]; }
i++;j=0;
while(buffer_gps[i]!=',')
{ c[j++]=buffer_gps[i++];}
i++;j=0;
while(buffer_gps[i]!=',')
{ d[j++]=buffer_gps[i++];}
i++;j=0;
while(buffer_gps[i]!=',')
{ e[j++]=buffer_gps[i++];}
i++;j=0;
while(buffer_gps[i]!=',')
{ f[j++]=buffer_gps[i++];}

i++;j=0;
while(buffer_gps[i]!=',')
{ g[j++]=buffer_gps[i++];}

89
i++;j=0;
while(buffer_gps[i]!=',')
{ h[j++]=buffer_gps[i++];}
i++;j=0;
while(buffer_gps[i]!=',')
{ i2[j++]=buffer_gps[i++];}
i++;j=0;
while(buffer_gps[i]!=',')
{ j7[j++]=buffer_gps[i++];}
i++;j=0;
while(buffer_gps[i]!=',' )
{ k[j++]=buffer_gps[i++];
if(buffer_gps[i]==0)break;}
i++;j=0;}
double speed_kapal;
double lattDouble;
double longDouble;
double lattDecimal=-7.307253;
double longDecimal=112.795605;
double lattDecimal_filter=0;
double longDecimal_filter=0;
int ratusan,puluhan,satuan;
int ratusan2,puluhan2,satuan2;
double menit_ke_sudut,menit_ke_sudut2;
void konvertStringGps()
{ lattDouble=atof(c);
longDouble=atof(e);
speed_kapal=(atof(g))*1.852;
//konversi dms ke desimal lattitude
ratusan=lattDouble/100;
puluhan=(lattDouble-ratusan*100)/10;
satuan=(lattDouble-ratusan*100-puluhan*10);
menit_ke_sudut=(lattDouble-(ratusan*100))/60;
lattDecimal=(ratusan+menit_ke_sudut)*-1;
moving_average(lattDecimal,&lattDecimal_filter,20,array_filte
r_lattitude);
//konversi dms ke desimal longitude
ratusan2=longDouble/100;

90
puluhan2=(longDouble-ratusan2*100)/10;
satuan2=(longDouble-ratusan2*100-puluhan2*10);
menit_ke_sudut2=(longDouble-(ratusan2*100))/60;
longDecimal=ratusan2+menit_ke_sudut2;
moving_average(longDecimal,&longDecimal_filter,20,array_fi
lter_longitude);}
void kirim_data_ke_pc(char data)
{ USART_SendData(USART1,data);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)
== RESET);}
int set_poin_kompas=0;
float error_kompas;
float error_kompas_sebelum;
float pid_out_kompas;
float kp_kompas=1;
float kd_kompas=1;
void kontrol_dengan_kompas()
{ error_kompas=set_poin_kompas-data_kompas180;
pid_out_kompas=kp_kompas*error_kompas + kd_kompas *
(error_kompas - error_kompas_sebelum);
if(pid_out_kompas>300) pid_out_kompas=300;
if(pid_out_kompas<-300) pid_out_kompas=-300;
error_kompas_sebelum=error_kompas;
SERVO=1500 + pid_out_kompas;
delay_ms(1);
}
#define nilai_tengah_x 240
void obstacle(int kecepatan_motor)
{ MOTOR=kecepatan_motor;
switch(mode_gerak)
{
case 0: kontrol_dengan_kompas();break;
case 1:
set_poin_x=dapatkan_set_poin_kiri(data_y);
error = data_x - set_poin_x;
pid_out = 1500 + (p_kontrol_lurus*error +
d_kontrol_lurus*(error-error_sebelum));
error_sebelum = error;
if(pid_out>1850) pid_out=1850;

91
if(pid_out<1150) pid_out=1150;
SERVO = pid_out;
break;
case 2: set_poin_x=240;//dapatkan_set_poin_kiri(data_y);
error = data_x - set_poin_x;
pid_out = 1500 - (p_kontrol_lurus*error +
d_kontrol_lurus*(error-error_sebelum));
error_sebelum = error;
if(pid_out>1850) pid_out=1850;
if(pid_out<1150) pid_out=1150;
SERVO = pid_out;
break;
}
}
int servocam1 = 1500;
int servocam2 = 1500;
void inisialisasi_kompas()
{ I2C_start(I2C2, SLAVE_ADDRESS_KOMPAS<<1,
I2C_Direction_Transmitter);
I2C_write(I2C2,0x02);
I2C_write(I2C2,0x00); \
I2C_stop(I2C2);
}
double s_wiener_sebelum;
int bobot=20;
double sudut_kompas_wiener;
void filter_wiener(double dataIn,double *dataOut)
{ *dataOut=s_wiener_sebelum+((dataIn-
s_wiener_sebelum)/bobot);
s_wiener_sebelum=*dataOut;
}
int kondisi;
void baca_kompas()
{ int i;
I2C_start(I2C2, SLAVE_ADDRESS_KOMPAS<<1,
I2C_Direction_Transmitter);
I2C_write(I2C2, 0x03);
I2C_stop(I2C2);

92
I2C_start(I2C2, SLAVE_ADDRESS_KOMPAS<<1,
I2C_Direction_Receiver);
for(i=0;i<6;i++)
{ if(i!=5)
buffer_data_raw_kompas[i]=I2C_read_ack(I2C2);
else
buffer_data_raw_kompas[i]=I2C_read_nack(I2C2);
}
data_raw_kompas_X=buffer_data_raw_kompas[1] |
(buffer_data_raw_kompas[0]<<8);
data_raw_kompas_Z=buffer_data_raw_kompas[3] |
(buffer_data_raw_kompas[2]<<8);
data_raw_kompas_Y=buffer_data_raw_kompas[5] |
(buffer_data_raw_kompas[4]<<8);
sudut180_kompas=atan2((double)data_raw_kompas_Y,
(double)data_raw_kompas_X);//*180/PI;
float declinationAngle = 0.0171559;//0.22;
sudut180_kompas += declinationAngle;
if(sudut180_kompas < 0)
sudut180_kompas += 2*PI;
if(sudut180_kompas > 2*PI)
sudut180_kompas -= 2*PI;
Degrees = sudut180_kompas * 180/M_PI;}
float error1;
float errorBanding;
float errorBanding1;
float errorFix;
void kontrol_kompas_reza(int kecepatanMotor,int arahkompas)
{ baca_kompas();
set_poinKompas=arahkompas;
if(set_poinKompas>=Degrees) error=set_poinKompas-
Degrees;
else error=(360-Degrees)+set_poinKompas;
if(set_poinKompas>=Degrees) error1=(360-
set_poinKompas)+Degrees;
else error1=Degrees-set_poinKompas;
errorBanding=error;
errorBanding1=error1*-1;

93
if(error<=error1) errorFix=error;
else errorFix=errorBanding1;
pid_out= 1500 + (12*errorFix + 6*(errorFix-error_sebelum));
error_sebelum = errorFix;
if(pid_out>1900) pid_out=1900;
else if(pid_out<1100) pid_out=1100;
SERVO=pid_out;
MOTOR=kecepatanMotor;}
float pid_out_motor;
float pid_out_rudder;
float error_lintasan;
float error_lintasan_sebelum;
int pindah2;
int counter_tombol;
int arctan()
{ baca_kompas();
sudutKompas=Degrees;
if(lattDecimal!=0&&longDecimal!=0&&waypoint_lattitude[0]
!=0&&waypoint_longitude[0]!=0)
{
set_poinX= waypoint_longitude[pindah2]-longDecimal;
result = atan (tangen) * 180 / PI;
P_lintasan=
(sqrt(pow(set_poinX,2)+pow(set_poinY,2)))*110574.6108;
if(set_poinX>=0&&set_poinY>=0)
{
set_poinKompas=90-result;}
else if(set_poinX<0&&set_poinY>=0)
{
set_poinKompas=270-result;}
else if(set_poinX<0&&set_poinY<=0)
{
set_poinKompas=180+(90-result);}
else if(set_poinX>0&&set_poinY<=0)
{
set_poinKompas=90-result; }
if(set_poinKompas>=sudutKompas) error=set_poinKompas-
sudutKompas;
else error=(360-sudutKompas)+set_poinKompas;

94
if(set_poinKompas>=sudutKompas) error1=(360-
set_poinKompas)+sudutKompas;
else error1=sudutKompas-set_poinKompas;
errorBanding=error;
errorBanding1=error1*-1;
if(error<=error1) errorFix=error;
else errorFix=errorBanding1;
pid_out_rudder= 1500 + (10*errorFix + 2*(errorFix-
error_sebelum));
error_sebelum = errorFix;
if(pid_out_rudder>1800) pid_out_rudder=1800;
else if(pid_out_rudder<1250) pid_out_rudder=1250;
if(P_lintasan<=4)
{
P_lintasan=0;
pindah2++;
}
pid_out_motor= 1000 + (8*P_lintasan + 2*(P_lintasan-
error_lintasan_sebelum));
error_lintasan_sebelum=P_lintasan;
if(pid_out_motor>1400) pid_out_motor=1400;
else if(pid_out_motor<1100) pid_out_motor=1100;
}
if(waypoint_lattitude[pindah2]==0||waypoint_longitude[pindah
2]==0)
{ pid_out_rudder=1500;
pid_out_motor=1000;
SERVO=1500;
MOTOR=1000;}
else
{ SERVO=pid_out_rudder;
MOTOR=pid_out_motor;}
return 0;
}
void kirim_gps(float state)
{ int i=0;
int ulang=0;
baca_kompas();
kirim_data_ke_pc('a');

95
ulang=strlen(karakter);
for(i=0;i<=ulang;i++)
{ kirim_data_ke_pc(karakter[i]);}
kirim_data_ke_pc('b');
ulang=strlen(karakter2);
for(i=0;i<=ulang;i++)
{ kirim_data_ke_pc(karakter2[i]);}
}
int counter;
void toChar(double dataConvert)
{ sprintf(karakter,"%lf",dataConvert);}
void toChar2(double dataConvert)
{ sprintf(karakter2,"%lf",dataConvert);}
int time=0;
void kirimstring()
{ int a;
sprintf(kirimString,"a%2.6lf,%3.7lf,%4d,%2.2lf,0b",lattDecim
al,longDecimal,(int)Degrees,speed_kapal);
for(a=0;a<=strlen(kirimString);a++)
{ kirim_data_ke_pc(kirimString[a]);}
kirim_data_ke_pc('\n');
}
int main(void)
{ SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,
ENABLE); //enable interrupt
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,
ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,
ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,
ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,
ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,
ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,
ENABLE);

96
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,
ENABLE);
inisialisasi_timer6();
init_I2C2();
inisialisasi_kompas();
inisialisasi_io();
lcd_init(16);
out1=1500;
out2=1500;
out3=1500;
out4=1500;
out5=1500;
out6=1500;
out7=1500;
out8=1500;
m_kanan = (y_kanan_1-y_kanan_0)/(x_kanan_1-x_kanan_0);
inisialisasi_baca_pwm();
inisialisasi_pwm();
inisialisasi_USART1();
inisialisasi_USART2();
MOTOR=1000;
SERVO=1450;
TIM8->CNT=0;
TIM1->CNT=0;
point=0;
while(1)
{ konvertStringGps();
baca_kompas();
ambil_waypoint_pc();
if(pewaktu>8) {
pewaktu=0;
kirimstring();
time++;} }
switch(mode_usv)
{
case 1 : mode_remote();
pindah2=0;
break;
case 2: arctan();

97
break;
case 3: kontrol_kompas(1360,0);
break;}
monitoringData(4);
}
}

98
LAMPIRAN B

B.1. Datasheet/Specification Modul HC-12

99
100
101
B.2. Datasheet STM32F4

102
103
104
105
106
8 RIWAYAT HIDUP

Nama : Ahmad Reza Fahlovi


TTL : Jombang, 6 Juni 1995
Jenis Kelamin : Laki-Laki
Agama : Islam
Alamat Asal : RT 19/RW 02
Dsn.Kauman
Ds.Peterongan,
Kec. Peterongan,
Kab. Jombang
Telp/HP : 088217148336
E-mail : ahreza95@gmail.com

RIWAYAT PENDIDIKAN
 2001 – 2007 : SDN 2 Peterongan
 2007 – 2010 : SMP Negeri 1 Peterongan
 2010 – 2013 : SMK Negeri 3 Jombang
 2014 – Sekarang : Departemen Teknik Elektro Otomasi
Bidang Studi Komputer Kontrol
Institut Teknologi Sepuluh Nopember.

PENGALAMAN ORGANISASI
 Staff RISTEK HIMAD3TEKTRO ITS 2015-2016
 Staff PSDM UKM Robotika ITS 2015-2016
 Team Member Barunastra ITS 2015-Sekarang

PENGALAMAN KERJA
 Kerja Praktek PT TELKOM AKSES WITEL JATIM-TENGAH (1
Januari 2017- 2 Februari 2017)

107
-----Halaman ini sengaja dikosongkan-----

108

Anda mungkin juga menyukai