BERBASIS KAMERA
SKRIPSI
Oleh:
SRI NUR SAHID
130431100116
1
[Halaman Ini Sengaja Dikosongkan]
2
ROBOT CERDAS PEMBERI MAKAN HEWAN BERBASIS
KAMERA
Nama : Sri Nur Sahid
NIM : 13043110016
Program Studi : Teknik Elektro
Dosen Pembimbing : Riza alfita, ST., MT
: Miftachul Ulum, S.T., M.T.
Perkembangan teknologi manusia untuk memenuhi
kebutuhannya dengan cepat. Sehingga dikembangkan teknologi robotika
untuk membantu dan meringankan pekerjaan manusia di masa depan.
Salah satu pengembanganya adalah root pemberi makan hewan dengan
menggunakan kamera. Robot ini memiliki kemampuan untuk
mengantarkan makanan secara otomatis serta membedakan jenis hewan
yang ditemui dan kemudian memberi makanan sesuai jenis hewan yang
ditemui. Dalam penelitian ini robot akan berjalan mengikuti garis sesuai
lintasan yang telah ditentukan. Selain itu penelitian ini menggunakan
kamera sebagai mata dari robot. Gambar dari kamera akan di olah
melalui image processing. Pengolahan citra (image processing) adalah
teknik mengolah citra yang mentransformasikan citra masukan menjadi
citra lain agar keluaran memiliki kualitas yang lebih baik dibandingkan
kualitas citra masukan. Setelah didapatkan citra gambar objek kemudian
proses selanjutnya adalah membandingkan dengan database
menggunakan metode Optical Character Recognation (OCR). Metode
OCR ini akan mengolah gambar ke dalam bentuk huruf ataupun angka.
Dari hasil percobaan dapat disimpulkan bahwa robot mampu berjalan
3
sesuai konsep yaitu mengikuti garis dan gambar dari kamera yang
diklasifikasi memiliki keakurasian mendekati 100%.
Kata Kunci : kamera, Image Processing, Optical Character
Recognation (OCR).
4
BAB I
PENDAHULUAN
1.1 Latar Belakang
Seiring berkembangnya teknologi, manusia selalu ingin
menciptakan robot yang mampu menggantikan kerja manusia. Robot
adalah mesin yang dapat melakukan berbagai pekerjaan yang
menggantikan satu jenis atau lebih pekerjaan yang biasa dikerjakan
oleh manusia atau suatu peralatan yang bekerja sendiri. Dalam
melakukan pekerjaannya, robot mengikuti suatu pola gerakan yang
ditentukan oleh pengguna robot Pengembangan robot ini dilakukan
dibanyak bidang, baik itu dibidang pertanian, industri, pendidikan dan
banyak bidang lainya. Seperti halnya di taman safari, dimana kerja
manuisa dalam memberi makan hewan dapat digantikan oleh robot.
Dimana teknologi ini memiliki banyak keuntungan baik dalam hal
efisiensi tenaga ataupun waktu kerja yang lebih lama dari manusia
karena robot tidak mengalami kelelahan fisik seperti manusia sehingga
mampu bekerja secara terus menerus.
Robot ini akan berjalan megikuti lintasan garis dengan
memanfaatkan sensor warna. Selain itu robot ini juga dirancang
supaya mampu mrnghindari halangan secara otomatis, oleh karena itu
robot ini juga dilengkapi dengan sensor ultrasonik. Sistem kerja robot
ini adalah memberi makan hewan secara acak sesuai jenis hewan yang
ditemui. Klasifikasi jenis hewan ini dilakukan menggunakan kamera
dan memanfaatkan teknologi pengolahan citra ( image processing).
Dengan memanfaatkan teknologi tersebut, maka diharapkan adanya
suatu aplikasi yang dapat menangkap suatu obyek yang ada di depan
5
kamera dan bisa mengidentifikasi jenis objek. Dengan sistem ini
diharapkan pemberian makan pada hewan akan berjalan lebih
maksimal. Karena selain menghemat waktu juga menghemat tenaga
1.2 Perumusan Masalah
Rumusan masalah yang akan dibahas dalam tugas akhir adalah
sebagai berikut:
1. Bagaimana merancang konfigurasi robot cerdas pemberi makan
hewan agar mampu menuju tempat yang dituju dengan
mengikuti lintasan garis ?
2. Bagaimana merancang robot cerdas pemberi makan hewan
menggunakan kamera sehingga mampu mengidentifikasi jenis
objek dan melakukan klasifikasi?
1.3 Tujuan
1. Mahasiswa mampu merancang robot cerdas pemberi makan
hewan menggunakan sensor warna untuk bergerak mengikuti
garis.
2. Mahasiswa mampu merancang robot cerdas pemberi makan
hewan menggunakan kamera agar mampu mengidentifikasi
jenis hewan yang ditemui dan memberi makan sesuai jenis
hewan tersebut.
1.4 Batasan Masalah
Batasan Masalah dari judul tugas akhir ini adalah sebagai
berikut:
1. Lintasan garis dan juga mekanisme pemberian makanan sudah
ditentukan sejak awal
6
2. Metode yang digunakan adalah OCR(Optichal Character
Rezognation), Jadi gambar an dideteksi berupa gambar tulisan
yang akan dikonversi menjadi bentuk huruf
3. Hewan yang diklasifikasi berjumlah 10 jenis(Panda, Komodo,
Singa, Sapi, Jerapah, Harimau, Ayam, Musang, Kera, Kelinci)
1.5 Metodologi Pengerjaan Tugas Akhir
Metodologi pengerjaan tugas akhir yang akan dikerjakan
memiliki 5 tahap utama. Kelima tahap tersebut antara lain tahap
persiapan, tahap perencanaan, tahap pengumpulan data, tahap
perancangan dan pembuatan robot, tahap analisa dan pengolahan
data, dan tahap pemecahan masalah.
a. Tahap Persiapan
Tahap persiapan merupakan rangkaian kegiatan sebelum
memulai pengumpulan dan pengolahan data. Dalam tahap awal
ini disusun hal-hal penting yang harus segera dilakukan dengan
tujuan untuk mengefektifkan waktu dan pekerjaan. Tahap
persiapan ini meliputi kegiatan-kegiatan sebagai berikut:
menentukan judul tugas akhir, pembuatan proposal penyusunan
tugas akhir, studi pustaka terhadap materi desain untuk
menentukan kebutuhan data. Perencanaan jadwal pembuatan
desain persiapan di atas harus dilakukan secara cermat untuk
menghindari pekerjaan yang berulang, sehingga tahap
pengumoulan data menjadi lebih optimal.
b. Tahap Perencanaan
Tahap ini memberikan gambaran mengenai langkah awal
sampai dengan akhir penyusunan laporan Tugas Akhir.
7
Pengembangan penjelasannya dituangkan dalam bentuk
diagram alir yang tersusun secara berurutan sesuai dengan
proses kerjanya.
c. Pengumpulan Data
Metode pengumpulan data yang dilakukan yaitu sebagai
berikut: Metode Literatur, yaitu mengumpulkan,
mengidentifikasi dan mengolah data tertulis serta metode kerja
yang digunakan, Metode Observasi yang dilakukan dengan
tujuan untuk dapat mengetahui kondisi riil di lapangan sehingga
dapat diperoleh gambaran-gambaran sebagai pertimbangan
dalam perencanaan desain struktur.
d. Analisan dan Pengolahan Data
Analisa dan pengolahan data dilakukan berdasarkan data-
data yang dibutuhkan, selanjutnya dikelompokkan sesuai
identifikasi tujuan permasalahan, sehingga diperoleh analisan
pemecahan yang efektif dan terarah.
e. Pemecahan Masalah
Apabila hasil-hasil dari analisa dan pengolahan data sudah
didapat, maka tahap pemecahan masalah bisa dilaksanakan,
dengan tujuan mengetahui sejauh mana kontruksi yang
sebenarnya di lapangan dan diproyeksikan terhadap kondisi rill
berdasarkan peraturan-peraturan yang telah ditetapkan
sebelumnya.
8
1.6 Sistematika Penulisan.
a. Bab I : Pendahuluan.
Bab ini berisi pendahuluan yang menjelaskan latar belakang
permasalahan, perumusan masalah, tujuan penelitian, manfaat
penelitian, batasan penelitian serta sistematika penulisan.
b. Bab II : Teori Penunjang.
Bab ini menjelaskan mengenai dasar – dasar teori
mengenai teori penunjang tugas akhir
c. Bab III : Perancangan Sistem
Bab ini berisi tentang langkah-langkah yang dilakukan
meliputi rancangan sistem.
d. Bab IV : Implementasi dan Uji Coba Sistem
Bab ini berisi tentang pembahasan.
e. Bab V : Penutup.
Bab ini berisi hasil dan kesimpulan.
9
[Halaman Ini Sengaja Dikosongan]
10
BAB II
TEORI PENUNJANG
2.1 Penelitian Terdahulu
1. Aldi Setiawan, Herry Sujaini, Arif Bijaksana pada jurnalnya
tahun 2017 tentang”Implementasi Optical Character
Recognition (OCR) Pada Mesin Penerjemah Bahasa
Indonesia Ke Bahasa Inggris”. Tujuan dari penelitian ini
adalah membuat Optical Character Recognition (OCR) pada
mesin penerjemah bahasa Indonesia ke bahasa Inggris dengan
menggunakan platform Android untuk penginputan kata
penerjemahan. Sistem dibangun menggunakan Optical
Character Recognition (OCR) dengan library mobile vision
agar user tidak perlu lagi mengetikan teks sebagai inputan kata
yang akan di terjemahankan. Daalam penelitian tersebut
memperlihatkan bahwa OCR dapat menangkap hasil kalimat
dengan cukup baik pada beberapa font dan ukuran yang
berbeda.
2. Daisy A.N Janis pada jurnalnya tahun 2014” Rancang
bangun robot pengantar makanan line follower”. Pada
penelitian ini robot line follower digunakan sebaga pengganti
pelayan dalam mengantarkan makanan ke meja pelanggan.
Hasil dari penelitian ini menunjukan bahwa robot line follower
cukup efektif dikembangkan sebagai robot pengantar
makanan.
3. Suryo Hartanto, Aris Sugiharto, dan Sukmawati Nur Endah
pada jurnalnya tahun 2017” Optical Character Recognition
11
Menggunakan Algoritma Template Matching Correlation”.
Pada penelitan ini OCR (Optical Character Recognition)
solusi yang digunakan untuk proses konversi dokumen cetak
ke dokumen digital. Permasalahan yang timbul dalam proses
pengenalan dokumen komputer adalah bagaimana teknik
pengenalan untuk mengidentifikasi berbagai jenis karakter
dengan berbagai ukuran dan bentuk. Metode pengenalan yang
digunakan dalam tugas akhir ini adalah metode Template
Matching Correlation. Sebelum proses pengenalan, citra
masukan dengan format * bmp atau jpg * diolah terlebih
dahulu di proses preprocessing, yang meliputi binerisasi,
segmentasi, dan normalisasi gambar. Rata-rata tingkat
keberhasilan pengenalan yang dihasilkan oleh sistem ini adalah
92,90%. Hasil akhir menunjukkan bahwa penggunaan metode
Template Matching Correlation cukup untuk membangun
sebuah sistem OCR dengan akurasi yang baik efektif.
2.2 Perbedaan dengan Penelitian Sebelumnya
Terdapat beberapa berbedaan dan kelebihan dengan penelitian
sebelumnya dari sistem yang akan dibuat. Berikut adalah
perbedaan dan kelebihan dari Tugas Akhir yang berjudul “ Robot
Cerdas Pemberi Makan Hewan Berbasis kamera“
a. Pada beberapa penelitian sebelumnya berdasarkan jurnal yang
digunakan dalam penelitian ini dijelasakan bahwa robot line
follower sudah banya dikembangkan sebagai pengantar
makanan. Dalam penelitian sebelumnya robot pengantar
makanan ini hanya mamu mendeteksi objek tetapi tidak bisa
12
membedakan jenis objek yng ditemui. Dalam pengembangan
selanjuutnya ini objek yang dituju adalah 10 jenis hewan,
dimana stiap jenis hewan di wakili oleh gambar yang
bertuliskan nama masing masing hewan.
b. Pada penelitian sebelumnya metode OCR sudah banyak
dikembangkan untuk penerjemah alitab, menerjemahkan
bahasa inggris ke Indonesia dan sebaliknya, Mengkonversi
dokumen dan sebagainya. Dalam enelitian selanjutnya ini
OCR dgunakan untuk klasifikasi jenis hewan berdasarkan
nama hewan.
c. Pada penelitian ini robot pengikut garis akan dikombinasikan
dengan kamera dan menggunakan metode OCR untuk
mencapai target penelitian yaitu robot yang mampu
membedakan objek hewan yang ditemui dan memberi makan
sesuai jenisnya.
2.3 Dasar Teori
2.3.1 Sensor Pengikut garis
Pada dasarnya sensor garis merupakan sensor warna
yang dibuat sedemikian rupa sehingga memiliki
kemampuan untuk membaca garis dengan prinsip
pemantulan cahaya. Sensor garis dibuat dengan beberapa
cara. Cara yang digunakan adalah dengan menggunakan
beberapa komponen elektronika, seperti LED, photodiode,
LDR, komparator atau IC sensor warna.
13
2.3.2 OCR(optichal character recognation)
OCR adalah sebuah sistem komputer yang dapat
membaca huruf, baik yang berasal dari sebuah pencetak
(printer atau mesin ketik) maupun yang berasal dari tulisan
tangan. OCR adalah aplikasi yang menerjemahkan gambar
karakter (image character) menjadi bentuk teks dengan cara
menyesuaikan pola karakter per baris dengan pola yang
telah tersimpan dalam database aplikasi. Hasil dari proses
OCR adalah berupa teks sesuai dengan gambar output
scanner dimana tingkat keakuratan penerjemahan karakter
tergantung dari tingkat kejelasan gambar dan metode yang
digunakan
Secara umum sistem kerja OCR adalah sebagai berikut:
1. Meratakan gambar (Auto Deskewing).
File gambar akan diatur kemiringannya, apabila hasil
scan ada kemiringan, maka gambar akan dibuat sejajar
atau lurus.
2. Menganalisa (Analysis)
Software (program) OCR akan menganalisa dan
memisahkan bagian teks dan bagian gambar.
3. Otomatis mengatur arah gambar (Auto Orientation).
Software (program) OCR akan mengambil sebagian area
pada file image (gambar) dan mengidentifikasi arah teks
yang benar. File image (gambar) akan diputar ke arah
yang benar, pilihannya adalah 90°, 180°, atau 270•°.
14
4. Memisahkan setiap karakter huruf dan angka.
Software (program) OCR akan memisahkan setiap
karakter yang terdapat pada image (gambar) menjadi
sebuah huruf atau angka.
5. Mengidentifikasi gambar (Capturing the features of the
characters and comparing). Software (program) OCR
akan mengidentifikasi satu persatu setiap gambar yang
sudah dipisahkan, dan melakukan pengecekan terhadap
database yang dimiliki oleh software (program) OCR,
dan menetapkan huruf atau angka yang akan digunakan.
6. Menghasilkan file akhir (Recognition result output).
Setelah setiap gambar sudah dirubah menjadi huruf atau
angka (format teks) maka software (program) OCR akan
menghasilkan sebuah file dengan format teks, seperti
Microsoft Word, Microsoft Excel, TXT, Rich Text dan
Searchable PDF, tergantung dari pengaturan awal.
2.3.3 Mikrokontrol Arduino MEGA 2560
Mikrokontroler adalah sebuah sistem komputer
fungsional dalam sebuah chip. Di dalamnya terkandung
sebuah inti processor, memori (sejumlah kecil RAM,
memori program, atau keduanya), dan perlengkapan input
output. Dengan kata lain, mikrokontroler adalah suatu alat
elektronika digital yang mempunyai masukan dan keluaran
serta kendali dengan program yang bisa ditulis dan dihapus
dengan cara khusus, Beberapa karakteristik dan fitur yang
dimiliki oleh Arduino MEGA2560 diantaranya
15
- Microcontroller ATmega2560
- Operating Voltage 5V
- Input Voltage (recommended) 712V
- Input Voltage (limits) 6-20V
- Digital I/O Pins 54 (of which 14 provide PWM output)
- Analog Input Pins 16
- DC Current per I/O Pin 40 m
- DC Current for 3.3V Pin 50 mA
- Flash Memory 256 KB of which 8 KB used by
bootloader
- SRAM 8 KB
- EEPROM 4 KB
- Clock Speed 16 MHz
2.3.4 Baterai
Baterai adalah suatu alat penyimpan energi listrik yang
dapat diisi setelah energi yang digunakan. Kapasitas atau
kemampuan menyimpan energi ditentukan oleh semua
komponen didalam baterai seperti jenis material yang
digunakan dan jenis elektrolitnya sehingga dikenal baterai
asam dan baterai alkali.
Proses pengisian baterai yang baik dan benar hendaknya
dilakukan pada suhu lingkungan kamar ( 25 oC) dengan
ventilasi keadaan terbuka. Kondisi muatan yang disimpan
dalam baterai (state of charge) dapat ditentukan dengan
mengukur tegangan terminal baterai.
16
2.3.5 PID (Proportional Integral Derivative)
Kontroler PID (dari singkatan bahasa Inggris
Proportional Integral Derivative controller) merupakan
suatu sistem kontrol yang digunakan untuk menentukan
kontrol presisi suatu sistem instrumentasi dengan
karakteristik adanya umpan balik (feedback) pada sistem
tersebut. Sebuah kontroler PID secara kontinyu
menghitung nilai error sebagai beda antara set point yang
diinginkan dan variabel proses terukur. Kontroler
mencoba untuk meminimalkan nilai error setiap waktu
dengan penyetelan variabel control
𝑡 𝑑𝑒(𝑡)
𝑢(𝑡) = 𝐾𝑝 𝑒(𝑡) + 𝐾𝑖 ∫0 𝑒(𝑡)𝑑𝑡 + 𝐾𝑑 ………….(2.1)
𝑑𝑡
17
Gambar 2.1 Blok Diagram PID
Sumber:(http://www.leselektronika.com/2012/06/)
a. Pengendali P (Proportional)
Pengendali Proportional memiliki keluaran yang
sebanding dengan besarnya sinyal kesalahan/ error. Secara
sederhana dapat dikatakan bahwa keluaran pengendali
Proportional merupakan perkalian antara konstanta
proportional (Kp) dengan sinyal masukannya. Perubahan
pada sinyal masukannya menyebabkan sistem secara
langsung mengubah keluarannya sebesar konstanta
pengalinya. Secara eksperimen, penggunaan pengendali
18
Proportional harus memperhatikan ketentuan-ketentuan
berikut:
19
keluaran akan tetap seperti sebelum terjadi perubahan
masukan.
𝑑𝑢(𝑡)
= 𝐾𝑖 . 𝑒(𝑡)……………………………………... (2.4)
𝑑𝑡
𝑑𝑢(𝑡)
dengan : = sinyal keluaran pengendali integral, Ki
𝑑𝑡
20
𝑡
𝑢(𝑡) = ∫0 𝑒(𝑡)𝑑𝑡…………………………………... (2.5)
𝑢(𝑠) 𝐾𝑖
= …………………………………. (2.6)
𝐸(𝑠) 𝑠
c. Pengendali D (Derivative)
Perubahan yang mendadak pada masukan dari
pengendali derivative akan mengakibatkan perubahan
yang sangat cepat dan besar. Secara eksperimen,
penggunaan pengendali derivative memiliki karakteristik
sebagai berikut:
21
nilai konstanta derivative (Kd) dan laju perubahan
sinyal kesalahan.
3. Pengendali derivative mempunyai suatu karakter untuk
mendahului, sehingga pengendali ini dapat
menghasilkan koreksi yang signifikan sebelum
kesalahan bertambah besar, sehingga dipakai untuk
mempercepat respon awal suatu sistem, meskipun tidak
memperkecil kesalahan pada keadaan tunaknya.Dapat
dikatakan bahwa masing-masing pengendali P, I, dan D
memiliki kelebihan dan kekurangan. Sehingga jika
digabungkan ketiganya secara paralel menjadi
pengendali Proportional plus Integral plus Derivative
atau biasa disebut pengendali PID, maka akan saling
menutupi. Elemen-elemen pengendali P, I, dan D
masing-masing secara keseluruhan bertujuan untuk
mempercepat reaksi sebuah sistem, menghilangkan
offset dan menghasilkan perubahan awal yang besar.
𝐾𝑑 = 𝐾𝑝 𝑇𝑑 ………………………………………….. (2.7)
𝐾𝑝
𝐾𝑖 = ……………………………………………… (2.8)
𝑇𝑖
22
2.3.6 Metode Tuning PID dengan Ziegler-Nichols 2
Aspek yang sangat penting dalam desain kontroler PID
ialah penentuan parameter kontroler PID supaya sistem
close loop memenuhi kriteria performansi yang diinginkan.
Hal ini disebut juga dengan tuning kontroler.Terkadang
pemodelan matematis suatu plant susah untuk dilakukan.
Jika hal ini terjadi maka perancangan kontroler PID secara
analitis tidak mungkin dilakukan sehingga perancangan
kontroler PID harus dilakukan secara eksperimental.
Metode tuning Ziegler-Nichols 2 dilakukan dengan cara
meberikan kontroler P pada suatu sistem close loop dengan
plant terpasang. Lalu nilai Kp ditambahkan sampai sistem
berosilasi terus menerus dengan teratur. Nilai Kp saat itu
disebut penguatan kritis (Kcr). Periode saat itu disebut
periode kritis (Pcr). Berikut cara menetukan periode kritis
(Pcr) seperti terlihat pada gambar berikut ini.[8]
23
Tahap selanjutnya ialah menentukan nilai Kp, Ki, dan Kd
berdasar tabel 2.1 berikut.
Tabel 2.1 Cara Menetukan Nilai Kp, Ki, dan Kd
Sumber : Buku Control Systems, 2009, 73
Tipe
KP Ki Kd
Alat Kontrol
P 0.5 Kcr ~ 0
24
BAB III
PERANCANGAN SISTEM
3.1. PERANCANGAN PERANGKAT KERAS (HARDWARE)
3.1.1 Blok Diagram Sistem
Pada Perancangan tugas akhir ini terdapat beberapa
tahapan dan alur sistem agar perencanaan sesuai dengan apa
yang diharapkan. Berikut adalah rancangan sistem dalam
bentuk blok diagram.
Sensor
pengikut
garis
Motor DC
Kamera Arduino
Servo
OCR
Phase
25
- Proses pertama yaitu input dari sensor pengikut garis
merupakan data nilai ADC. Nilai ADC ini yang akan
diprose untuk menentukan gerak robot maju,
mundur,berhenti, belok kanan ataupun belok kiri melalui
Motor DC.
- Selanjutnya di set poin yang telah ditentukan, kamera akan
mengambil gambar. Gambar yang diambil kamera ini akan
di proses melalui image processing .
- Metode yang digunakan adalah OCR(Optical Character
Recognation). Metode ini digunakan untuk klasifikasi 10
jenis hewan, dimana setiap jenis hewan diwakili oleh papan
nama sesuai nama hewan tersebut. Data hasil klasifkasi ini
akan diolah oleh arduino dan outputnya merupakan gerakan
servo untuk membuka pintu makanan sesuai papan nama
hewan yang diproses.
3.1.2 Perancangan Supply Batterai
Suplly batterai yang yang diperlukan oleh motor DC
adalah 24 volt dan 12 volt masuk ke rangkaian arduino
mega. Sehingga dibut rangkaian seri dengan 2 tombol on off
dan 2 ouput. Output pertama 24 volt untuk motor dan 12
volt untuk rangkaian arduino mega
3.1.3 Perancangan pengikut garis
Rangkain sensor pengikut garis dibuat menggunakan 6
LED dan 6 photodidoda. Setiap satu sensor terbuat dari
sebuah LED dan photodiode. Sensor pengikut garis ini
26
mendapat supply 12 volt dari batterai dan terhubung dengan
arduino
3.1.4 Perancangan driver Motor DC
Driver motor disini digunakan untuk menggerakan 3
motor DC, 2 motor untuk menggerakan roda robot baik itu
CCW ataupun CW dan 1 motor DC untuk menggerakan
conveyor. Driver motor disini terhubung dengan supply
batterai 24 volt. Selain itu driver motor DC juga terhubung
dengan arduino pin 2, 3, 4, 5, 6, dan 7.
3.1.5 Perancangan konveyor dan tempat makanan
Conveyor disini digerakan oleh motor DC dan di design
dengan 10 ruang sebagai wadah makanan dan 10 penutup
sebagai pintu keluarnya makanan. Pintu makanan digerakan
leh servo yang di kontrol dari Arduino
3.1.6 Perancangan Mekanik penopang tubuh robot
Body robot di buat dari besi dengan bentuk kubus dengan
ukuran panjang x lebar x tinggi = 50 x 40 x 30 cm. Body
robot ini menopang conveyor dibagian atas. Dibawah body
robot terdapat 4 roda, 2 roda belakang yang dikontrol dari
arduino dan 2 roda bebas didepan.
3.2 PERANCANGAN PERANGKAT LUNAK (SOFTWARE)
3.2.1 Arduino IDE
IDE itu merupakan kependekan dari Integrated
Developtment Enviroenment, atau secara bahasa mudahnya
merupakan lingkungan terintegrasi yang digunakan untuk
melakukan pengembangan. Disebut sebagai lingkungan
27
karena melalui software inilah Arduino dilakukan
pemrograman untuk melakukan fungsi-fungsi yang
dibenamkan melalui sintaks pemrograman. Arduino
menggunakan bahasa pemrograman sendiri yang
menyerupai bahasa C. Bahasa pemrograman Arduino
(Sketch) sudah dilakukan perubahan untuk memudahkan
pemula dalam melakukan pemrograman dari bahasa aslinya.
Sebelum dijual ke pasaran, IC mikrokontroler Arduino telah
ditanamkan suatu program bernama Bootlader yang
berfungsi sebagai penengah antara compiler Arduino
dengan mikrokontroler.Arduino IDE dibuat dari bahasa
pemrograman JAVA. Arduino IDE juga dilengkapi dengan
library C/C++ yang biasa disebut Wiring yang membuat
operasi input dan output menjadi lebih mudah. Arduino IDE
ini dikembangkan dari software Processing yang dirombak
menjadi Arduino IDE khusus untuk pemrograman dengan
Arduino.
3.2.2 Python
Python adalah bahasa pemrograman interpretatif
multiguna dengan filosofi perancangan yang berfokus pada
tingkat keterbacaan kode. Python diklaim sebagai bahasa
yang menggabungkan kapabilitas, kemampuan, dengan
sintaksis kode yang sangat jelas, dan dilengkapi dengan
fungsionalitas pustaka standar yang besar serta
komprehensif.
28
Python juga didukung oleh komunitas yang besar. Python
mendukung multi paradigma pemrograman, utamanya;
namun tidak dibatasi; pada pemrograman berorientasi objek,
pemrograman imperatif, dan pemrograman fungsional.
Salah satu fitur yang tersedia pada python adalah sebagai
bahasa pemrograman dinamis yang dilengkapi dengan
manajemen memori otomatis. Seperti halnya pada bahasa
pemrograman dinamis lainnya, python umumnya digunakan
sebagai bahasa skrip meski pada praktiknya penggunaan
bahasa ini lebih luas mencakup konteks pemanfaatan yang
umumnya tidak dilakukan dengan menggunakan bahasa
skrip. Python dapat digunakan untuk berbagai keperluan
pengembangan perangkat lunak dan dapat berjalan di
berbagai platform sistem operasi.
3.2.1 Visio 2016
dalah sebuah program aplikasi komputer yang sering
digunakan untuk membuat diagram alur (flowchart),
brainstorm dan skema jaringan yang diliris oleh Microsoft
Corporation. Aplikasi ini menggunakan grafik vector untuk
membuat diagram-diagramnya.
3.2. ANALISA KEBUTUHAN
3.3.1 Kebutuhan Software
Perangkat lunak yang digunakan dalam pembuatan alat ini
antara lain:
29
Table 3.1 software yang digunakan
Nama Software Fungsi
Arduino IDE Pemrograman mikrokontroler dari mulai
membaca sensor sampai menggerakan motor
Python Pemrograan image processing
30
BAB IV
PENGUJIAN DAN ANALISA
4.1 Pengujian
4.1.1 Pengujian motor
pengujian dilakukan dengan cara motor diberi supply
tegangan dari baterai 24 V, apabila motor dapat bergerak
cw (counter wise)dan ccw (counter clock wise)makan
motor dapat dipastikan dalam keadaan baik atau normal
begitupun sebaliknya.
31
Gambar 4.2. Pengujian sensor pengikut garis
4.1.3 Pengujian kamera
Pengujian kamera dilakukan dengan menghubungkan
kamera dengan laptop melalui port USB. Apabila kamera
mampu menangkap gambar maka kamera dalam kondisi
baik. Fokus kamera bisa diatur sesuai keinginan
32
4.1.4 Pengujian gerak robot
Pengujian gerak robot dilakukan dengan meletakan
robot diatas lintasan garis bewarna hitam. Jika robot
mampu bergerak megikuti garis hitam maka sistem gerak
robot sudah bekerja dengan baik.
33
4.1.5 Analisa data sensor pengikut garis
S1 S2 S3 S4 S5 S6 Kiri Kanan
1 0 0 0 0 0 27 255
0 0 0 0 0 1 227 0
1 1 0 0 0 0 52 255
0 0 0 0 1 1 202 0
0 0 0 1 1 1 177 15
1 1 1 0 0 0 77 239
1 1 1 1 1 1 15 177
1 1 1 1 1 1 152 71
0 1 1 1 1 0 127 127
Keterangan :
S1 : Sensor ke 1
S2 : Sensor ke 2
S3 : Sensor ke 3
34
S4 : Sensor ke 4
S5 : Sensor ke 5
S6 : Sensor ke 6
35
2. Sensor S6 membaca warna hitam
36
Dari gambar 4.7 ditampilkan nilai PWM motor kanan = 255
dan PWM motor kiri = 52. Karena nilai PWM motor kanan lebih
besar, maka roda kanan berputar lebih cepat dari roda kiri sehingga
robot akan bergerak belok ke kiri
37
5. Sensor S1, S2 dan S3 membaca warna hitam
Gambar 4.9. PWM ketika S1, S2, dan S3 membaca warna hitam
Gambar 4.10. PWM ketika S4, S5, dan S6 membaca warna hitam
38
Dari gambar 4.10 ditampilkan nilai PWM motor kanan = 15
dan PWM motor kiri = 177. Karena nilai PWM motor kiri lebih
besar, maka roda kiri berputar lebih cepat dari roda kanan sehingga
robot akan bergerak belok ke kanan
39
8. Sensor S6, S5, S4, S3, S2 dan S1 membaca warna hitam
40
Dari gambar 4.13 ditampilkan nilai PWM motor kanan = 127
dan PWM motor kiri = 127. Karena nilai PWM motor kanan dan
kiiri sama besar, maka robot akan bergerak maju
Dari table 4.2 dapat dilihat bahwa percobaan dilakukan 10 kali untuk
setiap sampel dengan tingkat akurasi 100%. Ketika klasifikasi berhasil
maka arduino akan mengirim perintah ke arduino dan servo akan aktif
41
sesuai dengan nomor yang telah ditentukan. Hasil pengambilan data dari
tabel 4.2 ditampilkan dibawah ini:
1. data 1
2. data 2
42
Pada gambar 4.15 gambar hasil capture kamera diproses oleh
OCR dan dari beberapa percobaan menunjukan hasil yang akurat
yaitu “KELINCI”
3. data 3
4. data 4
43
Pada gambar 4.17 gambar hasil capture kamera diproses oleh
OCR dan dari beberapa percobaan menunjukan hasil yang akurat
yaitu “HARIMAU”
5. data 5
6. data 6
44
Pada gambar 4.19 gambar hasil capture kamera diproses oleh
OCR dan dari beberapa percobaan menunjukan hasil yang akurat
yaitu “MUSANG”
7. data 7
8. data 8
45
Pada gambar 4.21 gambar hasil capture kamera diproses oleh
OCR dan dari beberapa percobaan menunjukan hasil yang akurat
yaitu “AYAM”
9. data 9
10. data 10
46
Pada gambar 4.23 gambar hasil capture kamera diproses oleh
OCR dan dari beberapa percobaan menunjukan hasil yang akurat
yaitu “SINGA”. Gambar sebelah kanan bertuliskan “singa, musang,
panda dll” adalah hasil capture kamera. Sedangkan gambar sebelah
kiri bertuliskan”1 possible plates found ” adalah hasil pembacaan
OCR.
1. Gambar Awal
2. Preprocessing
47
Gambar 4.25 Tahap preprocessing pada OCR
48
4. Mencari vector dari beberapa vertor karakter yang sesuai
dengan template yang disediakan
5. Extract Plates
49
Gambar 4.28 Tahap pengambilan karakter
6. Preprocessing
50
7. Pada tahap ini dicari lagi karakter yang memungkinkan untuk
diambil
8. Pada tahap ini dicari nilai vector dari vector- vector karakter
yang sesuai
51
10. Hasil karakter yang sesuai
52
BAB V
SIMPULAN DAN SARAN
A. SIMPULAN
Berdasarkan Percobaan yang telah dilakukan dapat diambil
beberapa kesimpulan dibawah ini :
A. SARAN
53
DAFTAR PUSTAKA
1. Aldi Setiawan, Herry Sujaini, Arif Bijaksana PN,”
Implementasi Optical Character Recognition (OCR) Pada
Mesin Penerjemah Bahasa Indonesia Ke Bahasa Inggris”,
Jurnal Sistem dan Teknologi Informasi (JUSTIN) Vol. 1, No. 2,
(2017)
2. Daisy A.N Janis, dkk, ,” Rancang bangun robot pengantar
makanan line follower”, jurnal Teknik elektro dan komputer
ISSN :2301-8402 1, UNSRAT, Manado. Tahun 2014.
3. Johanes Ohoiwutun,” Analisis Dan Perancangan Smart Dump
Menggunakan Arduino Mega 2560 Rev3 Dan Gsm
Sim900”,Jurnal Teknik Elektro Luceat Vol. 4 No. 1 Juli 2018
4. Suryo Hartanto, Aris Sugiharto, dan Sukmawati Nur Endah,”
Optical Character Recognition Menggunakan Algoritma
Template Matching Correlation” Jurusan Ilmu Komputer /
Informatika, FSM Universitas Diponegoro tahun 2017
5. R. Sandhika Galih A, Erik , Muhammad Lukman Hakim,”
Penerapan Teknik Ocr (Optical Character Recognition) Pada
Aplikasi Terjemahan Kitab Fiqih Safinah An-Naja
Menggunakan Readiris ”,Jurnal Seminar Nasional Informatika
2014 (semnasIF 2014)
6. Ossy D.E.W1, T.M. Zaini, Frizka, ”Penerapan Optical
Character Recognation Pada Penterjemah Inggris ↔
Indonesia Mobile Berbasis Augmented Reality” Jurnal
Informatika, Vol. 13, No.1, Juni 2013.
54
7. Siti Maimunah,” Optimasi Sistem Pengenalan Karakter Pada
Optical Character Recognition (Ocr)”,Jurnal Teknik Elektro
Universitas Trunojoyo Madura, tahun 2018
8. K. Joni, M. Ulum dan Z. Abidin, “Robot Line Follower
Berbasis Kendali ProportionalIntegral-Derivative (PID) Untuk
Lintasan Dengan Sudut Ekstrim,” INFOTEL, vol. VIII, no. 2, p.
140, 2016..
55
Lampiran 1 : source code line follower dan servo
#define IR 40
56
/**/ float SET_POIN = 0; /**/
/**/ /**/
//////////////////////////////////////////////////
int data;
int data_IR;
57
char data_Serial = 'Z';
// Konfigurasi Sensor
#define S1 A0
#define S2 A1
#define S3 A2
#define S4 A3
#define S5 A4
#define S6 A5
// Konfigurasi Motor
#define En_Kanan 7
#define En_Kiri 5
#define PWM_Kanan 6
#define PWM_Kiri 4
#define En_Konv 2
#define PWM_Konv 3
58
// Konfigurasi Servo
#define Serv0 22
#define Serv1 24
#define Serv2 26
#define Serv3 28
#define Serv4 30
#define Serv5 32
#define Serv6 34
#define Serv7 36
#define Serv8 38
// Masukan Library
#include <Servo.h>
// Inisialisasi Hardware
Servo Servo0;
Servo Servo1;
Servo Servo2;
59
Servo Servo3;
Servo Servo4;
Servo Servo5;
Servo Servo6;
Servo Servo7;
Servo Servo8;
Servo Servo9;
// Kondisi Inisialisasi
void setup()
// Interrupt
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 34286;
60
interrupts();
// Konfigurasi Sensor
pinMode(S1, INPUT);
pinMode(S2, INPUT);
pinMode(S3, INPUT);
pinMode(S4, INPUT);
pinMode(S5, INPUT);
pinMode(S6, INPUT);
// Konfigurasi IR
pinMode(IR, INPUT);
// Konfigurasi Motor
pinMode(En_Kanan, OUTPUT);
pinMode(En_Kiri, OUTPUT);
pinMode(PWM_Kanan, OUTPUT);
pinMode(PWM_Kiri, OUTPUT);
pinMode(En_Konv, OUTPUT);
61
pinMode(PWM_Konv, OUTPUT);
// Konfigurasi Servo
Servo0.attach(Serv0);
Servo1.attach(Serv1);
Servo2.attach(Serv2);
Servo3.attach(Serv3);
Servo4.attach(Serv4);
Servo5.attach(Serv5);
Servo6.attach(Serv6);
Servo7.attach(Serv7);
Servo8.attach(Serv8);
Servo9.attach(Serv9);
// Komunikasi
Serial.begin(9600);
void loop()
62
//Print_data();
63
if(Biner == 0b00110000){temp1 = 3; temp2 = -3; Status = 1;}else
if(digitalRead(IR) == 0)
data = 1;
else
data = 0;
if(Serial.available() > 0)
data_Serial = Serial.read();
if(data_Serial != 'Z')
64
Motor_Kanan (0,0);
Motor_Kiri (0,0);
Konveor(150,0);
servo();
else
PID();
Konveor(0,0);
servo();
int inc;
ISR(TIMER1_OVF_vect)
TCNT1 = 34286;
inc++;
65
if(inc >= 50)
Serial.print(data);
inc = 0;
void PID()
if (erorI1<=-255.00){erorI1=-255.00;}
I_1 = erorI1;
erord1 = eror1;
66
PWM_1 = K_1 + I_1 + D_1 + (Kecepatan/2);
if (erorI2<=-255.00){erorI2=-255.00;}
I_2 = erorI2;
erord2 = eror2;
67
PWM_2 = K_2 + I_2 + D_2 + (Kecepatan/2);
void Stop()
Motor_Kiri (0,1);
Motor_Kanan (0,1);
digitalWrite(En_Konv, b);
68
}
digitalWrite(En_Kanan, b);
digitalWrite(En_Kiri, b);
void servo()
69
if(data_Serial == '2') {Servo2.write(100);delay(4000); data_Serial =
'Z';}else
else {Servo0.write(10);
Servo1.write(10);
Servo2.write(10);
Servo3.write(10);
70
Servo4.write(10);
Servo5.write(10);
Servo6.write(10);
Servo7.write(10);
Servo8.write(10);
Servo9.write(10);}
void Print_data()
Serial.print(P1);
Serial.print(" ");
Serial.print(P2);
Serial.print(" ");
Serial.print(P3);
Serial.print(" ");
Serial.print(P4);
Serial.print(" ");
71
Serial.print(P5);
Serial.print(" ");
Serial.print(P6);
Serial.print(" ");
Serial.print(analogRead(S1));
Serial.print(" ");
Serial.print(analogRead(S2));
Serial.print(" ");
Serial.print(analogRead(S3));
Serial.print(" ");
Serial.print(analogRead(S4));
Serial.print(" ");
Serial.print(analogRead(S5));
Serial.print(" ");
Serial.print(analogRead(S6));
Serial.print(" ");
72
Serial.print(PWM_1);
Serial.print(PWM_2);
Serial.print(digitalRead(IR));
Serial.print(" \n");
import cv2
import numpy as np
import os
import serial
import DetectChars
import DetectPlates
import PossiblePlate
73
# module level variables
##########################################################
################
showSteps = False
##########################################################
#########################################
def main():
cam = cv2.VideoCapture(0)
count = 0
x=0
arduino = serial.Serial('COM5',9600)
data_L = ""
data_N = ""
74
while True:
cv2.imshow("test", frame)
if not ret:
break
data_L = data_N
data_N = arduino.read()
k = cv2.waitKey(1)
if k%256 == 27:
# ESC
cam.release()
cv2.destroyAllWindows()
break
if data_N == b'1':
if data_L != b'1':
if x == 0:
img_name = "capture.png".format(count)
75
cv2.imwrite(img_name, frame)
count += 1
x=1
if x == 1:
x=0
blnKNNTrainingSuccessful =
DetectChars.loadKNNDataAndTrainKNN() # attempt KNN
training
if blnKNNTrainingSuccessful == False: # if
KNN training was not successful
# end if
imgOriginalScene = cv2.imread("capture.png") #
open image
76
print("\nerror: image not read from file \n\n") # print error
message to std out
# end if
listOfPossiblePlates =
DetectPlates.detectPlatesInScene(imgOriginalScene) # detect
plates
listOfPossiblePlates =
DetectChars.detectCharsInPlates(listOfPossiblePlates) # detect
chars in plates
cv2.imshow("imgOriginalScene", imgOriginalScene) #
show scene image
if len(listOfPossiblePlates) == 0: # if no plates
were found
else: # else
77
# sort the list of possible plates in DESCENDING order (most
number of chars to least number of chars)
# suppose the plate with the most recognized chars (the first
plate in sorted by string length descending order) is the actual plate
licPlate = listOfPossiblePlates[0]
#cv2.imshow("imgThresh", licPlate.imgThresh)
# end if
drawRedRectangleAroundPlate(imgOriginalScene, licPlate)
if licPlate.strChars == "AYA":
licPlate.strChars = "AYAM"
78
if licPlate.strChars == "USANG":
licPlate.strChars = "MUSANG"
if licPlate.strChars == "HARMAL":
licPlate.strChars = "HARIMAU"
licPlate.strChars = "HARIMAU"
licPlate.strChars = "HARIMAU"
licPlate.strChars = "HARIMAU"
licPlate.strChars = "HARIMAU"
if licPlate.strChars == "JERAPAL":
licPlate.strChars = "JERAPAH"
licPlate.strChars = "JERAPAH"
79
licPlate.strChars = "JERAPAH"
licPlate.strChars = "JERAPAH"
licPlate.strChars = "JERAPAH"
if licPlate.strChars == "COMODO":
licPlate.strChars = "KOMODO"
licPlate.strChars = "KOMODO"
licPlate.strChars = "KOMODO"
licPlate.strChars = "KOMODO"
licPlate.strChars = "KOMODO"
licPlate.strChars = "KOMODO"
80
if licPlate.strChars == "SNGA":
licPlate.strChars = "SINGA"
if licPlate.strChars == "KELNC":
licPlate.strChars = "KELINCI"
if licPlate.strChars == "SAP":
licPlate.strChars = "SAPI"
if licPlate.strChars == "SAPI":
arduino.write('0'.encode())
if licPlate.strChars == "KELINCI":
arduino.write('1'.encode())
if licPlate.strChars == "SINGA":
arduino.write('2'.encode())
if licPlate.strChars == "KOMODO":
arduino.write('3'.encode())
if licPlate.strChars == "JERAPAH":
arduino.write('4'.encode())
81
if licPlate.strChars == "HARIMAU":
arduino.write('5'.encode())
if licPlate.strChars == "MUSANG":
arduino.write('6'.encode())
if licPlate.strChars == "AYAM":
arduino.write('7'.encode())
if licPlate.strChars == "PANDA":
arduino.write('8'.encode())
if licPlate.strChars == "KERA":
arduino.write('9'.encode())
#print("----------------------------------------")
writeLicensePlateCharsOnImage(imgOriginalScene,
licPlate) # write license plate text on the image
#cv2.imshow("imgOriginalScene", imgOriginalScene)
# re-show scene image
cv2.imwrite("imgOriginalScene.png", imgOriginalScene)
# write image out to file
82
if count == 1:
count = 0
# end if else
return
# end main
##########################################################
#########################################
p2fRectPoints = cv2.boxPoints(licPlate.rrLocationOfPlateInScene)
# get 4 vertices of rotated rect
cv2.line(imgOriginalScene, tuple(p2fRectPoints[0]),
tuple(p2fRectPoints[1]), SCALAR_RED, 2) # draw 4 red lines
cv2.line(imgOriginalScene, tuple(p2fRectPoints[1]),
tuple(p2fRectPoints[2]), SCALAR_RED, 2)
cv2.line(imgOriginalScene, tuple(p2fRectPoints[2]),
tuple(p2fRectPoints[3]), SCALAR_RED, 2)
cv2.line(imgOriginalScene, tuple(p2fRectPoints[3]),
tuple(p2fRectPoints[0]), SCALAR_RED, 2)
# end function
83
##########################################################
#########################################
ptCenterOfTextAreaY = 0
ptLowerLeftTextOriginY = 0
intFontFace = cv2.FONT_HERSHEY_SIMPLEX #
choose a plain jane font
84
# unpack roatated rect into center point, width and height, and
angle
intPlateCenterY = int(intPlateCenterY)
ptCenterOfTextAreaY = int(round(intPlateCenterY)) +
int(round(plateHeight * 1.6)) # write the chars in below the plate
else: # else if
the license plate is in the lower 1/4 of the image
ptCenterOfTextAreaY = int(round(intPlateCenterY)) -
int(round(plateHeight * 1.6)) # write the chars in above the plate
# end if
85
ptLowerLeftTextOriginX = int(ptCenterOfTextAreaX -
(textSizeWidth / 2)) # calculate the lower left origin of the text
area
ptLowerLeftTextOriginY = int(ptCenterOfTextAreaY +
(textSizeHeight / 2)) # based on the text area center, width, and
height
cv2.putText(imgOriginalScene, licPlate.strChars,
(ptLowerLeftTextOriginX, ptLowerLeftTextOriginY), intFontFace,
fltFontScale, SCALAR_YELLOW, intFontThickness)
# end function
##########################################################
#########################################
if __name__ == "__main__":
main()
86