You are on page 1of 86

PROYEK AKHIR

APLIKASI WEB CAM UNTUK MENANGKAP OBYEK WARNA MERAH PADA ROBOT BANTENG DALAM PERMAINAN MATADOR

Agung Pangestu Harseno NRP. 7103 030 036

Dosen Pembimbing: Eru Puspita, ST, M.Kom NIP. 132 127 285

JURUSAN TEKNIK ELEKTRONIKA POLITEKNIK ELEKTRONIKA NEGERI SURABAYA SURABAYA 2006

APLIKASI WEB CAM UNTUK MENANGKAP OBYEK WARNA MERAH PADA ROBOT BANTENG DALAM PERMAINAN MATADOR Oleh : AGUNG PANGESTU HARSENO 7103 030 036 Proyek Akhir ini Diajukan Sebagai Salah Satu Syarat Untuk Memperoleh Gelar Ahli Madya (A.Md.) di Politeknik Elektronika Negeri Surabaya Institut Teknologi Sepuluh Nopember Surabaya Disetujui Oleh: Tim Penguji Proyek Akhir : Dosen Pembimbing:

1. Firman Arifin, ST NIP. 132 296 743

1. Eru Puspita, ST, M.Kom NIP. 132 127 285

2. Ir. Wahjoe Tjatur S, MT NIP. 131 964 945

3. Ir. Rika Rokhana, MT NIP. 132 206 863

Mengetahui : Ketua Jurusan Teknik Elektronika

Ir. Dedid Cahya Happyanto, MT NIP. 131 694 603

2

ABSTRAK Pada proyek akhir ini dibuat software untuk mengontrol gerakan robot banteng dalam suatu permainan matador. Robot banteng akan bergerak mencari obyek warna merah. Untuk mendeteksi obyek warna merah tersebut digunakan sensor kamera. Setelah obyek tertangkap hasil capture akan di proses untuk mendapatkan obyek yang sesuai, metode yang digunakan adalah segmentasi warna. Hasil dari pendeteksian obyek dari komputer akan dikirim melalui komunikasi serial RS232 ke mikrokontroller yang telah terhubung dengan motor. Dari hasil pengolahan capture tersebut robot diharapkan dapat melakukan penyerangan terhadap robot matador secara berulang-ulang sampai beberapa kali. Dimana range penyeangan antara 63 pixels – 30 pixels luas obyek pada layar. Jarak terjauh dimana obyek masih terdeteksi adalah 495 cm dan terdekat adalah 30 cm. Dalam penyelesaiannya, digunakan software Microsoft Visual Basic 6.0 yang menyediakan berbagai macam tool yang diperlukan. Selain metode segmentasi juga digunakan metode tresholding hal ini untuk mengatur pencahayaan. Kata kunci: Robot, Kamera, Pengolahan gambar, Mikrokontroller, RS232.

3

ABSTRACT At this final project was made software to control movement of bull robot in matador game. Bull robot will have moved to look for red color object. Sensor camera uses to detect red color object. After object caught, result of capture will be process to get appropriate object by method of color segmentation. The Result of object detection from computer will be sent through RS232 serial communication to microcontroller which have connected with motor. With image processing result, robot will be claimed to attack the matador robot by repeatedly until several times. Where range of attack between 63 pixels30 pixels wide of object. Furthermost distance where object still detected in 495 cm and closest in 30 cm. The solution uses Software Microsoft Visual Basic 6.0 that provides tools. Besides segmentation method also used method of tresholding this matter to arrange illumination. Keyword : Robot, Camera, Image Processing, Microcontroller, RS232

4

KATA PENGANTAR

Alhamdulillah, segala puji hanya milik Allah SWT yang mana kami memuji, memohon bantuan, memohon ampunan dan perlindungan kepada-Nya, dari kejahatan jiwa dan keburukan perilaku kami. Sholawat serta salam pada junjungan nabi besar Muhammad SAW yang telah memberikan kekuatan kepada kami sehingga dapat menyelesaikan buku laporan tugas akhir ini yang berjudul: APLIKASI WEB CAM UNTUK MENANGKAP OBYEK WARNA MERAH PADA ROBOT BANTENG DALAM PERMAINAN MATADOR Tugas akhir ini kami susun sebagai syarat untuk menyelesaikan program pendidikan Diploma III di Politeknik Elektronika Negeri Surabaya. Penyusun sadar bahwa didalam penyusunan buku laporan tugas akhir ini masih jauh dari kesempurnaan, untuk itu dengan segala kerendahan hati penyusun mohon maaf apabila terdapat penulisan kata yang tidak sesuai dan dengan besar hati menerima kritik dan saran yang bersifat membangun demi hasil yang lebih baik dimasa yang akan datang. Penyusun berharap semoga buku laporan tugas akhir ini akan bermanfaat bagi kita bersama.

Surabaya, Agustus 2006

Penyusun

5

UCAPAN TERIMA KASIH Alhamdullillah, atas segala limpahan rahmat, taufik, hidayah yang diberikan oleh Allah swt sehingga Tugas Akhir ini dapat terselesaikan sesuai dengan jadwal yang telah ditentukan. Disamping itu juga penulis ingin megucapkan terima kasih kepada semua pihak yang telah memberikan bantuan bimbingan dan dorongan serta fasilitas sarana dan prasarana, baik material maupun spiritual sehingga penulis dapat menyusun buku laporan proyek akhir ini tepat pada waktunya. Diantaranya adalah : 1. Ayah dan Ibu tercinta yang telah memberikan banyak sekali dukungan, nasehat baik moral maupun spiritual, serta doa yang senantiasa menyertai langkah kaki penulis kemana pun berada. Semoga Allah senantiasa memberikan lindungan kepada mereka, dan di golongkan bersama dengan orang-orang yang dicintaiNya. 2. Kakakku Wahyu, terima kasih atas saran, nasehat serta dukungannya. 3. Adikku Herri, semoga ini bisa menjadi contoh yang baik buat kamu. 4. Bapak Ir. Titon Dutono, M.Eng, selaku direktur PENS-ITS. 5. Bapak Ir. Dedid. CH, selaku kepala jurusan elektronika. 6. Bapak Eru Puspita, ST, M.Kom, selaku dosen pembimbing yang telah memberi pengarahan dan bimbingan dengan penuh kesabaran untuk menyelesaikan Tugas Akhir ini. 7. Seluruh dosen penguji yang telah memberikan saran dan bimbingan. 8. Mas Adi, bang Miko, kang Sobirin, Aa’ Rosyd, akh Wildan, den TW dan senior-senior yang lain atas saran dan bimbingan mereka. 9. Anggota Kalisari Damen fun’s club terima kasih atas supportnya. 10. Crew (Baguz_good, Mr. Lee dan Robot d8) perjuangan kita belum berakhir. 11. Teman-teman seperjuangan 3EB (Ogrish fun’s club) semoga persahabatan kita tidak hanya sampai disini, indahnya kebersamaan yang terjalin selama ini menimbulkan semangat untuk terus menapaki perjalanan hidup ini. 12. Teman-teman Angkatan ”2003” terima kasih semuanya jaga terus persahabatan ini. 13. Semua pihak yang tak dapat kami sebutkan satu persatu terima kasih atas bantuannya dalam penyelesaian tugas akhir ini.

6

DAFTAR ISI
Halaman Judul Lembar Pengesahan Abstrak Abstract Kata Pengantar Ucapan Terima Kasih Daftar Isi Daftar Gambar Daftar Tabel BAB I. PENDAHULUAN 1.1 Latar Belakang 1.2 Tujuan 1.3 Permasalahan 1.4 Perumusan Masalah 1.5 Batasan Masalah 1.6 Metodologi 1.7 Sistematika Penulisan BAB II. TEORI PENUNJANG 2.1 Model Warna 2.2 Pixel 2.3 Warna RGB 2.4 Grey Scale 2.5 Segmentasi 2.6 Operasi Peningkatan Citra 2.6.1 Kualitas Citra 2.6.2 Tresholding 2.7 Euclidean Distance 2.8 Bahasa Pemrograman 2.8.1 Variabel 2.8.2 Kontrol Program 2.8.2.1 If.....Then 2.8.2.2 If.....Then.....Else 2.8.2.3 Select.....Case 2.8.2.4 For......Next 2.8.2.5 GoTo 2.8.2.6 Exit i ii iii iv v vi vii ix x

1 1 2 2 2 2 3

5 7 8 10 10 10 10 11 12 13 13 14 15 15 16 16 16 17

7

2.8.3

2.8.4

Prosedur 2.8.3.1 Sub Procedure 2.8.3.2 Function Procedure Operator 2.8.4.1 Operator Matematik 2.8.4.2 Operator Perbandingan 2.8.4.3 Operator Logika

17 17 18 21 21 22 22

BAB III. PERENCANAAN DAN PEMBUATAN PERANGKAT LUNAK 3.1 Sistem Konfigurasi 25 3.2 Setting Mekanik 27 3.3 Pengolahan Gambar Oleh PC 28 3.4 Pengambilan Gambar 28 3.5 Pengenalan Obyek 29 3.5.1 Titik Tengah Obyek 30 3.5.2 Luas Obyek 31 3.6 Jarak Penyerangan Obyek 32 3.7 Komunikasi Data antara PC dengan Mikrokontroller 33 3.8 Komunikasi data dari PC ke PC 37 BAB IV. PENGUJIAN DAN ANALISA 4.1 Pengujian dan Pengambilan Data 4.2 Analisa BAB V. PENUTUP 5.1 Kesimpulan 5.2 Saran Daftar Pustaka Lampiran Daftar Riwayat Hidup

38 44

45 45 47

8

DAFTAR GAMBAR
Gambar 2.1 Gambar 2.2 Gambar 2.3 Gambar 2.4 Gambar 3.1 Gambar 3.2 Gambar 3.3 Gambar 3.4 Gambar 3.5 Gambar 3.6 Gambar 3.7 Gambar 3.8 Gambar 3.9 Gambar 3.10 Gambar 3.11 Gambar 3.12 Gambar 4.1 Gambar 4.2 Gambar 4.3 Gambar 4.4 Gambar 4.5 Gambar 4.6 Gambar 4.7 Gambar 4.8 Blok diagram Nilai Hexadesimal Konversi sistem koordinat citra diskrit Definisi warna RGB dan CMY Sistem diagram blok Robot Banteng Diagram alir pengolahan citra Peletakan kamera pada mekanik robot Kamera Vimicro USB PC Camera Kontrol Kamera Logitech Quick Zoom Proses scanning dan pencarian titik tengah Sintak program penentuan posisi robot Jalur RS232 pada DB9 Form dan properties pada Visual Basic Daftar komponen pada Visual Basic Daftar komponen Winsock Properties Winsock Tampilan form program Posisi 1 Posisi 2 Posisi 3 Posisi 4 Posisi 5 Posisi 6 Posisi 7 5 5 6 9 25 27 28 29 29 31 32 33 34 35 37 38 40 41 42 42 42 43 43 44

9

DAFTAR TABEL
Tabel 2.1 Tabel 2.2 Tabel 2.3 Tabel 2.4 Tabel 2.5 Tabel 2.6 Tabel 4.1 Tipe Data Pada Visual Basic Fungsi-Fungsi Manipulasi String Fungsi-Fungsi Konversi Data Tabel Operator Matematik Tabel Operator Perbandingan Tabel Operator Logika Tabel Data Hasil Pengujian 14 20 21 22 22 23 41

10

BAB I PENDAHULUAN 1.1 Latar Belakang Image proccessing telah banyak di aplikasikan dalam berbagai bidang teknologi, diantaranya bidang kesehatan, entertainment, militer, IPTEK, industri, robotika dan lain sebagainya. Image I/O merupakan proses pemasukan dan pengeluaran data yang berupa gambar atau citra kedalam sebuah program aplikasi dalam hal ini Microsoft Visual Basic 6.0. Sehingga didapatkan informasi tertentu yang untuk selanjutnya dapat diolah, dianalisa dan diberikan sebuah keputusan yang tepat untuk pengendalian, dalam hal ini sebagai pandangan (vision) dari sebuah robot banteng. Pembuatan robot banteng sebelumnya telah direalisasikan oleh ‘Dewi Supriatin Resmah cs’. Meskipun memiliki kelebihan dapat mengikuti obyek warna merah, tetapi teknik ini kurang menarik apabila dipertontonkan di depan umum. Karena tidak ada aksi lebih lanjut yang dilakukan robot setelah mengikuti obyek warna merah. Dalam proyek akhir ini, akan direalisasikan pengolahan obyek warna merah, menggunakan image processing dalam robot banteng. Proyek ini meliputi dua bagian yaitu hardware dan software. Robot ini memiliki kelebihan antara lain dapat mencari obyek warna merah, mengatur jarak dengan obyek dan melakukan penyerangan kemudian akan melakukan pencarian ulang obyek tersebut layaknya seperti banteng yang sebenarnya. Untuk mengatur pergerakan motor dan syncronisasi dengan web cam digunakan microcontroller AT89S51, karena di dalamnya sudah ada program untuk mengenali software compilernya. Untuk image processing menggunakan software MS Visual Basic 6.0 karena bahasa lebih sederhana dan lebih aplikatif walaupun memiliki kelemahan kinerja lebih lambat. Tetapi hal ini bisa diatasi dengan penggunaan algoritma yang benar dan tepat. 1.2 Tujuan Tujuan dari pembuatan proyek akhir ini adalah untuk membuat suatu robot otomatis dengan menggunakan sensor kamera yang dapat mengidentifikasi obyek warna merah dan kemudian diproses untuk dapat melakukan action, dalam hal ini dapat menyerang obyek tersebut secara berulang-ulang.

11

1.3 Permasalahan Dalam perancangan alat pendeteksi, dalam hal ini adalah kamera, diperlukan suatu cara bagaimana hasil dari gambar yang ditangkap oleh kamera dapat diolah oleh komputer. Dari pengolahan tersebut, data yang diperoleh kemudian dijadikan acuan untuk melakukan suatu tindakan. Dalam tugas akhir ini robot diharapkan dapat mendeteksi keberadaan obyek berupa Matador. Robot dapat menentukan tindakan yang harus diambil setelah mengetahui posisi obyek yang telah ditentukan. 1.4 Perumusan Masalah Bentuk permasalahan yang dihadapi dalam proyek akhir ini adalah sebagai berikut: 1. Pengiriman data ke microcontroller. 2. Pengaturan kecepatan pergerakan robot. 3. Respon kecepatan WebCam dalam pengambilan gambar obyek. 4. Pencarian obyek yang dilakukan berulang-ulang. 5. Komunikasi dari PC ke PC. 6. Pengaturan jarak robot dengan obyek. 7. Pengenalan warna merah pada berbagai macam kondisi cahaya. 1.5 Batasan Masalah Asumsi berikut ini sebagai batasan masalah yang dipakai dalam tugas akhir untuk mengoptimalkan kinerja dari alat: 1. Simulasi robot berlokasi di suatu arena. 2. Mobilitas robot hanya pada lantai yang rata atau memiliki ketinggian yang sama. 3. Posisi bendera yang akan di deteksi berada pada sumbu X 4. Pencahayaan pada arena haruslah cukup terang. 5. Obyek berwarna merah dengan bentuk persegi. 6. Kaki robot diganti dengan roda. 7. Software yang digunakan untuk image processing adalah MS Visual Basic 6.0. 1.6 Metodologi Untuk mencapai penyelesaian proyek akhir, langkah yang akan dilakukan adalah: 1. Melakukan studi literatur yaitu mempelajari literatur yang berhubungan dengan perangkat lunak yang akan digunakan dan juga mikrokontroller. Software yang digunakan adalah Visual Basic 6.0 untuk melakukan pengolahan citra.

12

2.

3.

4.

5.

6.

Melakukan perancangan perangkat lunak yaitu merancang software yang akan di terapkan didalam sistem robot. Robot yang akan dibuat memiliki ketentuan sebagai berikut: • Obyek yang dideteksi adalah bendera warna merah. • Setelah robot dapat mendeteksi letak obyek maka robot akan melakukan penyerangan terhadap obyek tersebut. • Sebelum melakukan penyerangan robot akan melakukan perhitungan jarak yang tepat sesuai dengan setting point yang telah di tentukan sebelumnya. • Jika jarak yang diperoleh sudah sesuai robot akan melakukan penyerangan terhadap obyek tersebut. • Setelah melakukan penyerangan robot akan melakukan proses pencarian ulang lagi beberapa kali. Melakukan pembuatan dan pengujian perangkat lunak yaitu membuat perangkat lunak untuk mendeteksi obyek warna merah dalam hal ini adalah robot matador yang berada didepannya dengan bahasa pemrograman MS. Visual Basic 6.0. Proses pengolahan disini antara lain : Pengambilan gambar, segmentasi dengan thresholding sehingga didapat RGB dari obyek, scanning untuk menentukan titik tengah obyek yang terlihat dilayar. Melakukan integrasi dan pegujian sistem yaitu menghubungkan antara perangkat lunak yang telah dibuat dengan perangkat keras kemudian dilakukan pengujian pada keseluruhan sistem agar diketahui kinerjanya. Melakukan evaluasi dan presentasi hasil yaitu melakukan evaluasi cara kerja dari sistem yang telah dibuat untuk mengetahui aspekaspek yang mempengaruhinya, seperti : keberhasilan pengambilan gambar, pengujian data dan ketepatan dengan kontrol robot. Melakukan penyusunan buku tugas akhir yaitu melakukan penulisan laporan lengkap dan detail tentang tugas akhir.

1.7 Sistematika Penulisan Sistematika penulisan dapat dijelaskan sebagai berikut: BAB I. PENDAHULUAN Berisi latar belakang masalah, tujuan, perumusan masalah, batasan masalah, kontribusi proyek akhir, metodologi, dan sistematika penulisan. BAB II. TEORI PENUNJANG Menjelaskan mengenai teori-teori yang dijadikan landasan dan rujukan perhitungan dalam mengerjakan proyek akhir ini. 13

BAB III. PERENCANAAN DAN PEMBUATAN PERANGKAT LUNAK Berisi tentang perencanaan dan pembuatan perangkat lunak yang akan diterapkan pada robot. BAB IV. PENGUJIAN DAN ANALISA Berisi pembahasan tentang pengujian dari sistem yang telah dibuat beserta analisanya. BAB V. PENUTUP Berisi tentang kesimpulan dan saran yang didapat selama proses perencanaan dari sistem yang diterapkan. DAFTAR PUSTAKA Berisi tentang referensi-referensi yang digunakan dan dijadikan acuan selama pembuatan proyek akhir ini.

14

BAB II TEORI PENUNJANG Image I/O merupakan proses pemasukan dan pengeluaran data yang berupa gambar atau citra kedalam sebuah program aplikasi dalam hal ini MS Visual Basic 6.0. Sehingga didapatkan informasi tertentu yang untuk selanjutnya dapat diolah, dianalisa dan diberikan sebuah keputusan yang tepat untuk pengendalian, dalam hal ini sebagai pandangan (vision) dari sebuah perangkat keras atau robot.
1

Gambar 2.1 Blok Diagram Dasar dari robot vision adalah pengolahan citra dimana informasi yang dapat diambil dari sebuah perangkat I/O adalah berupa informasi warna RGB (Red, Green dan Blue) pada posisi tertentu. Dalam pengolahan citra warna direpresentasikan dengan nilai hexadesimal dari 0x00000000 sampai 0x00ffffff. Warna hitam adalah 0x00000000 dan warna putih adalah 0x00ffffff.

Gambar 2.2 Nilai Hexadesimal Berikut akan dijelaskan secara singkat hal-hal yang berhubungan dengan pengolahan citra. 2.1 Model Warna 2 Citra merupakan matrik dua dimensi dari fungsi intensitas cahaya, maka referensi citra menggunakan dua variabel yang
1 2

B.D, Bima Sena, Image Prosesing dan Aplikasinya, hal.2 Bachtiar Novan, Andi, Robot Penyerang dalam Permainan Sepak Bola , hal.16

15

menunjukkan posisi pada bidang dengan sebuah fungsi intensitas cahaya yang dapat dituliskan sebagai f(x,y) dimana f adalah nilai amplitudo pada koordinat spasial (x,y). Karena cahaya merupakan salah satu bentuk energi, f(x,y) tidak berharga nol atau negatif dan merupakan bilangan berhingga, yang dalam pernyataan matematis adalah sebagai berikut, 0 < f (x,y). Konversi sistem koordinat citra diskrit ditunjukkan oleh gambar berikut,

Gambar 2.3 Konversi sistem koordinat citra diskrit Citra yang kita lihat sehari-hari merupakan cahaya yang direfleksikan oleh sebuah obyek. Fungsi f(x,y) dapat dilihat sebagai fungsi dengan dua unsur, pertama merupakan besarnya sumber cahaya yang melingkupi pandangan kita terhadap obyek (illumination), kedua merupakan besarnya cahaya yang direfleksikan oleh obyek dalam pandangan kita (reflectance component). Keduanya dituliskan dengan fungsi yang berturut-turut i(x,y) dan r(x,y). Fungsi i(x,y) dan r(x,y) merupakan kombinasi perkalian untuk membentuk fungsi f(x,y) yang dapat dituliskan dengan persamaan, F (x,y) = i (x,y) . r (x,y) 0 < i (x,y) < ~ 0 < r (x,y) < 1

......(2-1)

Persamaan diatas menandakan bahwa nilai kerefleksian dibatasi oleh nilai 0 (total absorption) dan nilai 1 (total reflectance). Fungsi (x,y) ditentukan oleh sumber atau asal sinar, sedangkan fungsi r(x,y) ditentukan oleh karakteristik dari obyek. Citra digital adalah citra kontinyu f(x,y) yang sudah didiskritkan baik koordinat spasial maupun tingkat kecerahannya. Kata kontinyu disini menjelaskan bahwa indeks x dan y hanya bernilai bulat. Kita dapat menganggap citra digital sebagai matrik dengan ukuran MxN yang baris

16

dan kolomnya menunjukkan titik-titiknya, yang diperlihatkan pada persamaan berikut,

f(0,0)=

f(0,0) f(0,1)................f(0,N-1) f(1,0) f(0,1)................f(1,N-1) .............................................. ....................................(2-2) f(M-1,0) f(M-1,1)......f(M-1,N-1) f(M,0) f(M,1)................f(M,N)

Citra yang tidak berwarna atau hitam putih dikenal pula sebagai citra dengan derajat keabuan (citra grey level). Derajat keabuan yang dimiliki ini bisa beragam mulai dari 2 derajat keabuan (yaitu 0 dan 1) yang dikenal juga sebagai citra monochrome, 16 derajat keabuan dan 256 derajat keabuan. Semakin besar derajat keabuan yang dimiliki maka semakin halus citra tersebut. Dalam sebuah citra monochrome, sebuah pixel diwakili oleh 1 bit data yang berisikan data tentang derajat keabuan yang dimiliki pixel tersebut. Data akan berisikan 1 bila pixel tersebut berwarna putih dan data tersebut akan berisikan 0 bila pxel tersebut berwarna hitam. Citra yang memiliki 16 derajat keabuan (mulai dari 0 yang mewakili warna hitam sampai dengan 15 yang mewakili warna putih) direpresentasikan oleh 4 bit data, sedangkan citra dengan 256 derajat keabuan (nilai 0 mewakili warna hitam sampai 255 yang mewakili warna putih) direpresentasikan oleh 8 bit data. Dalam citra berwarna, jumlah warna bisa beragam mulai 16, 256, 65536, atau 16 juta warna, yang masing-masing direpresentasikan ole 4, 8, 16, atau 24 bit data untuk setiap pixelnya. Warna yang terdiri dari komponen utama, yaitu nilai merah (red), nilai hijau (green), dan nikai biru (blue). Paduan ketiga komponen utama pembentuk warna ini dikenal sebagai RGB color. 2.2 Pixel 3 Salah satu komponen dari gambar yang menentukan resolusi dari gambar tersebut adalah pixel, misalnya sebuah gambar dikatakan resolusinya sebesar 800 x 600 maka berarti panjang pixel horisontalnya 800 dan panjang pixel vertikalnya 600 dan jumlah total keseluruhan

3

Bachtiar Novan, Andi, Robot Penyerang dalam Permainan Sepak Bola , hal. 18

17

pixel dari gambar tersebut yaitu 480000 atau dapat dikatakan bahwa gambar tersebut terdiri dari 480000 pixel. Dalam pengolahan citra, pixel mempunyai hubungan antara satu dengan yang yang lainnya. Sebuah pixel p pada koordinat (x,y) mempunyai empat tetangga horisontal dan vertikal yang koorfinatkoordinatnya sebagai berikut, (x+1,y+1), (x+1,y-1), (x,y+1), dan (x,y-1) .................(2-3) Kumpulan dari pixel diatas yang disebut 4-neighbours of p dapat dinyatakan sebagai N4(p), kecuali jika p(x,y) posisinya terletak digaris batas gambar, sehingga jumlah pixel tetangga tidak terdiri dari 4 tetangga. Selain 4 tetangga diatas, p juga mempunyai 4 tetangga diagonal, yaitu : (x+1,y+1), (x+1,y-1), (x-1,y+1), dan (x-1,y-1) .................(2-4) Pixel-pixel tersebut dinyatakan sebagai N (p). Gabungan dari
p

N (p) dan N (p) didefinisikan sebagai 8-neighbours of p dan dinyatakan
4 p

sebagai N (p).
8

Hubungan antar pixel merupakan suatu konsep yang sangat penting, yang digunakan untuk mendefinisikan batas-batas dari suatu obyek serta bagian-bagian daerah kecil dari suatu gambar. Hubungan antar pixel ada beberapa kriteria, diantaranya adalah prinsip kedekatan kedua pixel yang sesuai dengan konsep yang telah ditentukan, seperti konsep 4-neighbours atau 8-neighbours. Selain itu, apakah kedua pixel tersebut memiliki nilai gray scale yang sesuai dengan kriteria yang diinginkan. Sebagai contoh, bila dua pixel mempunyai nilai masingmasing 0 dan 1 dan keduanya merupakan bagian dari 4-neighbours, maka dinyatakan bahwa kedua pixel tersebut tidak ada hubungan, hal ini karena keduanya memiliki nilai yang berbeda. 2.3 Warna RGB 4 Model warna RGB (Red, Green, Blue) mendiskrpsikan warna sebagai kombinasi positif dari warna yaitu: merah, hijau dan biru sehingga membentuk sebuah warna C dengan rumusan sebagai berikut: C = rR + gG + bB ..................................................(2-5)
4

Bachtiar Novan, Andi, Robot Penyerang dalam Permainan Sepak Bola , hal. 19

18

Jika skalar r, g, b diberi harga antara 0 dan 1 maka definisi warna akan berada dalam kubus seperti gambar beikut:

Gambar 2.4 Definisi warna RGB dan CMY Ruang warna ini adalah dasar dari warna display monitor komputer. Garis sepanjang titik hitam (0,0,0) RGB hingga titik putih (1,1,1) RGB disebut dengan titik keabuan atau greyscale. Sehingga dengan mudah kita dapatkan hubungan antara rgb dengan greyscale sebagai berikut: (a)G (a,a,a) RGB ...........................(2-6)

Sementara hubungan antara RGB dengan CMY diberikan oleh rumusan, (r,g,b) RGB = (1,1,1) + (c,m,y) CMY ......(2-7) Sehingga apabila nilai dari b diturunkan akan menyebabkan warna bergeser menjadi kekuningan. Pada proses penjumlahan warna, warna yang dideskripsikan dengan RGB adalah pemetaan yang mengacu pada panjang gelombang dari RGB. Pemetaan tersebut menghasilkan nuansa warna sekitar 16 juta (2563=16.777.216) yaitu 256 (8 bit) untuk masing-masing R, G, dan B. Masing-masing R, G, dan B didiskritkan dalam skala 256, sehingga RGB akan memiliki indeks antara 0 sampai 255. penjumlahan warna RGB ini adalah, C = C1 + C2 =

(rC1, gC1, bC1) + (rC 2, gC 2, bC 2) 2

.......(2-8)

19

Penjumlahan ini menghasilkan nilai RGB yang tidak bulat, sehingga kita harus membulatkannya nilainya, yaitu dengan metode bulat keatas atau kebawah. Misalkan dua warna yaitu hitam (0, 0, 0) kita jumlahkan dengan warna putih (255, 255, 255) akan menghasilkan warna abu-abu antara warna hitam dan putih (127, 127, 127). Hasil akhir dibulatkan kebawah. Contoh lain misalnya ingin menjumlahkan warna merah (255, 0, 0) dengan warna hijau (0, 255, 0) maka akan menghasilkan warna kuning (127, 127, 0). 2.4 Grey Scale Adalah sebuah format warna dengan mengambil rata dari nilai r, g, b dari sebuah format gambar berwarna. Persamaan yang digunakan adalah sebagai berikut: Gray scale=( R+ G+ B) / ( + ) ........(2-9)

Dengan nilai =0.35, =0.25, dan =0.4 sehingga nilai + = 1. Fungsi dari format warna gray ini adalah untuk memudahkan proses selanjutnya karena kita akan kesulitan apabila kita menjalankan proses selanjutnya dengan menggunakan format gambar berwarna karena nilai r, g, dan b yang dihasilkan dengan format gambar itu akan bervariasi. Dengan format warna gray ini maka dihasilkan nilai R=G=B. 2.5 Segmentasi 5 Segmentasi adalah suatu proses untuk memisahkan obyek yang kita ambil dengan sisi latar belakangnya, dimana pendekatan yang diambil adalah dengan mengelompokkan (clustering) warna-warna sehingga mendekati bagian warna yang sejenis dengan menggunakan teknik filtering. Pada akhir proses segmentasi ini akan diperoleh dua warna yang menonjol yaitu hitam dan putih 2.6 6Operasi Peningkatan Citra 2.6.1 Kualitas Citra Seringkali citra yang kita hasilkan memiliki kualitas yang kurang bagus. Hal ini dikarenakan adanya gangguan teknis peralatan yang kita gunakan atau ada tidaknya noise disekitarnya, dapat juga karena kurang

5 6

Bachtiar Novan, Andi, Robot Penyerang dalam Permainan Sepak Bola , hal. 21 Bachtiar Novan, Andi, Robot Penyerang dalam Permainan Sepak Bola , hal. 21

20

bagusnya pencahayaan. Untuk itu perlu dilakukan manipulasi data-data untuk memperbaiki kualitas citra. Opersi peningkatan kualitas citra banyak dilakukan untuk mendapatkan suatu perbaikan kualitas citra dengan melakukan pemanipulasian data-data atau parameter-parameter yang ada pada citra tersebut. Beberapa manipulasi yang dilakukan pada proses peningkatan kualitas citra adalah proses filtering, sharpening, dan softening. Setiap gambar dapat dianalisa dengan melihat image histogramnya. Image histogram adalah grafik yang menunjukkan frekuensi suatu warna, dimana sumbu horisontalnya menunjukkan nomor warna yang dipakai (skala 0 sampai 255). Sedangkan sumbu vertikal menunjukkan jumlah titik yang mempergunakan titik yang bersangkutan. Dengan adanya analisa histogram ini kita dapat memodifikasi gambar tersebut diantaranya adalah dengan jalan: 1. Linier Addition Dengan jalan penambahan intensitas dari setiap titik hingga memiliki nomor warna yang lebih besar (lebih terang) tanpa mengubah perbedaan warnanya. 2. Linier Scaling Selain melakukan penambahan intensitas pada setiap warna titik, juga dilakukan perkalian setiap titik dengan suatu variabel sehingga diperoleh perbedaan warn yang besar. 3. Linier Multiplication Dengan cara mengkuadratkan warna seluruh titik pada citra sehingga diperoleh gambar yang jauh lebih terang karena perbedaan warna sangatlah besar. Dengan beberapa cara lain seperti histogram equalitation, pembersih gambar dengan intensity filtering yang diantaranya dengan low pass dan high pass filtering. 2.6.2 Tresholding Prinsip kerja dari metode ini adalah untuk mengurangi pemakaian intensitas cahaya warna yang ada dalam suatu citra, dimana dalam metode ini ditentukan nilai T setelah melihat greyscale dari citra tersebut. T adalah nilai minimum diantara dua nilai maksimum yang ada pada greyscale dari citra tersebut. Proses selanjutnya adalah mengganti setiap intensitas warna yang ada dalam citra tersebut. Jika intensitasnya diganti dengan ‘0’, sedangkan jika intensitas warnanya lebih besar maka intensitasnya diganti dengan K-1, dimana K adalah konstanta yang sudah ditentukan sebelumnya, misalnya 256.

21

Metode tresholding ini sangat baik digunakan untuk memisahkan obyek dengan background yang agak gelap atau sebaliknya. Secara matematis metode tersebut memiliki model sebagai berikut:

 0, g1( x, y ) < T   g2 (x,y)=    K − 1, g1( x, y ) > T   

..........(2-10)

Metode ini digunakan untuk mengkonversi data image menjadi data biner dengan tujuan agar proses selanjutnya menjadi lebih mudah. Dari proses tresholding ini, akan didapat hasilnya apabila jumlah warna pixel mempunyai intensitas kedalaman warna kurang dari harga tresholding maka warna pixel tersebut akan menjadi warna putih (255). Teknik in berdasarkan pada konsep yang sederhana. Parameter Tr disebut dengan ambang kecerahan yang dipilih dan diterapkan pada suatu citra. Jadi warna background dengan warna obyek saling berkebalikan. Berikut ini dijelaskan dua jenis alternatif pemilihan treshold. a) Fixed treshold (nilai Tr yang selalu tetap) Salah satu alternatif memilih nilai treshold secara bebas dari data citra. Hal ini diterapkan dengan memacu suatu ketetapan. Missal citra mempunyai perbedaan yang sangat tinggi dan obyek yang diamatidalam citra tersebut adalah gelap dan background dari citra adalah hamper sama dengan terang dan kemudian konstan threshold kita pilih 128 pada skala 0 sampai 255. Hal ini mungkin akan menghasilkan hasil yang cukup akurat. Akurat disini berarti kita meminimumka pixel yang salah dalam pengelompokannya. b) Histogram devided treshold Didalam banyak kasus, nilai treshold (ambang) dipilih berdasarkan histogram kecerahan dari suatu citra yang diamati. 2.7 Euclidean Distance 7 Euclidean distance adalah suatu metode statistika yang digunakan untuk mengelompokkan data dengan jarak tertentu terhadap mean data tersebut sehingga diperoleh suatu penyebaran data yang

7

Bachtiar Novan, Andi, Robot Penyerang dalam Permainan Sepak Bola , hal. 23

22

memiliki pola terhadap nilai mean. Rumus dari Euclidean distance adalah sebagai berikut: § Atau § Akar kuadrat Absolut :E=

( X 2 − X 1 2)

......(2-11) ......(2-12)

: E = ( X 2 − X 1)

Dimana: E = Euclidean Distance X1 = Titik tengah layar monitor X2 = Titik tengah obyek Karakteristik dari metode ini cukup sederhana karena tidak memiliki penguatan sehingga bidang atau luasan yang terbentuk cenderung berbentuk lingkaran. Alasan digunakan metode ini adalah sesuai dengan konsep yang telah kami buat, yaitu untuk perhitungan selisih titik tengah obyek yang terlihat dilayar dengan titik tengah layar yang mana hasilnya digunakan untuk kontrol robot. 2.8 Bahasa Pemrograman 8 Bahasa Pemrograman yang digunakan untuk menyelesaikan tugas akhir ini adalah bahasa pemrograman Visual Basic 6.0. Berikut akan dijelaskan beberapa hal mengenai bahasa pemrograman Visual Basic. 2.8.1 Variabel Dalam melakukan pemrograman akan selalu diperlukan tempat penyimpanan data, misalnya untuk menampung data hasil perhitungan, menampung data hasil pembacaan integer, atau lainnya. Seperti pada bahasa pemrograman lainnya, dalam penggunaan variabel harus memiliki nama dan tipe data tertentu. Nama variabel menunjukkan suatu tempat dalam memori komputer sedangkan tipe data mengontrol besarnya memori yang disediakan untuk variabel tersebut. Berikut ini adalah tipe data pada Visual Basic beserta ukuran byte dan range tipe data tersebut.
8

Retna P, Catur Edi W, Interfacing Port Paralel dan Port Serial Komputer dengan Visual Basic 6.0, hal. 23

23

Tabel 2.1 Tipe Data Pada Visual Basic Tipe Data Integer Long Integer Single-precision Floating point Double-precision Floating point Ukuran Byte 2 byte 4 byte 4 byte Range -32.768 sampai 32.767 -2.147.483.648 sampai 2.147.483.647 -3,402823 E38 sampai 3,402823 E38 -1,79769313486232 D303 sampai 1,79769313486232 D303 -922337203685477,5808 sampai 922337203685477,5808 0 sampai 65.535 True atau False 1 january 100 sampai 31 Desember 9999 0 sampai 255

8 byte

Currency

8 byte

String Boolean Date Byte

1 byte per karakter 2 byte 8 byte 1 byte

2.8.2 Kontrol Program 9 Kekuatan pemrograman adalah terletak pada kontrol program ini. Dengan kontrol program ini, kita akan mengendalikan alur eksekusi program dan menentukan keputusan apa yang harus dikerjakan oleh program pada kondisi tertentu. Kontrol program pada Visual Basic meliputi kontrol pertimbangan kondisi dan keputusan, kontrol pengulangan serta kontrol penyaluran alternatif. Pada bagian ini akan dijelaskan beberapa kontrol yang disediakan Visual Basic dan digunakan pada pemrograman tugas akhr ini.

9

Bachtiar Novan, Andi, Robot Penyerang dalam Permainan Sepak Bola , hal. 25

24

2.8.2.1 If .......Then Dengan peryataan seperti ini kita dapat mengetes suatu kondisi tertentu dan kemudian menentukan suatu tindakan jika kondisi tersebut terpenuhi. Sintak penulisannya adalah sebagai berikut:
If <syarat kondisi> Then <pernyataan>

Bisa juga dengan multiple-line, sebagai berikut:
If <syarat kondisi> Then <pernyataan pertama> <pernyataan kedua> . . <pernyataan ke-n> End If

2.8.2.2 10If ..Then .Else Pernyataan ini hamper sama dengan pernyataan If ..Then, yaitu digunakan untuk mentes suatu kondisi tertentu. Hanya saja, jika kondisi tidak terpenuhi, maka alur program akan mengeksekusi pernyataan lain. Berikut adalah sintak penggunaannya.
<syarat kondisi> Then <blok pernyataan pertama> Else If <syarat kondisi> Then <blok pernyataan kedua> .. Else If <syarat kondisi> Then <blok pernyataan ke-n> Else <blok pernyataan> End If If

Visual Basic pertama kali akan mentes kondisi 1. jika kondisi 1 tidak terpenuhi, Visual Basic akan mentes kondisi 2 dan seterusnya sampai menemukan kondisi yang terpenuhi. Jika Visual Basic menemukan kondisi yang memenuhi, maka Visual Basic akan mengerjakan blok pernyataannya. Jika Visual Basic tidak menemukan kondisi yang memenuhi maka blok pernyataan Else yang akan dieksekusi.
10

Retna P, Catur Edi W, Interfacing Port Paralel dan Port Serial Komputer dengan Visual Basic 6.0, hal. 29

25

2.8.2.3 11Select ..Case Pada dasarnya perintah ini sama dengan perintah If....Then Else, yaitu akan mengeksekusi satu blok pernyataan dari beberapa pilihan blok pernyataan. Hanya saja penulisannya lebih ringkas dan lebih mudah dimengerti. Sintak penulisannya adalah sebagai berikut:
Select....Case <kondisi yang diujikan> Case <syarat kondisi 1> <blok pernyataan pertama> Case <syarat kondisi 2> <blok pernyataan kedua> ......... Case Else <blok pernyataan ke-n> End Select

2.8.2.4 For.........Next Perintah ini digunakan untuk melakukan perulangan suatu blok pernyataan sampai dipenuhi syarat kondisi yang ditetapkannya. Dengan For bisa ditentukan nilai awal dan nilai akhir perulangan serta nilai kenaikannya. Sintak penggunannya adalah sebagai berikut:
For <namavariable>=<nilai_awal> To <nilai_akhir> [Step <nilai_kenaikan>] <Blok pernyataan> Next

2.8.2.5 GoTo Perintah GoTo digunakan untuk melakukan percabangan ke suatu baris label tertentu. Dengan perintah GoTo, program dapat langsung melompat ke baris tertentu sehingga kode-kode program yang dilewatinya tidak akan dieksekusi. Sintak penulisannya adalah sebagai berikut:
GoTo <nama_label> <blok pernyataan> <nama_label>:

Biasanya perintah GoTo digunakan bersama dengan perintah On Error untuk menangani error, yaitu untuk memerintahkan program
11

Retna P, Catur Edi W, Interfacing Port Paralel dan Port Serial Komputer dengan Visual Basic 6.0, hal. 30

26

melompat ke baris tertentu jika terjadi kesalahan / error. Error dapat terjadi karena kesalahan logika program kita, kesalahan perhitungan (misal pembagian dengan nol), kesalahan yang disebabkan oleh hardware, maupun kesalahan lainnya. Penanganan error dalam pemrograman adalah sangat penting karena error dapat menyebabkan program berhenti dan dapat menyebabkan komputer menjadi hang. Sintak penulisannya adalah sebagai berikut:
On Error GoTo <nama_label> <Blok pernyataan> <nama_label>

2.8.2.6 Exit Perintah exit digunakan untuk keluar secara langsung dari blok program For.....Next, Do.....Loop, Sub Procedure, atau Function Prcedure. Sintak penulisannya adalah sebagai berikut: ü Exit....Do, digunakan untuk keluar dari blok program Do....Loop. ü Exit....For, digunakan untuk keluar dari blok program For....Next. ü Exit Sub, digunakan untuk keluar dari Sub Procedure. ü Exit Function, digunakan untuk keluar dari Function Procedure. 2.8.3 Prosedur Kita bisa membangun program lebih mudah dengan memecah program menjadi blok-blok komponen yang lebih kecil yang disebut prosedur. Prosedur sangat berguna ketika kita sering menggunakan berulang-ulang tugas yang sama atau bermaksud membagikannya pada program lain. Dengan prosedur, kita akan lebih mudah men-debug program karena kita dapat melakukan pengujian per prosedurdaripada pengujian seluruh program. 2.8.3.1 Sub Procedure Sub prosedur adalah blok kode yang dijalankan sebagai tanggapan atas terbentuknya even, baik even itu merupakan even pemanggilan dari prosedur lain maupun even yang terjadi dari pemakai program, misal even penekanan tombol kiri mouse. Sintak penulisan sub prosedur adalah senagai berikut:
[Private/Public][Static] Sub <nama_prosedur> (argumen) <blok pernyataan> ………….. ………….. End Sub

27

Setiap kali procedur dipanggil, blok pernyataan yang ada diantara Sub dan End Sub akan dijalankan. Argumen untuk sebuah prosedur adalah mirip dengan deklarasi variabel, yaitu pemakaian suatu nilai yang melewati pemanggilan prosedur. Berikut contoh pemakaiannya.
Private Sub Tebak_angka(Angka As Integer ) Select Case Angka Case Is > 10 Print angka > 10 Case Is < 10 Print angka < 10 Case Else Print angka = 10 End Select End Sub

Untuk memanggilnya kita bisa menuliskan nama prosedur tersebut disertai argumennya dengan tipe data yang harus sama. Setiap kali prosedur ini dipanggil, prosedur ini akan menentukan angka apa yang dilewatkan pada argumen dan akan mencetaknya pada form. Berikut adalah contoh pemanggilan prosedur tersebut melalui prosedur even, yaitu prosedur Command1_Click.
Private Sub Command1_Click() Input_angka% = InputBox( Masukkan angka sembarang! , Masukkan angka ) Tebak_angka input_angka% End Sub

Command1_Click juga merupakan Sub Procedur yang tanpa argument. Procedure Command1_Click akan dipanggil jika pemakai program menekan tombol kiri mouse pada obyek Command1. Prosedur semacam ini disebut Event Procedure. 2.8.3.2 Function Procedure 12 Function Procedure sebenarnya hampir sama dengan Sub Procedure, tetapi Function Procedure ini akan mengembalikan nilai tertentu setelah pemanggilannya. Sintak penulisannya adalah sebagai berikut.

12

Retna P, Catur Edi W, Interfacing Port Paralel dan Port Serial Komputer dengan Visual Basic 6.0, hal. 38

28

[Private/Public] [Static] Function <nama_prosedur> (argumen) [As tipe data] <blok pernyataan> End Sub

Berikut adalah contoh penggunaannya. Kita akan membuat fungsi tebak_angka seperti pada contoh sebelumnya.
Function Tebak_angka(Angka As Integer ) As String Select Case Angka Case Is > 10 Tebak_angka = angka > 10 Case Is < 10 Tebak_angka = angka < 10 Case Else Tebak_angka = angka = 10 End Select End Sub

Cara kerja fungsi tebak-angka ini adalah sama seperti prosedur tebak_angka, yaitu menentukan nilai angka yang dilewatkan pada argumen. Akan tetapi, fungsi tebak_angka ini langsung mengembalikan karakter string yang bisa dilewatkan sebagai argumen pada fungsi atau prosedur lain. Berikut contoh pemanggilan fungsi tebak_angka sehingga jelas perbedaannya dengan prosedur tebak_angka.
Private Sub Command1_Click() Input_angka% = InputBox( Masukkan angka sembarang! , Masukkan angka ) Print Tebak_angka input_angka% Label1.Caption = Tebak_angka (Input_angka%) End Sub

Pada contoh pemanggilan tersebut dapat kita lihat. Karena fungsi Tebak_angka adalah mengembalikan nilai karakter string, maka nilai ini dapat langsung dilewatkan pada fungsi Print maupun sebagai nilai dari properti Caption obyek Label1. hal ini tidak dapat dilakukan dengan menggunakan Sub Procedure. Selain fungsi yang dapat kita buat sendiri seperti pada contoh di atas, Visual Basic telah menyediakan banyak sekali fungsi yang siap pakai. Kita tinggal memanggil nama fungsi tersebut beserta argumen yang harus dilewatkan. Berikut adalah sebagian fungsi yang telah disediakan oleh Visual Basic yang sering digunakan.

29

Fungsi-Fungsi Manipulasi String Fungsi-fungsi dalam kelompok manipulasi string ini biasa digunkan untuk tugas-tugas yang berhubungan dengan pemrosesan string. Berikut adalah tabel fungsi_fungsi tersebut dan contoh penggunaannya. Tabel 2.2 Fungsi-Fungsi Manipulasi String Nama Fungsi Len Ucase Lcase Right Left Mid String Asc Chr Trim Str InStr Val Keterangan Menentukan panjang sebuah string. Mengubah huruf string menjadi huruf besar. Mengubah huruf string menjadi huruf kecil. Menghasilkan karakter yang dihitung dari sisi kanan string Menghasilkan karakter yang dihitung dari sisi kiri string Menghasilkan karakter yang dihitung dari tengah-tengah string dimulai dari titik awal tertentu. Mengulangi karakter string Menghasilkan kode ASCII dari huruf tertentu. Menghasilkan karakter untuk kode ASCII tertentu. Menghasilkan karakter dengan menghilangkan karakter space-nya. Menghasilkan karakter yang mempresentasikan angka numeriknya. Mencari titik awal dari sebuah string dalam string yang besar. Menghasilkan numerik angka yang terkandung dalam string. Contoh Penggunaan Len(”pipit”) Menghasilkan 5 Ucase(”pipit”) Menghasilkan PIPIT Lcase (”PIPIT”) Menghasilkan pipit Right (”abcdefg”,3) Menghasilkan ”efg” Left (”abcdefg”,3) Menghasilkan ”abc” Mid (”abcdefg”,3,3) Menghasilkan ”cde” String (3,”a”) Menghasilkan ”aaa” Asc (”A”) Menghasilkan 65 Chr$ (65) Menghasilkan ”A” Trim (” <a> ”) Menghasilkan ”<a>” Str$ (-12.34) Menghasilkan”-12.34” Instr (”abcdef”,”cd”) Menghasilkan 3. Val (”12.34abcdefg”) Mengahasilkan 12,34

30

Fungsi-Fungsi Konversi Data Fungsi-fungsi dalam kelompok konversi data ini biasa digunakan untuk konversi data. Tabel 2.3 Fungsi-Fungsi Konversi Data Nama Fungsi Cint Keterangan Mengembalikan nilai integer dan membulatkan pecahan ke integer tertinggi. Mengembalikan nilai string Mengembalikan nilai Byte, nilai maksimumnya adalah 255. Memotong bagian fraksial, tetapi untuk bilangan negatif akan mengembalikan nilai yang lebih besar atau sama dengan bilangan tersebut. Memotong bagian fraksial, tetapi untuk bilangan negatif akan mengembalikan nilai yang lebih kecil atau sama dengan bilangan tersebut. Menghasilkan nilai hexadesimal dari nilai numerik yang dilewatkan. Contoh Penggunaan Cint(”12.34”) Menghasilkan 12 CStr (12.34) Menghasilkan ”12,34” Cbyte (”12.34”) Menghasilkan 13 Fix (1.23) Menghasilkan 1 Fix (-1.23) Menghasilkan -1 Fix (1.23) Menghasilkan 1 Fix (-1.23) Menghasilkan -2 Hex (10) Menghasilkan ”A”

13

CStr Cbyte

Fix

Int

Hex

2.8.4 Operator Operator digunakan pada Visual Basic untuk memanipulasi data maupun untuk melakukan perhitungan. Operator Pada Visual Basic dapat dikelompokkan menjadi tiga kelompok, yaitu operator matematik, operator perbandingan, dan operator logika. 2.8.4.1 Operator Matematik Operator matematik digunakan untuk melakukan operasi perhitungan matematik. Dalam Visual Basic, jika suatu ekspresi
13

Retna P, Catur Edi W, Interfacing Port Paralel dan Port Serial Komputer dengan Visual Basic 6.0, hal. 41

31

mempunyai operator lebih dari satu kategori, maka operator matematik yang akan dievaluasi lebuh dulu dilanjutkan dengan operator perbandingan, dan terakhir operator logika. Berikut adalah tabel operator matematika dimulai dari hirarki paling tinggi ke paling rendah. Tabel 2.4 Tabel Operator Matematik Operator ^ *,/ \ Mod +,& Operasi. Pemangkatan. Tanda negatif. Perkalian dan pembagian . Pembagian integer. Modulus (sisa pembagian). Penambahan dan pengurangan. Penggabungan String

2.8.4.2 Operator Perbandingan Operator perbandingan digunakan untuk membandingkan suatu ekspresi dengan ekspresi yang lain yang menghasilkan nilai Boolean (False atau True). Berikut adalah operator perbandingan pada Visual Basic. Tabel 2.5 Tabel Operator Perbandingan Operator = <> < > <= >= Like Is Operasi. Sama dengan. Tidak sama dengan. Lebih kecil. Lebih besar. Lebih kecil atau sama dengan. Lebih besar atau sama dengan. Mempunyai ciri yang sama. Mempunyai referensi obyek yang sama.

2.8.4.3 Operator Logika Operator logika digunakan untuk mengespresikan satu atau lebih ekspresi logika yang akan menghasilkan nilai boolean. Tabel berikut adalah operator logika dimulai dari hirarki paling tinggi ke paling rendah beserte tabel kebenarannya.

32

Tabel 2.6 Tabel Operator Logika Operator Not Keterangan Akan menghasilkan nilai kebalikan dari nilai eksprresi operan Akan menghasilkan nilai True hanya jika opersi operannya keduanya bernilai logika True Akan menghasilkan nilai True jika salah satu operasi operannya bernilai logika True Akan mengembalikan nilai True jika ekspresi operannya bernilai logika berbeda Akan menghasilkan nilai True jika eksoresi operannya bernilai logika sama. Akan menghaslkan nilai false jika ekspresi operan sebelah kiri operator bernilai logika True dan kanan bernilai logika false. Tabel Kebenaran Operasi Operan Hasil Not True False Not False True And True True And False False And True False And False True Or True True Or False False Or True False Or False True Xor True True Xor False True Xor False False Xor False True Eqv True True Eqv False True Eqv False False Eqv False True Eqv True True Eqv False True Eqv False False Eqv False True True False False False True True True False False True True False True False False True True False True True

And

Or

Xor

Eqv

Imp

33

Halaman Ini Sengaja Di Kosongkan

34

BAB III PERENCANAAN DAN PEMBUATAN PERANGKAT LUNAK
Didalam bab tiga ini pembahasan materi meliputi perencanaan dan pembuatan perangkat lunak yang akan diterapkan dalam sistem kerja Robot Banteng. 3.1 Sistem Konfigurasi Secara keseluruhan kerja Robot Banteng ini sangat ditentukan oleh perangkat lunak yang diterapkan didalamnya. Perangkat lunak yang dibangun didalam robot ini adalah perangkat lunak untuk pengolahan gambar. Agar robot dapat berjalan dengan baik dan sesuai dengan yang diinginkan maka sangat diperlukan piranti keras sebagai pendukungnya, antara lain mekanik robot itu sendiri, penggerak motor serta mikrokontroller AT89S51 sebagai penghubung antara PC dengan penggerak motor. Secara keseluruhan gambaran sistem yang dibangun di robot banteng adalah sebagai berikut:

MIKROKONTROLLER AT89S51 USB RS232

DRIVER MOTOR DC

Gambar 3.1 Sistem diagram blok Robot Banteng

35

Berikut adalah diagram alir untuk pengolahan gambar (image processing):

36

Gambar 3.2 Diagram alir pengolahan citra 3.2. Setting Mekanik Agar robot dapat berjalan sesuai yang diharapkan, maka perlu dilakukan pengaturan posisi kamera dengan baik pada mekanik robot. Hal ini bertujuan agar gerakan robot selaras dengan obyek yang ditangkap oleh kamera. Berikut gambar mengenai pengaturan letak kamera pada mekanik robot:

37

Gambar 3.3 Peletakan kamera pada mekanik robot 3.3. Pengolahan gambar oleh PC Dalam pengolahan gambar digunakan segmentasi untuk memisahkan obyek tersebut dengan latar belakangnya. Metode yang dipakai adalah segmentasi warna. Obyek yang akan di deteksi adalah bendera berwarna merah dalam hal ini adalah robot matador. Pada saat pertama kali robot dijalankan gerakan robot adalah memutar kekanan. Gerakan memutar ini dilakukan untuk mendapatkan obyek yang dimaksud. Apabila obyek telah ditemukan, maka akan dilakukan perhitungan-perhitungan untuk mendapatkan titik-titik (x,y) bendera. Untuk menentukan jarak penyerangan obyek oleh robot, dilakukan langkah-langkah perhitungan titik-titik x,y yang telah ditemukan tadi. Secara garis besar langkah-langkah yang diproses didalam PC adalah sebagai berikut: 1. Pengambilan gambar. 2. Segmentasi warna. 3. Proses penentuan titik tengah obyek (x,y), panjang obyek(nX), lebar obyek(nY) dan Luas obyek (L). 4. Proses perhitungan jarak penyerangan obyek dengan menghitung luas obyek.. 5. Proses penyerangan. Setelah dilakukan berbagai macam perhitungan, maka akan dihasilkan suatu keputusan yang kemudian dikirim ke mikrokontroller melalui komunikasi serial. 3.4. Pengambilan Gambar Untuk pengambilan gambar digunakan web cam Vimicro USB PC Camera dengan USB sebagai konektornya. Kamera tersebut memiliki fokus yang harus diset secara manual (bukan autofokus).

38

Gambar 3.4 Kamera Vimicro USB PC Camera Untuk mengatasi pencahayaan agar obyek yang ditangkap dapat benar-benar baik, maka kita juga perlu mengeset tingkat kecerahan, kontras serta ketajaman pada saat kamera mengambil gambar. Cara mengesetnya adalah dengan cara manual. Untuk melakukannya kita cukup menggunakan fasilitas software dari Vimicro itu sendiri.

Gambar 3.5 Kontrol Kamera Logitech Quick Zoom 3.5. Pengenalan Obyek Pengenalan Obyek yang dimaksud disini adalah obyek matador. Pengenalan obyek tersebut dilakukan dengan cara scanning. Scanning digunakan untuk menelusuri frame setelah dilakukan segmentasi, apakah ada obyek yang dimaksud atau tidak. Sebelum dilakukan scanning obyek, terlebih dahulu dilakukan penskalaan untuk memperkecil ukuran

39

gambar sehingga lebih cepat diproses. Setelah obyek yang di maksud didapatkan selanjutnya akan dilakukan langkah-langkah sebagai berikut: 3.5.1. Titik Tengah Obyek Agar gerakan robot sesuai dengan yang diharapkan, maka diperlukan perhitungan antara titik tengah obyek yang ditangkap dengan titik tengah layar. Hal ini dilakukan agar gerakan robot dapat lurus terhadap obyek. Sebelumnya dilakukan proses scanning obyek terlebih dahulu. Scanning dimulai secara vertikal dengan memanfaatkan titik koordinat antara y = 0 sampai y = 23 (dari bawah ke atas frame), kemudian dilanjutkan scanning secara horisontal dengan titik koordinat antara x = 0 sampai x = 31 (dari kiri ke kanan frame). Apabila pada saat proses scanning tersebut ditemukan perubahan warna maka akan diketahui nx sebagai koordinat titik x dan ny sebagai koordinat titik y dari obyek. Apabila nilai dari x dan y dari hasil proses scanning tersebut sudah didapatkan, maka dilakukan proses perhitungan hingga didapatkan nilai titik tengah obyek. Persamaan pencarian titik tengah obyek seperti berikut: xObyek = nx / n * 10 + 5 yObyek = ny / n * 10 + 5 dimana: xObyek = titik tengah pada sumbu x yObyek = titik tengah pada sumbu y nx = perubahan nilai x ny = perubahan nilai y n = jumlah perubahan Pada proses segmentasi sebelumnya telah didapatkan nilai r, g dan b sebesar 255, hal tersebut akan menyebabkan obyek berwarna putih dan latar belakangnya berwarna hitam. Gambaran dari proses scanning dan pencarian titik tengah adalah sebagai berikut:

40

24

(0,0) Keterangan: : Arah scanning

32

Gambar 3.6 Proses scanning dan pencarian titik tengah Pada robot nilai treshold dapat diatur secara manual. Hal ini dilakukan untuk mempermudah user mengoperasikannya. Karena warna obyek yang ditangkap kamera tidak semua bagiannya sama. Seperti contoh yang kita ketahui bahwa buah apel yang berwarna merah tidak seluruh bagiannya berwarna merah, mungkin pada bagian pinggirnya ada yang berwarna terang dan ada yang berwarna gelap. Hal tersebut menyebabkan nilai warna merah untuk setiap pixel gambar menjadi tidak sama. Untuk mengatasi hal tersebut maka diperlukan penentuan nilai treshold. 3.5.2. Luas Obyek Penentuan Luas obyek dimaksudkan untuk mengetahui seberapa besar pixel obyek dilayar. Hal ini perlu diketahui untuk menentukan jarak tendang obyek. Sebelumnya dicari dahulu panjang dan lebar obyek dengan menggunakan rumus berikut: xL = xMax - xMin + 1 yL = yMax - yMin + 1 dimana: xL = panjang obyek (sumbu x) yL = lebar obyek (sumbu y) xMax = nilai x hasil scanning yang lebih besar dari -1 xMin = nilai x hasil scanning yang kurang dari 32 yMax = nilai x hasil scanning yang lebih besar dari -1 yMin = nilai x hasil scanning yang kurang dari 24

41

Apabila panjang dan lebar obyek sudah didapatkan, maka dilakukan perhitungan hingga didapatkan luas obyek. Untuk mencari Luas tersebut digunakan persamaan sebagai berikut: Luas = xL * yL 3.6. Jarak Penyerangan Obyek Jarak penyerangan pada robot banteng dapat diatur dengan memperhatikan luas obyek yang telah didapat. Jarak penyerangan dapat kita atur sesuai dengan keperluan. Panjang obyek yang akan di deteksi adalah 18 cm dan lebar 15 cm. Dengan panjang dan lebar seperti itu dapat diketahui luas obyek. Untuk mendapatkan jarak sesuai dengan yang diperlukan maka dilakukan pengukuran langsung. Misal kita menginginkan jarak sejauh 1 meter, maka ukur jarak kamera dengan obyek sejauh 1 meter. Kemudian lihat besar luas obyek pada layar. Nilai luas pixel pada layar tersebut mewakili jarak antara robot dengan obyek. Pada robot banteng jarak penyerangan ditentukan antara range 80 cm (63 pixel) sampai dengan 120 cm (30 pixel). Apabila luas obyek lebih besar dari 63 pixel robot akan mundur dan sebaliknya apabila luas kurang dari 30 pixel robot akan maju. Untuk mempermudahkan penggunaan range penyerangan juga dapat diatur secara manual dengan memasukkan nilai Luas pada textbox yang telah ditentukan. Untuk menentukan obyek sudah tepat berada pada tengah layar maka dilakukan perhitungan error seperti berikut: e = ( 160-x ) \ 40 dimana : x = nilai titik tengah obyek pada sumbu x Berikut sintak programnya:
If e = 0 Then frmUtama.txtPerintah = "Maju" frmUtama.MSComm1.Output = "F" ElseIf e < 0 Then frmUtama.txtPerintah = "Putar ke Kiri : " & Abs(e) frmUtama.MSComm1.Output = "L" Else frmUtama.txtPerintah = "Putar ke Kanan : " & Abs(e) frmUtama.MSComm1.Output = "R" End If

Gambar 3.7 Sintak program penentuan posisi robot 42

apabila nilai error (e) sama dengan 0 berarti posisi obyek sudah tepat ditengah-tengah layar. Apabila kurang dari 0 posisi obyek terlalu ke kanan dan sebaliknya bila lebih besar dari 0 posisi obyek terlalu ke kiri. 3.7. Komunikasi Data antara PC dengan Mikrocontroller Untuk mengaktifkan seluruh sistem sesuai dengan fungsinya, perlu dibuat perangkat keras dan perangkat lunak. Perangkat lunak disini yaitu untuk mengatur jalannya data yang dikirim oleh komputer ke mikrokontroller agar data yang terkirim diterima dengan sempurna oleh mikrokontroller. Ada dua perangkat lunak pada komunikasi data yaitu perangkat lunak untuk komunikasi data pada PC dan perangkat lunak untuk komunikasi data pada mikrokontroller. Dalam proyek akhir ini akan membuat robot otomatis dengan menggunakan komunikasi serial. Pada bagian pemroses gambar dalam hal ini warna terdiri dari kamera, USB (Universal Serial Bus), komputer, rangkaian pengubah level tegangan, sedangkan bagian pengaturan gerak robot terdiri dari rangkaian mikrokontroller dan rangkaian driver sebagai penggerak motor. Sedangkan untuk perancangan komunikasi data menggunakan RS232. Dengan perangkat tersebut dapat digunakan untuk mengirimkan data/karakter dari komputer ke mikrokontroller dengan sempurna.

Gambar 3.8 Jalur RS232 pada DB9 Saat ini penggunaan bahasa pemrograman berbasis objek sedang menjadi trend yang tak terhindarkan. Vendor perangkat lunak menawarkan bahasa dengan karakter tersebut dengan sebuah kosakata yang cantik, yakni Visual, sehingga kita kenal Delphi milik Borland, Visual C++, Visual Basic, atau Oracle, PowerBuilder, Visual dBase, Visual Foxpro, untuk aplikasi database. Tak terkecuali dalam aplikasi sistem kontrol industri, perangkat yang ditawarkan para vendor-nya juga

43

semakin mendukung penggunaan pemrograman visual. Seperti Visual Basic, misalnya, kalangan industri sistem kontrol memberikan peluang untuk pengembangan sistem mereka dengan bahasa ini, terutama di kalangan pengguna sistem berbasis Windows. Yokogawa, ABB, Wonderware, adalah nama yang bisa disebutkan untuk hal ini. Pada aplikasi ini, akan dibahas menggunakan Visual Basic dengan pertimbangan bahasa pemrograman yang paling banyak dipakai pada develop sistem. Komuniaksi serial dapat digolongkan menjadi dua: • Pooling yaitu suatu teknik pengiriman dan penerimaan data secara terus menerus. • Interupt yaitu suatu pengiriman data jika ada data yang masuk baru akan mendapat respon dan begitu sebaliknya sehingga computer tidak terlalu sibuk.

Gambar 3.9 Form dan properties pada Visual Basic Pengiriman informasi dari PC menuju mikrokontroler menggunakan data serial dengan baudrate 9600 bps non parity data bit 8 dan stop bit 1 (9600, n, 8, 1). Untuk mengatur data serial pada visual basic telah disediakan properti pengaturan (lihat gambar diatas). Untuk menambahkan serial comm pada visual basic lakukan langkah sebagai berikut : Klik kanan toolbox kemudian klik component, kemudian pilih microsoft comm control 6.0, lalu klik OK. Lihat gambar berikut:

44

Gambar 3.10 Daftar komponen pada Visual Basic Untuk membuat aplikasi sederhana, kita berikan contoh pemrograman chating atau pengiriman data dari PC1 ke PC 2 (dari DTE ke DTE) menggunakan system interrupt. Langkah-langkah : 1. Buat form seperti pada gambar form diatas ,tambahkan komponen komunikasi serial menggunakan Microsoft Comm Control dan ubah propertiesnya sesuai dengan keperluan, boudrate, parity, databit dan stop bitnya. 2. Pada Load Form aktifkan port komunikasi serial
Private Sub Form_Load() MSComm1.PortOpen = True Text2 = "" End Sub

3. Untuk prosedure pengiriman data dari PC ke PC lain maka setelah data pada Text1(textbox) diisi dengan data, maka agar command button Kirim bias melakukan pengiriman data lakukan perintah dibawah ini :
Private Sub Command1_Click() MSComm1.Output = Text1 + Chr(13) + Chr(10) End Sub

45

4.

Sedangkan untuk menerima hasil kiriman data dari PC lain maka hasil informasinya tampilkan pada Text2 (Textbox) tetapi property multiline jadikan true agar bisa menampilkan lebih dari satu baris. Kemudian lakukan pengecekan, apakah ada data yang masuk, gunakan procedure OnComm dengan cara double clik komponen MsComm1 lalu ketik listing program seperti dibawah ini :
Private Sub MSComm1_OnComm() Text2 = Text2 + MSComm1.Input If Right(Text2, 1) = Chr(13) Then Text2 = Text2 + Chr(10) End If End Sub

Pada perancangan perangkat lunak ini untuk pengiriman data dari komputer ke mikrokontroler digunakan komunikasi serial secara interupt yaitu apabila ada data yang dikirimkan ke mikrokontroler maka data tersebut langsung diolah oleh mikrokontroler untuk diperoleh responnya. Untuk mempermudah pengolahan serta pengiriman data melalui komunikasi serial, maka pada perancangan perangkat lunak data yang dikirimkan ke mikrokontroler adalah berupa satu karakter huruf atau satu karakter angka. Pada mikrokontroler huruf atau karakter angka yang diterima tersebut akan diolah sesuai dengan subrutin yang telah ditunjukkan pada program mikro itu sendiri. Karakter yang dikirimkan ke mikrokontroler tersebut antara lain adalah: Karakter ‘F’ Karakter ‘B’ Karakter ‘R’ Karakter ‘L’ Karakter ‘S’ Karakter ’A’ Karakter ’C’ Karakter ’E’ = untuk perintah maju = untuk perintah mundur = untuk perintah berputar kekanan = untuk perintah berputar kekiri = untuk perintah berhenti = untuk perintah Serang = untuk perintah Scanning obyek = untuk perintah menghentikan seluruh proses penerimaan data dari PC

Untuk mengirimkan karakter diatas pada Visual Basic, cukup digunakan perintah sebagai berikut: Mscomm1.Portopen = True Mscomm1.Output = ’karakter’

46

3.8. Komunikasi data dari PC ke PC Komunikasi data dari PC ke PC pada robot banteng digunakan untuk mengirimkan data dari robot matador apabila robot banteng telah tertusuk. Apabila data telah diterima oleh robot banteng maka akan terjadi interrupt untuk menghentikan semua aktifitas robot banteng. Sehingga pertandingan dianggap telah selesai. Apabila belum ada data yang dikirim oleh robot matador maka robot banteng akan melakukan pencarian obyek terus menerus sampai beberapa kali looping. Untuk komunikasi digunakan kontrol winsock. Kontrol ini terdapat dalam komponen Microsoft Winsock Control. Untuk mengaktifkan control ini Klik kanan toolbox kemudian klik component, kemudian pilih microsoft winsock control 6.0, lalu klik OK. Lihat gambar berikut:

Gambar 3.11 Daftar komponen Winsock Untuk membuat aplikasi pertama adalah setting dahulu nilai LocalPort(terserah), RemotePort (sesuai dengan LocalPort PC yang akan dikoneksikan), RemoteHost (IP PC yang akan dikoneksikan), Protocol (1-sckUDPProtokol).

47

Contoh aplikasi dari control winsock adalah sebagai berikut: 1. Buat form seperti dibawah ini dan tambahkan komponen winsock pada form tersebut, ubah propertiesnya seperti keterangan diatas.

Gambar 3.12 Properties Winsock 2. Pada load form aktifkan winsock
Private Sub Form_Load() Winsock1.Bind End Sub

3.

Untuk prosedure pengiriman data dari PC ke PC lain maka di gunakan commandbutton isi dari perintahnya adalah sebagai berikut:
Private Sub Command1_Click() Winsock1.SendData "stop" End Sub

4.

Sedangkan untuk menerima hasil kiriman data dari PC lain maka datanya ditampilkan pada Text1 (Textbox) tetapi property multiline jadikan true agar bisa menampilkan lebih dari satu baris. Lalu ketik listing program seperti dibawah ini :
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim data Winsock1.GetData data, vbString Text1 = Text1 + data + Chr(13) + Chr(10) End Sub

48

BAB IV PENGUJIAN DAN ANALISA
Pada bab ini akan dilakukan pengujian untuk mengetahui tingkat keberhasilan proyek akhir yang telah direncanakan seperti pada Bab III . Dengan adanya pengujian akan diketahui kekurangan-kekurangan yang ada, sehingga dapat dilakukan perbaikan. Secara keseluruhan jalannya program yang telah dibuat dengan bahasa pemrograman Visual Basic 6.0 ini berjalan dengan baik sesuai dengan yang diharapkan. Dalam sistem perangkat lunak penyusun menggunakan komputer dengan spesifikasi sebagai berikut : ü Prosesor Pentium IV LGA 2,66 GHz ü Memori 256 MB ü 4 buah port USB ü 1 buah port serial ü Operating system Windows XP Profesional 4.1 Pengujian dan Pengambilan Data Proses pengujian dan pengambilan data dilakukan di dalam ruangan yang memiliki cahaya cukup terang. Sehingga pengaturan threshold pun dapat dilakukan dengan mudah. Pengambilan gambar harus dilakukan dengan cepat dan tepat untuk mendapatkan hasil yang maksimal. Dalam setiap pengambilan gambar frame rate adalah 12 fps. Frame rate adalah jumlah gambar yang dapat ditangkap kamera setiap detiknya. Data yang akan diambil pada pengujian ini adalah panjang, lebar, luas, posisi dan jarak obyek. Berikut tampilan form untuk mempermudah membaca data-data tersebut serta melihat proses pengolahan gambar bagi para pengguna:

49

Gambar 4.1 Tampilan form program Pada saat pertama kali robot dijalankan, robot akan menscan obyek secara otomatis apabila obyek yang dicari tidak di temukan robot akan bergerak memutar kekanan untuk mencari obyek tersebut. Setelah dapat menemukan obyek yang dimaksud, maka akan dilakukan perhitungan untuk mencari titik tengahnya terhadap frame kamera. Setelah robot dijalankan, gerakan yang didapat sesuai dengan yang diharapkan. Robot akan bergerak maju apabila jarak penyerangan kurang dekat. Dan robot akan mundur apabila jatak penyerangan terlalu dekat. Sebelum melakukan gerakan, robot terlebih dulu harus berada pada posisi menghadap lurus dengan obyek gawang. Oleh sebab itu pada saat berjalan, robot akan selalu melakukan koreksi titik tengah obyek terhadap titik tengah layar. Jarak terjauh yang dapat di deteksi robot dengan ukuran obyek 18 x 15 cm adalah 495 cm sedangkan jarak terdekat adalah 30 cm semuanya tergantung dari pencahayaan dalam ruangan tersebut. Berikut adalah tabel data yang didapat dari hasil pengujian dengan nilai threshold 10. Jarak ditentukan sebesar 75 cm sampai 125 cm dengan waktu pengambilan siang hari dalam ruangan lab TA.

50

Tabel 4.1: Tabel data hasil pengujian
Panjang (yL) (pixels) Lebar (xL) (pixels) Jarak(cm)

75

80

100

120

125

12,61 12,13 12,23 12,61 12,55 12,22 12,49 12,27 12,45 12,19 12,39 12,51 12,48 12,57 12,26

10 10 10 9 9 9 8 8 8 7 7 6 6 6 6

7 7 7 6 6 6 5 5 5 4 4 4 4 4 4

70 70 70 54 54 54 40 40 40 28 28 24 24 24 24

55 155 276 50 160 280 66 155 254 40 141 260 71 151 270

132 132 131 146 145 136 132 130 126 139 136 130 139 129 130

kanan Tengah kiri Kanan Tengah kiri kanan Tengah Kiri Kanan Tengah Kiri Kanan Tengah Kiri

Ptr kiri Mundur Ptr kanan Ptr kiri Serang Ptr kanan Ptr kiri Serang Ptr kanan Ptr kiri Maju Ptr kanan Ptr kiri Maju Ptr kanan

Gambar-gambar dibawah ini merupakan beberapa gambar dari data diatas. 1.

Gambar 4.2 Posisi 1 Keterangan: Koordinat obyek telah diketahui, posisi obyek sudah di tengah tetapi luas melebihi dari yang diharapkan sehingga robot diperintahkan untuk mundur. Jarak robot dengan obyek di set sebesar 75 cm.

51

Kondisi

Luas (pixels)

Titik X (pixels)

Titik Y (pixels)

Posisi

Fps

2.

Gambar 4.3 Posisi 2 Keterangan: Koordinat obyek telah diketahui, posisi obyek sudah tepat di tengahtengah luas obyek juga sudah sesuai dengan yang diharapkan sehingga robot diperintahkan untuk menyerang. Jarak obyek di set 80 cm. 3.

Gambar 4.4 Posisi 3 Keterangan: Koordinat obyek telah diketahui, posisi obyek sudah tepat di tengahtengah luas obyek juga sudah sesuai dengan yang di harapkan sehingga robot di perintahkan untuk menyerang. Jarak obyek di set 100 cm. 4.

Gambar 4.5 Posisi 4 52

Keterangan: Koordinat obyek telah diketahui, posisi obyek sudah tepat di tengahtengah luas obyek masih kurang dari yang di harapkan robot di perintahkan untuk maju. Jarak obyek di set 120 cm. 5.

Gambar 4.6 Posisi 5 Keterangan: Koordinat obyek telah diketahui, posisi obyek sudah tepat di tengahtengah luas obyek masih kurang dari yang di harapkan robot di perintahkan untuk maju. Jarak obyek di set 125 cm. 6.

Gambar 4.7 Posisi 6 Keterangan: Koordinat obyek telah diketahui, posisi obyek terlalu ke kanan obyek di perintahkan untuk berputar ke kiri . Jarak obyek di set 75 cm.

53

7.

Gambar 4.8 Posisi 7 Keterangan: Koordinat obyek telah diketahui, posisi obyek terlalu ke kiri obyek di perintahkan untuk berputar ke kanan . Jarak obyek di set 80 cm. 4.2 Analisa Faktor utama yang sangat berpengaruh dalam pengenalan obyek adalah pencahayaan, dimana setiap ruangan yang memiliki intensitas cahaya berbeda harus digunakan nilai treshold yang berbeda pula. Jarak antara obyek dengan robot yang tidak selalu sama, hal ini akan menyebabkan perubahan pada nilai RGB-nya, karena perbedaan jarak akan mempengaruhi intensitas cahaya yang jatuh ke atas permukaan obyek. Data yang diperoleh dari robot adalah berupa gambar dua dimensi, sehingga hasil gambar yang didapat pada saat robot berada didepan obyek akan berbeda dengan hasil gambar yang didapat pada saat robot berada pada sudut kemiringan tertentu terhadap obyek. Posisi robot yang berada di sebelah kiri atau di sebelah kanan obyek sangat mempengaruhi perhitungan titik koordinat obyek, sehingga hal tersebut menyebabkan luas obyek sebagai acuan jarak penyerangan tidak sama dengan nilai luas obyek yang diperoleh bila robot berada tepat didepan obyek. Untuk itu apabila robot belum tepat berada di tengah-tengah robot di perintahkan untuk berputar ke kiri atau ke kanan.

54

BAB V PENUTUP 5.1 Kesimpulan Dari hasil pengujian proyek akhir ini dapat ditarik beberapa kesimpulan, antara lain: 1. Pengenalan obyek berjalan dengan baik pada nilai treshold 10 dan dilakukan pada siang hari di dalam ruangan lab TA. 2. Proses penyerangan obyek dapat dilakukan dengan baik dan pencarian ulang pun dapat dilaksanakan dengan baik pula. 3. Proses pengiriman data dari PC ke mikro tidak ada hambatan begitu pula penerimaan data yang di kirimkan dari PC robot Matador untuk menghentikan seluruh aktifitas robot banteng dapat berjalan dengan baik. 4. Penentuan posisi kamera dan pencahayaan memiliki pengaruh besar dalam pengenalan obyek, untuk itu dibutuhkan pengesetan kamera dan pencahayaan yang cukup pada saat robot akan dijalankan. 5. Jarak maksimal robot dapat mendeteksi obyek adalah 495 cm sedangkan jarak minimal adalah 30 cm. 6. Keberhasilan robot dalam penyerangan tergantung dari kelincahan robot dalam menghindari serangan balik dari robot matador. 7. Algoritma penentuan titik tengah obyek dengan titik tengah layar serta toleransi selisih nilai diantara keduanya (koreksi titik tengah layar dengan titik tengah obyek) berjalan dengan baik. 8. Dari pengujian, range untuk batas penyerangan obyek di tentukan antara 63 pixels - 30 pixels luas obyek pada layar atau 80 cm – 120 cm jarak sebenarnya. Kurang dari 30 pixels robot di perintahkan untuk maju dan lebih besar dari 63 pixels robot di perintahkan untuk mundur. Perintah tersebut dapat dilaksanakan dengan lancar. 5.2 Saran Dari kekurangan-kekurangan yang diperoleh pada saat pengujian program, ada beberapa hal yang perlu diperhatikan untuk pembuatan perangkat dengan menggunakan sensor kamera. 1. Sebelum menjalankan peralatan sebaiknya dilakukan pengesetan kamera lebih dahulu agar gambar yang didapatkan sesuai dengan ketentuan referensi data yang telah ditetapkan pada program. Pengesetan tersebut diantaranya adalah pengaturan pencahayaan kamera sesuai dengan tempat

55

2.

3.

pengambilan gambar, peletakan sensor kamera pada mekanik atau plan yang dijalankan serta waktu peralatan tersebut dijalankan. Pada form aplikasi program sebaiknya dibuat semi otomatis agar para pengguna dapat dengan mudah menggunakannya, seperti penentuan jarak penyerangan. Untuk pengembangan robot otomatis dengan menggunakan pemrosesan gambar (image processing), sebaiknya digunakan kamera yang lebih bagus agar respon yang didapat bisa lebih cepat apabila terjadi perubahan-perubahan secara mendadak pada obyek yang ditangkap.

56

DAFTAR PUSTAKA [1] [2] [3] [4] [5] [6] Andi Nalwan, Paulus,” Teknik Antarmuka dan Pemrograman Mikrokontroller AT89C51”, PT. Elex Media Komputindo, 2003 Bachtiar Novan, Andi, Robot Penyerang dalam permainan sepak bola (perangkat lunak) , Proyek Akhir PENS-ITS, 2005 B.D, Bima Sena,” Image Prosesing dan Aplikasinya”, Pelatihan PENS-ITS,2006 Eko Nugroho, Teguh, “Robot Cerdas Kakak Tua (Perangkat Lunak) , Proyek Akhir PENS-ITS, 2005 Kurniadi Adi, Pemrograman Microsoft Visual Basic 6.0 , ELEX MEDIA KOMPUTINDO, 1999 Prasetia Retna, Edi Widodo, Catur, “ Interfacing Port Paralel dan Port Serial Komputer dengan Visual Basic 6.0”, Andi Yogyakarta,2004 Suprihatin Resmah, Dewi,“Perancangan dan Implementasi Robot Banteng yang Mengikuti Warna Merah Sebagai Acuan Pergerakannya”. Proyek Akhir PENS-ITS, 2004 Wahana, “Tip & Trik Pemrograman Visual Basic 6.0”, Andi Yogyakarta, 2001.

[7]

[8]

57

Halaman Ini Sengaja Di Kosongkan

58

LAMPIRAN ' Module : Video For Windows (WinAPI AviCap32.DLL) Option Explicit '// -----------------------------------------------------------------'// deklarasi Windows API Constants / Types '// -----------------------------------------------------------------Public Const WM_USER = &H400 Type POINTAPI x As Long y As Long End Type Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long Declare Function SendMessageS Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As String) As Long '// Definisi molana message range Public Const WM_CAP_START = WM_USER Public Const WM_CAP_GET_CAPSTREAMPTR = WM_CAP_START + 1 Public Const WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2 Public Const WM_CAP_SET_CALLBACK_STATUS = WM_CAP_START + 3 Public Const WM_CAP_SET_CALLBACK_YIELD = WM_CAP_START + 4 Public Const WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5 Public Const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6 Public Const WM_CAP_SET_CALLBACK_WAVESTREAM = WM_CAP_START + 7 Public Const WM_CAP_GET_USER_DATA = WM_CAP_START + 8 Public Const WM_CAP_SET_USER_DATA = WM_CAP_START + 9 Public Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10

59

Public Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11 Public Const WM_CAP_DRIVER_GET_NAME = WM_CAP_START + 12 Public Const WM_CAP_DRIVER_GET_VERSION = WM_CAP_START + 13 Public Const WM_CAP_DRIVER_GET_CAPS = WM_CAP_START + 14 Public Const WM_CAP_FILE_SET_CAPTURE_FILE = WM_CAP_START + 20 Public Const WM_CAP_FILE_GET_CAPTURE_FILE = WM_CAP_START + 21 Public Const WM_CAP_FILE_ALLOCATE = WM_CAP_START + 22 Public Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23 Public Const WM_CAP_FILE_SET_INFOCHUNK = WM_CAP_START + 24 Public Const WM_CAP_FILE_SAVEDIB = WM_CAP_START + 25 Public Const WM_CAP_EDIT_COPY = WM_CAP_START + 30 Public Const WM_CAP_SET_AUDIOFORMAT = WM_CAP_START + 35 Public Const WM_CAP_GET_AUDIOFORMAT = WM_CAP_START + 36 Public Const WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41 Public Const WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42 Public Const WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43 Public Const WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44 Public Const WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45 Public Const WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46 Public Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50 Public Const WM_CAP_SET_OVERLAY = WM_CAP_START + 51 Public Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52 Public Const WM_CAP_SET_SCALE = WM_CAP_START + 53 Public Const WM_CAP_GET_STATUS = WM_CAP_START + 54

60

Public Const WM_CAP_SET_SCROLL = WM_CAP_START + 55 Public Const WM_CAP_GRAB_FRAME = WM_CAP_START + 60 Public Const WM_CAP_STOP = WM_CAP_START + 68 Public Const WM_CAP_ABORT = WM_CAP_START + 69 Public Const WM_CAP_SINGLE_FRAME_OPEN = WM_CAP_START + 70 Public Const WM_CAP_SINGLE_FRAME_CLOSE = WM_CAP_START + 71 Public Const WM_CAP_SINGLE_FRAME = WM_CAP_START + 72 Public Const WM_CAP_PAL_OPEN = WM_CAP_START + 80 Public Const WM_CAP_PAL_SAVE = WM_CAP_START + 81 Public Const WM_CAP_PAL_PASTE = WM_CAP_START + 82 Public Const WM_CAP_PAL_AUTOCREATE = WM_CAP_START + 83 Public Const WM_CAP_PAL_MANUALCREATE = WM_CAP_START + 84 Public Const WM_CAP_SET_CALLBACK_CAPCONTROL = WM_CAP_START + 85 '// Definisi akhir message range Public Const WM_CAP_END = WM_CAP_SET_CALLBACK_CAPCONTROL '// -----------------------------------------------------------------'// Struktur type '// -----------------------------------------------------------------Type CAPDRIVERCAPSx wDeviceIndex As Long ' fHasOverlay As Long ' fHasDlgVideoSource As Long ' fHasDlgVideoFormat As Long ' fHasDlgVideoDisplay As Long ' fCaptureInitialized As Long ' fDriverSuppliesPalettes As Long ' hVideoIn As Long ' hVideoOut As Long ' hVideoExtIn As Long ' hVideoExtOut As Long ' End Type

61

Type CAPSTATUS uiImageWidth As Long uiImageHeight As Long fLiveWindow As Long fOverlayWindow As Long fScale As Long ptScroll As POINTAPI fUsingDefaultPalette As Long fAudioHardware As Long fCapFileExists As Long dwCurrentVideoFrame As Long dwCurrentVideoFramesDropped As Long dwCurrentWaveSamples As Long dwCurrentTimeElapsedMS As Long hPalCurrent As Long fCapturingNow As Long dwReturn As Long wNumVideoAllocated As Long wNumAudioAllocated As Long End Type Type CAPTUREPARMS dwRequestMicroSecPerFrame As Long fMakeUserHitOKToCapture As Long wPercentDropForError As Long fYield As Long dwIndexSize As Long wChunkGranularity As Long fUsingDOSMemory As Long wNumVideoRequested As Long fCaptureAudio As Long wNumAudioRequested As Long vKeyAbort As Long fAbortLeftMouse As Long fAbortRightMouse As Long fLimitEnabled As Long wTimeLimit As Long fMCIControl As Long fStepMCIDevice As Long dwMCIStartTime As Long

62

dwMCIStopTime As Long fStepCaptureAt2x As Long wStepCaptureAverageFrames As Long dwAudioBufferSize As Long fDisableWriteCache As Long End Type Type CAPINFOCHUNK fccInfoID As Long lpData As Long cbData As Long End Type Type VIDEOHDR lpData As Long dwBufferLength As Long dwBytesUsed As Long dwTimeCaptured As Long dwUser As Long dwFlags As Long dwReserved(3) As Long End Type '// 2 fungs1 se e expor sareng AVICap Declare Function capCreateCaptureWindowA Lib "avicap32.dll" ( _ ByVal lpszWindowName As String, _ ByVal dwStyle As Long, _ ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Integer, _ ByVal hWndParent As Long, ByVal nID As Long) As Long Declare Function capGetDriverDescriptionA Lib "avicap32.dll" ( _ ByVal wDriver As Integer, _ ByVal lpszName As String, _ ByVal cbName As Long, _ ByVal lpszVer As String, _ ByVal cbVer As Long) As Boolean '// -----------------------------------------------------------------'// String IDs dari status ban pesen error callbacks '// ------------------------------------------------------------------

63

Public Const IDS_CAP_BEGIN = 300 Public Const IDS_CAP_END = 301

'/* "Mulai Capture" */

Public Const IDS_CAP_INFO = 401 '/* "%s" */ Public Const IDS_CAP_OUTOFMEM = 402 Public Const IDS_CAP_FILEEXISTS = 403 Public Const IDS_CAP_ERRORPALOPEN = 404 Public Const IDS_CAP_ERRORPALSAVE = 405 Public Const IDS_CAP_ERRORDIBSAVE = 406 Public Const IDS_CAP_DEFAVIEXT = 407 '/* "avi" */ Public Const IDS_CAP_DEFPALEXT = 408 '/* "pal" */ Public Const IDS_CAP_CANTOPEN = 409 '/* "tak bisa muka '%s'" */ Public Const IDS_CAP_SEQ_MSGSTART = 410 Public Const IDS_CAP_SEQ_MSGSTOP = 411 Public Const IDS_CAP_VIDEDITERR = 412 Public Const IDS_CAP_READONLYFILE = 413 Public Const IDS_CAP_WRITEERROR = 414 Public Const IDS_CAP_NODISKSPACE = 415 Public Const IDS_CAP_SETFILESIZE = 416 '/* "Set ukuran File " */ Public Const IDS_CAP_SAVEASPERCENT = 417 Public Const IDS_CAP_DRIVER_ERROR = 418 '/* Pesan error Driver */ Public Const IDS_CAP_WAVE_OPEN_ERROR = 419 Public Const IDS_CAP_WAVE_ALLOC_ERROR = 420 Public Const IDS_CAP_WAVE_PREPARE_ERROR = 421 Public Const IDS_CAP_WAVE_ADD_ERROR = 422 Public Const IDS_CAP_WAVE_SIZE_ERROR = 423 Public Const IDS_CAP_VIDEO_OPEN_ERROR = 424 Public Const IDS_CAP_VIDEO_ALLOC_ERROR = 425 Public Const IDS_CAP_VIDEO_PREPARE_ERROR = 426 Public Const IDS_CAP_VIDEO_ADD_ERROR = 427 Public Const IDS_CAP_VIDEO_SIZE_ERROR = 428 Public Const IDS_CAP_FILE_OPEN_ERROR = 429 Public Const IDS_CAP_FILE_WRITE_ERROR = 430 Public Const IDS_CAP_RECORDING_ERROR = 431 Public Const IDS_CAP_RECORDING_ERROR2 = 432 Public Const IDS_CAP_AVI_INIT_ERROR = 433 Public Const IDS_CAP_NO_FRAME_CAP_ERROR = 434 Public Const IDS_CAP_NO_PALETTE_WARN = 435

64

Public Const IDS_CAP_MCI_CONTROL_ERROR = 436 Public Const IDS_CAP_MCI_CANT_STEP_ERROR = 437 Public Const IDS_CAP_NO_AUDIO_CAP_ERROR = 438 Public Const IDS_CAP_AVI_DRAWDIB_ERROR = 439 Public Const IDS_CAP_COMPRESSOR_ERROR = 440 Public Const IDS_CAP_AUDIO_DROP_ERROR = 441 '/* status string IDs */ Public Const IDS_CAP_STAT_LIVE_MODE = 500 Public Const IDS_CAP_STAT_OVERLAY_MODE = 501 Public Const IDS_CAP_STAT_CAP_INIT = 502 Public Const IDS_CAP_STAT_CAP_FINI = 503 Public Const IDS_CAP_STAT_PALETTE_BUILD = 504 Public Const IDS_CAP_STAT_OPTPAL_BUILD = 505 Public Const IDS_CAP_STAT_I_FRAMES = 506 Public Const IDS_CAP_STAT_L_FRAMES = 507 Public Const IDS_CAP_STAT_CAP_L_FRAMES = 508 Public Const IDS_CAP_STAT_CAP_AUDIO = 509 Public Const IDS_CAP_STAT_VIDEOCURRENT = 510 Public Const IDS_CAP_STAT_VIDEOAUDIO = 511 Public Const IDS_CAP_STAT_VIDEOONLY = 512 Function capSetCallbackOnError(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean capSetCallbackOnError = SendMessage(lwnd, WM_CAP_SET_CALLBACK_ERROR, 0, lpProc) End Function Function capSetCallbackOnStatus(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean capSetCallbackOnStatus = SendMessage(lwnd, WM_CAP_SET_CALLBACK_STATUS, 0, lpProc) End Function Function capSetCallbackOnYield(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean capSetCallbackOnYield = SendMessage(lwnd, WM_CAP_SET_CALLBACK_YIELD, 0, lpProc) End Function Function capSetCallbackOnFrame(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean capSetCallbackOnFrame = SendMessage(lwnd, WM_CAP_SET_CALLBACK_FRAME, 0, lpProc)

65

End Function Function capSetCallbackOnVideoStream(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean capSetCallbackOnVideoStream = SendMessage(lwnd, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, lpProc) End Function Function capSetCallbackOnWaveStream(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean capSetCallbackOnWaveStream = SendMessage(lwnd, WM_CAP_SET_CALLBACK_WAVESTREAM, 0, lpProc) End Function Function capSetCallbackOnCapControl(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean capSetCallbackOnCapControl = SendMessage(lwnd, WM_CAP_SET_CALLBACK_CAPCONTROL, 0, lpProc) End Function Function capSetUserData(ByVal lwnd As Long, ByVal lUser As Long) As Boolean capSetUserData = SendMessage(lwnd, WM_CAP_SET_USER_DATA, 0, lUser) End Function Function capGetUserData(ByVal lwnd As Long) As Long capGetUserData = SendMessage(lwnd, WM_CAP_GET_USER_DATA, 0, 0) End Function Function capDriverConnect(ByVal lwnd As Long, ByVal i As Integer) As Boolean capDriverConnect = SendMessage(lwnd, WM_CAP_DRIVER_CONNECT, i, 0) End Function Function capDriverDisconnect(ByVal lwnd As Long) As Boolean capDriverDisconnect = SendMessage(lwnd, WM_CAP_DRIVER_DISCONNECT, 0, 0) End Function Function capDriverGetName(ByVal lwnd As Long, ByVal szName As Long, ByVal wSize As Integer) As Boolean capDriverGetName = SendMessage(lwnd, WM_CAP_START, wSize, szName) End Function

66

Function capDriverGetVersion(ByVal lwnd As Long, ByVal szVer As Long, ByVal wSize As Integer) As Boolean capDriverGetVersion = SendMessage(lwnd, WM_CAP_DRIVER_GET_VERSION, wSize, szVer) End Function Function capDriverGetCaps(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean capDriverGetCaps = SendMessage(lwnd, WM_CAP_DRIVER_GET_CAPS, wSize, s) End Function Function capFileSetCaptureFile(ByVal lwnd As Long, szName As String) As Boolean capFileSetCaptureFile = SendMessageS(lwnd, WM_CAP_FILE_SET_CAPTURE_FILE, 0, szName) End Function Function capFileGetCaptureFile(ByVal lwnd As Long, ByVal szName As Long, wSize As String) As Boolean capFileGetCaptureFile = SendMessageS(lwnd, WM_CAP_FILE_SET_CAPTURE_FILE, wSize, szName) End Function Function capFileAlloc(ByVal lwnd As Long, ByVal dwSize As Long) As Boolean capFileAlloc = SendMessage(lwnd, WM_CAP_FILE_ALLOCATE, 0, dwSize) End Function Function capFileSaveAs(ByVal lwnd As Long, szName As String) As Boolean capFileSaveAs = SendMessageS(lwnd, WM_CAP_FILE_SAVEAS, 0, szName) End Function Function capFileSetInfoChunk(ByVal lwnd As Long, ByVal lpInfoChunk As Long) As Boolean capFileSetInfoChunk = SendMessage(lwnd, WM_CAP_FILE_SET_INFOCHUNK, 0, lpInfoChunk) End Function Function capFileSaveDIB(ByVal lwnd As Long, ByVal szName As Long) As Boolean capFileSaveDIB = SendMessage(lwnd, WM_CAP_FILE_SAVEDIB, 0, szName) End Function

67

Function capEditCopy(ByVal lwnd As Long) As Boolean capEditCopy = SendMessage(lwnd, WM_CAP_EDIT_COPY, 0, 0) End Function Function capSetAudioFormat(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean capSetAudioFormat = SendMessage(lwnd, WM_CAP_SET_AUDIOFORMAT, wSize, s) End Function Function capGetAudioFormat(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Long capGetAudioFormat = SendMessage(lwnd, WM_CAP_GET_AUDIOFORMAT, wSize, s) End Function Function capGetAudioFormatSize(ByVal lwnd As Long) As Long capGetAudioFormatSize = SendMessage(lwnd, WM_CAP_GET_AUDIOFORMAT, 0, 0) End Function Function capDlgVideoFormat(ByVal lwnd As Long) As Boolean capDlgVideoFormat = SendMessage(lwnd, WM_CAP_DLG_VIDEOFORMAT, 0, 0) End Function Function capDlgVideoSource(ByVal lwnd As Long) As Boolean capDlgVideoSource = SendMessage(lwnd, WM_CAP_DLG_VIDEOSOURCE, 0, 0) End Function Function capDlgVideoDisplay(ByVal lwnd As Long) As Boolean capDlgVideoDisplay = SendMessage(lwnd, WM_CAP_DLG_VIDEODISPLAY, 0, 0) End Function Function capDlgVideoCompression(ByVal lwnd As Long) As Boolean capDlgVideoCompression = SendMessage(lwnd, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0) End Function Function capGetVideoFormat(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Long capGetVideoFormat = SendMessage(lwnd, WM_CAP_GET_VIDEOFORMAT, wSize, s) End Function Function capGetVideoFormatSize(ByVal lwnd As Long) As Long

68

capGetVideoFormatSize = SendMessage(lwnd, WM_CAP_GET_VIDEOFORMAT, 0, 0) End Function Function capSetVideoFormat(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean capSetVideoFormat = SendMessage(lwnd, WM_CAP_SET_VIDEOFORMAT, wSize, s) End Function Function capPreview(ByVal lwnd As Long, ByVal f As Boolean) As Boolean capPreview = SendMessage(lwnd, WM_CAP_SET_PREVIEW, f, 0) End Function Function capPreviewRate(ByVal lwnd As Long, ByVal wMS As Integer) As Boolean capPreviewRate = SendMessage(lwnd, WM_CAP_SET_PREVIEWRATE, wMS, 0) End Function Function capOverlay(ByVal lwnd As Long, ByVal f As Boolean) As Boolean capOverlay = SendMessage(lwnd, WM_CAP_SET_OVERLAY, f, 0) End Function Function capPreviewScale(ByVal lwnd As Long, ByVal f As Boolean) As Boolean capPreviewScale = SendMessage(lwnd, WM_CAP_SET_SCALE, f, 0) End Function Function capGetStatus(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean capGetStatus = SendMessage(lwnd, WM_CAP_GET_STATUS, wSize, s) End Function Function capSetScrollPos(ByVal lwnd As Long, ByVal lpP As Long) As Boolean capSetScrollPos = SendMessage(lwnd, WM_CAP_SET_SCROLL, 0, lpP) End Function Function capGrabFrame(ByVal lwnd As Long) As Boolean capGrabFrame = SendMessage(lwnd, WM_CAP_GRAB_FRAME, 0, 0) End Function

69

Function capGrabFrameNoStop(ByVal lwnd As Long) As Boolean capGrabFrameNoStop = SendMessage(lwnd, WM_CAP_GRAB_FRAME_NOSTOP, 0, 0) End Function Function capCaptureSequence(ByVal lwnd As Long) As Boolean capCaptureSequence = SendMessage(lwnd, WM_CAP_SEQUENCE, 0, 0) End Function Function capCaptureSequenceNoFile(ByVal lwnd As Long) As Boolean capCaptureSequenceNoFile = SendMessage(lwnd, WM_CAP_SEQUENCE_NOFILE, 0, 0) End Function Function capCaptureStop(ByVal lwnd As Long) As Boolean capCaptureStop = SendMessage(lwnd, WM_CAP_STOP, 0, 0) End Function Function capCaptureAbort(ByVal lwnd As Long) As Boolean capCaptureAbort = SendMessage(lwnd, WM_CAP_ABORT, 0, 0) End Function Function capCaptureSingleFrameOpen(ByVal lwnd As Long) As Boolean capCaptureSingleFrameOpen = SendMessage(lwnd, WM_CAP_SINGLE_FRAME_OPEN, 0, 0) End Function Function capCaptureSingleFrameClose(ByVal lwnd As Long) As Boolean capCaptureSingleFrameClose = SendMessage(lwnd, WM_CAP_SINGLE_FRAME_CLOSE, 0, 0) End Function Function capCaptureSingleFrame(ByVal lwnd As Long) As Boolean capCaptureSingleFrame = SendMessage(lwnd, WM_CAP_SINGLE_FRAME, 0, 0) End Function Function capCaptureGetSetup(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean capCaptureGetSetup = SendMessage(lwnd, WM_CAP_GET_SEQUENCE_SETUP, wSize, s) End Function Function capCaptureSetSetup(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean

70

capCaptureSetSetup = SendMessage(lwnd, WM_CAP_SET_SEQUENCE_SETUP, wSize, s) End Function Function capSetMCIDeviceName(ByVal lwnd As Long, ByVal szName As Long) As Boolean capSetMCIDeviceName = SendMessage(lwnd, WM_CAP_SET_MCI_DEVICE, 0, szName) End Function Function capGetMCIDeviceName(ByVal lwnd As Long, ByVal szName As Long, ByVal wSize As Integer) As Boolean capGetMCIDeviceName = SendMessage(lwnd, WM_CAP_GET_MCI_DEVICE, wSize, szName) End Function Function capPaletteOpen(ByVal lwnd As Long, ByVal szName As Long) As Boolean capPaletteOpen = SendMessage(lwnd, WM_CAP_PAL_OPEN, 0, szName) End Function Function capPaletteSave(ByVal lwnd As Long, ByVal szName As Long) As Boolean capPaletteSave = SendMessage(lwnd, WM_CAP_PAL_SAVE, 0, szName) End Function Function capPalettePaste(ByVal lwnd As Long) As Boolean capPalettePaste = SendMessage(lwnd, WM_CAP_PAL_PASTE, 0, 0) End Function Function capPaletteAuto(ByVal lwnd As Long, ByVal iFrames As Integer, ByVal iColors As Long) As Boolean capPaletteAuto = SendMessage(lwnd, WM_CAP_PAL_AUTOCREATE, iFrames, iColors) End Function Function capPaletteManual(ByVal lwnd As Long, ByVal fGrab As Boolean, ByVal iColors As Long) As Boolean capPaletteManual = SendMessage(lwnd, WM_CAP_PAL_MANUALCREATE, fGrab, iColors) End Function Option Explicit Dim char As Integer Dim lwndC As Long

' Handle to the Capture Windows

71

Dim lNFrames As Long ' Number of frames captured Sub ResizeCaptureWindow(ByVal lwnd As Long) Dim CAPSTATUS As CAPSTATUS '// Get the capture window attributes .. width and height capGetStatus lwnd, VarPtr(CAPSTATUS), Len(CAPSTATUS) '// Resize the capture window to the capture sizes SetWindowPos lwnd, HWND_BOTTOM, 0, 0, _ CAPSTATUS.uiImageWidth, _ CAPSTATUS.uiImageHeight, _ SWP_NOMOVE Or SWP_NOZORDER End Sub Private Sub cKamera_Click() PilihKamera cKamera.ListIndex End Sub Private Sub Command1_Click() 'Winsock1.SendData "waduh mati aku" End Sub Private Sub Command2_Click() frmUtama.Text1 = 63 frmUtama.Text2 = 30 End Sub Private Sub Command3_Click() Form1.Show End Sub Private Sub cOutput_Click() VideoOut = (cOutput.Value = 1) End Sub Private Sub ext_Click() Unload Me End Sub Private Sub PilihKamera(wDriver As Long) 'Dim lpszName As String * 100

72

'Dim lpszVer As String * 100 'TutupKamera 'Debug.Print capGetDriverDescriptionA(wDriver, lpszName, 100, lpszVer, 100) '// Retrieves driver info 'lwndC = capCreateCaptureWindowA(lpszName, WS_CHILD Or WS_VISIBLE, 0, 0, 160, 120, Me.hWnd, 0) 'lwndC = capCreateCaptureWindowA(lpszName, WS_THICKFRAME Or WS_CHILD Or WS_VISIBLE, 0, 0, 160, 120, Me.hWnd, 0) lwndC = capCreateCaptureWindowA(cKamera, WS_VISIBLE + WS_CHILD, 0, 0, 320, 240, Me.VideoIn.hWnd, 0) If capDriverConnect(lwndC, wDriver) Then 'Debug.Print capDriverGetCaps(lwndC, VarPtr(Caps), Len(Caps)) 'capSetCallbackOnVideoStream lwndC, AddressOf MyVideoStreamCallback Debug.Print capSetCallbackOnFrame(lwndC, AddressOf OnFrameEvent) Debug.Print capPreviewScale(lwndC, True) Debug.Print capPreviewRate(lwndC, 10) '// preview image dari Camera Debug.Print capPreview(lwndC, True) 'ResizeCaptureWindow lwndC ', True Kamera = GetDC(lwndC) Else MsgBox "Device Kamera : " + cKamera + " tidak ditemukan", vbCritical End If End Sub Private Sub DaftarKamera() Dim lpszName As String * 100 Dim lpszVer As String * 100 Dim Device As String cKamera.Clear Dim wDriver As Long wDriver = 0 While capGetDriverDescriptionA(wDriver, lpszName, 100, lpszVer, 100) 'Device = lpszName 'Device = Device + " " + lpszVer

73

cKamera.AddItem lpszName cKamera.List(wDriver) = cKamera.List(wDriver) + " " + lpszVer DoEvents wDriver = wDriver + 1 Wend If cKamera.ListCount > 0 Then cKamera = cKamera.List(0) End Sub Private Sub Form_Load() 'Dim Caps As CAPDRIVERCAPS '//Create Capture Window DaftarKamera If cKamera.ListCount > 0 Then PilihKamera 0 frmUtama.MSComm1.PortOpen = True Winsock1.Bind End Sub Private Sub TutupKamera() 'capSetCallbackOnError lwndC, vbNull 'capSetCallbackOnStatus lwndC, vbNull 'capSetCallbackOnYield lwndC, vbNull capSetCallbackOnFrame lwndC, vbNull If lwndC <> 0 Then DestroyWindow lwndC 'capSetCallbackOnVideoStream lwndC, vbNull 'capSetCallbackOnWaveStream lwndC, vbNull 'capSetCallbackOnCapControl lwndC, vbNull End Sub Private Sub Form_Unload(Cancel As Integer) TutupKamera End Sub Private Sub mli_Click() Dim sFileName As String Dim CAP_PARAMS As CAPTUREPARMS capCaptureGetSetup lwndC, VarPtr(CAP_PARAMS), Len(CAP_PARAMS) CAP_PARAMS.dwRequestMicroSecPerFrame = (1 * (10 ^ 6)) / 30 ' 30 Frames per second CAP_PARAMS.fMakeUserHitOKToCapture = True

74

CAP_PARAMS.fCaptureAudio = False capCaptureSetSetup lwndC, VarPtr(CAP_PARAMS), Len(CAP_PARAMS) sFileName = "C:\myvideo.avi" capCaptureSequence lwndC ' mulai melakukan capture! capFileSaveAs lwndC, sFileName ' Copy video dari swap file ke a real file. End Sub Private Sub mnuPeringatan_Click() MsgBox "HATI-HATI, JANGAN MENGHENTIKAN PROGRAM DARI 'STOP' DI VB, TETAPI GUNAKAN 'BERKAS' -> 'KELUAR'" + Chr(10) + Chr(13) + "JIKA TIDAK, VB AKAN HANG DAN KEMUNGKINAN DAPAT 'MERUSAK' FILE ANDA", vbCritical End Sub Sub setkam_Click() capDlgVideoFormat lwndC ResizeCaptureWindow lwndC End Sub Private Sub src_Click() capDlgVideoSource lwndC End Sub

Private Sub Text1_Change() If char > 57 Then Text1.Text = "" End If End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii < 58 Then If KeyAscii > 47 Then Exit Sub End If End If Text1.Text = "" MsgBox "Nyuwun sewu, Input arupa angka !!!"

75

Text1.Text = "" End Sub Private Sub Text2_Change() If char > 57 Then Text2.Text = "" End If End Sub Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii < 58 Then If KeyAscii > 47 Then Exit Sub End If End If Text2.Text = "" MsgBox "Nyuwun sewu, Input arupa angka !!!" Text2.Text = "" End Sub Private Sub Timer1_Timer() fpsL = (4 * fpsL + fps) / 5 NilaiFPS = CInt(fpsL * 100) / 100 fps = 0 End Sub Private Sub VScroll1_Change() Label8.Caption = VScroll1.Value End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim data Winsock1.GetData data, vbString If Trim(data) = "Kena Loe !!!" Then 'program dihentikan MsgBox "Banteng tertusuk" 'Winsock1.SendData = "Selamat anda layak jadi pecundang" Berhenti End If 'Text13 = Text13 + data + Chr(13) + Chr(10)

76

End Sub ' Module : Aplikasi ' DiBuat Oleh : Agung Pangestu Harseno ' Nrp : 7103.030.036 ' Pembimbing : Bpk. Eru Puspita S.T, M.Kom ' Tanggal : 20 July 2005 ' Keterangan : Program Ini dibuat untuk Demonstrasi Robot Banteng VS Robot Matador ' Crew'x : * Bagus Ardianto (good) --> hardware Robot Banteng ' * Awaludin Ismail (Robot) --> software Robot Matador ' * YuliAdi (mr. Lee) --> hardware Robot Matador Option Explicit Public Const WS_BORDER = &H800000 Public Const WS_CAPTION = &HC00000 Public Const WS_SYSMENU = &H80000 Public Const WS_CHILD = &H40000000 Public Const WS_VISIBLE = &H10000000 Public Const WS_OVERLAPPED = &H0& Public Const WS_MINIMIZEBOX = &H20000 Public Const WS_MAXIMIZEBOX = &H10000 Public Const WS_THICKFRAME = &H40000 Public Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX) Public Const SWP_NOMOVE = &H2 Public Const SWP_NOSIZE = 1 Public Const SWP_NOZORDER = &H4 Public Const HWND_BOTTOM = 1 Public Const HWND_TOPMOST = -1 Public Const HWND_NOTOPMOST = -2 Public Const SM_CYCAPTION = 4 Public Const SM_CXFRAME = 32 Public Const SM_CYFRAME = 33 Public Const WS_EX_TRANSPARENT = &H20& Public Const GWL_STYLE = (-16) Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

77

'// Manipulasi Memori Declare Function lStrCpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long Declare Function lStrCpyn Lib "kernel32" Alias "lstrcpynA" (ByVal lpString1 As Any, ByVal lpString2 As Long, ByVal iMaxLength As Long) As Long Declare Sub RtlMoveMemory Lib "kernel32" (ByVal hpvDest As Long, ByVal hpvSource As Long, ByVal cbCopy As Long) Declare Sub hmemcpy Lib "kernel32" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long) '// Manipulasi Window Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Declare Function DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String) As Long Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long 'Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long Declare Function SetDeviceGammaRamp Lib "gdi32" (ByVal hdc As Long, lpv As Any) As Long

78

Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Public Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long Public Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long Public lwndC As Long ' Handle ka angguy nagkap Windows Public fps As Byte Public fpsL As Single Public VideoOut As Boolean Const LxMax = 320 Const LyMax = 240 Type tImage B As Byte G As Byte R As Byte End Type Dim VideoHeader As VIDEOHDR Type tVideoData B As Byte G As Byte R As Byte End Type Dim VideoData(0 To 319, 0 To 239) As tVideoData

79

Global Kamera As Long Function OnFrameEvent(ByVal lwnd As Long, ByVal lpVHdr As Long) As Long ' Ambil Header Buffer Video dari Windows API RtlMoveMemory VarPtr(VideoHeader), lpVHdr, Len(VideoHeader) ' Ambil Data Buffer Video dari Windows API If VideoHeader.dwBytesUsed <> 230400 Then MsgBox "Ubah setting konfigurasi Video dalam 320x240 RGB24", vbCritical, "Pesan Kesalahan" frmUtama.setkam_Click Exit Function End If RtlMoveMemory VarPtr(VideoData(0, 0)), VideoHeader.lpData, VideoHeader.dwBytesUsed ' Lakukan Operasi Image Processing sesuai dengan keperluan OperasiRobot ' Jika diinginkan, tampilkan kembali hasil Image Processing If VideoOut Then RtlMoveMemory VideoHeader.lpData, VarPtr(VideoData(0, 0)), VideoHeader.dwBytesUsed ' Penghitung kecepatan proses tiap detik fps = fps + 1 End Function Sub OperasiRobot() ' Segmentasi Warna Merah ' Pixel dengan warna merah diubah menjadi putih ' Pixel lainnya menjadi hitam Static vMerah(320, 240) As Byte Static x As Integer, y As Integer Dim R, G, B As Integer 'segmentasi For y = 0 To 239 For x = 0 To 319 ' Deteksi warna merah dengan cara ' R > (G + B) If VideoData(x, y).R > (CInt(VideoData(x, y).G) + VideoData(x, y).B) - frmUtama.VScroll1.Value Then

80

'If CInt(VideoData(x, y).R) + VideoData(x, y).G + VideoData(x, y).B > 400 Then vMerah(x, y) = 255 Else vMerah(x, y) = 0 End If Next Next For y = 0 To 239 For x = 0 To 319 VideoData(x, y).R = vMerah(x, y) VideoData(x, y).G = vMerah(x, y) VideoData(x, y).B = vMerah(x, y) Next Next frmUtama.Obyek.Visible = True ' Penskalaan 10:1 ' Tujuan : - Memperkecil ukuran gambar sehingga lebih cepat ' - Filter, membuang obyek yang kecil ' - Deteksi Obyek dengan ukuran lebih besar dari ukuran tertentu Static vSkala(32, 24) As Byte Static xx As Integer, yy As Integer, s As Integer For y = 0 To 23 For x = 0 To 31 ' Ambil nilai rata-rata pixel ukuran 10x10 s=0 For yy = y * 10 To y * 10 + 9 For xx = x * 10 To x * 10 + 9 s = s + vMerah(xx, yy) Next Next s = s \ 100 ' Tresholding, ambil pixel yang hanya >= 128 If s < 128 Then s = 0 vSkala(x, y) = s Next Next ' Deteksi Obyek dengan cara

81

' - Menghitung luas (ukuran) Obyek ' - Mencari titik tengah Obyek ' - Menghitung perbandingan ukuran (bentuk) Obyek ' semuanya dilakukan dengan men-scanning gambar ' dan mencari pixel yang berwarna merah Static n As Integer Static xMax As Integer, xMin As Integer, yMax As Integer, yMin As Integer n=0 xx = 0: yy = 0 xMin = 32: xMax = -1: yMin = 24: yMax = -1 For y = 0 To 23 For x = 0 To 31 If vSkala(x, y) > 128 Then ' Kandidat Obyek yang dicari ditemukan n=n+1 xx = xx + x yy = yy + y If x > xMax Then xMax = x If x < xMin Then xMin = x If y > yMax Then yMax = y If y < yMin Then yMin = y End If Next Next If n > 0 Then ' Ada segala obyek yang ditemukan ? ' Hitung posisi tengah obyek Static xObyek As Integer, yObyek As Integer xObyek = xx / n * 10 + 5 yObyek = yy / n * 10 + 5 ' Hitung ukuran obyek Static xL As Integer, yL As Integer Dim luas As Integer xL = xMax - xMin + 1 yL = yMax - yMin + 1 luas = xL * yL frmUtama.Text7.Text = xL frmUtama.Text8.Text = yL

82

frmUtama.Text9.Text = luas ' Uji apakah obyek yang ditemui sesuai dengan bentuk yang diinginkan ' contoh Panjang=Tinggi ' Ketemu ... horeee ' Beri tanda pada Obyek, misalkan dengan memberikan bingkai Kotak ' Lakukan Aksi pengendalian robot sesuai dengan yang dikehendaki For x = xMin * 10 To xMax * 10 + 9 VideoData(x, yMin * 10).G = 255 VideoData(x, yMax * 10 + 9).G = 255 Next For y = yMin * 10 To yMax * 10 + 9 VideoData(xMin * 10, y).G = 255 VideoData(xMax * 10 + 9, y).G = 255 Next KontrolRobot xObyek, yObyek, luas Dim i, j As Integer For i = -3 To 3 '1 To 5 For j = -3 To 3 '1 To 5 VideoData(xObyek + i, yObyek + j).R = 255 VideoData(xObyek + i, yObyek + j).G = 0 VideoData(xObyek + i, yObyek + j).B = 0 Next j Next i '-----garis vertikal-----For i = xObyek To xObyek For j = 0 To 240 - 1 VideoData(i, j).R = 0 VideoData(i, j).G = 0 VideoData(i, j).B = 255 Next j Next i '-----garis horisontal----For i = 0 To 320 - 1 For j = yObyek To yObyek VideoData(i, j).R = 255 VideoData(i, j).G = 0 VideoData(i, j).B = 255 Next j Next i Else

83

ObyekTidakAda End If End Sub Sub KontrolRobot(x As Integer, y As Integer, luas As Integer) frmUtama.Text14.Text = x frmUtama.Text15.Text = y ' Hitung Error dan jadikan hanya dalam 8 tingkat gerakan Static e As Integer Dim d, f As Integer d = CInt(frmUtama.Text1.Text) f = CInt(frmUtama.Text2.Text) 'Static luas As Integer e = (160 - x) \ 40 ' Periksa ukuran dari obyek ' Jika lebih kecil dari nilai tertentu, maju If luas >= d Then If e = 0 Then frmUtama.Text10 = "Target Ditemukan" frmUtama.Text11 = "Jarak Terlalu Dekat" frmUtama.Text12 = "Mundur Lurus" frmUtama.MSComm1.Output = "B" ElseIf e > 0 Then frmUtama.Text10 = "Target Ditemukan" frmUtama.Text11 = "Target Terlalu ke Kanan " frmUtama.Text12 = "Muter ke Kiri : " & Abs(e) frmUtama.MSComm1.Output = "L" Else frmUtama.Text10 = "Target Ditemukan" frmUtama.Text11 = "Target Terlalu ke Kiri" frmUtama.Text12 = "Muter ke Kanan : " & Abs(e) frmUtama.MSComm1.Output = "R" End If ElseIf luas <= f Then If e = 0 Then frmUtama.Text10 = "Target Ditemukan" frmUtama.Text11 = "Jarak Terlalu Jauh" frmUtama.Text12 = "Maju Lurus" frmUtama.MSComm1.Output = "F" ElseIf e > 0 Then

84

frmUtama.Text10 = "Target Ditemukan" frmUtama.Text11 = "Target Terlalu ke Kanan" frmUtama.Text12 = "Muter ke Kiri : " & Abs(e) frmUtama.MSComm1.Output = "L" Else frmUtama.Text10 = "Target Ditemukan" frmUtama.Text11 = "Target Terlalu ke Kiri" frmUtama.Text12 = "Muter ke Kanan : " & Abs(e) frmUtama.MSComm1.Output = "R" End If ' Jika lebih besar, mundur Else If luas > f And luas < d Then If e = 0 Then frmUtama.Text10 = "Target ditemukan" frmUtama.MSComm1.Output = "A" frmUtama.Text11 = "Sasaran tepat, Siapkan Senjata" frmUtama.Text12 = "Serang" Delay ElseIf e > 0 Then frmUtama.Text10 = "Target ditemukan" frmUtama.Text11 = "Target terlalu ke kanan" frmUtama.Text12 = "muter ke Kiri : " & Abs(e) frmUtama.MSComm1.Output = "L" Else frmUtama.Text10 = "Target ditemukan" frmUtama.Text11 = "Target terlalu ke kiri" frmUtama.Text12 = "Muter ke Kanan : " & Abs(e) frmUtama.MSComm1.Output = "R" End If End If End If ' Ubah posisi animasi frmUtama.Obyek.Top = 50 + ((luas) - 300) / 6 frmUtama.Obyek.Left = 560 + (x - 160) End Sub Sub ObyekTidakAda() frmUtama.Obyek.Visible = False frmUtama.Text10 = "Obyek tidak ditemukan"

85

frmUtama.Text15.Text = 0 frmUtama.Text7.Text = 0 frmUtama.Text8.Text = 0 frmUtama.Text9.Text = 0 frmUtama.Text11 = "Ayo cari Obyek" frmUtama.Text12 = "Muter Nyok" frmUtama.Text14.Text = 0 frmUtama.MSComm1.Output = "C" End Sub Sub Delay() Dim jumlah As Long jumlah = 1 Do frmUtama.Text11 = "Sasaran tepat, Siapkan Senjata" frmUtama.Text12 = "Serang" jumlah = jumlah + 1 Loop While jumlah <= 3000000 frmUtama.MSComm1.Output = "S" End Sub Sub Berhenti() frmUtama.MSComm1.Output = "E" frmUtama.Text13 = "Banteng Mati" frmUtama.Text10 = "SYSTEM ERROR" frmUtama.Text15.Text = 0 frmUtama.Text7.Text = 0 frmUtama.Text8.Text = 0 frmUtama.Text9.Text = 0 frmUtama.Text11 = "SYSTEM ERROR" frmUtama.Text12 = "SYSTEM ERROR" frmUtama.Text14.Text = 0 End Sub

86