Anda di halaman 1dari 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 1. Eru Puspita, ST, M.Kom


NIP. 132 296 743 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 pixels-
30 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 i
Lembar Pengesahan ii
Abstrak iii
Abstract iv
Kata Pengantar v
Ucapan Terima Kasih vi
Daftar Isi vii
Daftar Gambar ix
Daftar Tabel x

BAB I. PENDAHULUAN
1.1 Latar Belakang 1
1.2 Tujuan 1
1.3 Permasalahan 2
1.4 Perumusan Masalah 2
1.5 Batasan Masalah 2
1.6 Metodologi 2
1.7 Sistematika Penulisan 3

BAB II. TEORI PENUNJANG


2.1 Model Warna 5
2.2 Pixel 7
2.3 Warna RGB 8
2.4 Grey Scale 10
2.5 Segmentasi 10
2.6 Operasi Peningkatan Citra 10
2.6.1 Kualitas Citra 10
2.6.2 Tresholding 11
2.7 Euclidean Distance 12
2.8 Bahasa Pemrograman 13
2.8.1 Variabel 13
2.8.2 Kontrol Program 14
2.8.2.1 If.....Then 15
2.8.2.2 If.....Then.....Else 15
2.8.2.3 Select.....Case 16
2.8.2.4 For......Next 16
2.8.2.5 GoTo 16
2.8.2.6 Exit 17

7
2.8.3 Prosedur 17
2.8.3.1 Sub Procedure 17
2.8.3.2 Function Procedure 18
2.8.4 Operator 21
2.8.4.1 Operator Matematik 21
2.8.4.2 Operator Perbandingan 22
2.8.4.3 Operator Logika 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 38
4.2 Analisa 44

BAB V. PENUTUP
5.1 Kesimpulan 45
5.2 Saran 45

Daftar Pustaka 47
Lampiran
Daftar Riwayat Hidup

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

9
DAFTAR TABEL
Tabel 2.1 Tipe Data Pada Visual Basic 14
Tabel 2.2 Fungsi-Fungsi Manipulasi String 20
Tabel 2.3 Fungsi-Fungsi Konversi Data 21
Tabel 2.4 Tabel Operator Matematik 22
Tabel 2.5 Tabel Operator Perbandingan 22
Tabel 2.6 Tabel Operator Logika 23
Tabel 4.1 Tabel Data Hasil Pengujian 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. 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.
3. 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.
4. 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.
5. Melakukan evaluasi dan presentasi hasil yaitu melakukan evaluasi
cara kerja dari sistem yang telah dibuat untuk mengetahui aspek-
aspek yang mempengaruhinya, seperti : keberhasilan pengambilan
gambar, pengujian data dan ketepatan dengan kontrol robot.
6. 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
1
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.

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
B.D, Bima Sena, Image Prosesing dan Aplikasinya, hal.2
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) < ~ ......(2-1)
0 < r (x,y) < 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,1)................f(0,N-1)
f(1,0) f(0,1)................f(1,N-1)
f(0,0)= .............................................. ....................................(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 koorfinat-
koordinatnya 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 masing-
masing 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,

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


C = C1 + C2 = .......(2-8)
2

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
Bachtiar Novan, Andi, Robot Penyerang dalam Permainan Sepak Bola , hal. 21
6
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 histogram-
nya. 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)=
  ..........(2-10)
 
 K − 1, g1( x, y ) > T 
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:

§ Akar kuadrat :E= ( X 2 − X 1)2 ......(2-11)


Atau
§ Absolut : E = ( X 2 − X 1) ......(2-12)
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 Ukuran Byte Range


Integer 2 byte -32.768 sampai 32.767
Long Integer 4 byte -2.147.483.648 sampai
2.147.483.647
Single-precision 4 byte -3,402823 E38 sampai
Floating point 3,402823 E38

Double-precision 8 byte -1,79769313486232


Floating point D303 sampai
1,79769313486232
D303
Currency 8 byte -922337203685477,5808
sampai
922337203685477,5808
String 1 byte per karakter 0 sampai 65.535

Boolean 2 byte True atau False


Date 8 byte 1 january 100 sampai 31
Desember 9999
Byte 1 byte 0 sampai 255

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.

If <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

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
Keterangan Contoh Penggunaan
Fungsi
Len(”pipit”)
Len Menentukan panjang sebuah string.
Menghasilkan 5
Mengubah huruf string menjadi huruf Ucase(”pipit”)
Ucase
besar. Menghasilkan PIPIT
Mengubah huruf string menjadi huruf Lcase (”PIPIT”)
Lcase
kecil. Menghasilkan pipit
Menghasilkan karakter yang dihitung Right (”abcdefg”,3)
Right
dari sisi kanan string Menghasilkan ”efg”
Menghasilkan karakter yang dihitung Left (”abcdefg”,3)
Left
dari sisi kiri string Menghasilkan ”abc”
Menghasilkan karakter yang dihitung
Mid (”abcdefg”,3,3)
Mid dari tengah-tengah string dimulai dari
Menghasilkan ”cde”
titik awal tertentu.
String (3,”a”)
String Mengulangi karakter string
Menghasilkan ”aaa”
Menghasilkan kode ASCII dari huruf Asc (”A”)
Asc
tertentu. Menghasilkan 65
Menghasilkan karakter untuk kode Chr$ (65)
Chr
ASCII tertentu. Menghasilkan ”A”
Menghasilkan karakter dengan Trim (” <a> ”)
Trim
menghilangkan karakter space-nya. Menghasilkan ”<a>”
Menghasilkan karakter yang
Str$ (-12.34)
Str mempresentasikan angka
Menghasilkan”-12.34”
numeriknya.
Mencari titik awal dari sebuah string Instr (”abcdef”,”cd”)
InStr
dalam string yang besar. Menghasilkan 3.
Menghasilkan numerik angka yang Val (”12.34abcdefg”)
Val
terkandung dalam string. Mengahasilkan 12,34

30
13
Fungsi-Fungsi Konversi Data
Fungsi-fungsi dalam kelompok konversi data ini biasa digunakan
untuk konversi data.

Tabel 2.3 Fungsi-Fungsi Konversi Data

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

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 Operasi.
^ Pemangkatan.
- Tanda negatif.
*,/ Perkalian dan pembagian .
\ Pembagian integer.
Mod 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 Operasi.
= Sama dengan.
<> Tidak sama dengan.
< Lebih kecil.
> Lebih besar.
<= Lebih kecil atau sama dengan.
>= Lebih besar atau sama dengan.
Like Mempunyai ciri yang sama.
Is 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

Tabel Kebenaran Operasi


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

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) 32

Keterangan:
: Arah scanning

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’ = untuk perintah maju


Karakter ‘B’ = untuk perintah mundur
Karakter ‘R’ = untuk perintah berputar kekanan
Karakter ‘L’ = untuk perintah berputar kekiri
Karakter ‘S’ = untuk perintah berhenti
Karakter ’A’ = untuk perintah Serang
Karakter ’C’ = untuk perintah Scanning obyek
Karakter ’E’ = 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)

Lebar (xL)
Jarak(cm)

Kondisi
(pixels)

(pixels)

(pixels)

(pixels)

(pixels)
Titik X

Titik Y

Posisi
Luas
Fps

12,61 10 7 70 55 132 kanan Ptr kiri


75 12,13 10 7 70 155 132 Tengah Mundur
12,23 10 7 70 276 131 kiri Ptr kanan
12,61 9 6 54 50 146 Kanan Ptr kiri
80 12,55 9 6 54 160 145 Tengah Serang
12,22 9 6 54 280 136 kiri Ptr kanan
12,49 8 5 40 66 132 kanan Ptr kiri
100 12,27 8 5 40 155 130 Tengah Serang
12,45 8 5 40 254 126 Kiri Ptr kanan
12,19 7 4 28 40 139 Kanan Ptr kiri
120 12,39 7 4 28 141 136 Tengah Maju
12,51 6 4 24 260 130 Kiri Ptr kanan
12,48 6 4 24 71 139 Kanan Ptr kiri
125 12,57 6 4 24 151 129 Tengah Maju
12,26 6 4 24 270 130 Kiri 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
2.

Gambar 4.3 Posisi 2

Keterangan:
Koordinat obyek telah diketahui, posisi obyek sudah tepat di tengah-
tengah 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 tengah-
tengah 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 tengah-
tengah 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 tengah-
tengah 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
pengambilan gambar, peletakan sensor kamera pada mekanik
atau plan yang dijalankan serta waktu peralatan tersebut
dijalankan.
2. Pada form aplikasi program sebaiknya dibuat semi otomatis
agar para pengguna dapat dengan mudah menggunakannya,
seperti penentuan jarak penyerangan.
3. 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] Andi Nalwan, Paulus,” Teknik Antarmuka dan Pemrograman


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

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 '/* "Mulai Capture" */
Public Const IDS_CAP_END = 301

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

Anda mungkin juga menyukai