Dosen Pembimbing:
Eru Puspita, ST, M.Kom
NIP. 132 127 285
Oleh :
AGUNG PANGESTU HARSENO
7103 030 036
Disetujui Oleh:
Mengetahui :
Ketua Jurusan Teknik Elektronika
2
ABSTRAK
3
ABSTRACT
4
KATA PENGANTAR
Penyusun
5
UCAPAN TERIMA KASIH
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
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 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.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.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.
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.
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,
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)
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:
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.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
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:
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:
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
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:
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:
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>:
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:
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.
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.
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
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.
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.
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.
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.
Operator Operasi.
^ Pemangkatan.
- Tanda negatif.
*,/ Perkalian dan pembagian .
\ Pembagian integer.
Mod Modulus (sisa pembagian).
+,- Penambahan dan pengurangan.
& Penggabungan String
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.
32
Tabel 2.6 Tabel Operator Logika
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.
MIKROKONTROLLER
AT89S51
USB RS232
DRIVER
MOTOR DC
35
Berikut adalah diagram alir untuk pengolahan gambar (image
processing):
36
Gambar 3.2 Diagram alir pengolahan citra
37
Gambar 3.3 Peletakan kamera pada mekanik robot
38
Gambar 3.4 Kamera Vimicro USB PC Camera
39
gambar sehingga lebih cepat diproses. Setelah obyek yang di maksud
didapatkan selanjutnya akan dilakukan langkah-langkah sebagai 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
40
24
(0,0) 32
Keterangan:
: Arah scanning
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.
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
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.
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.
44
Gambar 3.10 Daftar komponen pada Visual Basic
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 :
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:
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.
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
49
Gambar 4.1 Tampilan form program
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
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.
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.
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.
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.
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.
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.
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
57
Halaman Ini Sengaja Di Kosongkan
58
LAMPIRAN
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
'// ------------------------------------------------------------------
'// 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
'// ------------------------------------------------------------------
'// String IDs dari status ban pesen error callbacks
'// ------------------------------------------------------------------
63
Public Const IDS_CAP_BEGIN = 300 '/* "Mulai Capture" */
Public Const IDS_CAP_END = 301
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
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
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
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
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
Sub setkam_Click()
capDlgVideoFormat lwndC
ResizeCaptureWindow lwndC
End Sub
75
Text1.Text = ""
End Sub
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
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)
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
Type tImage
B As Byte
G As Byte
R As Byte
End Type
Type tVideoData
B As Byte
G As Byte
R As Byte
End Type
79
Global Kamera As Long
Sub OperasiRobot()
' Segmentasi Warna Merah
' Pixel dengan warna merah diubah menjadi putih
' Pixel lainnya menjadi hitam
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
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
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
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