APLIKASI COMPUTER VISIONrepository.usd.ac.id/35021/2/155114066_full.pdf · 2019. 7. 25. ·...
Transcript of APLIKASI COMPUTER VISIONrepository.usd.ac.id/35021/2/155114066_full.pdf · 2019. 7. 25. ·...
TUGAS AKHIR
APLIKASI COMPUTER VISION
PADA LENGAN ROBOT PEMINDAH BENDA
BERDASARKAN BENTUK DAN POSISI
Diajukan untuk memenuhi salah syarat
memperoleh gelar Sarjana Teknik pada
Program Studi Teknik Elektro
Fakultas Sains dan Teknologi Universitas Sanata Dharma
Disusun oleh :
ALBERTUS ADIT TRIANGGORO
NIM : 155114066
PROGRAM STUDI TEKNIK ELEKTRO
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2019
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
ii
FINAL PROJECT
COMPUTER VISION APPLICATION
ON ROBOT ARM TO MOVE OBJECT
BASED ON SHAPE AND POSITION
In partial fulfilment of the requirements
for the degree of Sarjana Teknik
in Electrical Enginering Study Program
Faculty of Science and Technology Sanata Dharma University
Constructed By :
ALBERTUS ADIT TRIANGGORO
NIM : 155114066
ELECTRICAL ENGINEERING STUDY PROGRAM
FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2019
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
iii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
iv
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
v
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
vi
HALAMAN PERSEMBAHAN DAN MOTTO HIDUP
MOTTO :
“ KESUKSESAN ADALAH PERJUANGAN
DARI KEGAGALAN DEMI KEGAGALAN
TANPA KEHILANGAN SEMANGAT DAN OPTIMISME”
Skipsi ini kupersembahkan untuk :
Tuhan Yesus Kristus juru selamatku
Bunda Maria, Santo Yosef dan malaikat pelindungku
ssAyah dan Ibu tercinta, untuk doa, serta
dukuangannya secara moral maupun materi
Kakak ku dan sahabat-sahabatku
Almamaterku Teknik Elektro Universtas Sanata Dharma
Yogyakarta
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
vii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
viii
INTISARI
Perkembangan teknologi memiliki peran yang sangat penting dalam menunjang
aktivitas manusia untuk mempermudah dalam melakukan pekerjaan sehingga mendapatkan
hasil yang maksimal. Salah satunya adalah teknologi computer vision dengan memanfaatkan
image processing sehingga dapat memberikan kecerdasan buatan pada lengan robot untuk
memindahkan objek berdasarkan bentuk dan posisi. Lengan robot memiliki peran penting
untuk mengurangi kecelakaan kerja bagi manusia yang bekerja pada bidang pekerjaan yang
berhubungan dengan bahan-bahan kimia berbahaya dan pengangkatan benda-benda berat,
meminimalisasi human error, serta untuk meng-otomasi bidang pekerjaan yang masih
dilakukan secara manual agar proses produksi menjadi lebih efisien.
Berdasarkan hal tersebut, dibutuhkan adanya lengan robot yang dapat memindahkan
objek berdasarkan pengenalan bentuk dan posisi objek. Urutan pengenalan bentuk dan posisi
objek yaitu akusisi objek oleh webcam, image preprocessing, labeling dan segmentasi,
menghitung nilai area, perimeter, thinness ratio dan centroid objek. Pengenalan bentuk
didasarkan pada range nilai thinness ratio masing-masing objek sedangkan pengenalan
posisi didasarkan pada nilai centroid objek. Lengan robot digerakan oleh motor servo yang
dikendalikan oleh Atmega32 menggunakan komunikasi serial USART antara komputer
dengan mikrokontroler yang diprogram menggunakan matlab dan codevision AVR.
Hasil dari penelitian ini adalah sistem yang dapat membedakan 3 macam bentuk objek
yaitu kubus, tabung dan prisma segitiga yang dapat diletakan pada 12 posisi tertentu, serta
lengan robot yang dapat mengambil dan memindahkan objek berdasarkan bentuk dan posisi.
Setelah melakukan percobaan sebanyak 180 kali pengenalan bentuk objek dan 75 kali
pengambilan dan pemindahan objek, sistem lengan robot dapat bekerja 100% apabila sesuai
dengan batasan masalah
Kata kunci : Computer vision, lengan robot, USART.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
ix
ABSTRACT
The development of technology has a very important role to supporting human
activites to make it easier to do work, so get the maximum result. One of them is the
technology of computer vision to utilize image processing so that it can provide artificial
intelligence on the robot arm to move object based on shape and position. The robot arm has
a important role to reduce work accidents for human who work on the field of work in touch
with these chemicals dangerous and the object heavy, minimization human error, as well as
to make automatically the job is still conducted in manual so that the process of production
become more efficient.
Based on this, it takes the robot arm that can move object based on shape and position
of the object. Object shape and position identification step is acquisition of the object by
webcam, image preprocessing, labeling and segmentation, calculate the value of the area,
perimeter, thinness ratio and centroid of the object. Shape identification based on the range
value thinness ratio of each object while the identification of a position based on the value
of the centroid object. The robot arm movement by a motor servo which is controlled by the
Atmega32 using serial communication USART between computer and microcontroller
programed with matlab and codevision AVR.
The result of the research is the system that can discrimination three kinds of the object
that the cube, tubes, and prism triangle that can be put on twelve a position in certain areas,
as well the robot arm can take and move objects based on the shape and position. After
experimenting as much as one hundres and eighty time to identification shape and positions
of the objects and seventy five time to pick up dan separate of the object, the system and
robot arm can work 100% if in accordance with limits of the problem.
Keywords : Computer vision, robot arm, USART.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
x
KATA PENGANTAR
Puji dan Syukur penulis panjatkan kepada Tuhan Yang Maha Esa atas segala
berkatdan rahmat-Nya, sehingga penulis dapat menyelesaikan tugas akhir ini dengan baik.
Penulis menyadari bahwa banyak pihak yang telah memberikan doa, dukungan, motivasi
serta bantuan kepada penulis sehingga dapat menyelesaikan tugas akhir ini. Oleh karena itu,
penulis mengucapkan terima kasih kepada :
1) Sudi Mungkasi, S.Si, M.Math.,Sc.,Ph.D. selaku Dekan Fakultas Sains dan
Teknologi Universitas Sanata Dharma Yogyakarta.
2) Petrus Setyo Prabowo, S.T.,M.T., selaku Ketua Program Studi Teknik Elektro
Universitas Sanata Dharma Yogyakarta.
3) Martanto, S.T.,M.T., selaku dosen pembimbing akademik yang telah mendampingi
dan membimbing penulis selama perkuliahan.
4) Dr. Linggo Sumarno selaku dosen pembimbing yang dengan penuh perhatian,
kesabaran dan dengan ketulusan hati memberi bimbingan, kritik, saran serta
motivasi dalam penulisan tugas akhir ini.
5) Bapak Petrus Setyo Prabowo, S.T.,M.T., dan Bapak Djoko Sumarno, S.Si.,M.T.,
selaku dosen penguji yang telah bersedia memberi kritik, saran dan bimbingan
dalam memperbaiki tugas akhir ini.
6) Bapak/Ibu dosen yang telah mengajarkan banyak hal selama penulis menempuh
pendidikan di Program Studi Teknik Elektro, Fakultas Sains dan Teknologi,
Universitas Sanata Dharma Yogyakarta.
7) Kedua orang tua tercinta, Bapak Falentinus Prayitno dan Ibu Christina Kemiyem
atas doa, kasih sayang, dukungan serta motivasi.
8) Kakak tercinta Brigita Yuandini dan kakak ipar Bernadus Sambang Nusantoro serta
keponakan Alfonsus Davis Ezekiel yang selalu mendukung dan memberikan
semangat serta motivasi sehingga dapat menyelesaikan study dengan baik.
9) Stefani Nita Lystia sebagai teman, sahabat dan kekasih yang selalu menyemangati
dan mendukung penulis sampai terselesaikannya tugas akhir ini.
10) Staff Sekretariat Teknik Elektro yang telah membantu dalam hal administrasi.
11) Staff dan petugas laboratorium Teknik Elektro yang telah membantu banyak hal
untuk kelancaran tugas-tugas perkuliahan dan asisten dosen.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xii
DAFTAR ISI
Halaman Judul (Bahasa Indonesia) .............................................................................. i
Halaman Judul (Bahasa Inggris)..................................................................................... ii
Halaman Persetujuan .................................................................................................... iii
Halaman Pengesahan ..................................................................................................... iv
Pernyataan Keaslian Karya ........................................................................................... v
Halaman Persembahan .................................................................................................. vi
Lembar Persetujuan Publikasi Karya ............................................................................ vii
INTISARI ...................................................................................................................... viii
ABSTRACT .................................................................................................................. ix
KATA PENGANTAR .................................................................................................. x
DAFTAR ISI ................................................................................................................ xii
DAFTAR GAMBAR ..................................................................................................... xvi
DAFTAR TABEL ........................................................................................................ xxii
BAB I : PENDAHULUAN
1.1. Latar Belakang ............................................................................................ 1
1.2. Tujuan dan Manfaat .................................................................................... 2
1.3. Batasan Masalah ......................................................................................... 2
1.4. Metodologi Penelitian ................................................................................. 3
BAB II : DASAR TEORI
2.1. Computer Vision ......................................................................................... 5
2.1.1. Pemrosesan Citra (Image Processing) ........................................... 5
2.1.1.1. Definisi Citra ................................................................... 5
2.1.1.2. Citra Grayscale ................................................................ 6
2.1.1.3. Citra Biner ....................................................................... 7
2.1.1.4. Konversi Citra Grayscale ke Citra Biner .......................... 8
2.1.1.5. Noise Filtering ................................................................. 9
2.1.1.6. Labeling Objek ................................................................ 11
2.1.1.7. Segmentasi Citra .............................................................. 12
2.1.2. Pengenalan Bentuk dan Penentuan Posisi ...................................... 13
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xiii
2.1.2.1. Pengenalan Bentuk .......................................................... 13
2.1.2.1.1. Area ................................................................. 13
2.1.2.1.2. Perimeter ......................................................... 14
2.1.2.1.3. Thinness Ratio ................................................. 15
2.1.2.2. Penentuan Posisi ............................................................... 16
2.1.2.2.1. Centroid ........................................................... 16
2.1.3. Webcam .......................................................................................... 18
2.2. Lengan Robot .............................................................................................. 18
2.2.1. Motor Servo .................................................................................... 21
2.2.2. Torsi/Momen Gaya ........................................................................ 22
2.2.3. Invers Kinematics Robot Arm 2 DOF (Degree Of Freedom) ........ 24
2.2.4. Pulse Width Modulation (PWM) ..................................................... 27
2.2.5. Mikrokontroler AVR Atmega32 .................................................... 27
2.2.5.1. Arsitektur Atmega32 ...................................................... 28
2.2.5.2. Deskripsi Mikrokontroler AVR Atmega32 .................... 28
2.2.5.3. Timer/Counter0 ............................................................... 30
2.2.5.4. Komunikasi Serial USART ............................................ 32
2.2.6. Minimum Sistem Atmega32 .......................................................... 37
2.2.7. Power Supply ................................................................................. 37
BAB III : PERANCANGAN PENELITIAN
3.1. Proses Kerja dan Mekanisme Lengan Robot .............................................. 39
3.2. Perancangan Lengan Robot .......................................................................... 40
3.2.1. Robot Arm Assembly ........................................................................ 44
3.2.2. Desain Keseluruhan Sistem ............................................................. 45
3.2.3. Sudut Pergerakan Tiap Motor Servo ................................................ 46
3.3. Perancangan Perangkat Keras (Hardware) ................................................. 47
3.3.1. Wiring Motor Servo Pada Minimum Sistem Atmega32 .................. 48
3.3.2. Perhitungan Torsi Motor Servo ........................................................ 49
3.3.3. Motor Servo ..................................................................................... 53
3.3.4. Webcam dan Area Peletakan Benda ................................................. 55
3.4. Perancangan Perangkat Lunak (Software) .................................................. 57
3.4.1. Flowchart Utama ............................................................................. 57
3.4.2. Akuisisi Citra ................................................................................... 59
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xiv
3.4.3. Image Preprocessing ........................................................................ 59
3.4.4. Labeling dan Segmentasi ................................................................. 61
3.4.5. Proses Pengenalan Bentuk Objek pada Matlab ................................ 62
3.4.6. Proses Penentuan Posisi Objek pada Matlab ................................... 63
3.4.7. Pengirimana Data Dari Matlab ke Mikrokontroler .......................... 64
3.4.8. Proses Pergerakan Servo Lengan Robot .......................................... 66
3.4.9. Perancangan GUI pada Matlab ........................................................ 74
BAB IV : HASIL DAN PEMBAHASAN
4.1. Perangkat Keras (Hardware) Lengan Robot ............................................... 75
4.1.1. Bentuk Fisik dan Sistem Kerja Lengan Robot .................................. 75
4.1.2. Wiring Motor Servo pada Minimum Sistem Atmega32
Beserta LCD 16x2 ............................................................................. 77
4.1.3. Webcam dan Area Peletakan Objek ................................................. 78
4.1.4. Objek Tiga Dimensi dan Kotak Peletakan Objek ............................ 80
4.2. Hasil Data Pengujian dan Pembahasan ....................................................... 81
4.2.1. Pengujian Pengenalan Bentuk dan Posisi Objek .............................. 81
4.2.1.1. Pengujian Nilai Area, Perimeter
dan Thinness Ratio Objek .................................................. 81
4.2.1.2. Nilai Centroid Posisi Peletakan Objek ............................... 84
4.2.2. Sudut Motor Servo .......................................................................... 86
4.2.3. Pergerakan Lengan Robot ............................................................... 90
4.2.4. Pengujian Keberhasilan Sistem Mengenali Bentuk
dan Posisi Objek ............................................................................. 96
4.2.5. Pengujian Keberhasilan Lengan Robot Saat Mengambil
dan Memindahkan Objek ................................................................ 97
4.3. Analisa dan Pembahasan Perangkat Lunak (Sofrtware) ............................. 102
4.3.1. Software Matlab .............................................................................. 102
4.3.1.1. Inisialisasi Komunikasi USART ....................................... 102
4.3.1.2. Inisialisasi Webcam ......................................................... 103
4.3.2.3. Proses Akuisisi Citra ...................................................... 103
4.3.2.4. Proses Image Preprocessing ............................................ 104
4.3.2.5. Proses Labeling dan Segmentasi ...................................... 108
4.3.2.6. Proses Pengenalan Bentuk Objek .................................... 109
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xv
4.3.2.7. Proses Penentuan Posisi Objek ........................................ 111
4.3.2.8. Proses Pengiriman Data dari Matlab ke Mikrokontroler . 113
4.3.2.9. Tampilan GUI Matlab ...................................................... 119
4.3.2. Software Codevision AVR ............................................................. 120
4.3.2.1. Inisialisasi Komunikasi USART ...................................... 120
4.3.2.2. Inisialisasi Timer0 .......................................................... 121
4.3.2.3. Program Menerima Data Serial dari Matlab .................... 121
4.3.2.4. Pengendali Motor Servo .................................................. 123
4.3.2.5. Subrutin Program Utama ................................................. 134
BAB V : KESIMPULAN DAN SARAN
5.1. Kesimpulan .................................................................................................. 135
5.2. Saran ............................................................................................................. 135
DAFTAR PUSTAKA ................................................................................................... 136
LAMPIRAN ................................................................................................................. L-1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xvi
DAFTAR GAMBAR
Gambar 2.1. Sistem Koordinat Citra Berukuran M x N ( M Baris dan N Kolom) .... 6
Gambar 2.2. Citra Grayscale Beserta Representasi Nilai Keabuannya ..................... 7
Gambar 2.3. Citra Biner dan Representasi Nilai Binernya .......................................... 7
Gambar 2.4. Ilustrasi Perubahan Nilai Pixel pada Proses Thresholding .................... 8
Gambar 2.5. Citra Hasil Thresholding dengan Beberapa Variasi Nilai Threshold .... 9
Gambar 2.6. Median Filtering (a) Input (b) Output ................................................... 10
Gambar 2.7. Noise Filtering pada Citra (a) Input (b) Output .................................... 11
Gambar 2.8. Labeling Objek (a) Citra Input (b) Citra Hasil Labeling Objek ............ 11
Gambar 2.9. Proses Segmentasi (a) Citra Hasil Labeling (b) Segmentasi Objek
Pertama (c) Segmentasi Objek Kedua .................................................. 12
Gambar 2.10. Area Objek Persegi ................................................................................ 14
Gambar 2.11. Perimeter Objek Persegi ........................................................................ 15
Gambar 2.12. Titik Pusat (Centroid) (a) Citra Objek Persegi
(b) Centroid Objek Persegi ................................................................... 17
Gambar 2.13. Webcam Logitech C170 ......................................................................... 18
Gambar 2.14. Manipulator pada Lengan Robot ........................................................... 19
Gambar 2.15. Gripper Lengan Robot ........................................................................... 20
Gambar 2.16. Model Fisik Motor Servo Hitec HS-300 ............................................... 21
Gambar 2.17. Sistem Pengkabelan Motor Servo .......................................................... 21
Gambar 2.18. Cara Pengontrolan Motor Servo ............................................................ 22
Gambar 2.19. Vektor Gaya pada Lengan ..................................................................... 23
Gambar 2.20. Gerak Rotasi pada Benda ....................................................................... 24
Gambar 2.21. Lengan Robot 2 Sendi (2 DOF) ............................................................. 25
Gambar 2.22. Analisis Pergerakan Lengan Robot ....................................................... 26
Gambar 2.23. Sinyal PWM ........................................................................................... 27
Gambar 2.24. Konfigurasi Pin Mikrokontroler AVR ATmega32 ................................ 29
Gambar 2.25. Mode Phase Correct PWM ................................................................... 31
Gambar 2.26. Mode Fast PWM .................................................................................... 32
Gambar 2.27. Register UDR ......................................................................................... 33
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xvii
Gambar 2.28. Register UCSRA .................................................................................... 33
Gambar 2.29. Register UCSRB .................................................................................... 35
Gambar 2.30. Register UCSRC .................................................................................... 36
Gambar 2.31. Minimum Sistem Atmega32 .................................................................. 37
Gambar 2.32. Contoh Tampilan Fisik Regulated Switching Power Supply ................. 38
Gambar 3.1. Blok Diagram Sistem ............................................................................. 40
Gambar 3.2. Part Gripper .......................................................................................... 41
Gambar 3.3. Part Base Lengan Robot ........................................................................ 42
Gambar 3.4. Part Penghubung Base Terhadap Lengan Bawah ................................. 42
Gambar 3.5. Part Lengan Bawah ............................................................................... 43
Gambar 3.6. Part Lengan Atas .................................................................................... 43
Gambar 3.7. Gripper .................................................................................................. 44
Gambar 3.8. Lengan Robot ......................................................................................... 44
Gambar 3.9. Visualisasi Sistem .................................................................................. 45
Gambar 3.10. Visualisasi Sistem (Tampak Atas) ......................................................... 45
Gambar 3.11. Wiring Motor Servo pada Minimum Sistem Atmega32 ........................ 48
Gambar 3.12. Analisis Torsi Motor Servo 2 ................................................................ 49
Gambar 3.13. Analisis Torsi Motor Servo 3 ................................................................ 50
Gambar 3.14. Analisis Torsi Motor Servo 4 ................................................................ 51
Gambar 3.15. Analisis Torsi Motor Servo 1 ................................................................ 52
Gambar 3.16. Motor Servo Towerpro SG90 ................................................................ 54
Gambar 3.17. Motor Servo JX PDI-6225-300 ............................................................. 54
Gambar 3.18. Visualisasi Nomor Posisi Area Peletakan Benda .................................. 56
Gambar 3.19. Area Peletakan Objek ............................................................................ 56
Gambar 3.20. Flowchart Secara Keseluruhan .............................................................. 58
Gambar 3.21. Flowchart Akuisisi Citra ....................................................................... 59
Gambar 3.22. Flowchart Image Processing ................................................................ 60
Gambar 3.23. Flowchart Labeling dan Segmentasi ..................................................... 61
Gambar 3.24. Flowchart Proses Pengenalan Bentuk Objek pada Matlab...................... 62
Gambar 3.25. Flowchart Proses Penentuan Posisi Objek pada Matlab ......................... 63
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xviii
Gambar 3.26. (Lanjutan) Flowchart Proses Penentuan Posisi Objek pada Matlab ...... 64
Gambar 3.27. (Lanjutan) Flowchart Proses Penentuan Posisi Objek pada Matlab ....... 64
Gambar 3.28. Flowchart Pengiriman Data dari Matlab ke Mikrokontroler ................... 65
Gambar 3.29. Flowchart Pergerakan Servo Lengan Robot............................................ 67
Gambar 3.30. (Lanjutan) Flowchart Pergerakan Servo Lengan Robot ......................... 68
Gambar 3.31. (Lanjutan) Flowchart Pergerakan Servo Lengan Robot ......................... 69
Gambar 3.32. (Lanjutan) Flowchart Pergerakan Servo Lengan Robot ......................... 70
Gambar 3.33. (Lanjutan) Flowchart Pergerakan Servo Lengan Robot ......................... 71
Gambar 3.34. (Lanjutan) Flowchart Pergerakan Servo Lengan Robot ......................... 72
Gambar 3.35. (Lanjutan) Flowchart Pergerakan Servo Lengan Robot ......................... 73
Gambar 3.36. Perancangan GUI pada Matlab .............................................................. 74
Gambar 4.1. Keseluruhan Sistem Lengan Robot ....................................................... 76
Gambar 4.2. Lengan Robot Tampak Samping ........................................................... 76
Gambar 4.3. Lengan Robot Tampak Atas ................................................................... 77
Gambar 4.4. Area peletakan objek beserta batas nilai pixel ....................................... 79
Gambar 4.5. Objek Tiga Dimensi ............................................................................... 80
Gambar 4.6. Kotak Peletakan Objek .......................................................................... 80
Gambar 4.7. Grafik Nilai Area Objek ........................................................................ 82
Gambar 4.8. Grafik Nilai Perimeter Objek ................................................................ 83
Gambar 4.9. Grafik Nilai Thinness Ratio Objek ........................................................ 84
Gambar 4.10. Nilai Centroid Tiap Posisi Peletakan Objek .......................................... 85
Gambar 4.11. Pengujian OCR dan Sudut pada Servo 1 ................................................ 87
Gambar 4.12. Pengujian OCR dan Sudut pada Servo 2 ............................................... 87
Gambar 4.13. Pengujian OCR dan Sudut pada Servo 3 ............................................... 87
Gambar 4.14. Pengujian OCR dan Sudut pada Servo 4 ............................................... 88
Gambar 4.15. Grafik Perbandingan Sudut Pergerakan Servo 1 ..................................... 93
Gambar 4.16. Grafik Perbandingan Sudut Pergerakan Servo 2 ..................................... 94
Gambar 4.17. Grafik Perbandingan Sudut Pergerakan Servo 3 ..................................... 95
Gambar 4.18. Pengujian Sistem Lengan Robot dengan 1 Objek ................................. 100
Gambar 4.19. Pengujian Sistem Lengan Robot dengan 2 Objek ................................ 100
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xix
Gambar 4.20. Pengujian Sistem Lengan Robot dengan 3 Objek ................................ 100
Gambar 4.21. Pengujian Sistem Lengan Robot dengan 4 Objek ................................ 101
Gambar 4.22. Pengujian Sistem Lengan Robot dengan 5 Objek ................................ 101
Gambar 4.23. Listing program inisialisasi Komunikasi USART ................................. 102
Gambar 4.24. (Lanjutan) Listing Program Inisialisasi Komunikasi USART ............... 102
Gambar 4.25. (Lanjutan) Listing Program Inisialisasi Komunikasi USART ............... 103
Gambar 4.26. Listing Program Inisialisasi Webcam .................................................... 103
Gambar 4.27. Listing Program Akuisisi Citra .............................................................. 103
Gambar 4.28. Hasil Capturing Webcam dengan Nilai Treshold 0,1 ............................ 105
Gambar 4.29. Hasil Capturing Webcam dengan Nilai Treshold 0,2 ............................ 105
Gambar 4.30. Hasil Capturing Webcam dengan Nilai Treshold 0,3 ............................ 106
Gambar 4.31. Hasil Capturing Webcam dengan Nilai Treshold 0,4 ............................ 106
Gambar 4.32. Hasil Capturing Webcam dengan Nilai Treshold 0,5 ............................ 107
Gambar 4.33. Listing Program Image Preprocessing .................................................. 107
Gambar 4.34. Listing Program Labeling dan Segmentasi Citra ................................... 108
Gambar 4.35. Listing Program Perhitungan Nilai Area, Perimeter dan
Thinness Ratio Objek ............................................................................. 109
Gambar 4.36. Listing Program Penentuan Bentuk Objek ............................................ 110
Gambar 4.37. (Lanjutan) Listing Program Penentuan Bentuk Objek ........................... 110
Gambar 4.38. Listing Program Perhitungan Centroid ................................................. 111
Gambar 4.39. Listing Program Penentuan Posisi Objek .............................................. 112
Gambar 4.40. Listing Program Penambahan Arraychar Objek di Posisi 4 ................... 113
Gambar 4.41. Listing Program Mengisi Arraychar Secara Lengkap (5 Data) ............. 114
Gambar 4.42. (Lanjutan) Listing Program Mengisi Arraychar
Secara Lengkap (5 Data) ....................................................................... 114
Gambar 4.43. Listing program sort array ..................................................................... 115
Gambar 4.44. Listing Program Pengkonversian Data Arraychar Menjadi Karakter .... 115
Gambar 4.45. (Lanjutan) Listing Program Pengkonversian Data Arraychar
Menjadi Karakter ................................................................................ 116
Gambar 4.46. (Lanjutan) Listing Program Pengkonversian Data Arraychar
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xx
Menjadi Karakter .............................................................................. 116
Gambar 4.47. (Lanjutan) Listing Program Pengkonversian Data Arraychar
Menjadi Karakter .............................................................................. 117
Gambar 4.48. (Lanjutan) Listing Program Pengkonversian Data Arraychar
Menjadi Karakter .............................................................................. 117
Gambar 4.49. (Lanjutan) Listing Program Pengkonversian Data Arraychar
Menjadi Karakter .............................................................................. 118
Gambar 4.50. (Lanjutan) Listing Program Pengkonversian Data Arraychar
Menjadi Karakter .............................................................................. 118
Gambar 4.51. Tampilan GUI Matlab ............................................................................. 119
Gambar 4.52. Listing Program Inisialisasi Komunikasi USART
pada Codevision AVR .......................................................................... 120
Gambar 4.53. Listing Program Inisialisasi Timer0 ....................................................... 121
Gambar 4.54. Deklarasi Tipe Data Variabel untuk Menerima Data Serial USART .... 122
Gambar 4.55. Listing Program Menerima Data Serial USART dengan Scanf ............ 122
Gambar 4.56. Listing Program Mendefinisikan Servo ................................................. 123
Gambar 4.57. Listing Program Pengendali Sudut Putar Motor Servo .......................... 123
Gambar 4.58. Fungsi Program Gerak Kubus di Posisi satu ......................................... 124
Gambar 4.59. Listing Program Fungsi Counter Pergerakan Lengan Robot
Mengambil Objek ................................................................................. 125
Gambar 4.60. Listing Program Gerak Ambil di Posisi 1 .............................................. 126
Gambar 4.61. (Lanjutan) Listing Program Gerak Ambil di Posisi 1 .......................... 126
Gambar 4.62. Listing Program Gerak Siaga ................................................................. 127
Gambar 4.63. (Lanjutan) Listing Program Gerak Siaga ............................................. 128
Gambar 4.64. (Lanjutan) Listing Program Gerak Siaga ........................................... 128
Gambar 4.65. (Lanjutan) Listing Program Gerak Siaga ........................................... 129
Gambar 4.66. Listing Program Gerak Peletakan Kubus .............................................. 129
Gambar 4.67. (Lanjutan) Listing Program Gerak Peletakan Kubus .......................... 130
Gambar 4.68. (Lanjutan) Listing Program Gerak Peletakan Kubus ............................ 130
Gambar 4.69. (Lanjutan) Listing Program Gerak Peletakan Kubus ............................ 131
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xxi
Gambar 4.70. Listing Program Gerak Standby1 ........................................................... 131
Gambar 4.71. (Lanjutan) Listing Program Gerak Standby1 ....................................... 132
Gambar 4.72. (Lanjutan) Listing Program Gerak Standby1 ..................................... 132
Gambar 4.73. (Lanjutan) Listing Program Gerak Standby1 ..................................... 133
Gambar 4.74. Listing Program Standbylagi .................................................................. 133
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xxii
DAFTAR TABEL
Tabel 2.1. Penentuan Ukuran Karakter ..................................................................... 36
Tabel 3.1. Variabel Sudut Tiap Motor Servo untuk Mengambil
dan Meletakan Benda Kubus ..................................................................... 46
Tabel 3.2. Variabel Sudut Tiap Motor Servo untuk Mengambil
dan Meletakan Benda Tabung ................................................................... 46
Tabel 3.2. (Lanjutan) Variabel Sudut Tiap Motor Servo untuk Mengambil
dan Meletakan Benda Tabung ................................................................... 47
Tabel 3.3. Variabel Sudut Tiap Motor Servo untuk Mengambil
dan Meletakan Benda Prisma Segitiga ...................................................... 47
Tabel 3.4. Perhitungan Nilai OCR ............................................................................. 55
Tabel 3.5. Inisialisasi Karakter Objek Kubus Beserta Posisinya ............................... 65
Tabel 3.6. Inisialisasi Karakter Objek Tabung Beserta Posisinya .............................. 66
Tabel 3.7. Inisialisasi Karakter Objek Prisma Segitiga Beserta Posisinya ................. 66
Tabel 3.8. Keterangan GUI ......................................................................................... 74
Tabel 4.1. Batas Nilai pixel pada Sumbu x dan y untuk Masing-Masing Posisi ........ 79
Tabel 4.2. Data Nilai Area Masing-Masing Bentuk Benda ........................................ 81
Tabel 4.3. Data Nilai Perimeter Masing-Masing Bentuk Benda ............................... 82
Tabel 4.4. Data Nilai Thinness Ratio Masing-Masing Bentuk Benda ........................ 83
Tabel 4.5. Nilai Centroid tiap posisi peletakan objek ................................................ 85
Tabel 4.6. Persentase Error Nilai OCR Motor Servo JX-PDI-6225-300 (Servo 1) ... 89
Tabel 4.7. Persentase Error Nilai OCR Motor Servo Towerpro SG90 ....................... 90
Tabel 4.8. Sudut Tiap Servo untuk Mengambil dan Meletakan Objek Kubus ........... 91
Tabel 4.9. Sudut Tiap Servo untuk Mengambil dan Meletakan Objek Tabung .......... 91
Tabel 4.10. Sudut Tiap Servo untuk Mengambil dan Meletakan Objek Prisma .......... 92
Tabel 4.11. Persentase Error Nilai Sudut Motor Servo Satu ....................................... 92
Tabel 4.12. (Lanjutan) Persentase Error Nilai Sudut Motor Servo Satu ..................... 93
Tabel 4.13. Persentase Error Nilai Sudut Motor Servo Dua ........................................ 93
Tabel 4.14. Persentase Error Nilai Sudut Motor Servo Tiga ....................................... 94
Tabel 4.15. Nilai Centroid Peletakan Objek Sebelum dan Sesudah di Pindahkan ...... 96
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xxiii
Tabel 4.16. Pengujian Keberhasilan Sistem Mengenali Bentuk dan Posisi Objek ...... 97
Tabel 4.17. Pengujian lengan robot saat mengambil dan meletakan objek .................. 98
Tabel 4.18. Pengujian lengan robot saat mengambil dan meletakan objek .................. 99
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
1
BAB I
PENDAHULUAN
1.1. Latar Belakang
Pada era digital ini, teknologi berkembang semakin pesat. Perkembangan teknologi
memiliki peran yang penting dalam menunjang aktivitas manusia untuk mempermudah
melakukan pekerjaan agar lebih efektif dan efisien. Salah satu hasil perkembangan teknologi
yaitu teknologi di bidang computer vision dan lengan robot. Computer vision merupakan
disiplin ilmu pengetahuan yang berfokus pada sistem kecerdasan buatan dan berhubungan
dengan akuisisi serta image processing [1]. Sedangkan lengan robot, atau biasa disebut robot
manipulator merupakan gabungan dari beberapa segmen yang secara umum terbagi menjadi
3 bagian utama yaitu arm, wrist dan gripper [2]. Computer vision banyak diterapkan pada
bidang kesehatan, otomasi industri, militer dan kontrol robotika. Pada bidang robotika
misalnya, computer vision mampu memberikan kecerdasan buatan pada lengan robot untuk
memindahkan benda berdasarkan informasi posisi, warna, ukuran dan bentuk benda. Sistem
kecerdasan buatan pada lengan robot dirancang menggunakan algoritma-algoritma yang
memungkinkan robot bergerak secara otomatis [3].
Lengan robot memiliki peran penting dalam bidang industri, misalnya untuk
mengurangi resiko kecelakaan kerja bagi manusia yang bekerja pada bidang pekerjaan yang
berhubungan dengan bahan-bahan kimia berbahaya dan pengangkatan benda-benda berat,
meminimalisasi human error sehingga meningkatkan produktifitas industri, serta untuk
meng-otomasi bidang pekerjaan yang masih dilakukan secara manual agar proses produksi
menjadi lebih efisien. Dalam penerapannya, lengan robot berfungsi untuk memindahkan
benda, tool, material, produk industri serta berbagai macam peralatan tertentu lewat
pergerakan yang terprogram untuk melakuan berbagai macam tugas [2].
Pada penelitian terdahulu yang dilakukan oleh Hasan [4] mengenai aplikasi
pengenalan objek untuk lengan robot pemisah benda berdasarkan bentuk, peletakan benda
hanya pada satu posisi yang sudah ditentukan sebelumnya dan lengan robot mengambil
benda dari satu posisi kemudian memindahkannya menuju salah satu dari empat posisi
peletakan benda, sesuai dengan bentuk bendanya (point to multipoint). Selain itu, orientasi
peletakan benda juga tidak acak. Dari penelitian tersebut dan berdasarkan manfaat lengan
robot serta computer vision, maka peneliti memiliki gagasan membuat lengan robot yang
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
2
dapat mengambil benda dari dua belas posisi di dalam area kerja dan memindahkannya
menuju salah satu dari tiga posisi peletakkan benda (multipoint to multipoint), serta orientasi
dan posisi peletakan benda yang bisa acak di dalam area kerja lengan robot. Benda diletakan
di area kerja lengan robot yang berada dibawah camera webcam untuk diproses dan dikenali
bentuk dan posisinya. Setelah bentuk dan posisi benda dikenali, maka lengan robot akan
mengambil benda tersebut untuk dipindahkan dan diletakkan pada tempat yang telah
ditentukan.
1.2. Tujuan dan Manfaat
Tujuan penulisan tugas akhir ini yaitu mengaplikasikan computer vision pada lengan
robot agar dapat memindahkan benda yang diletakan pada area kerja lengan robot secara
realtime.
Manfaat dari pembuatan tugas akhir ini adalah :
a. Untuk media pembelajaran mengenai computer vision dan pengenalan objek.
b. Untuk dasar penelitian mengenai aplikasi computer vision pada lengan robot.
Pengembangan dari pembuatan tugas akhir ini yaitu lengan robot industri otomatis
untuk memindahkan benda-benda berat maupun material tertentu yang memiliki bentuk
berbeda, serta orientasi dan posisi letak benda yang acak secara otomatis.
1.3. Batasan Masalah
Pada perancangan alat ini, penulis berfokus pada pembuatan lengan robot beserta
programnya dengan menggunakan code vision AVR dan computer vision sebagai image
processing-nya menggunakan software MATLAB, sedangkan untuk hardware berupa
camera webcam, lengan robot, dan USB to TTL converter menggunakan modul yang sudah
jadi dan tersedia dipasaran. Penulis menetapkan beberapa batasan masalah pada perancangan
ini, yaitu sebagai berikut :
1) Masukan berupa tiga buah benda yaitu kubus, tabung dan prisma segitiga yang
berwarna kuning dan terbuat dari Styrofoam.
2) Ukuran benda yang digunakan yaitu :
a) Tabung (diameter = 3,5 cm, tinggi = 3,5 cm).
b) Prisma Segitiga (Tinggi = 3,5 cm, panjang rusuk segitiga = 3,5 cm).
c) Kubus (panjang rusuk = 3,5 cm).
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
3
3) Jumlah maksimal benda yang dapat diletakan pada area peletakan benda sebanyak 5
buah.
4) Menggunakan camera webcam Logitech C170 untuk mengidentifikasi benda yang
terhubung dengan software MATLAB.
5) Jarak peletakan camera webcam menyesuaikan dengan luas area peletakan benda agar
citra yang di akuisisi webcam hanya area peletakan benda.
6) Camera webcam diletakan diatas area peletakan benda.
7) Area peletakan benda memiliki ukuran panjang 28 cm, lebar 21 cm dan berwarna
hitam.
8) Area peletakan benda terbagi menjadi 12 posisi, tiap-tiap posisi berukuran 7 cm x 7cm.
9) Benda diletakan pada titik tengah area berukuran 7 cm x 7 cm dengan posisi yang
acak.
10) Objek tabung dan prisma segitiga diletakan dengan orientasi yang acak, sedangkan
orientasi objek kubus akan dievaluasi lebih lanjut.
11) Pengambilan benda dilakukan berurutan dari nomor posisi terkecil.
12) Jarak antara area peletakan benda dengan lengan robot sejauh 10 cm.
13) Lengan robot dan gripper terbuat dari bahan akrilik dengan tebal 3 mm.
14) Komunikasi antara laptop dengan ATmega32 menggunakan komunikasi serial
USART yang dihubungkan dengan modul yang sudah tersedia di pasaran yaitu modul
USB to TTL converter.
15) Tempat peletakan benda berada disamping lengan robot. Terdapat tiga buah tempat
untuk meletakan benda yaitu kotak berwarna hijau untuk meletakan benda kubus,
kotak berwarna merah untuk meletakan benda tabung dan kotak berwarna kuning
untuk meletakan benda berbentuk prisma segitiga.
16) Terdapat tampilan GUI pada MATLAB sebagai user interface agar dapat melihat data
benda yang dikenali.
17) Keluaran pada GUI berupa bentuk benda dan posisinya.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
4
1.4. Metodologi Penelitian
Langkah-langkah yang dilakukan peneliti dalam pengerjaan tugas akhir ini yaitu :
1) Pengumpulan bahan-bahan referensi berupa buku, e-book dan jurnal ilmiah yang
membahas computer vision dengan MATLAB, pemrosesan citra, lengan robot,
robotika modern, pemrogaman dengan codevision AVR, ATmega32 serta buku-buku
penunjang lainnya.
2) Perancangan hardware dan software. Tahap ini merupakan perancangan desain lengan
robot beserta skema-skema rangkaian pendukung dan pembuatan flowchart untuk
memprogram ATmega32 dan MATLAB.
3) Pembuatan hardware dan software. Tahapan ini berisi tentang pembuatan alat sesuai
dengan desain lengan robot yang telah dirancang berserta program-program yang
mengacu pada flowchart yang telah dibuat pada perancangan.
4) Proses pengambilan data. Teknik pengambilan data dilakukan dengan mencari data
pada masing-masing benda, melihat tanggapan sistem dalam mendeteksi bentuk dan
posisi benda, sudut motor servo pada lengan robot, dan keakuratan lengan robot saat
memindahhkan benda.
5) Analisa dan penyimpulan hasil percobaan. Analisa dan penyimpulan hasil percobaan
dapat dilakukan dengan melihat persentase error alat saat mendeteksi bentuk benda,
dan tingkat keberhasilan lengan robot saat memindahkan benda berdasarkan bentuk
dan posisinya.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
5
BAB II
DASAR TEORI
Pada bab ini akan dibahas mengenai landasan-landasan teori yang digunakan dalam
pembuatan tugas akhir “Aplikasi Computer Vision Pada Lengan Robot Pemindah Benda
Berdasarkan Bentuk Dan Posisi”.
2.1. Computer Vision
Computer vision merupakan teknologi paling penting dimasa yang akan datang dalam
pengembangan robot interaktif. Computer vision merupakan bidang pengetahuan yang
berfokus pada bidang sistem kecerdasan buatan dan berhubungan dengan akuisisi data dan
pemrosesan citra. Penerapan computer vision pada lengan robot misalnya, digunakan untuk
mengetahui pergerakan lengan robot dalam upaya mengambil atau meletakkan suatu benda
disekitarnya (image-based visual servoing) [1].
Computer vision mengkombinasikan disiplin ilmu pemrosesan citra dan pengenalan
pola. Pemrosesan citra merupakan proses pengolahan citra digital untuk mendapatkan citra
dengan kualitas yang lebih baik, sedangkan pengenalan pola merupakan proses
mengidentifikasi objek pada suatu citra digital. Proses identifikasi citra bertujuan untuk
mendapatkan informasi dari citra digital. Hasil dari proses pengolahan citra dan pengenalan
pola tersebut akan menghasilkan informasi yang digunakan untuk mengendalikan
pergerakan robot [5].
2.1.1. Pemrosesan Citra (Image Processing)
2.1.1.1. Definisi Citra
Secara matematis, sebuah citra dapat didefinisikan sebagai fungsi dua dimensi f (x,y),
dimana x dan y adalah koordinat spasial (plane) dan f adalah nilai intensitas warna pada
koordinat x dan y. Nilai f, x dan y adalah nilai berhingga. Citra digital memiliki nilai-nilai f,
x dan y yang bersifat diskrit, seperti citra yang disimpan di memori komputer. Citra digital
merupakan citra dua dimensi (2D) yang dinyatakan dalam bentuk matriks berukuran N baris
dan M kolom dengan jumlah elemen berhingga. Setiap elemen matriks citra atau biasa
disebut piksel (picture element) memiliki posisi koordinat x dan y serta nilai tertentu.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
6
Koordinat (0,0) merupakan titik origin dari sebuah citra digital [6]. Sistem koordinat citra
dapat dilihat pada gambar 2.1.
Gambar 2.1. Sistem koordinat citra berukuran M x N (M baris dan N kolom) [7]
Citra digital dapat memiliki noise. Noise adalah gambar atau pixel yang tidak
diinginkan dan mengganggu kualitas citra. Noise tersebut bisa terjadi sejak pengambilan
citra menggunakan sensor camera seperti webcam. Level pencahayaan dan suhu sensor
camera menjadi faktor utama yang mempengaruhi tingkat noise yang dihasilkan pada citra
digital. Noise tersebut perlu dihilangkan untuk mendapatkan kualitas citra yang lebih baik
[4].
2.1.1.2. Citra Grayscale
Proses awal yang banyak dilakukan dalam pemrosesan citra digital adalah dengan
mengubah citra berwarna menjadi citra grayscale, hal ini bertujuan untuk menyederhanakan
model citra berwarna yang terdiri dari tiga layer matriks yaitu red-layer, green-layer dan
blue layer menjadi satu layer matrik citra grayscale [4].
Citra grayscale merupakan citra digital yang hanya memiliki suatu nilai kanal pada
setiap piksel nya. Warna yang dimiliki adalah warna hitam, putih dan abu-abu. Citra
grayscale sudah tidak memiliki komponen RGB (Red Green Blue), yang ada adalah derajat
keabuan yang direpresentasikan dengan intensitas 0 sampai 255. Nilai 0 menyatakan hitam
dan nilai 255 menyatakan putih [6]. Citra grayscale beserta representasi nilai keabuannya
ditunjukan pada gambar 2.2.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
7
Gambar 2.2. Citra grayscale beserta representasi nilai keabuannya [7]
2.1.1.3. Citra Biner
Citra biner adalah citra yang setiap pikselnya hanya dinyatakan dengan sebuah nilai
dari dua kemungkinan (yaitu 0 dan 1). Nilai 0 menyatakan warna hitam dan nilai 1
menyatakan warna putih. Citra sbiner banyak digunakan dalam image processing, misalnya
untuk memperoleh tepi bentuk, luas area dan ukuran suatu objek pada citra digital [6].
Contoh citra biner ditunjukan pada gambar 2.3.
Gambar 2.3. Citra biner dan representasi nilai binernya [7]
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
8
2.1.1.4. Konversi Citra Grayscale Ke Citra Biner
Proses pengkonversian citra grayscale menjadi citra biner merupakan tahap awal
dalam image processing. Dalam proses pengkonversian ini, dibutuhkan suatu nilai batas
yang disebut dengan threshold. Tresholding ini digunakan untuk mengatur jumlah derajat
keabuan pada citra. Nilai intensitas citra yang lebih dari atau sama dengan nilai threshold
akan diubah menjadi 1 (berwarna putih) sedangkan nilai intensitas citra yang kurang dari
nilai threshold akan diubah menjadi 0 (berwana hitam). Sehingga citra keluaran dari hasil
thresholding adalah berupa citra biner [8]. Persamaan yang digunakan untuk mengkonversi
nilai piksel citra grayscale menjadi biner pada metode thresholding ditunjukan pada
persamaan 2.1 sebagai berikut :
𝑔(𝑥, 𝑦) = {1, 𝑗𝑖𝑘𝑎 𝑓(𝑥, 𝑦) ≥ 𝑇
0, 𝑗𝑖𝑘𝑎 𝑓(𝑥, 𝑦) < 𝑇 (2.1)
Keterangan :
f (x,y) : citra grayscale
g (x,y) : citra biner
T : nilai threshold
Contoh perubahan nilai piksel pada proses thresholding ditunjukkan oleh gambar 2.4
sedangkan citra hasil thresholding dengan beberapa variasi nilai threshold ditunjukan oleh
gambar 2.5.
Gambar 2.4. Ilustrasi perubahan nilai piksel pada proses thresholding [8]
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
9
Gambar 2.5. Citra hasil thresholding dengan beberapa variasi nilai threshold [8]
Gambar 2.5 menunjukan bahwa semakin kecil nilai threshold maka citra biner akan di
dominasi oleh warna putih, sedangkan semakin besar nilai threshold maka citra biner akan
di dominasi oleh warna hitam [8].
2.1.1.5 Noise Filtering
Suatu citra digital dapat memiliki noise. Noise merupakan gambar atau pixel yang
mengurangi kualitas citra. Noise pada citra digital dapat berupa titik-titik putih di area citra
yang berwarna hitam ataupun titik-titik hitam pada area yang berwarna putih. Ada beberapa
penyebab noise, yaitu gangguan fisis pada pada alat akuisisi serta intensitas pencahayaan.
Noise tersebut dapat mempengaruhi informasi yang terdapat pada citra. Untuk meningkatkan
kualitas citra dan mengurangi noise supaya informasi yang ada pada citra dapat diolah dan
dianalisa dengan baik dapat dilakukan dengan median filtering [9].
Median filtering merupakan suatu metode yang terfokus pada nilai median atau nilai
tengah dari jumlah total pixel yang ada disekelilingnya. Pada umumnya, median filtering
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
10
akan mengganti pixel-pixel yang berderau/noise dengan suatu nilai yang dekat dengan pixel-
pixel disekitarnya [10]. Nilai pixel pada pusat bidang window dapat dihitung dengan mencari
nilai median dari nilai intensitas sekelompok pixel yang telah diurutkan jika window tersebut
ditempatkan pada suatu bidang citra [9]. Secara matematis, rumus median filtering
ditunjukan pada persamaan 2.2 sebagai berikut :
𝑔(𝑥, 𝑦) = 𝑀𝑒𝑑𝑖𝑎𝑛{𝑓(𝑥 − 𝑖, 𝑦 − 𝑗), (𝑖, 𝑗) ∈ 𝑊} (2.2)
g (x,y) merupakan citra yang dihasilkan dari citra f (x,y), sedangkan W merupakan window
yang ditempatkan pada bidang citra dan (i,j) elemen dari window. Median filtering dan
contoh noise filtering ditunjukan oleh gambar 2.6 dan gambar 2.7.
(a) (b)
Gambar 2.6. Median Filtering (a) input (b) output
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
11
(a) (b)
Gambar 2.7. Noise filtering pada citra (a) input (b) output
2.1.1.6. Labeling objek
Citra biner dapat merepresentasikan sejumlah objek. Jumlah objek dalam citra biner
dihitung dengan cara memberi label pada objek. Pelabelan terhadap objek merupakan suatu
tindakan untuk memberi label berbeda (memberi nomor) pada setiap objek yang terdapat
dalam citra biner. Pada proses pelabelan, piksel berlabel nol adalah latar belakang, piksel
berlabel satu merupakan label pada objek pertama, piksel berlabel dua merupakan label pada
objek ke dua, dan seterusnya. Pelabelan pada citra biner digunakan untuk menghitung
jumlah objek dalam suatu citra [6]. Contoh labeling objek pada citra biner ditunjukan pada
gambar 2.8.
(a) (b)
Gambar 2.8. Labeling objek (a) citra input (b) citra hasil labeling objek
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
12
2.1.1.7. Segmentasi Citra
Segmentasi citra merupakan salah satu tahapan penting dalam proses pengenalan
bentuk dan posisi objek dalam citra. Proses segmentasi citra bertujuan untuk memisahkan
antara objek dengan backgroundnya. Segmentasi citra dilakukan untuk mempermudah
dalam proses pengidentifikasian suatu objek dalam citra digital. Pada umumnya keluaran
hasil segmentasi citra berupa citra biner di mana objek (foreground) yang dikehendaki
berwarna putih (1), sedangkan background yang ingin dihilangkan berwarna hitam (0) [11].
Proses segmentasi ditunjukan pada Gambar 2.9.
Gambar 2.9. Proses segmentasi (a) citra hasil labeling (b) segmentasi objek pertama (c)
segmentasi objek kedua
Pada gambar 2.9 dilakukan proses segmentasi objek. Pada segmentasi objek pertama,
jika terdapat nilai pixel yang tidak sama dengan 1, maka nilai pixel diubah menjadi bernilai
0 sedangkan untuk pixel yang bernilai 1 akan tetap bernilai 1 sehingga didapatkan hasil
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
13
segmentasi objek pertama. Pada segmentasi objek kedua, jika terdapat nilai pixel yang tidak
sama dengan 2, maka nilai pixel diubah menjadi bernilai 0 sedangkan untuk pixel yang
bernilai 2 akan diubah menjadi bernilai 1 sehingga didapatkan hasil segmentasi objek kedua.
2.1.2. Pengenalan Bentuk Dan Penentuan Posisi
Bentuk dan posisi merupakan salah satu ciri yang dapat diekstrak dari suatu objek
untuk membedakan objek tersebut dengan objek lainnya. Untuk dapat membedakan objek
satu dengan objek lainnya tersebut dilakukan identifikasi pada objek. Identifikasi tersebut
dapat berupa pengenalan bentuk dan posisi.
2.1.2.1. Pengenalan Bentuk
2.1.2.1.1. Area
Area merupakan banyaknya pixel pada suatu objek (luas objek). Objek pada citra biner
direpresentasikan dengan warna putih. Nilai pixel citra berwarna putih pada area tersebut
bernilai 1. Jumlah pixel (yang bernilai 1) pada suatu objek dalam citra digital adalah nilai
areanya. Jumlah pixel area dari setiap objek berbeda beda. Perbedaan nilai area objek ini
digunakan dalam perhitungan thinnes ratio untuk menentukan bentuk suatu objek dalam
citra digital [7]. Area objek persegi berwarna putih ditunjukan oleh gambar 2.10. Rumus
area ditunjukan pada persamaan 2.3 berikut [7] :
𝐴𝑖 = ∑ ∑ 𝑂𝑖(𝑥, 𝑦)𝑁𝑦=1
𝑀𝑥=1 (2.3)
Keterangan :
𝐴𝑖 = Jumlah pixel dari luas objek (area)
M = Kolom pixel
N = Baris pixel
Oi = Objek dalam suatu citra
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
14
Gambar 2.10. Area objek persegi
Berdasarkan gambar 2.10, dapat diketahui nilai area objek persegi menggunakan
persamaan 2.3. Area objek persegi tersebut adalah 9. Nilai area ini didapatkan dari jumlah
pixel yang bernilai 1 pada objek.
2.1.2.1.2. Perimeter
Perimeter merupakan banyaknya pixsel pada boundary atau tepi objek. Perimeter
didapatkan dari hasil deteksi tepi suatu objek dalam citra digital. Deteksi tepi dapat
dilakukan dengan kontur moore. Contoh kontur moore terdapat di lampiran. Jumlah pixel
perimeter dari setiap objek berbeda beda. Perbedaan nilai perimeter dari objek digunakan
dalam perhitungan thinnes ratio untuk menentukan bentuk suatu objek dalam citra digital
Jumlah pixel tersebut dihitung berdasarkan pixel (yang bernilai 1) pada tepi suatu objek [7].
Perimeter objek persegi ditunjukan oleh gambar 2.11.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
15
Gambar 2.11. Perimeter objek persegi
Berdasarkan gambar 2.11, dapat diketahui nilai perimeter objek persegi tersebut
adalah 8. Nilai perimeter ini didapatkan dari jumlah pixel yang bernilai 1 pada tepi objek.
2.1.2.1.3. Thinness Ratio
Thinness ratiomerupakan perbandingan banyaknya pixel area dengan banyaknya pixel
perimeter dari suatu objek dalam citra digital. Setiap bentuk objek memiliki nilai thinness
ratioyang berbeda beda. Nilai tersebut digunakan sebagai perbandingan untuk menentukan
bentuk suatu objek yang diamati. Untuk benda yang bentuknya sama tetapi ukuranya
berbeda, nilai thinness rationya tetap sama, hal ini karena perbandingan jumlah pixel area
dan pixel perimeternya tetap sama [7]. Rumus thinnes ratio ditunjukan pada persamaan 2.4.
𝑇𝑖 =4𝜋𝐴𝑖
𝑃𝑖2 (2.4)
Keterangan :
Ti = Thinness ratio
Ai = jumlah pixel dari luas objek (area)
Pi = jumlah pixel dari keliling objek (perimeter)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
16
Dari gambar 2.11 dan 2.12 didapatkan nilai area (Ai) = 9 dan nilai perimeter (Pi) = 8.
Dari nilai area dan perimeter, dapat dicari nilai thinness ratio. Contoh perhitungan nilai
thinness ratio sebagai berikut :
𝑇𝑖 =4𝜋𝐴𝑖
𝑃𝑖2
𝑇𝑖 =4𝜋 × 9
(8)2
𝑇𝑖 = 1,767
Berdasarkan hasil perhitungan, didapatkan nilai thinness ratio yaitu 1,767.
2.1.2.2. Penentuan Posisi
2.1.2.2.1. Centroid
Centroid merupakan titik pusat dari area suatu objek dengan koordinat (x,y) pada
suatu citra digital. Koordinat (x,y) dihitung berdasarkan nilai awal yang dimulai dari di titik
origin (0,0) citra. Centroid dari setiap objek dalam suatu citra memiliki nilai yang berbeda
beda. Perbedaan nilai centroid disebabkan oleh letak dari masing-masing objek dalam citra.
Nilai centroid tersebut yang digunakan untuk menentukan posisi suatu objek dalam suatu
citra [7]. Contoh centroid objek ditunjukan oleh gambar 2.12. Rumus centroid ditunjukan
pada persamaan 2.5 dan 2.6.
𝑥𝑖 =1
𝐴𝑖∑ ∑ 𝑥𝑂𝑖
𝑁𝑦=1
𝑀𝑥=1 (𝑥, 𝑦) (2.5)
𝑦𝑖 =1
𝐴𝑖∑ ∑ 𝑦𝑂𝑖
𝑁𝑦=1
𝑀𝑥=1 (𝑥, 𝑦) (2.6)
Keterangan :
xi = koordinat pada sumbu x
yi = koordinat pada sumbu y
Ai = jumlah pixel dari luas objek (area)
M = kolom pixel
N = baris pixel
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
17
Oi = objek dalam suatu citra
(a) (b)
Gambar 2.12. Titik pusat (centroid) (a) citra objek persegi (b) centroid objek persegi
Berdasarkan gambar 2.12a, contoh perhitungan nilai centroid dari objek persegi
sebagai berikut :
Ai = 9
a) 𝑥𝑖 =(2𝑥1)+(2𝑥1)+(2𝑥1)+(3𝑥1)+(3𝑥1)+(3𝑥1)+(4𝑥1)+(4𝑥1)+(4𝑥1)
9
𝑥𝑖 =27
9
𝑥𝑖 = 3
b) 𝑦𝑖 =(2𝑥1)+(2𝑥1)+(2𝑥1)+(3𝑥1)+(3𝑥1)+(3𝑥1)+(4𝑥1)+(4𝑥1)+(4𝑥1)
9
𝑦𝑖 =27
9
𝑦𝑖 = 3
Centroid dari objek persegi pada gambar 2.12 terletak pada koordinat (3,3). Centroid
objek persegi ditunjukan oleh gambar 2.12b.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
18
2.1.3. Webcam
Webcam atau web camera adalah sebuah kamera video digital kecil yang dihubungkan
ke komputer melalui port USB atau port COM. Webcam bermanfaat dalam bidang
telekomunikasi, bidang keamanan dan bidang industri. Sebagai contoh webcam digunakan
untuk videocall chatting, surveillience camera, dan sebagai video conference oleh beberapa
user. Pada bidang pengolahan citra, webcam digunakan untuk meng-capture citra analog
sehingga diperoleh citra digital yang kemudian diolah dengan perangkat lunak seperti matlab
[12]. Webcam logitech C170 ditunjukan oleh gambar 2.13, sedangkan spesifikasi webcam
terdapat di lampiran.
Gambar 2.13. Webcam logitech C170 [13]
2.2. Lengan Robot
Lengan robot atau robot manipulator merupakan sekumpulan hubungan mekanik
yang terdiri dari rangkaian kinematik yang secara umum terbagi menjadi tiga bagian yaitu
arm, wrist, dan gripper. Konfigurasi robot digunakan untuk mengklasifikasikan robot-robot
industri. Konfigurasi robot mengarah pada bentuk geometri dari manipulator robot, yaitu
informasi hubungan dari setiap joint pada manipulator. Robotics Industries Associations
(RIA) mendefinisikan robot sebagai manipulator didesain untuk memindahkan material,
benda, alat atau peralatan tertentu lewat pergerakan yang terprogram [2]. Sistem lengan
robot memiliki empat komponen dasar, yaitu : Manipulator, end effector, aktuator,
controller.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
19
a. Manipulator
Manipulator adalah bagian mekanik yang dapat difungsikan untuk memindah,
mengangkat dan memanipulasi benda kerja [14]. Manipulator pada lengan robot memiliki
tiga bagian, yaitu bagian dasar (base), bagian lengan (arm) dan bagian pergelangan (wrist).
Manipulator lengan robot ditunjukan pada gambar 2.14.
Gambar 2.14. Manipulator pada lengan robot [15]
Bagian dasar (base) berfungsi untuk menyangga lengan robot dan biasanya terpasang
secara paten pada area kerja. Hal ini bertujuan untuk menjaga keseimbangan lengan robot
ketika bergerak. Bagian lengan (arm) berfungsi untuk memposisikan end effector agar dapat
mengambil benda dan bagian pergelangan (wrist) berfungsi untuk mengatur orientasi dari
end effector. Bagian ujung pada lengan robot terpasang end effector atau biasa disebut
dengan gripper sebagai instrument untuk mencengkeram benda [4].
b. End Effector
End effector dapat ditemukan hampir disemua aplikasi robot, walaupun
keberadaannya bukan merupakan komponen dasar dari sistem robot. End effector berfungsi
sebagai bagian terakhir yang menghubungkan manipulator dengan objek [4].
Contoh end effector pada lengan robot yaitu gripper. Gripper berfungsi untuk
mencengkram objek. Contoh gripper ditunjukan pada gambar 2.15.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
20
Gambar 2.15. Gripper lengan robot [16]
c. Aktuator
Aktuator adalah bagian penting pada robot yang berfungsi sebagai penggerak dari
perintah yang diberikan oleh pengontrol. Biasanya aktuator merupakan piranti
elektromekanik yang menghasilkan daya gerakan [1]. Aktuator dasar yang sering digunakan
sebagai penghasil gerakan dapat dibagi menjadi tiga bagian, yaitu aktuator berbasis motor
listrik (motor DC magnet permanen (DC-MP), motor DC brushless (DC-BL), motor DC
servo (DC-SV)), aktuator pneumatik dan aktuator hidrolik [14].
d. Kontroler
Kontroler adalah rangkaian elektronik berbasis mikroprosesor yang berfungsi sebagai
pengendali sistem mekanik dalam membentuk fungsi kerja [3]. Kontroler mmenyimpan
informasi berupa data-data pergerakan lengan robot yang telah diprogram dengan bahasa
pemrogaman tertentu pada mikrokontroler. Informasi dan data-data tersebut disimpan dalam
memori. Data tersebut dapat dioutputkan untuk menentukan gerakan dari manipulator.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
21
2.2.1. Motor Servo
Motor servo merupakan motor DC yang memiliki kualitas tinggi. Motor ini sudah
dilengkapi sistem kontrol. Pada aplikasinya, motor servo sering digunakan sebagai kontrol
loop tertutup, sehingga dapat menangani perubahan posisi secara tepat dan akurat begitu
juga dengan pengaturan kecepatan dan percepatan [2]. Motor servo disusun dari sebuah
motor DC, gearbox, variabel resistor atau potensiometer dan rangkaian kontrol.
Potensiometer berfungsi untuk menentukan batas maksimal putaran sumbu (axis) motor
servo, sedangkan sudut dari sumbu motor servo diatur dengan memberikan variasi lebar
pulsa PWM pada bagian pin kontrolnya. [18]. Contoh model fisik servo dan pengkabelannya
ditunjukan pada gambar 2.16 dan gambar 2.17.
Gambar 2.16. Model fisik motor servo hitec HS-300 [18]
Gambar 2.17. Sistem pengkabelan motor servo [19]
Sistem pengkabelan motor servo terdiri dari 3 bagian, yaitu Vcc, Gnd, dan Kontrol
(PWM). Penggunaan PWM pada motor servo berbeda dengan penggunaan PWM pada
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
22
motor DC. Pada motor servo, pemberian nilai PWM akan membuat motor servo bergerak
pada posisi tertentu lalu berhenti (kontrol posisi) [2].
Motor servo dibedakan menjadi dua, yaitu continous servo motor dan uncontinous
servo motor. Motor servo tersebut dapat bergerak dua arah yaitu clock wise (CW) dan
Counter Clock Wise (CCW). Continous servo motor dapat berputar penuh 3600 sehingga
memungkinkan untuk bergerak rotasi, sedangkan uncontinous servo motor hanya dapat
berputar 1800. Cara pengontrolan servo ditunjukan pada gambar 2.18.
Gambar 2.18. Cara pengontrolan motor servo [2]
Prinsip utama pada pengontrolan motor servo adalah pemberian nilai PWM pada
kontrolnya. Perubahan duty cycle akan menentukan perubahan posisi dari motor servo.
Frekuensi PWM yang digunakan pada pengontrolan motor servo selalu mempunyai
frekuensi 50 Hz sehingga pulsa yang dihasilkan setiap 20 ms. Lebar pulsa pengontrolan
menentukan posisi servo yang dikehendaki. Seperti contoh pada gambar 2.18 yaitu untuk
menggerakkan servo ke posisi 900, maka dengan cara memberikan pulsa high selama 1,5 ms
dan pulsa low selama 18,5 ms [2].
2.2.2. Torsi/Momen Gaya
Torsi atau momen gaya (τ) adalah kemampuan sebuah gaya yang bekerja pada suatu
benda untuk memutar benda tersebut terhadap titik poros tertentu [20]. Jika pada benda
bekerja lebih dari satu torsi, maka torsi total adalah penjumlahan dari seluruh torsi yang
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
23
bekerja. Gaya yang bekerja pada benda dapat menuju berbagai arah, tetapi torsi pada benda
akan bernilai maksimal jika arah gaya tegak lurus (θ = 90) dengan benda atau lengan.
Gambar 2.19 menunjukan penguraian vektor gaya yang bekerja pada lengan dalam
menganalisis torsi [21].
Gambar 2.19. Vektor gaya pada lengan [21]
Massa dan posisi gaya terhadap poros putaran mempengaruhi besarnya torsi yang
dihasilkan, sehingga semakin besar torsi (τ), dengan jarak antara sumbu putaran dan letak
gaya yang sama, maka gaya F untuk memutar benda semakin besar [22]. Rumus torsi pada
benda yang bergerak translasi ditunjukan pada persamaan 2.7
τ = F r sin θ (2.7)
Keterangan :
τ = Torsi (N.m)
L atau r = Jarak tegak lurus antara garis kerja gaya denga sumbu rotasi (m)
F = Gaya (N), F = massa x gravitasi bumi
θ = Derajat sumbu putar
Contoh perhitungan torsi, jika beban sebesar 10 N (F) dan panjang lengan 10 cm (θ =
900), maka besar torsi adalah 1 N.m. Berdasarkan persoalan, dibutuhkan motor servo yang
memiliki torsi lebih besar dari 1 N.m untuk dapat mengangkat beban tersebut [2].
Torsi tidak hanya menyebabkan gerak translasi, tetapi juga menyebabkan benda
bergerak rotasi (horizontal). Torsi digunakan untuk menggerakan benda dari posisi diam
hingga bergerak. Torsi yang menyebabkan benda berotasi dapat dihitung berdasarkan
hukum II Newton [23]. Resultan torsi untuk benda yang bergerak rotasi ditunjukan oleh
persamaan 2.8 dan 2.9, 2.10, sedangkan kecepatan sudut rotasi ditunjukan oleh persamaan
2.11. Gambar 2.20 menunjukan benda yang berotasi pada porosnya.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
24
∑ τ = 𝐼𝛼 (2.8)
∑ τ = (𝑚𝑟2) 𝑥 (∆𝜔
∆𝑡) (2.9)
∑ τ = (𝑚𝑟2) 𝑥 (𝜔1 − 𝜔0
𝑡1 − 𝑡0) (2.10)
𝜔 = 2𝜋
𝑇 (2.11)
Keterangan :
∑ τ = resultan torsi ( N.m)
I = momen inersia (kg.m2)
𝛼 = percepatan sudut (rad/s2)
𝑚 = massa (kg)
r = jari-jari atau jarak antara sumbu rotasi dengan gaya (m)
𝜔 = kecepatan sudut (rad/s)
T = periode (s)
Gambar 2.20. Gerak rotasi pada benda [24]
2.2.3. Invers Kinematics Robot Arm 2 DOF (Degree Of Freedom)
Kinematika didefinisikan sebagai studi pergerakan robot (motion) tanpa
memperhatikan gaya/force atau faktor lainnya yang mempengaruhi pergerakan tersebut.
Pada analisa kinematik, posisi, kecepatan, dan akselerasi dari seluruh link dihitung tanpa
memperhatikan gaya yang menyebabkan pergerakannya [2]. Invers kinematika merupakan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
25
analisa kinematik untuk mendapatkan besar sudut dari masing-masing joint berdasarkan
panjang lengan robot dan data koordinat posisi yang akan dituju.
Lengan robot dua DOF merupakan robot yang memiliki dua lengan (a1 dan a2) dan
memiliki dua derajat kebebasan (dua servo penggerak). Contoh lengan robot dua DOF
ditunjukan pada gambar 2.21.
Gambar 2.21. Robot lengan 2 sendi (2 DOF) [25]
Dengan memperhitungkan panjang lengan robot dan koordinat yang akan dituju,
analisa invers kinematik lengan robot yang memiliki 2 derajat kebebasan ( 2 DOF) dapat
dihitung dengan rumus yang ditunjukan pada persamaan 2.12 dan 2.13.
𝑞2 = cos−1 (𝑥2 + 𝑦2 − 𝑎1
2 − 𝑎22
2𝑎1 𝑎2) (2.12)
𝑞1 = tan−1 (𝑦 (𝑎1 + 𝑎2 cos 𝑞2) − 𝑥. 𝑎2 sin 𝑞2
𝑥 (𝑎1 + 𝑎2 cos 𝑞2) + 𝑦. 𝑎2 sin 𝑞2) (2.13)
Keterangan :
q1 = sudut antara garis horizontal pada base dengan sudut servo satu
q2 = sudut antara perpanjangan lengan l1 dengan sudut servo dua
a1 = panjang lengan pertama
a2 = panjang lengan kedua
x = titik koordinat yang ingin dituju (sumbu x)
y = titik koordinat pada yang ingin dituju (sumbu y)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
26
Gambar 2.22. Analisis pergerakan lengan robot
Contoh perhitungan sudut q1 dan sudut q2 seperti pada gambar 2.21 untuk menentukan
pergerakan lengan robot mengambil benda pada koordinat (16,1) seperti ditunjukan oleh
gambar 2.22 dapat di hitung menggunakan rumus pada persamaan 2.12 dan 2.13 sebagai
berikut :
Dari gambar 2.22, diketahui :
x = 16 cm, y = 1 cm
a1 = 14 cm, a2 = 22 cm
q1 = ? dan q2 = ?
Penyelesaian :
𝑞2 = cos−1 (𝑥2 + 𝑦2 − 𝑎1
2 − 𝑎22
2𝑎1 𝑎2)
𝑞2 = cos−1 (162 + 12 − 142 − 222
2 𝑥 14 𝑥 22)
𝑞2 = 133,368𝑜
𝑞1 = tan−1 (𝑦 (𝑎1 + 𝑎2 cos 𝑞2) − 𝑥. 𝑎2 sin 𝑞2
𝑥 (𝑎1 + 𝑎2 cos 𝑞2) + 𝑦. 𝑎2 sin 𝑞2)
𝑞1 = tan−1 ( 1(14 + 22 cos 133,3680) − 16𝑥22 sin 133,3680
16 (14 + 22 cos 133,3680) + 1𝑥22 sin 133,3680)
𝑞1 = 89,62𝑜
Berdasarkan contoh perhitungan, sudut pergerakan servo yang diperlukan supaya
lengan robot dapat mengambil benda yaitu sudut q1 = 89,62𝑜 , dan q2 = 133,368𝑜.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
27
2.2.4. Pulse Width Modulation (PWM)
Pulse width modulation (PWM) adalah cara memanipulasi lebar sinyal yang
dinyatakan dengan pulsa dalam suatu perioda, untuk mendapatkan tegangan rata-rata yang
berbeda. Aplikasi PWM berbasis mikrokontroler bisa berupa pengendalian kecepatan motor
DC, pengaturan nyala terang lampu LED, dan pengedalian motor servo. Sinyal PWM
memiliki amplitudo dan frekuensi dasar yang tetap, namun memiliki duty cycle bervariasi
(antara 0 hingga 100%). Duty cycle merupakan perbandingan lebar pulsa on terhadap satu
periode gelombang [26]. Contoh sinyal PWM ditunjukan oleh gambar 2.23.
Gambar 2.23. Sinyal PWM [26]
Rumus menghitung duty cycle sinyal PWM ditunjukan pada persamaan 2.14.
𝐷𝑢𝑡𝑦 𝑐𝑦𝑐𝑙𝑒 =𝑇𝑜𝑛
𝑇𝑜𝑛+𝑇𝑜𝑓𝑓 𝑥 100 % (2.14)
Keterangan :
Ton = Lebar pulsa on dalam satu periode gelombang.
Toff = Lebar pulsa off dalam satu peridode gelombang.
Ttotal = Waktu satu periode gelombang.
2.2.5. Mikrokontroler AVR Atmega32
AVR (Alf and Vegard’s Risch Processor) merupakan single-chip microcontroller
RISC (Reduced Instruction Set Computer) 8-bit dengan arsitektur Havard yang dilengkapi
dengan fitur-fitur standart seperti on-chip-program (code) ROM, data RAM, dara EEPROM,
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
28
timer-counter dan port I/O [23] . Chip AVR yang digunakan untuk tugas akhir ini adalah
ATmega32.
Hampir semua instruksi program dieksekusi dalam satu siklus clock. AVR juga
mempunyai 32 register general-purpose, timer-counter fleksibel dengan mode compare,
interupsi internal dan eksternal, serial UART, programmable Watchdog Timer, dan power
saving mode dan In-System Programmable Flash on-chip yang memungkinkan memori
program untuk diprogram ulang [4]. Sebagai generasi terbaru, ATmega32 memiliki fitur
yang lebih lengkap dibanding dengan generasi sebelumnya. ATmega32 memiliki kapasitas
memori programmable flash sebesar 32 KB, dua kali lebih besar dari ATmega16. Selain itu
ATmega32 juga memiliki EEPROM dan RAM dua kali lebih besar dari ATmega16 yakni
EEPPOM sebesar 1 KB dan SRAM sebesar 2 KB.
2.2.5.1. Arsitektur AVR ATmega32
Mikrokontroler ATmega32 memiliki arsitektur sebagai berikut :
a. Saluran I/O sebanyak 32 buah, yaitu Port A, Port B, Port C, Port D.
b. ADC 10 bit sebanyak 8 saluran.
c. Tiga buah timer/counter yaitu Timer 0, Timer 1, dan Timer 2.
d. Watchdig Timer dengan osilator internal.
e. SRAM sebanyak 512 byte.
f. Memori Flash sebesar 32 kb.
g. Sumber interupsi internal dan eksternal.
h. Port SPI (Serial Pheriperal Interface).
i. EEPROM on board sebanyak 512 byte.
j. Komparator analog.
k. Port USART (Universal Shynchronous Ashynchronous Receiver Transmitter) untuk
komunikasi serial.
2.2.5.2. Deskripsi Mikrokontroler AVR ATmega32
Konfigurasi Pin Mikrokontroler ATmega32 dengan 40 pin DIP (dual in-line package)
dapat dilihat pada gambar 2.24. AVR menggunakan arsitektur Havard (dengan memori dan
bus terpisah untuk program dan data). Ketika sebuah instruksi sedang dikerjakan maka
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
29
instruksi berikuntya diambil dari memori program [27]. Konfigurasi pin Atmega32
ditunjukan pada gambar 2.24.
Gambar 2.24. Konfigurasi pin mikrokontroler AVR Atmega [28]
Penjelasan konfigurasi PIN pada mikrokontroler AVR ATmega32, secara umum :
a. Pin 1 sampai 8 (PortB : PB0 – PB7) merupakan port parallel 8 bit dua arah
(bidirectional), yang dapat digunakan untuk general purpose dan special feature.
b. Pin 9 (Reset). Reset terjadi jika pin ini diberi logika low melebihi perioda minimum
yang diperlukan.
c. Pin 10 (VCC) dihubungkan ke catu daya (+5 Volt).
d. Pin 11 dan 31 (GND) dihubungkan ke Vss atau Ground.
e. Pin 12 (XTAL 2) adalah pin keluaran dari inverting oscillator amplifier.
f. Pin 13 (XTAL 1) adalah pin masukan ke inverting oscillator amplifier dan masukan
ke rangkain internal clock.
g. Pin 14 sampai 21 (PortD : PD0 – PD7) adalah 8-bit dua arah (bi-directional I/O) port
dengan internal pull-up resistors) digunakan untuk general purpose dan special
feature.
h. Pin 22 sampai 29 (PortC : PC0 – PC7) adalah 8-bit dua arah (bi-directional I/O) port
dengan internal pull-up resistors digunakan untuk general purpose dan special
feature. Dua pin PC6 dan PC7 berfungsi sebagai oscillator eksternal untuk
timer/counter2.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
30
i. Pin 30 adalah Avcc pin penyuplai daya untuk port A dan A/D converter dan
dihubungkan ke Vcc. Jika ADC digunakan maka pin ini dihubungkan ke Vcc.
j. Pin 32 adalah AREF pin yang berfungsi sebagai referensi masukan analog untuk
ADC.
k. Pin 33 sampai 40 (PortA : PA0 – PA7) adalah 8-bit dua arah (bi-directional I/O) port
dengan internal pull-up resistors digunakan untuk general purpose. Port ini juga
dimultipleks dengan masukan analag ke ADC 8 kanal [27].
2.2.5.3. Timer/Counter
Timer / Counter adalah bagian mikrokontroller yang tidak terpengaruh oleh kerja
prosesor. Fungsi utama dari Timer / Counter, yaitu sebagai pewaktu (timer) atau penghitung
(counter) atau berfungsi untuk menciptakan periode waktu, menghitung waktu dan
menghitung kejadian. Pada chip AVR, Timer/Counter dapat berfungsi untuk mementukan
lebar pulsa atau untuk membangkitkan sinyal PWM (Pulse Width Modulation). Beberapa
Timer/Counter pada AVR juga digunakan sebagai penyelarasan waktu (kalibrasi) pada
aplikasi real time. Timer / Counter dibagi berdasarkan lebar register yang mengandung nilai
waktu atau menghitung nilai [4].
Mikrokontroler Atmega32 memiliki tiga macam timer yaitu timer/counter0 (8 bit),
timer/counter1 (16 bit) dan timer/counter2 (8 Bit). Masing-masing kanal pewaktuan
dilengkapi dengan prescaler yang berfungsi untuk membagi sumber clock utama
mikrokontroler [27].
TIMER/COUNTER 0
Fitur-fitur yang dimiliki:
1. Satu buah unit Compare Counter (Unit ini akan meng-count dan meng-compare)
2. Timer dinolkan saat compare match (Auto reload)
3. Dapat menghasilkan gelombang PWM dengan glitch free
4. Frekuensi generator
5. Exsternal event counter
6. Prescaler clock hingga 10 bit
7. Membangkitkan interupsi saat timer overflow dan atau compare match
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
31
Perhitungan OCR sebagai pembangkit PWM ditunjukkan pada persamaan 2.15,
2.16, 2.17 dan 2.18 berikut [28].
𝑇 =1
𝑓 (2.15)
Timer overflow = N x T x 256 (2.16)
𝑃𝑢𝑙𝑠𝑒 =𝜃
1800 + 1 (2.17)
𝑂𝐶𝑅 =𝑝𝑢𝑙𝑠𝑒
𝑇𝑖𝑚𝑒𝑟 𝑜𝑣𝑒𝑟𝑓𝑙𝑜𝑤 (2.18)
Keterangan :
f = frekuensi yang digunakan untuk eksekusi program
T = periode
N = prescaller yang digunakan
OCR = nilai cacahan pulsa
Pulse = lebar pulsa
θ = sudut pergerakan servo
Berikut merupakan mode-mode operasi timer [4] :
a) Mode normal, timer digunakan untuk menghitung waktu nyata atau membuat
delay dalam suatu sistem.
Gambar 2.25. Mode phase correct PWM [28]
b) Mode phase correct PWM (PCP), digunakan untuk mnghasilkan sinyal PWM
dimana nilai register counter (TCNT0) yang mencacah dari $00 sampai $FF dan
kembali ke $00 secara terus menerus akan selalu dibandingkan dengan register
pembanding OCR0. Hasil perbandingan register TCNT0 dan OCR0 digunakan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
32
utnuk membangkitkan sinyal PWM yang dikeluarkan pada OC0 seperti
ditunjukkan Gambar 2.25.
c) CTC (Clear timer on compare match), register counter (TCNT0) akan mencacah
naik kemudian di-reset ke 0 pada saat nilai TCNT0 mencapai set nilai pada
OCR0. Sebelumnya OCR diset dulu karena timer 0 dan 2 maksimumnya 255,
maka range OCR 0-255. Mode CTC digunakan untuk membangkitkan
gelombang digital presisi seperti sinyal periodik atau sebuah pulsa tunggal.
d) Fast PWM, digunakan untuk membangkitkan sinyal PWM presisi dari suatu
frekuensi dan duty cyle yang dikehendaki. Mode ini hampir sama dengan mode
phase correct PWM, perbedaanya adalah register counter TCNT0 mencacah naik
saja dan tidak pernah mencacah turun seperti terlihat pada Gambar 2.26.
Gambar 2.26. Mode fast PWM [28]
2.2.5.4. Komunikasi Serial USART
Komunikasi serial merupakan alternatif untuk menggantikan komunikasi paralel,
karena transfer data paralel menggunakan delapan jalur konduktor/kawat untuk mentransfer
delapan bit sekaligus. Dengan komunikasi serial, maka komunikasi hanya menggunakan
satu kawat konduktor saja untuk men-transfer bit demi bit sebanyak 8 kali untuk
menyelesaikan transfer satu byte data [27]. Komunikasi USART dapat dibedakan menjadi
dua macam, yaitu komunikasi data serial sinkron dan komunikasi data serial asinkron.
Komunikasi serial sinkron adalah komunikasi antara mikrokontroler dengan peripheral lain
dimana sinyal clock yang digunakan antara transmitter dan receiver berasal dari satu sumber
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
33
clock yang sama. Sedangkan komunikasi serial asinkron masing-masing memiliki sumber
clock sendiri [4].
Pada proses inisialisasi ini setiap perangkat yang terhubung harus memiliki baudrate
yang sama. Beberapa fasilitas yang disediakan USART AVR adalah sebagai berikut:
a) Operasi full duplex (mempunyai register reciver dan transmit yang terpisah)
b) Mendukung komunikasi multiprosesor
c) Mode kecepatan berorde Mbps
d) Mode operasi asinkron atau sinkron
e) Operasi master atau slave clock sinkron
f) Dapat menghasilkan baud-rate (laju data) dengan resolusi tinggi
g) Modus komunikasi kecepatan ganda pada asinkron
Inisialisasi USART
Pada mikrokontroler AVR untuk mengaktifkan dan mengeset komunikasi USART
dilakukan dengan cara mengaktifkan register-register yang digunakan untuk komunikasi
USART. Register-register yang digunakan untuk komunikasi USART antara lain:
USART I/O Data Register (UDR)
UDR merupakan register 8 bit yang terdiri dari dua buah dengan alamat yang sama,
yang digunakan sebagai tempat untuk menyimpan data yang akan dikirimkan (TXB) atau
tempat data yang diterima (RXB) sebelum data tersebut dibaca [4]. Gambar 2.27
menunjukan Register UDR.
Gambar 2.27. Register UDR [28]
USART Control and Status Register A (UCSRA)
Gambar 2.28. Register UCSRA [28]
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
34
Gambar 2.28 menunjukan Register UCSRA. Penjelasan bit penyusun UCSRA [27]:
a) RXC (USART Receive Complete)
Flag ini akan set jika data yang masuk (lengkap) ke dalam UDR belum dibaca, dan
akan clear jika receiver buffer kosong (tidak berisi data yang belum dibaca). Flag ini dapat
digunakan untuk membangkitkan interupsi RX jika diaktifkan dan akan berlogika nol secara
otomatis bersamaan dengan eksekusi vector interupsi yang bersangkutan.
b) TXC (USART Transmit Complete)
Flag ini akan set jika data yang akan dikirim telah digeser keluar semuanya dan tidak
ada data baru yang berada dalam transmit buffer (UDR). Flag ini akan membangkitkan
interupsi TX jika diaktifkan dan akan clear secara otomatis bersamaan dengan eksekusi
vector interupsi yang bersangkutan.
c) UDRE( USART Data Register Empety)
Flag ini berfungsi untuk menyatakan kesiapan UDR menerima data baru. Jika bernilai
satu maka UDR dalam keadaan kosong dan siap menerima data berikutnya, jika flag bernilai
nol berarti sebaliknya.
d) FE (Frame Error)
Bit ini sebagai indicator ketika data diterima error, misalnya ketika stop bit pertama
data dibaca berlogika nol maka bit FE bernilai satu. Bit akan bernilai 0 ketika stop bit data
yang akan diterima
e) DOR (Data Over Run)
Bit ini berfungsi untuk mendeteksi jika ada data yang overrun. Flag ini selalu set ke
nol jika terjadi penulisan ke UCSRA. Flag akan bernilai satu ketika terjadi overrun data.
f) PE (Parity Error)
Bit yang menentukan apakah terjadi kesalahan paritas. Bit ini berfungsi jika ada
kesalahan paritas. Bit akan berlogika satu ketika terjadi bit parity error apabila bit paritas
digunakan.
g) U2X (Double the USART Transmission Speed)
Bit yang berfungsi untuk menggandakan laju data menjadi dua kalinya pada operasi
asinkron. Bit ini ditulis ke nol jika menggunakan operasi sinkron.
h) MPCM (Multi Processor Communication Mode)
Bit untuk meng-enable mode multi prosesor, dimana ketika data yang diterima oleh
USART tidak mengandung informasi alamat akan diabaikan.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
35
USART Control and Status Register B (UCSRB)
Gambar 2.29. Register UCSRB [28]
Gambar 2.29 menunjukan Register UCSRB. Penjelasan bit penyusun UCSRB [27]:
a) RXCIE (RX Complete Interrupt Enable)
Bit ini berfungsi mengaktifkan interupsi RX copmplete. Jika satu data diterima dalam
register UDR sudah lengkap (tanpa error) maka secara otomatis akan men-set flag RXC
dalam register UCSRA dan akan membangkitkan interupsi RX complete.
b) TXCIE (TX Complete Interrupt Enable)
Bit ini berfungsi mengaktifkan interupsi TX copmplete. Jika satu data diterima dalam
register UDR sudah lengkap (tanpa error) maka secara otomatis akan men-set flag TXC
dalam register UCSRA dan akan membangkitkan interupsi TX complete.
c) UDRIE (USART Data Register Empety Interrupt Enable)
Bit ini berfungsi untuk mengaktifkan interupsi data register kosong, berlogika satu
jika diaktifkan dan sebaliknya.
d) RXEN (Receiver Enable)
Bit ini berfungsi untuk mengaktifkan pin RX saluran USART. Ketika pin diaktifkan
maka pin tersebut tidak dapat digunakan untuk fungsi pin I/O karena sudah digunakan
sebagai saluran penerima USART.
e) TXEN (Transmitter Enable)
Bit ini berfungsi untuk mengaktifkan pin TX saluran USART. Ketika pin diaktifkan
maka pin tersebut tidak dapat digunakan untuk fungsi pin I/O karena sudah digunakan
sebagai saluran pengirim USART.
f) UCSZ2 (Character Size)
Bit ini bersama dengan bit UCSZ1 dan UCSZ0 dalam register UCSRC digunakan
untuk memilih tipe lebar data bit (character size) yang digunakan.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
36
Tabel 2.1. Penentuan ukuran karakter [28]
UCSZ2 UCSZ1 UCSZ0 Ukuran Karakter
0 0 0 5 bit
0 0 1 6 bit
0 1 0 7 bit
0 1 1 8 bit
1 0 0 Reserved
1 0 1 Reserved
1 1 0 Reserved
1 1 1 9 bit
g) RXB8 (Recive Data Bit 8)
Bit ini digunakan sebagai bit ke-9 ketika menggunakan format data 9 bit, dan bit ini
harus dibaca hdahulu sebelum membaca UDR.
h) TXB8 (Transmit Data Bit 8)
Bit ini digunakan sebagai bit ke-9 ketika menggunakan format data 9 bit, dan bit ini
harus ditulis dahulu sebelum membaca UDR.
USART Control and Status Register C (UCSRC)
Gambar 2.30. Register UCSRC [28]
Gambar 2.30 menunjukan Register UCSRC. Penjelasan bit penyusun UCSRC [27]:
a) URSEL (Register Select)
Bit ini berfungsi untuk memilih antara pengaksesan register UCSRC dengan UBBRH,
dimana untuk menulis atau membaca register UCSRC maka bit ini harus ditulis satu.
b) UMSEL (USART Mode Select)
Bit pemilih mode komunikasi serial antara sinkron dan asinkron (1 = sinkron, 0 =
asinkron).
c) UPM1:0 (Parity Mode)
Bit ini berfungsi untuk memilih mode paritas bit yang akan digunakan. Transmitter
USART akan membuat paritas yang akan digunakan secara otomatis.
d) USBS (Stop Bit Select)
Bit yang berfungsi untuk memilih jumlah stop bit yang akan digunakan.
e) UCSZ1 dan UCSZ0
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
37
Merupakan bit pengatur jumlah karakter serial bit yang berfungsi untuk memilih lebar
data yang digunakan dikombinasikan dengan bit UCSZ2 dalam register UCSRB.
f) UCPOL (Clock Parity)
Bit yang berguna hanya untuk modus sinkron. Bit ini berhubungan dengan perubahan
data keluaran dan sampel masukkan, dan clock sinkron (XCK).
2.2.6. Minimum Sistem ATmega32
Minimum sistem Atmega32 merupakan rangkaian elektronika yang terdiri dari
komponen dasar yang dibutuhkan oleh mikrokontroler dengan pendukung komponen
elektronika lainya yaitu power supply, crystal (pembangkit frekuensi), downloader, dan
reset. Tujuan adanya minimum sistem agar IC mikrokontroler tersebut dapat beroperasi
dengan baik. Minimum sistem ATmega32 ditunjukan pada gambar 2.31.
Gambar 2.31. Minimum sistem Atmega32
2.2.7. Power Supply
Power supply adalah suatu hardware komponen elektronika yang berfungsi sebagai
sumber tegangan DC yang digunakan untuk menyuplai tegangan listrik ke berbagai
rangkaian elektronika yang membutuhkan tegangan DC. Pada prinsipnya, power supply
mengubah tegangan AC menjadi tegangan DC dengan output tegangan tertentu [29].
Salah satu faktor penting pada power supply adalah besarnya perubahan tegangan DC
output diatas jangkauan (range) operasi rangkaian. Tegangan output power supply akan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
38
turun bila dipasang beban. Regulator tegangan digunakan untuk menyetabilkan tegangan
dari sumber daya atau power supply tersebut. Keluaran dari sumber daya yang belum
distabilkan sangat dipengaruhi oleh perubahan tegangan masukan (listrik jala-jala) dan
perubahan beban. Regulator tegangan berperan untuk mengatasi kedua pengaruh tersebut,
sehingga diperoleh tegangan keluaran yang stabil. Output tegangan dari regulator (misalnya
regulator yang memiliki output 5V) dapat menjadi sumber tegangan listrik untuk
mikrokontroler (+ 5 V) [30]. Contoh tampilan fisik Regulated switching power supply
ditunjukan oleh gambar 2.32.
Gambar 2.32. Contoh tampilan fisik regulated switching power supply [31]
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
39
BAB III
PERANCANGAN PENELITIAN
Dalam bab III ini akan dibahas mengenai perancangan perangkat keras dan
perancangan perangkat lunak. Adapun pembahasan ini meliputi :
a) Proses kerja dan mekanisme lengan robot
b) Perancangan mekanik lengan robot
c) Perancangan perangkat keras (hardware)
d) Perancangan perangkat lunak (software)
3.1. Proses Kerja dan Mekanisme Lengan Robot
Pada pembuatan tugas akhir ini, akan dibuat lengan robot yang dapat mengambil dan
memindahkan benda (tabung, kubus, prisma segitiga) ke tempat yang telah ditentukan
sebelumnya. Komponen yang digunakan dalam pembuatan tugas akhir ini yaitu webcam
sebagai sensor kamera untuk mendeteksi posisi dan bentuk benda, aktuator berupa motor
servo standar untuk menggerakan lengan robot, regulator sebagai sumber tegangan, USB to
TTL converter dan rangkaian minimum system ATmega32.
Cara kerja lengan robot yaitu mula-mula objek diletakan pada area peletakan benda
yang berukuran 21 cm x 28 cm. Area peletakan benda tersebut terbagi menjadi 12 posisi
sehingga setiap posisi memiliki ukuran 7 cm x 7 cm. Benda diletakan di tengah posisi area
peletakan benda tersebut dengan orientasi dan posisi peletakan yang bisa acak. Kemudian
webcam akan mendeteksi objek pada area kerja, kemudian akan diproses oleh laptop
melalui software MATLAB untuk dikenali bentuk dan posisinya. Setelah objek dikenali,
maka laptop melalui software MATLAB akan mengirimkan sinyal yang dikomunikasikan
secara serial kepada minimum system ATmega32 menggunakan modul USB to TTL
converter untuk menggerakan motor servo pada lengan robot. Lengan robot akan mengambil
dan memindahkan objek menuju kotak peletakan benda. GUI digunakan sebagai penampil
informasi atau data yang diperoleh dari objek. Data yang ditampilkan pada GUI berupa
bentuk dan posisi objek.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
40
Gambar 3.1 merupakan blok diargam sistem kerja aplikasi computer vision pada
lengan robot pemindah benda berdasarkan bentuk dan posisi.
Gambar 3.1. Blok diagram sistem
3.2. Perancangan Mekanik Lengan Robot
Pada tahap ini dilakukan proses perancangan perangkat keras berupa mekanik dari
lengan robot. Adapun proses perancangan perangkat keras yang dilakukan antara lain
mendesain ukuran lengan robot, memilih penggunaan bahan dasar untuk lengan robot berupa
akrilik setebal 3 mm. Pembuatan desain lengan robot ini menggunakan software Autodesk
Invertor 2015. Berikut adalah gambar detail bagian-bagian lengan robot , yaitu : part gripper
ditunjukan oleh gambar 3.2, part base ditunjukan oleh gambar 3.3, komponen 1 (part
penghubung base terhadap lengan bawah ) ditunjukan oleh gambar 3.4, komponen 2 (part
lengan bawah) ditunjukan oleh gambar 3.5, komponen 3 (part lengan bawah) ditunjukan
oleh gambar 3.6.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
41
Desain part gripper terinspirasi dari penelitian sebelumnya oleh Irvan Hasan [4], tetapi
terdapat penambahan ukuran pada tiap part gripper. Penambahan ukuran panjang dan lebar
bertujuan untuk memenuhi spesifikasi ukuran objek benda berupa kubus, tabung dan prisma
segitiga yang akan dipindahkan ke kotak peletakan benda.
Gambar 3.2. Part gripper
Desain dan ukuran diameter dibagian base mengacu pada penelitian yang sebelumnya
oleh Irvan Hasan [4]. Pada penelitian ini, bagian base berukuran 80 mm bertujuan untuk
meminimalkan beban yang akan ditanggung oleh motor servo. Lubang berukuran 3 mm di
semua bagian digunakan untuk menempatkan lubang baut yang difungsikan untuk
menggabungkan antara part satu dengan part yang lain sedangkan lubang berukuran 12 mm
digunakan untuk meletakkan shaft motor servo.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
42
Gambar 3.3. Part base lengan robot
Part penghubung base dengan lengan bawah berfungsi sebagai penghubung antara
base dengan lengan bawah. Desain tersebut terinspirasi dengan penelitian yang sebelumnya
oleh Irvan Hasan [4], namun perbedaan terletak pada ukuran. Ukuran tersebut didapatkan
berdasarkan spesifikasi part yang lain dan spesifikasi motor servo yang akan digunakan.
Seperti pada gambar 3.4, ukuran 40 mm x 20 mm merupakan luas motor servo.
Gambar 3.4. Part penghubung base terhadap lengan bawah
Desain dan ukuran part lengan terinspirasi dari penelitian sebelumnya oleh Irvan
Hasan [4], namun dikarenakan perbedaan luas area kerja lengan robot maka ukuran panjang
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
43
pada lengan bawah ditambah. Penambahan panjang lengan robot bertujuan agar lengan robot
dapat menjangkau objek yang terletak paling jauh.
Gambar 3.5. Part lengan bawah
Gambar 3.6. Part lengan atas
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
44
3.2.1. Robot Arm Assembly
Robot Arm Assembly merupakan kumpulan dari bagian-bagian lengan robot yang
kemudian dicetak dengan mesin printing laser. Hasil part yang telah tercetak pada akrilik
setebal 3 mm kemudian dirakit sehingga membentuk lengan robot. Gripper ditunjukan oleh
gambar 3.7.
Gambar 3.7. Gripper
Lengan robot terdiri dari 5 bagian utama yaitu gripper, base, komponen 1 (part
penghubung base terhadap lengan bawah ), komponen 2 (part lengan bawah) dan komponen
3 (part lengan bawah). Lengan robot beserta keterangan posisi servo ditunjukan oleh gambar
3.8.
Gambar 3.8. Lengan robot
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
45
3.2.2. Desain Keseluruhan Sistem
Desain keseluruhan sistem bertujuan untuk memvisualisasikan secara nyata tentang
bentuk sistem, cara kerja sistem dan hasil yang akan dikerjakan. Visualisasi desain
keseluruhan sistem ditunjukan oleh gambar 3.9 dan gambar 3.10.
Gambar 3.9. Visualisasi sistem
Gambar 3.10. Visualisasi sistem (tampak atas)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
46
3.2.3. Sudut Pergerakan Tiap Motor Servo
Berikut merupakan variabel pergerakan sudut servo saat mengambil dan meletakan
benda. Untuk penentuan nilai sudutnya, akan dievaluasi lebih lanjut pada bab 4.
Tabel 3.1. Variabel sudut tiap servo untuk mengambil dan meletakan benda kubus
Posisi Sudut
Servo 1 Servo 2 Servo 3 Servo 4
Siaga Sudut A0 Sudut B0 Sudut C0 Sudut D0
Mengambil Benda
Posisi 1 Sudut A1 Sudut B1 Sudut C1 Sudut D1
Posisi 2 Sudut A2 Sudut B2 Sudut C2 Sudut D2
Posisi 3 Sudut A3 Sudut B3 Sudut C3 Sudut D3
Posisi 4 Sudut A4 Sudut B4 Sudut C4 Sudut D4
Posisi 5 Sudut A5 Sudut B5 Sudut C5 Sudut D5
Posisi 6 Sudut A6 Sudut B6 Sudut C6 Sudut D6
Posisi 7 Sudut A7 Sudut B7 Sudut C7 Sudut D7
Posisi 8 Sudut A8 Sudut B8 Sudut C8 Sudut D8
Posisi 9 Sudut A9 Sudut B9 Sudut C9 Sudut D9
Posisi 10 Sudut A10 Sudut B10 Sudut C10 Sudut D10
Posisi 11 Sudut A11 Sudut B11 Sudut C11 Sudut D11
Posisi 12 Sudut A12 Sudut B12 Sudut C12 Sudut D12
Meletakan benda
Kotak
1(Kubus) Sudut A13 Sudut B13 Sudut C13 Sudut D13
Tabel 3.2. Variabel sudut tiap servo untuk megambil dan meletakan benda tabung
Posisi Sudut
Servo 1 Servo 2 Servo 3 Servo 4
Siaga Sudut A0 Sudut B0 Sudut C0 Sudut D0
Mengambil Benda
Posisi 1 Sudut E1 Sudut F1 Sudut G1 Sudut H1
Posisi 2 Sudut E2 Sudut F2 Sudut G2 Sudut H2
Posisi 3 Sudut E3 Sudut F3 Sudut G3 Sudut H3
Posisi 4 Sudut E4 Sudut F4 Sudut G4 Sudut H4
Posisi 5 Sudut E5 Sudut F5 Sudut G5 Sudut H5
Posisi 6 Sudut E6 Sudut F6 Sudut G6 Sudut H6
Posisi 7 Sudut E7 Sudut F7 Sudut G7 Sudut H7
Posisi 8 Sudut E8 Sudut F8 Sudut G8 Sudut H8
Posisi 9 Sudut E9 Sudut F9 Sudut G9 Sudut H9
Posisi 10 Sudut E10 Sudut F10 Sudut G10 Sudut H10
Posisi 11 Sudut E11 Sudut F11 Sudut G11 Sudut H11
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
47
Tabel 3.2. (Lanjutan) Variabel sudut tiap servo untuk megambil dan meletakan benda
tabung
Posisi Sudut
Servo 1 Servo 2 Servo 3 Servo 4
Posisi 12 Sudut E12 Sudut F12 Sudut G12 Sudut H12
Meletakan benda
Kotak 2
(Tabung) Sudut E13 Sudut F13 Sudut G13 Sudut H13
Tabel 3.3. Variabel sudut tiap servo untuk mengambil dan meletakan benda prisma segitiga
Posisi Sudut
Servo 1 Servo 2 Servo 3 Servo 4
Siaga Sudut A0 Sudut B0 Sudut C0 Sudut D0
Mengambil Benda
Posisi 1 Sudut I1 Sudut J1 Sudut K1 Sudut L1
Posisi 2 Sudut I2 Sudut J2 Sudut K2 Sudut L2
Posisi 3 Sudut I3 Sudut J3 Sudut K3 Sudut L3
Posisi 4 Sudut I4 Sudut J4 Sudut K4 Sudut L4
Posisi 5 Sudut I5 Sudut J5 Sudut K5 Sudut L5
Posisi 6 Sudut I6 Sudut J6 Sudut K6 Sudut L6
Posisi 7 Sudut I7 Sudut J7 Sudut K7 Sudut L7
Posisi 8 Sudut I8 Sudut J8 Sudut K8 Sudut L8
Posisi 9 Sudut I9 Sudut J9 Sudut K9 Sudut L9
Posisi 10 Sudut I10 Sudut J10 Sudut K10 Sudut L10
Posisi 11 Sudut I11 Sudut J11 Sudut K11 Sudut L11
Posisi 12 Sudut I12 Sudut J12 Sudut K12 Sudut L12
Meletakan benda
Kotak 3
(Prisma
segitiga)
Sudut I0 Sudut J0 Sudut K0 Sudut L0
3.3. Perancangan Perangkat Keras (Hardware)
Ada beberapa komponen dalam perancangan subsistem perangkat keras (hardware)
lengan robot pemindah benda berdasarkan bentuk dan posisi, yaitu :
a) Wiring motor servo pada minimum system ATmega32
b) Motor servo
c) Webcam dan area peletakan benda
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
48
3.3.1. Wiring Motor Servo Pada Minimum Sistem ATmega32
Minimum sistem merupakan sebuah rangkaian dari mikrokontroler agar IC
mikrokontroler dapat beroperasi dan di program. Rangkaian minimum sistem berfungsi
sebagai I/O untuk mengontrol sudut putar motor servo yang telah diprogram sebelumnya
dalam mikrokontroler Atmega32 pada lengan robot serta sebagai pengolah data serial yang
dikirimkan dari laptop melalui USB to TTL converter. Wiring motor servo pada minimum
sistem Atmega32 ditunjukan oleh gambar 3.11.
Gambar 3.11. Wiring motor servo pada minimum sistem Atmega32
Motor servo memiliki 3 jalur kabel, yaitu vcc (kabel merah), ground (kabel hitam) dan
jalur data (kabel kuning). Perancangan Wiring motor servo pada minimum sistem Atmega32,
jalur data dihubungkan pada port B 3, port D 4, port D 5 dan port D 7. Keempat port tersebut
merupakan port OCR (timer) yang digunakan untuk menggerakan servo.
USB to TTL dihubungkan pada port D0 dan port D1. port tersebut merupakan port
TX dan RX yang digunakan untuk komunikasi serial antara mikrokontroler dengan
perangkat eksternal.
Selain itu juga terdapat lampu led yang difungsikan sebagai indikator bahwa karakter
yang dikirim oleh matlab telah diterima dengan baik oleh mikrokontroler, sehingga
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
49
mikrokontroler dapat mengolah data dari matlab untuk menggerakan motor servo dalam
mengambil dan meletakan benda.
3.3.2. Perhitungan Torsi Motor Servo
Motor servo membutuhkan torsi maksimal ketika arah gaya tegak lurus dengan lengan
robot (saat θ = 900). Analisis perhitungan torsi maksimal yang dibutuhkan motor servo dua,
servo tiga, servo empat dan servo satu pada lengan robot ditunjukan oleh gambar 3.12, 3.13,
3.14 dan 3.15. Perhitungan torsi motor servo menggunakan rumus pada persamaan 2.7.
Gambar 3.12. Analisis torsi motor servo 2
Keterangan :
(r1 = 14 cm, r2 = 28 cm, r3 = 38 cm, r4 =14 cm, r5 = 24 cm, r6 = 10 cm))
m1 = 91 gram (lengan bawah + servo 3)
m2 = 145 gram (m1 + lengan atas + servo 4)
m3 = 176 gram (m2 + gripper + objek)
m4 = 54 gram (lengan atas + servo 4)
m5 = 85 gram (m4 + gripper + objek)
m6 = 54 gram (gripper + objek)
g = 9,8 m/s2
1 N-m = 10,20 Kg-cm
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
50
Berdasarkan gambar 3.12, perhitungan torsi motor servo dua merupakan penjumlahan
dari tiga torsi yang bekerja pada lengan robot sebagai berikut :
𝜏𝑠𝑒𝑟𝑣𝑜 2 = (𝐹1𝑟1𝑆𝑖𝑛900) + (𝐹2𝑟2𝑆𝑖𝑛900) + (𝐹3𝑟3𝑆𝑖𝑛900)
𝜏𝑠𝑒𝑟𝑣𝑜 2 = (𝑚1𝑔𝑟1𝑆𝑖𝑛900) + (𝑚2𝑔𝑟2𝑆𝑖𝑛900) + (𝑚3𝑔𝑟3𝑆𝑖𝑛900)
𝜏𝑠𝑒𝑟𝑣𝑜 2 = (0,091 𝑥 9,8 𝑥 0,14 𝑥 1) + (0,145 𝑥 9,8 𝑥 0,28 𝑥 1)
+ (0,176 𝑥 9,8 𝑥 0,38 𝑥 1)
𝜏𝑠𝑒𝑟𝑣𝑜 2 = 0,125 + 0,398 + 0,655
𝜏𝑠𝑒𝑟𝑣𝑜 2 = 1,178 𝑁. 𝑚
𝜏𝑠𝑒𝑟𝑣𝑜 2 = 12,02 kg. cm
Gambar 3.13. Analisis torsi motor servo 3
Berdasarkan gambar 3.13, perhitungan torsi motor servo tiga merupakan penjumlahan
dua torsi yang bekerja pada lengan robot sebagai berikut :
𝜏𝑠𝑒𝑟𝑣𝑜 3 = (𝐹4𝑟4𝑆𝑖𝑛900) + (𝐹5𝑟5𝑆𝑖𝑛900)
𝜏𝑠𝑒𝑟𝑣𝑜 3 = (𝑚4𝑔𝑟4𝑆𝑖𝑛900) + (𝑚5𝑔𝑟5𝑆𝑖𝑛900)
𝜏𝑠𝑒𝑟𝑣𝑜 3 = (0,054 𝑥 9,8 𝑥 0,14 𝑥 1) + (0,085 𝑥 9,8 𝑥 0,24 𝑥 1)
𝜏𝑠𝑒𝑟𝑣𝑜 3 = (0,074 + 0,200)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
51
𝜏𝑠𝑒𝑟𝑣𝑜 3 = 0,274 𝑁. 𝑚
𝜏𝑠𝑒𝑟𝑣𝑜 3 = 2,79 kg. cm
Gambar 3.14. Analisis torsi motor servo 4
Berdasarkan gambar 3.14, perhitungan torsi motor servo empat sebagai berikut :
𝜏𝑠𝑒𝑟𝑣𝑜 4 = 𝐹6𝑟6𝑆𝑖𝑛900
𝜏𝑠𝑒𝑟𝑣𝑜 4 = 𝑚6𝑔𝑟6𝑆𝑖𝑛900
𝜏𝑠𝑒𝑟𝑣𝑜 4 = 0,031 𝑥 9,8 𝑥 0,10 𝑥 1
𝜏𝑠𝑒𝑟𝑣𝑜 4 = 0,030 N. m
𝜏𝑠𝑒𝑟𝑣𝑜 4 = 0,306 𝑘𝑔. 𝑐𝑚
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
52
Gambar 3.15. Analisis torsi servo 1
Servo satu bergerak rotasi (horizontal) untuk mengarahkan lengan robot dalam
mengambil dan meletakan objek. Untuk dapat bergerak, servo satu membutuhkan torsi.
Torsi yang dibutuhkan untuk menggerakkan servo dari posisi diam hingga bergerak dapat
dicari besar nilainya. Gambar 3.15 menunjukan Sebelum menghitung torsi motor servo satu,
terlebih dahulu dilakukan perhitungan untuk mencari kecepatan sudut rotasi servo
menggunakan persamaan 2.11 sebagai berikut :
𝜔1 = 2𝜋
𝑇
𝜔1 = 2𝜋
1,26
𝜔1 = 4,987 𝑟𝑎𝑑/𝑠
Dari hasil perhitungan kecepatan sudut servo satu ketika sudah bergerak, maka torsi
dapat dihitung menggunakan persamaan 2.8, 2,9 dan 2,10 sebagai berikut :
∑ τ = (𝑚𝑟2) 𝑥 (𝜔1 − 𝜔0
𝑡1 − 𝑡0)
∑ τ = (0,274 𝑥 (0,38)2) 𝑥 (4,987 − 0
1 − 0)
∑ τ = (0,0396) 𝑥 (4,987
1)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
53
∑ τ = 0,1973 𝑁. 𝑚
∑ τ = 2,012 𝑘𝑔. 𝑐𝑚
Keterangan :
m = 274 gram (massa lengan robot)
r = 38 cm (panjang lengan robot)
𝜔0 = 0 (keadaan diam)
𝜔1 = 4,987 rad/s (keadaan bergerak)
𝑡0 = 0 (keadaan diam)
𝑡1 = 1 sekon (keadaan bergerak)
T = 1,26 sekon (waktu yang dibutuhkan servo untuk berotasi (3600))
Berdasarkan hasil perhitungan torsi, motor servo dua, servo tiga dan servo empat
membutuhkan servo yang memiliki torsi lebih besar dari 2,012 kg.cm (servo 1), 12,02 kg.cm
(servo 2), 2,79 kg.cm (servo 3) dan 0,306 kg.cm (servo 4) agar lengan robot dapat begerak.
3.3.3. Motor Servo
Motor servo merupakan aktuator yang digunakan untuk menggerakan lengan robot.
Motor servo yang digunakan yaitu JX PDI-6225-300 untuk servo 1, servo 2 dan servo 3
sebanyak 3 buah dan Towerpro SG90 untuk servo 4 sebanyak 1 buah. Spesifikasi motor
servo dapat dilihat di lampiran.
Alasan menggunakan motor servo JX PDI-6225-300 yaitu karena memiliki torsi yang
cukup kuat yaitu sebesar 25,3 kg.cm dengan tegangan input 6 V, serta harganya yang tidak
terlalu mahal dan masih terjangkau, sedangkan servo Towerpro SG90 digunakan pada
bagian gripper. Bagian gripper tidak membutukan servo dengan torsi yang besar yaitu
berdasarkan hasil perhitungan hanya sebesar 0,309 kg-cm sehingga dapat digunakan untuk
menggerakan gripper dalam mencengkram objek.
Motor servo memiliki 3 buah jalur kabel yaitu vcc, ground dan jalur data. Kabel
berwarna merah merupakan vcc, kabel berwarna hitam atau coklat merupakan ground dan
kabel berwarna kuning merupakan jalur data. Jalur data terhubung dengan port pada
mikrokontroler Atmega32 sebagai jalur pengiriman pulsa PWM yang digunakan untuk
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
54
mengatur sudut putar motor servo. Gambar 3.16 dan 3.17 merupakan motor servo yang
digunakan pada penelitian ini.
Gambar 3.16. Motor servo towerpro SG90 [32]
Gambar 3.17. Motor servo JX PDI-6225-300 [33]
Pulsa PWM dibangkitkan menggunakan timer. Timer berfungsi sebagai
counter/pengitung. Timer selalu menyimpan hitunganya saat menghitung “1, 2, 3, … , 225”
(8bit).
Pada perancangan motor servo, timer diset agar menghitung sampai 225. Jika sudah
mencapai 225, maka timer akan overflow dan memberikan sinyal, disaat inilah PWM bekerja
dan menginstruksikan timer untuk menghitung lagi dari 0. Perbandingan nilai lebar pulsa
terhadap nilai overflow motor servo selama T=20 ms adalah nilai OCR, yang merupakan
cacahan pulsa selama 1 ms sampai 2 ms. Berikut perhitungan overflow sebagai interrupt
sebagai pembangkit PWM.
Frekuensi crystal yang digunakan yaitu 11,059200 MHz, dengan menggunakan rumus
pada persamaan 2.15, didapatkan periode dari frekuensi osilator yaitu 0,090422 x 10-6 s.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
55
Dengan menggunakan timer 0/8bit dan nilai prescaler 1 sebagai pengatur kecepatan
clock maka timer overflow dapat dicari menggunakan persamaan 2.16 sehingga didapatkan
nilai timer overflow yaitu 23,148 x 10-6 s. Sehingga pemberian nilai untuk membuat interrupt
dapat mencacah selama 20 ms yaitu (20 ms / 23,148 x 10-6 s) = 864.
Untuk mencari lebar pulsa dan nilai OCR menggunakan persamaan 2.17 dan 2.18.
Nilai OCR digunakan untuk menentukan sudut putar motor servo. Tabel 3.5 merupakan
contoh perhitungan dalam menentukan lebar pulsa dan nilai OCR terhadap sudut putar motor
servo pada umumnya.
Tabel 3.4. Perhitungan Nilai OCR
Sudut Lebar Pulsa OCR
0° 1 ms 43
30° 1,16 ms 50
45° 1,25 ms 54
90° 1,5 ms 64
180° 2 ms 86
3.3.4. Webcam Dan Area Peletakan Benda
Webcam yang digunakan adalah webcam logitech seri C170. Webcam digunakan
sebagai sensor kamera yang berfungsi untuk meng-capture atau memindai citra analog
sehingga diperoleh citra digital. Citra digital hasil capturing webcam akan diproses oleh
software matlab untuk mengidentifikasi bentuk dan posisi objek. Webcam diletakan diatas
area peletakan benda. Jarak webcam dengan area peletakan benda disesuikan dengan luas
area peletakan benda.
Area peletakan benda memiliki ukuran panjang 28 cm, lebar 21 cm dan berwarna
hitam. Ukuran area tersebut memiliki skala ukuran yang sama dengan ukuran citra yang di
capture oleh webcam yaitu 320 x 240 pixel. Area tersebut dibagi menjadi 12 area posisi
peletakan benda. Masing-masing area berukuran 7 cm x 7 cm. Objek diletakan di tengah
area tersebut dengan posisi dan orientasi yang acak.
Area peletakan benda memiliki nomor posisi 1 sampai dengan 12. Penomoran area
bertujuan untuk mengurutkan pengambilan benda oleh lengan robot. Lengan robot akan
mengambil benda secara berurutan, dimulai dari nomor area yang terkecil hingga yang
terbesar. Penomoran posisi tidak dituliskan pada area peletakan benda, tetapi dituliskan pada
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
56
program di matlab. Visualisasi area peletakan benda ditunjukan oleh gambar 3.18 dan
gambar 3.19.
Gambar 3.18. Visualisasi nomor posisi area peletakan benda
Gambar 3.19. Area peletakan objek
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
57
3.4. Perancangan Perangkat Lunak (software)
Adapun pembahasan dalam perancangan perangkat lunak (software) sebagai berikut :
1) Flowchart Utama
2) Flowchart Akuisisi Citra
3) Flowchart Image Preprocessing
4) Flowchart Labeling dan Segmentasi
5) Flowchart Proses Pengenalan Bentuk Objek pada Matlab
6) Flowchart Proses Penentuan Posisi Objek pada Matlab
7) Flowchart Pengiriman Data Dari Matlab Ke Mikrokontroler
8) Flowchart Proses Pergerakan Servo Lengan Robot
9) Perancangan GUI pada Matlab
3.4.1. Flowchart Utama
Flowchart utama menjelaskan mekanisme lengan robot memindahkan benda
berdasarkan bentuk dan posisi. Berdasarkan gambar 3.19, proses awal sistem dimulai dengan
lengan robot dalam posisi standby, kemudian webcam akan mengakuisisi citra objek dalam
bentuk cira grayscale. Setelah citra di akuisisi, pada tahap image preprocessing, citra objek
akan dikonversi menjadi citra biner kemudian di lakukan noise filtering untuk meningkatkan
kualitas citra. Kemudian dilakukan labeling pada citra objek untuk memberi label pada
setiap objek. Objek yang sudah dilabeling akan disegmentasi sehingga dapat diolah untuk
mrngrtahui bentuk dan posisi objek. Setelah bentuk dan posisi objek dikenali, matlab akan
mengirim list karakter ke mikrokontroler. Apabila mikrokontroler menerima karakter, maka
led indikator akan menyala.Setelah data diterima oleh mikrokontroler, data tersebut diolah
untuk menggerakan lengan robot dalam mengambil dan memindahkan benda ke kotak
peletakan benda. Flowchart mekanisme lengan robot memindahkan benda berdasarkan
bentuk dan posisi ditunjukan oleh gambar 3.20.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
58
Mulai
Selesai
Lengan robot
Standby
Akuisisi citra
objek
webcam
Image
preprocessing
Pengenalan
bentuk dan
posisi objek
Karakter = a1/a2/
/a9, ax/ay/az?
Karakter = b1/b2/
/b9, bx/by/bz?
Karakter = c1/c2/
/c9, cx/cy/cz?
Lengan robot
mengambil benda
kubus di posisi 1/2/ /
12 dan meletakkan di
kotak 1
Lengan robot
siaga
List karakter =
0?
Ya Ya
Ya
TidakTidak
Tidak
Matlab mengirim
list karakter ke
mikrokontroler
Mikrokontroler
menerima list karakter
?
Ya
Tidak
Lengan robot
mengambil benda
tabung di posisi 1/2/ /
12 dan meletakkan di
kotak 2
Lengan robot
mengambil benda
prisma segitiga di
posisi 1/2/ /12 dan
meletakkan di kotak 3
A
A
Membaca list
karakter
Labeling dan
Segmentasi
Apakah ada
objek ?
Ya
Tidak
Output :
LED
Indikator
Gambar 3.20. Flowchart keseluruhan sistem
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
59
3.4.2. Akuisisi Citra
Akuisisi citra merupakan proses memindai (scan) citra analog sehingga diperoleh citra
digital. Akuisisi citra dilakukan dengan menggunakan web camera , yang terhubung dengan
komputer menggunakan kabel USB. Citra hasil akuisisi tersebut akan diproses oleh matlab
di komputer. Proses akuisisi citra ditunjukan oleh gambar 3.21. Tahap awal akuisisi citra
dilakukan dengan meng-on kan web camera, dan pada proses capture sistem akan
mengambil citra objek, yang berbentuk citra grayscale.
Gambar 3.21. Flowchart akuisisi citra
3.4.3. Image Preprocessing
Image Preprocessing merupakan tahap awal dalam pengolahan citra yang terdiri dari
beberapa proses yaitu mengkonversi citra biner menjadi citra grayscale dan noise filtering.
Flowchart image preprocessing ditunjukan oleh gambar 3.22.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
60
Gambar 3.22. Flowchart image preprocessing
Hasil akuisisi citra yang berbentuk citra grayscale, dikonversikan menjadi citra biner.
Pengkonversian citra grayscale ke citra biner dapat dilakukan menggunakan persamaan 2.1,
tetapi pada matlab menggunakan program im2bw.m yang prosesnya didasarkan pada metode
thresholding. Thresholding digunakan untuk mengelompokkan nilai derajat keabuan pada
setiap pixel ke dalam 2 kelas yaitu hitam (0) dan putih (1). Jika nilai intensitas citra grayscale
lebih besar atau sama dengan nilai thresholding maka nilai intensitas citra grayscale akan
diubah menjadi 1 (berwarna putih), sedangkan jika nilai intensitas citra grayscale lebih
rendah dari nilai thresholding maka nilai intensitas citra grayscale akan diubah menjadi 0
(berwarna hitam). Proses selanjutnya yaitu noise filtering pada citra biner. Noise filtering
merupakan proses mengurangi noise berupa titik-titik putih pada area berwarna hitam. Noise
filtering dilakukan agar mendapatkan kualitas citra yang lebih baik. Noise filtering dilakukan
menggunakan persamaan 2.2 tetapi pada matlab menggunakan program medfilt2.m.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
61
3.4.4. Labeling dan Segmentasi
Setelah melalui proses noise filtering maka proses selanjutnya yaitu labeling objek.
Tujuan dari labeling objek adalah memberi label/identitas pada masing-masing citra objek.
Program pada matlab yang digunakan untuk labeling objek yaitu program bwlabel.m. Proses
berikutnya yaitu segmentasi citra, proses ini bertujuan untuk memisahkan setiap citra objek
sesuai dengan hasil labeling objek agar mempermudah dalam proses pengidentifikasian citra
objek. Labeling dan segmentasi ditunjukan oleh gambar 3.23.
Mulai
Input :
Citra Hasil
Preprocessing
Segmentasi
Citra
Output :
Citra Hasil
Segmentasi
Selesai
Labeling Objek
Gambar 3.23. Flowchart labeling dan segmentasi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
62
3.4.5. Proses Pengenalan Bentuk Objek Pada Matlab
Proses pengenalan bentuk benda dilakukan dengan mencari nilai area, perimeter dan
thinness ratio dari citra objek hasil segmentasi. Untuk mendapatkan nilai area dapat
menggunakan persamaan 2.3. Pada matlab, nilai area dicari menggunakan program
regionprops.m. Setelah mendapatkan nilai area, tahap selanjutnya adalah dengan mencari
nilai perimeter dari citra objek. Untuk mendapatkan nilai perimeter menggunakan program
regionprops.m. Proses selanjutnya yaitu mencari nilai thinness ratio. Nilai thinness
ratiodicari dari perbandingan antara nilai area dengan nilai perimeter. Untuk mendapatkan
nilai thinnes ratio pada matlab digunakan rumus pada persamaan 2.4. Nilai thinnes ratio ini
yang digunakan sebagai dasar penentuan bentuk objek. Nilai thinness ratio disimpan dalam
variabel f0. Nilai variabel f0 akan dibandingkan dengan nilai variabel a (objek kubus), b
(objek tabung), c (objek prisma segitiga). Nilai variabel a, b, c mewakili nilai thinness ratio
dari masing-masing objek tersebut. Proses pengenalan bentuk benda pada matlab ditunjukan
oleh gambar 3.24.
Gambar 3.24. Flowchart proses pengenalan bentuk objek pada matlab
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
63
3.4.6. Proses Penentuan Posisi Objek Pada Matlab
Proses penentuan posisi objek dilakukan dengan mencari nilai centroid masing-masing
objek dari citra hasil segmentasi. Nilai centroid dapat dicari menggunakan persamaan 2.5
dan 2.6 tetapi pada matlab dapat dicari menggunakan program regionprops.m. Nilai
centroid berupa koordinat pusat (x dan y) dari citra objek. Nilai tersebut disimpan dalam
sebuah variabel Cen dan akan dibandingkan dengan variabel d1 sampai dengan d12 untuk
menentukan posisi objek. d1 sampai dengan d12 merupakan variabel yang mewakili batas
pada sumbu x dan sumbu y untuk masing-masing posisi. Proses penentuan posisi objek
ditunjukan oleh gambar 3.25, 3.26, dan 3.27.
Gambar 3.25. Flowchart proses penentuan posisi objek pada matlab
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
64
Gambar 3.26. (Lanjutan) Flowchart proses penentuan posisi objek pada matlab
Gambar 3.27. (Lanjutan) Flowchart proses penentuan posisi objek pada matlab
3.4.7. Pengiriman Data Dari Matlab ke Mikrokontroler
Pengiriman data dari matlab ke mikrokontroler menggunakan komunikasi USART.
Proses awal dari pengiriman data dari matlab ke mikrokontroler yaitu ukuran dan posisi
objek di inisialisasi menjadi karakter dan disatukan ke dalam sebuah list. Inisialisasi karakter
objek beserta posisinya ditunjukan oleh tabel 3.5, 3.6, 3.7. List yang berisikan kumpulan
karakter ini yang nantinya akan dikirimkan ke mikrokontroler untuk diolah menjadi
pergerakan motor servo. Flowchart pengiriman data dari matlab ke mikrokontroler dapat
dilihat pada gambar 3.28.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
65
Mulai
Input :
Bentuk dan
posisi
objek
Inisialisasi data
input menjadi
karakter
Mengirimkan list
karakter ke
mikrokontroler
List karakter dari
setiap objek
Selesai
Gambar 3.28. Flowchart pengiriman data dari matlab ke mikrokontroler
Tabel 3.5. Inisialisasi karakter objek kubus beserta posisinya
Karakter Bentuk Objek Posisi Objek
a1 Kubus 1
a2 Kubus 2
a3 Kubus 3
a4 Kubus 4
a5 Kubus 5
a6 Kubus 6
a7 Kubus 7
a8 Kubus 8
a9 Kubus 9
ax Kubus 10
ay Kubus 11
az Kubus 12
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
66
Tabel 3.6. Inisialisasi karakter objek tabung beserta posisinya
Karakter Bentuk Objek Posisi Objek
b1 Tabung 1
b2 Tabung 2
b3 Tabung 3
b4 Tabung 4
b5 Tabung 5
b6 Tabung 6
b7 Tabung 7
b8 Tabung 8
b9 Tabung 9
bx Tabung 10
by Tabung 11
bz Tabung 12
Tabel 3.7. Inisialisasi karakter objek prisma segitiga beserta posisinya
Karakter Bentuk Objek Posisi Objek
c1 Prisma segitiga 1
c2 Prisma segitiga 2
c3 Prisma segitiga 3
c4 Prisma segitiga 4
c5 Prisma segitiga 5
c6 Prisma segitiga 6
c7 Prisma segitiga 7
c8 Prisma segitiga 8
c9 Prisma segitiga 9
cx Prisma segitiga 10
cy Prisma segitiga 11
cz Prisma segitiga 12
3.4.8. Proses Pergerakan Servo Lengan Robot
Pergerakan lengan robot ketika mengambil dan meletakkan benda berdasarkan pada
karakter yang diterima oleh mikrokontroler. Karakter yang diterima akan diolah oleh
mikrokontroler untuk menggerakkan masing-masing motor servo. Dalam proses mengambil
dan meletakkan benda, motor servo akan bergerak secara bergantian dimulai dari servo 1,
servo 2, servo 3, dan servo 4.
Proses awal pemindahan benda yaitu mula-mula lengan robot dalam posisi standby,
kemudian mikrokontroler membaca list karakter dan mengolah masing-masing karakter
menjadi pergerakan servo yaitu pergerakan lengan robot pada saat mengambil benda, posisi
siaga, meletakkan benda, dan kembali ke posisi standby. Flowchart pergerakan lengan robot
ditunjukan pada gambar 3.29 sampai dengan gambar 3.35.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
67
Mulai
Input :
List
Karakter
matlab
Karakter =
a1?
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Lengan robot
dalam posisi
Standby
Lengan robot
posisi Siaga
Karakter =
a2?
Servo 1
berputar ke
Sudut A2
Servo 2
berputar ke
Sudut B2
Servo 3
berputar ke
Sudut C2
Servo 4
berputar ke
Sudut D2
Karakter =
a3?
Servo 1
berputar ke
Sudut A3
Servo 2
berputar ke
Sudut B3
Servo 3
berputar ke
Sudut C3
Servo 4
berputar ke
Sudut D3
Karakter =
a4?
Servo 1
berputar ke
Sudut A4
Servo 2
berputar ke
Sudut B4
Servo 3
berputar ke
Sudut C4
Servo 4
berputar ke
Sudut D4
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
dalam posisi
Standby
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
List
karakter =
0?
Selesai
Membaca list
karakter
A
Men
gam
bil B
end
aM
ele
tak
an B
en
da
H
H I J K L M N
Ya Ya Ya Ya
Tidak Tidak Tidak Tidak
Ya
Tidak
Gambar 3.29. Flowchart pergerakan servo lengan robot
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
68
Karakter =
a6?
Servo 1
berputar ke
Sudut A6
Servo 2
berputar ke
Sudut B6
Servo 3
berputar ke
Sudut C6
Servo 4
berputar ke
Sudut D6
Lengan robot
posisi Siaga
Karakter =
a7?
Servo 1
berputar ke
Sudut A7
Servo 2
berputar ke
Sudut B7
Servo 3
berputar ke
Sudut C7
Servo 4
berputar ke
Sudut D7
Karakter =
a8?
Servo 1
berputar ke
Sudut A8
Servo 2
berputar ke
Sudut B8
Servo 3
berputar ke
Sudut C8
Servo 4
berputar ke
Sudut D8
Karakter =
a9?
Servo 1
berputar ke
Sudut A9
Servo 2
berputar ke
Sudut B9
Servo 3
berputar ke
Sudut C9
Servo 4
berputar ke
Sudut D9
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
dalam posisi
Standby
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Karakter =
ax?
Servo 1
berputar ke
Sudut A10
Servo 2
berputar ke
Sudut B10
Servo 3
berputar ke
Sudut C10
Servo 4
berputar ke
Sudut D10
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Tidak TidakTidakTidakTidakBA
Mengam
bil B
enda
Mele
tak
kan
Ben
da
I
Ya Ya Ya Ya Ya
Karakter =
a5?
Servo 1
berputar ke
Sudut A5
Servo 2
berputar ke
Sudut B5
Servo 3
berputar ke
Sudut C5
Servo 4
berputar ke
Sudut D5
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Ya
Tidak
Gambar 3.30. (Lanjutan) Flowchart pergerakan servo lengan robot
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
69
Meletak
kan
Ben
da
Men
gam
bil B
end
a
Karakter =
ay?
Servo 1
berputar ke
Sudut A11
Servo 2
berputar ke
Sudut B11
Servo 3
berputar ke
Sudut C11
Servo 4
berputar ke
Sudut D11
Lengan robot
posisi Siaga
Karakter =
az?
Servo 1
berputar ke
Sudut A12
Servo 2
berputar ke
Sudut B12
Servo 3
berputar ke
Sudut C12
Servo 4
berputar ke
Sudut D12
Karakter =
b1?
Servo 1
berputar ke
Sudut E1
Servo 2
berputar ke
Sudut F1
Servo 3
berputar ke
Sudut G1
Servo 4
berputar ke
Sudut H1
Karakter =
b2?
Servo 1
berputar ke
Sudut E2
Servo 2
berputar ke
Sudut F2
Servo 3
berputar ke
Sudut G2
Servo 4
berputar ke
Sudut H2
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
dalam posisi
Standby
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Karakter =
b3?
Servo 1
berputar ke
Sudut E3
Servo 2
berputar ke
Sudut F3
Servo 3
berputar ke
Sudut G3
Servo 4
berputar ke
Sudut H3
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Tidak TidakTidakTidakTidakCB
J
Ya Ya Ya Ya Ya
Gambar 3.31. (Lanjutan) Flowchart pergerakan servo lengan robot
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
70
Meletak
kan
Ben
da
Men
gam
bil B
end
a
Karakter =
b4?
Servo 1
berputar ke
Sudut E4
Servo 2
berputar ke
Sudut F4
Servo 3
berputar ke
Sudut G4
Servo 4
berputar ke
Sudut H4
Lengan robot
posisi Siaga
Karakter =
b5?
Servo 1
berputar ke
Sudut E5
Servo 2
berputar ke
Sudut F5
Servo 3
berputar ke
Sudut G5
Servo 4
berputar ke
Sudut H5
Karakter =
b6?
Servo 1
berputar ke
Sudut E6
Servo 2
berputar ke
Sudut F6
Servo 3
berputar ke
Sudut G6
Servo 4
berputar ke
Sudut H6
Karakter =
b7?
Servo 1
berputar ke
Sudut E7
Servo 2
berputar ke
Sudut F7
Servo 3
berputar ke
Sudut G7
Servo 4
berputar ke
Sudut H7
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
dalam posisi
Standby
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Karakter =
b8?
Servo 1
berputar ke
Sudut E8
Servo 2
berputar ke
Sudut F8
Servo 3
berputar ke
Sudut G8
Servo 4
berputar ke
Sudut H8
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Tidak TidakTidakTidakTidakDC
K
Ya Ya Ya Ya Ya
Gambar 3.32. (Lanjutan) Flowchart pergerakan servo lengan robot
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
71
Meletak
kan
Ben
da
Men
gam
bil B
end
aKarakter =
b9?
Servo 1
berputar ke
Sudut E9
Servo 2
berputar ke
Sudut F9
Servo 3
berputar ke
Sudut G9
Servo 4
berputar ke
Sudut H9
Lengan robot
posisi Siaga
Karakter =
bx?
Servo 1
berputar ke
Sudut E10
Servo 2
berputar ke
Sudut F10
Servo 3
berputar ke
Sudut G10
Servo 4
berputar ke
Sudut H10
Karakter =
by?
Servo 1
berputar ke
Sudut E11
Servo 2
berputar ke
Sudut F11
Servo 3
berputar ke
Sudut G11
Servo 4
berputar ke
Sudut H11
Karakter =
bz?
Servo 1
berputar ke
Sudut E12
Servo 2
berputar ke
Sudut F12
Servo 3
berputar ke
Sudut G12
Servo 4
berputar ke
Sudut H12
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
dalam posisi
Standby
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Karakter =
c1?
Servo 1
berputar ke
Sudut I1
Servo 2
berputar ke
Sudut J1
Servo 3
berputar ke
Sudut K1
Servo 4
berputar ke
Sudut L1
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Tidak TidakTidakTidakTidakED
L
Ya Ya Ya Ya Ya
Gambar 3.33. (Lanjutan) Flowchart pergerakan servo lengan robot
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
72
Meletak
kan
Ben
da
Men
gam
bil B
end
a
Karakter =
c2?
Servo 1
berputar ke
Sudut I2
Servo 2
berputar ke
Sudut J2
Servo 3
berputar ke
Sudut K2
Servo 4
berputar ke
Sudut L2
Lengan robot
posisi Siaga
Karakter =
c3?
Servo 1
berputar ke
Sudut I3
Servo 2
berputar ke
Sudut J3
Servo 3
berputar ke
Sudut K3
Servo 4
berputar ke
Sudut L3
Karakter =
c4?
Servo 1
berputar ke
Sudut I4
Servo 2
berputar ke
Sudut J4
Servo 3
berputar ke
Sudut K4
Servo 4
berputar ke
Sudut L4
Karakter =
c5?
Servo 1
berputar ke
Sudut I5
Servo 2
berputar ke
Sudut J5
Servo 3
berputar ke
Sudut K5
Servo 4
berputar ke
Sudut L5
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Lengan robot
dalam posisi
Standby
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Karakter =
c6?
Servo 1
berputar ke
Sudut I6
Servo 2
berputar ke
Sudut J6
Servo 3
berputar ke
Sudut K6
Servo 4
berputar ke
Sudut L6
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Tidak TidakTidakTidakTidakFE
Ya Ya Ya Ya Ya
M
Gambar 3.34. (Lanjutan) Flowchart pergerakan servo lengan robot
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
73
Karakter =
c7?
Servo 1
berputar ke
Sudut I7
Servo 2
berputar ke
Sudut J7
Servo 3
berputar ke
Sudut K7
Servo 4
berputar ke
Sudut L7
Lengan robot
posisi Siaga
Karakter =
c8?
Servo 1
berputar ke
Sudut I8
Servo 2
berputar ke
Sudut J8
Servo 3
berputar ke
Sudut K8
Servo 4
berputar ke
Sudut L8
Karakter =
c9?
Servo 1
berputar ke
Sudut I9
Servo 2
berputar ke
Sudut J9
Servo 3
berputar ke
Sudut K9
Servo 4
berputar ke
Sudut L9
Karakter =
cx?
Servo 1
berputar ke
Sudut I10
Servo 2
berputar ke
Sudut J10
Servo 3
berputar ke
Sudut K10
Servo 4
berputar ke
Sudut L10
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Lengan robot
dalam posisi
Standby
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Karakter =
cy?
Servo 1
berputar ke
Sudut I11
Servo 2
berputar ke
Sudut J11
Servo 3
berputar ke
Sudut K11
Servo 4
berputar ke
Sudut L11
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Tidak TidakTidakTidakTidak
N
F Karakter = cz?
Servo 1
berputar ke
Sudut I12
Servo 2
berputar ke
Sudut J12
Servo 3
berputar ke
Sudut K12
Servo 4
berputar ke
Sudut L12
Lengan robot
posisi Siaga
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Ya Ya Ya Ya Ya
Mengam
bil B
enda
Mele
takkan B
enda
Gambar 3.35. (Lanjutan) Flowchart pergerakan servo lengan robot
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
74
3.4.9. Perancangan GUI Matlab
Tujuan pembuatan GUI (Graphical User Interface) yaitu membuat program terlihat
lebih praktis sehingga mempermudah pengguna (user) dalam memahami program yang
dibuat. GUI memiliki peran yang sangat penting, karena dengan adanya GUI, pengguna
dapat melihat apa yang sedang terjadi didalam program seperti pemrosesan data dan lain-
lain. GUI yang dibuat didesain untuk menampilkan data atau informasi dari proses
identifikasi objek, yaitu citra grayscale hasil capturing webcam, citra biner serta posisi dan
bentuk objek. Perancangan GUI ditunjukan oleh gambar 3.36.
OBJEK
HASIL CAPTURE
CITRA BINER
POSISI
POSISI
POSISI
POSISI
POSISI
BENTUK OBJEK
BENTUK OBJEK
BENTUK OBJEK
BENTUK OBJEK
BENTUK OBJEK
Tombol
Camera ON
Tombol
Capture Tombol
Exit
PORT COMM
Tombol
Proses
APLIKASI COMPUTER VISION PADA LENGAN ROBOT PEMINDAH BENDA
BERDASARKAN BENTUK DAN POSISI
Gambar 3.36. Perancangan GUI pada matlab
Tabel 3.8 Keterangan GUI
Nama Bagian Keterangan
Tombol “Camera on” Untuk menghidupkan webcam
Tombol “Capture” Untuk mengambil citra objek
Tombol “Proses” Untuk memulai proses pengenalan objek
Tombol “Exit” Untuk keluar dari program
Objek Untuk menampilkan citra secara langsung dari webcam
Citra Biner Untuk menampilkan citra biner
Hasil Capture Untuk menampilkan citra grayscale
Posisi Untuk menampilkan posisi objek
Bentuk Objek Untuk menampilkan bentuk objek
Pop up menu Untuk memilih port COM
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
75
BAB IV
HASIL DAN PEMBAHASAN
Pada bab ini, akan dibahas mengenai hasil perancangan perangkat keras (hardware)
dan hasil pengamatan dari aplikasi computer vision pada lengan robot pemindah benda
berdasarkan bentuk dan posisi. Hasil perancangan perangkat keras (hardware) berupa
bentuk fisik dan sistem kerja lengan robot, wiring motor servo pada minimum sistem
Atmega32 yang dilengkapi LCD 16x2 sebagai penampil data karakter yang dikirim matlab,
data posisi dan bentuk objek, webcam dan area peletakan benda, benda tiga dimensi dan
kotak peletakan benda. Hasil pengamatan berupa data pengenalan bentuk dan posisi objek,
data sudut motor servo dan pergerakan lengan robot, tingkat keberhasilan pengenalan bentuk
dan posisi objek, dan tingkat keberhasilan lengan robot ketika mengambil dan memindahkan
objek ke kotak peletakan yang telah disiapkan.
4.1. Perangkat Keras (Hardware) Lengan Robot
4.1.1. Bentuk Fisik dan Sistem Kerja Lengan Robot
Lengan robot memiliki bentuk fisik seperti yang ditunjukan pada gambar 3.8. Lengan
robot terbuat dari bahan akrilik berwarna putih dengan tebal 3 mm. Lengan robot dibuat
sesuai dengan part-part yang ditunjukan pada gambar 3.2 sampai dengan gambar 3.6.
Keseluruhan sistem lengan robot juga dibuat sesuai dengan desain sistem yang ditunjukan
pada gambar 3.9 dan 3.10. Tetapi pada implementasinya, ditambahkan sistem percahayaan
yang diletakan di atas area peletakan objek. Sistem pencahayaan berfungsi untuk memberi
penerangan pada area objek, supaya citra hasil capturing webcam lebih berkualitas.
Keseluruhan sistem lengan robot ditunjukan oleh gambar 4.1, bentuk fisik lengan robot
tampak samping ditunjukan oleh gambar 4.2 sedangkan lengan robot tampak atas ditunjukan
oleh gambar 4.3.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
76
Gambar 4.1. Keseluruhan sistem lengan robot
Gambar 4.2. Lengan robot tampak samping
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
77
Gambar 4.3. Lengan robot tampak atas
Mekanisme sistem kerja lengan robot yaitu mula-mula objek diletakan pada area
peletakan benda yang berukuran 21 cm x 28 cm. Area peletakan benda terbagi menjadi 12
posisi, masing-masing posisi berukuran 7 cm x 7 cm. Objek diletakan ditengah posisi area
peletakan benda dengan orientasi dan posisi peletakan yang bisa acak pada centroid area-
area tertentu. Selanjutnya webcam yang diletakan diatas area peletakan benda akan meng-
capture citra objek dan areanya. Kemudian citra hasil capturing webcam akan diolah oleh
matlab untuk dikenali bentuk dan posisi objek. Setelah objek dikenali, maka laptop melalui
software matlab akan mengirimkan karakter yang dikomunikasikan secara serial kepada
mikrokontroler menggunakan modul USB to TTL converter untuk menggerakan motor servo
pada lengan robot. Lengan robot akan mengambil objek dimulai dari posisi terkecil hingga
terbesar dan memindahkannya menuju kotak peletakan berdasarkan bentuk dan posisi objek.
GUI matlab digunakan sebagai penampil informasi dari hasil image processing. Selain itu,
data karakter yang dikirim oleh matlab, data posisi dan bentuk objek juga ditampilkan pada
LCD 16x2.
4.1.2. Wiring Motor Servo pada Minimum Sistem Atmega32 Beserta LCD
16x2
Pembuatan wiring motor servo pada minimum sistem Atmega32 memiliki perbedaan
dengan perancangan wiring seperti yang ditunjukan oleh gambar 3.11. Berdasarkan wiring
yang ditunjukan oleh gambar 3.11, kabel data motor servo dihubungkan dengan port timer
pada minimum sistem Atmega32, tetapi dalam implementasinya, kabel data servo
dihubungkan ke PORTB.0, PORTB.1, PORTB.2 dan PORTB.3. Berdasarkan hasil evaluasi
dan percobaan, kabel data servo yang dihubungkan ke port timer menyebabkan pergerakan
servo tidak menentu sehingga pada penelitian ini, kabel data servo dihubungkan ke
PORTB.0, PORTB.1, PORTB.2 dan PORTB.3 untuk mengontrol servo dengan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
78
menggunakan fasilitas interrupt timer0 sehingga pergerakan servo dapat dikontrol. Selain
itu, wiring yang dibuat juga tidak menggunakan power suppy dan lampu led indikator. Hal
ini karena dengan sumber tegangan dan ground dari minimum sistem atmega32 sudah cukup
untuk menggerakan servo. Led indikator digantikan oleh LCD 16x2 yang berfungsi sebagai
penampil data dan informasi berupa karakter yang dikirim oleh software matlab, serta bentuk
dan posisi objek. Hal ini bertujuan supaya sistem lebih komunikatif. Wiring motor servo
pada minimum sistem Atmega32 beserta LCD 16x2 dapat dilihat pada lampiran.
4.1.3. Webcam dan Area Peletakan Objek
Webcam dan area dibuat sesuai perancangan pada bab 3. Webcam untuk meng-capture
objek sehingga didapatkan citra digital dari objek yang akan di identifikasi. Webcam
ditempatkan diatas area peletakan objek. Tinggi peletakan webcam disesuaikan dengan luas
area, ini bertujuan supaya ukuran pixel citra hasil capturing webcam memiliki skala ukuran
yang sama dengan area peletakan benda. Citra hasil capturing webcam di set dengan ukuran
320 x 240 pixel sedangkan area peletakan benda memiliki panjang 28 cm x 21 cm.
Area peletakan benda dibuat dengan bahan akrilik setebal 3 mm. Warna area peletakan
benda yaitu hitam pekat. Ini bertujuan supaya area tidak memantulkan cahaya sehingga hasil
capturing webcam menjadi lebih berkualitas. Area peletakan benda diletakan 10 cm didepan
lengan robot, dan tingginya di samakan dengan poros servo 2 sehingga perhitungan invers
kinematik untuk menentukan pergerakan lengan robot menjadi lebih akurat. Urutan
penomoran area peletakan benda berdasarkan letak posisi lengan robot sehingga posisi 1
berada di sebalah kiro robot.
Area peletakan benda dibagi menjadi 12 posisi, masing-masing posisi memiliki batas
nilai pixel pada sumbu x dan y. Batas nilai pixel ini digunakan untuk menentukan posisi
objek berdasarkan centroid objek. Penentuan batas nilai pada sumbu x dan y untuk masing-
masing posisi ditunjukan oleh gambar 4.4 sedangkan batas nilai pixel untuk masing-masing
posisi dapat dilihat pada tabel 4.1. Data pada tabel 4.1 merupakan batas nilai sumbu x dan y
dilihat dari sudut pandang lengan robot, nilai batas ini berkebalikan jika dilihat dari sudut
pandang posisi webcam (batas nilai pixel posisi 1 berkebalikan dengan posisi 12, posisi 2
berkebalikan dengan posisi 11, dan seterusnya). Pada program matlab, nilai batas sumbu x
dan sumbu y yang digunakan yaitu berdasarkan sudut pandang posisi webcam.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
79
Gambar 4.4. Area peletakan objek beserta batas nilai pixel
Tabel 4.1. Batas nilai pixel pada sumbu x dan y untuk masing-masing posisi
Posisi Sumbu x Sumbu y
Batas
Minimal
Batas
Maksimal
Batas
Minimal
Batas
Maksimal
1 0 80 160 240
2 80 160 160 240
3 160 240 160 240
4 240 320 160 240
5 0 80 80 160
6 80 160 80 160
7 160 240 80 160
8 240 320 80 160
9 0 80 0 80
10 80 160 0 80
11 160 240 0 80
12 240 320 0 80
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
80
4.1.4. Objek 3 Dimensi dan Kotak Peletakan Benda
Objek tiga dimensi terbuat dari bahan styrofoam dan berwarna kuning. Objek yang
dibuat berbentuk kubus, tabung dan prisma segitiga. Objek kubus memiliki panjang rusuk
3,5 cm, objek tabung memiliki diameter 3,5 cm, dan objek prisma segitiga memiliki panjang
rusuk dan tinggi 3,5 cm. Objek tiga dimensi ditunjukan oleh gambar 4.5.
Gambar 4.5. Objek tiga dimensi
Kotak peletakan objek terbuat dari bahan akrilik setebal 3 mm dan memiliki ukuran
10 cm x 10 cm x 10 cm. Kotak peletakan objek kubus berwarna hijau, kotak peletakan objek
tabung berwarna merah sedangkan kotak peletakan objek prisma segitiga berwarna kuning.
Kotak peletakan objek kubus, tabung dan prisma segitiga ditunjukan oleh gambar 4.6.
Gambar 4.6. Kotak peletakan objek
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
81
4.2. Hasil Data Pengujian dan Pembahasan
Pada sub bab ini, dilakukan pengujian dan pembahasan terhadap nilai area, perimeter
thinness ratio dan centroid dari masing-masing objek pada 12 posisi, sudut motor servo,
pergerakan lengan robot, tingkat keberhasilan sistem saat mengenali bentuk dan posisi dari
masing-masing objek pada posisi 1 sampai dengan posisi 12, serta tingkat keberhasilan
lengan robot saat mengambil dan memindahkan benda berdasarkan bentuk dan posisi.
4.2.1. Pengujian Pengenalan Bentuk dan Posisi Objek
4.2.1.1. Pengujian Nilai Area, Perimeter dan Thinness Ratio Objek
Pengujian nilai area, perimeter dan thinness ratio untuk mengetahui nilai area,
perimeter dan thinness ratio dari masing-masing objek yang akan di proses dan dikenali
bentuknya dicari menggunakan rumus yang mengacu pada persamaan 2.3 dan 2.4.
Pengambilan data dilakukan sebanyak 12 kali untuk masing-masing bentuk objek. Dari hasil
pengujian, diperoleh data yang ditunjukan pada tabel 4.2, 4.3 dan 4.4 sebagai berikut.
Tabel 4.2. Data Nilai Area Masing-Masing Bentuk Benda
Posisi Nilai Area
Prisma segitiga Tabung Kubus
1 800 1521 1889
2 761 1565 1863
3 686 1447 1890
4 672 1346 1794
5 694 1383 1799
6 805 1504 1808
7 737 1521 1840
8 730 1374 1799
9 646 1392 1831
10 641 1311 1652
11 753 1425 1714
12 642 1472 1803
Rerata 714 1438 1807
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
82
Gambar 4.7. Grafik Nilai Area Objek
Tabel 4.3. Data Nilai Perimeter Masing-Masing Bentuk Benda
Posisi Nilai Perimeter
Prisma segitiga Tabung Kubus
1 118,17 136,07 168,07
2 114,09 138,76 162,27
3 108,63 132,39 164,47
4 108,23 128,11 162,89
5 107,77 129,15 158,25
6 117,35 135,82 160,51
7 111,89 135,32 160,59
8 111,98 128,84 159,26
9 106,45 129,39 160,52
10 106,20 126,45 155,24
11 113,03 131,47 155,25
12 104,43 134,22 162,20
Rerata 110,68 132,17 160,79
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4 5 6 7 8 9 10 11 12
Nil
ai A
rea
Posisi Peletakan Objek
Grafik Nilai Area Objek
Prisma Segitiga Tabung Kubus
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
83
Gambar 4.8. Grafik Nilai Perimeter Objek
Tabel 4.4. Data Nilai Thinness Ratio Masing-Masing Bentuk Benda
Posisi Nilai Thinness Ratio
Prisma segitiga Kubus Tabung
1 0,72 0,84 1,03
2 0,73 0,89 1,02
3 0,73 0,87 1,07
4 0,72 0,85 1,03
5 0,75 0,90 1,05
6 0,73 0,88 1,02
7 0,74 0,89 1,04
8 0,73 0,89 1,04
9 0,72 0,89 1,05
10 0,71 0,86 1,03
11 0,74 0,89 1,04
12 0,74 0,86 1,03
Rerata 0,73 0,87 1,04
Range Data 0,66-0,80 0,80-0,95 0,95-1,20
0
20
40
60
80
100
120
140
160
180
1 2 3 4 5 6 7 8 9 10 11 12
Nil
ai P
erim
eter
Posisi Peletakan Objek
Grafik Nilai Perimeter Objek
Prisma Segitiga Tabung Kubus
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
84
Gambar 4.9. Grafik Nilai Thinness Ratio Objek
Berdasarkan tabel 4.2, tabel 4.3 dan tabel 4.4, rerata nilai area, perimeter dan
thinness ratio menunjukkan bahwa setiap objek memiliki karakteristik nilai tertentu yang
berbeda-beda. Nilai area dan perimeter objek digunakan dalam perhitungan untuk
mendapatkan nilai thinness ratio objek. Nilai thinness ratio suatu bentuk objek nilainya akan
tetap sama, ini karena thinness ratio merupakan perbandingan antara area dan perimeter dari
suatu objek. Sehingga meskipun ukuran objeknya berbeda, apabila bentuk objeknya sama,
maka nilai thinness rationya tetap sama. Range nilai thinness ratio di tuliskan dalam
program di software matlab yang digunakan untuk mengelompokan objek berdasarkan
bentuknya. Range nilai objek prisma segitiga dituliskan “f0 > 0,66 && f0 < 80”, objek kubus
“f0 > 80 && f0 < 0,95”, objek tabung “f0 > 0,95 && f0 < 1,20”. f0 merupakan variabel yang
menyimpan nilai thinness ratio hasil identifikasi objek. Grafik nilai area, perimeter dan
thinness ratio masing-masing objek ditunjukan pada gambar 4.7, gambar 4.8 dan gambar
4.9.
4.2.1.2. Nilai Centroid Posisi Peletakan Objek
Centroid merupakan titik tengah pada koordinat (x,y) dari citra digital yang akan
diolah dalam image processing. Nilai centroid digunakan untuk menentukan posisi objek
yang akan diidentifikasi. Centroid masing-masing posisi peletakan objek memiliki nilai
yang berbeda-beda dikarenakan area peletakan objek dibagi menjadi 12 posisi. Nilai
0
0,2
0,4
0,6
0,8
1
1,2
1 2 3 4 5 6 7 8 9 10 11 12
Nil
ai T
hin
nes
s R
atio
Posisi Peletakan Objek
Nilai Thinness Ratio Objek
Prisma Segitiga Tabung Kubus
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
85
centroid tiap posisi peletakan objek ditunjukan pada gambar 4.10. Berdasarkan gambar 4.10,
nilai centroid tiap posisi ditunjukan oleh tabel 4.5.
Gambar 4.10. Nilai centroid tiap posisi peletakan objek
Tabel 4.5. Nilai Centroid tiap posisi peletakan objek
Posisi Centroid
X Y
1 40 200
2 120 200
3 200 200
4 280 200
5 40 120
6 120 120
7 200 120
8 280 120
9 40 40
10 120 40
11 200 40
12 280 40
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
86
4.2.2 Sudut Motor Servo
Berdasarkan data pengujian sudut motor servo yang diukur menggunakan busur
derajat, didapatkan nilai OCR motor servo. Pengujian dilakukan tiap 50 pada masing-masing
servo. Range sudut pengujian motor servo yaitu 00 sampai 1800. Nilai 1800 menjadi batas
maksimal pengujian karena pada implementasinya, lengan robot hanya membutuhkan
pergerakan maksimal 1800 untuk mengambil dan memindahkan objek. Berdasarkan hasil
pengujian, nilai OCR beserta sudut pada masing-masing servo berbeda-beda. Hal ini
ssebabkan oleh perbedaan karakteristik dan keakuratan motor servo. Nilai OCR dan sudut
servo digunakan sebagai acuan pemberian nilai OCR berdasarkan nilai sudut pergerakan
lengan robot. Nilai OCR motor servo 1, servo 2, servo 3 dan servo 4 beserta nilai sudutnya
dapat dilihat pada lampiran. Contoh pengujian sudut motor servo menggunakan busur
derajat dan LCD sebagai penampil data OCR ditunjukan pada gambar 4.11, gambar 4.12
gambar 4.13 dan gambar 4.14 sedangkan gambar hasil pengujian lengkapnya dapat dilihat
pada lampiran.
Pengaturan sudut motor servo dilakukan dengan cara memberikan lebar pulsa PWM
(pulse) . Rumus perhitungan pulse yang ditunjukan pada persamaan 2.17 tidak sesuai untuk
penelitian ini. Rumus pada persamaan 2.17 hanya digunakan untuk servo yang memiliki
lebar pulsa pengontrolan 1 ms sampai dengan 2 ms, sehingga untuk mengetahui pulsa
pengontrolan servo pada penelitian ini, digunakan persamaan garis seperti yang ditunjukkan
pada persamaan 4.1 [35]. Pengembangan rumus lebar pulsa untuk motor servo JX PDI-
6225MG-300 dan servo SG90 ditunjukan pada persamaan 4.2 dan 4.3.
𝑡 − 𝑡1
𝑡2 − 𝑡1=
𝜃 − 𝜃1
𝜃2 − 𝜃1 (4.1)
Keterangan :
t ∶ Lebar pulsa ℎ𝑖𝑔ℎ untuk sudut yang diinginkan
t1 ∶ Lebar pulsa ℎ𝑖𝑔ℎ sudut awal (ms)
t2 ∶ Lebar pulsa ℎ𝑖𝑔ℎ sudut akhir (ms)
θ ∶ Sudut yang diinginkan (derajat)
θ1 ∶ Sudut awal (derajat)
θ2 ∶ Sudut akhir (derajat)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
87
Berdasarkan spesifikasi motor servo yang dapat dilihat pada lampiran L-2 diketahui
motor servo JX PDI-6225MG-300 memiliki sudut pergerakan dari 00 hingga 3200 dengan
lebar pulsa dari 500 us – 2500 us atau sama dengan 0,5 ms – 2,5 ms. Dari spesifikasi tersebut
dapat diketahui jika pulsa untuk sudut 00 yaitu 0,5 ms (t1) dan pulsa untuk sudut 3200 yaitu
2,5 ms (t2), sedangkan sudut awal servo yaitu 00 (θ1) dan sudut akhir 3200 (θ2). Sehingga
jika nilai-nilai tersebut dimasukkan kedalam persamaan 4.1 akan didapatkan perhitungan
sebagai berikut :
𝑡𝐽𝑋 𝑃𝐷𝐼−6225𝑀𝐺−300 − 0,5 𝑚𝑠
2,5 𝑚𝑠 − 0,5 𝑚𝑠=
𝜃 − 0
3200 − 0
𝑡𝐽𝑋 𝑃𝐷𝐼−6225𝑀𝐺−300 − 0,5 𝑚𝑠
2 𝑚𝑠=
𝜃
320
𝑡𝐽𝑋 𝑃𝐷𝐼−6225𝑀𝐺−300 − 0,5 𝑚𝑠 = 𝜃
320× 2𝑚𝑠
𝑡𝐽𝑋 𝑃𝐷𝐼−6225𝑀𝐺−300 = (𝜃
320× 2 𝑚𝑠) + 0,5 𝑚𝑠 (4.2)
Keterangan :
𝑡𝐽𝑋 𝑃𝐷𝐼−6225𝑀𝐺−300 : Lebar pulsa ℎ𝑖𝑔ℎ 𝑃𝑊𝑀 servo JX PDI 6225MG 300
θ ∶ Sudut yang diinginkan (derajat)
Berdasarkan spesifikasi motor servo yang dapat dilihat pada lampiran L-3 diketahui
motor servo SG90 memiliki sudut pergerakan dari 00 hingga 1800 dengan lebar pulsa dari
500 us – 2400 us atau sama dengan 0,5 ms – 2,4 ms. Dari spesifikasi tersebut dapat diketahui
jika pulsa untuk sudut 00 yaitu 0,5 ms (t1) dan pulsa untuk sudut 1800 yaitu 2,4 ms (t2),
sedangkan sudut awal servo yaitu 00 (θ1) dan sudut akhir 1800 (θ2). Sehingga jika nilai-nilai
tersebut dimasukkan kedalam persamaan 4.1 akan didapatkan perhitungan sebagai berikut :
𝑡𝑆𝐺90 − 0,5 𝑚𝑠
2,4 𝑚𝑠 − 0,5 𝑚𝑠=
𝜃 − 0
180 − 0
𝑡𝑆𝐺90 − 0,5 𝑚𝑠
1,9 𝑚𝑠=
𝜃
180
𝑡𝑆𝐺90 − 0,5 𝑚𝑠 = 𝜃
180× 1,9𝑚𝑠
𝑡𝑆𝐺90 = (𝜃
180× 1,9 𝑚𝑠) + 0,5 𝑚𝑠 (4.3)
Keterangan :
𝑡𝑆𝐺90 ∶ Lebar pulsa ℎ𝑖𝑔ℎ PWM / 𝑝𝑢𝑙𝑠𝑒 (ms)
θ ∶ Sudut yang diinginkan (derajat)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
88
Gambar 4.11. Pengujian OCR dan sudut pada servo 1
Gambar 4.12. Pengujian OCR dan sudut pada servo 2
Gambar 4.13. Pengujian OCR dan sudut pada servo 3
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
89
Gambar 4.14. Pengujian OCR dan sudut servo pada 4
Perhitungan nilai error diperoleh dengan membandingkan lebar pulsa pengontrolan
servo dan OCR (praktik) dengan lebar pulsa pengontrolan servo dan OCR (teori).
Perhitungan nilai OCR mengacu pada persamaan 2.15, 2.16, 2.18, 4.2 dan 4.3Pada penelitian
ini, frekuensi kristal yang digunakan yaitu 11059200 Hz, sehingga didapatkan periode
sebesar 0,090422 x 10-6 s dan denga nilai prescaler 1, maka didapatkan lebar pulsa dan OCR
seperti ditunjukan pada tabel 4.6 dan tabel 4.7.
Tabel 4.6. Persentase Error Pulse Motor Servo JX-PDI-6225-300 (Servo 1)
Sudut
Teori Praktik Error (%)
|𝑃𝑢𝑙𝑠𝑒praktik − 𝑃𝑢𝑙𝑠𝑒teori
𝑃𝑢𝑙𝑠𝑒teori| 𝑥100%
Pulse
(ms) OCR
Pulse
(ms) OCR
00 0,50 22 0,50 22 0 %
300 0,69 30 0,69 30 0 %
450 0,78 34 0,78 34 0 %
900 1,06 46 1,06 46 0 %
1800 1,62 70 1,66 72 2,46 %
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
90
Tabel 4.7. Persentase Error Pulse Motor Servo Towerpro SG90
Sudut
Teori Praktik Error (%)
|𝑃𝑢𝑙𝑠𝑒praktik − 𝑃𝑢𝑙𝑠𝑒teori
𝑃𝑢𝑙𝑠𝑒teori| 𝑥100%
Pulse
(ms) OCR
Pulse
(ms) OCR
00 0,50 22 0,50 22 0 %
300 0,81 35 0,77 33 4,93 %
450 0,97 42 0,90 39 7,21 %
900 1,43 62 1,38 60 3,49 %
1800 2,39 103 2,36 102 1,25 %
4.2.3. Pergerakan Lengan Robot
Pergerakan lengan robot dalam mengambil dan memindahkan benda dicari
menggunakan analisis gambar untuk pergerakan servo 1 (servo base), invers kinematik
untuk pergerakan servo 2 dan servo 3 sedangkan servo 4 hanya bergerak membuka dan
menutup bagian gripper. Analisis gambar pergerakan servo satu dibuat menggunakan
software corel draw. Analisis pergerakan servo 2 dan servo 3 menggunakan metode invers
kinematik yang mengacu pada rumus 2.8 dan 2.9. Proses perhitungan invers kinematik
dilakukan menggunakan software matlab. Program perhitungan invers kinematik
menggunakan software matlab terdapat di lampiran. Tabel sudut tiap motor servo untuk
mengambil dan meletakan objek kubus, tabung dan prisma segitiga yang dianalisis
menggunakan gambar dan invers kinematik dapat dilihat pada lampiran sedangkan nilai
sudut tiap motor servo yang diimplementasikan pada lengan robot untuk mengambil dan
meletakan objek yang dapat dilihat pda tabel 4.8, tabel 4.9 dan tabel 4.10. Perbandingan
sudut pergerakan servo 1, serrvo 2 dan servo 3 ditunjukan oleh grafik pada gambar 4.15,
gambar 4.16 dan gambar 4.17.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
91
Tabel 4.8. Nilai sudut tiap servo untuk mengambil dan meletakan benda kubus
Posisi Sudut
Servo 1 Servo 2 Servo 3 Servo 4
Siaga 900 900 900 250
Mengambil Benda
Posisi 1 1350 650 400 700
Posisi 2 1050 250 50 700
Posisi 3 800 250 50 700
Posisi 4 500 500 300 700
Posisi 5 1250 750 550 700
Posisi 6 1050 700 450 700
Posisi 7 850 700 450 700
Posisi 8 650 850 600 700
Posisi 9 1150 1000 850 700
Posisi 10 1000 950 750 700
Posisi 11 850 950 800 700
Posisi 12 700 1000 800 700
Meletakan benda
Kotak 1 00 450 350 100
Tabel 4.9. Nilai sudut tiap servo untuk mengambil dan meletakan benda tabung
Posisi Sudut
Servo 1 Servo 2 Servo 3 Servo 4
Siaga 900 900 900 250
Mengambil Benda
Posisi 1 1350 650 400 700
Posisi 2 1050 250 50 700
Posisi 3 800 250 50 700
Posisi 4 500 500 300 700
Posisi 5 1250 750 550 700
Posisi 6 1050 700 450 700
Posisi 7 850 700 450 700
Posisi 8 650 850 600 700
Posisi 9 1150 1000 850 700
Posisi 10 1000 950 750 700
Posisi 11 850 950 800 700
Posisi 12 700 1000 800 700
Meletakan benda
Kotak 2 00 900 750 100
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
92
Tabel 4.10. Nilai sudut tiap servo untuk mengambil dan meletakan benda prisma
Posisi Sudut
Servo 1 Servo 2 Servo 3 Servo 4
Siaga 900 900 900 250
Mengambil Benda
Posisi 1 1350 650 400 700
Posisi 2 1050 250 50 700
Posisi 3 800 250 50 700
Posisi 4 500 500 300 700
Posisi 5 1250 750 550 700
Posisi 6 1050 700 450 700
Posisi 7 850 700 450 700
Posisi 8 650 850 600 700
Posisi 9 1150 1000 850 700
Posisi 10 1000 950 750 700
Posisi 11 850 950 800 700
Posisi 12 700 1000 800 700
Meletakan benda
Kotak 3 250 1000 850 100
Nilai sudut pergerakan motor servo antara teori dan praktik memiliki perbedaan.
Perbedaan nilai sudut ini disebabkan oleh beberapa faktor, diantaranya yaitu ketidak
presisian mekanik lengan robot serta karakteristik, keakuratan motor servo dalam
menterjemahkan nilai OCR, serta pengimplementasian sudut yang harus bilangan bulat.
Perbedaan nilai sudut terjadi pada servo 1, servo 2 dan servo 3, hal ini karena servo 4 hanya
difungsikan untuk membuka dan menutup bagian gripper. Nilai sudut motor servo secara
teori terdapat di lampiran. Persentase error nilai sudut pergerakan motor servo antara teori
dan praktik dapat dilihat pada tabel 4.11, tabel 4.12, tabel 4.13 dan tabel 4.14.
Tabel 4.11. Persentase Error Nilai Sudut Motor Servo Satu
Posisi
Sudut
(Teori)
Sudut
(Praktik) |Sudutpraktik − Sudutteori
Sudutteori| 𝑥100%
1 1320 1350 2,27 %
2 1060 1050 0,94 %
3 740 800 8,10 %
4 490 500 2,04 %
5 1190 1250 5,04 %
6 1010 1050 3,96 %
7 800 850 6,25 %
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
93
Tabel 4.12. (Lanjutan) Persentase Error Nilai Sudut Servo 1
Posisi
Sudut
(Teori)
Sudut
(Praktik) |Sudutpraktik − Sudutteori
Sudutteori| 𝑥100%
8 610 650 6,55 %
9 1120 1150 2,67 %
10 980 1000 2,04 %
11 830 850 2,40 %
12 680 700 2,94 %
Gambar 4.15. Grafik Perbandingan Sudut Pergerakan Servo 1
Tabel 4.13. Persentase Error Nilai Sudut Motor Servo 2
Posisi
Sudut
(Teori)
Sudut
(Praktik) |Sudutpraktik − Sudutteori
Sudutteori| 𝑥100%
1 490 650 32,65 %
2 300 250 16,66 %
3 300 250 16,66 %
4 490 500 2,04 %
5 850 750 11,76 %
6 700 700 0 %
7 700 700 0 %
8 850 850 0 %
9 1080 1000 7,40 %
10 1010 950 5,94 %
11 1010 950 5,94 %
12 1080 1000 7,40 %
0
20
40
60
80
100
120
140
160
1 2 3 4 5 6 7 8 9 10 11 12
Su
du
t
Posisi Peletakan Objek
Grafik Perbandingan Sudut Pergerakan Servo 1
Nilai Sudut (Praktik) Nilai Sudut (Teori)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
94
Gambar 4.16. Grafik Perbandingan Sudut Pergerakan Servo 2
Tabel 4.14. Persentase Error Nilai Sudut Motor Servo 3
Posisi
Sudut
(Teori)
Sudut
(Praktik) |Sudutpraktik − Sudutteori
Sudutteori| 𝑥100%
1 230 400 73,91 %
2 140 50 64,28 %
3 140 50 64,28 %
4 230 300 30,43 %
5 510 550 7,84 %
6 380 450 18,42 %
7 380 450 18,42 %
8 510 600 17,64 %
9 760 850 11,84 %
10 670 750 11,94 %
11 670 800 19,40 %
12 760 800 5,26 %
0
20
40
60
80
100
120
1 2 3 4 5 6 7 8 9 10 11 12
Su
du
t
Posisi Peletakan Objek
Grafik Perbandingan Sudut Pergerakan Servo 2
Nilai Sudut (Praktik) Nilai Sudut (Teori)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
95
Gambar 4.17. Grafik Perbandingan Sudut Pergerakan Servo 3
Pemberian nilai sudut secara teori menyebabkan pergerakan lengan robot tidak akurat
dalam mengambil dan meletakan objek sehingga dilakukan beberapa percobaan untuk
mendapatkan pergerakan lengan robot yang tepat. Pada implementasinya, pemberian nilai
sudut secara praktik tidak memberikan keakuratan 100% pada lengan robot. Lengan robot
tidak dapat bergerak tepat berdasarkan centroid objek. Hal ini disebabkan oleh
ketidakpresisian mekanik lengan robot, perbedaan karakteristik motor servo serta dalam
penulisan program di software codevision AVR, serta nilai OCR yang harus ditulis dengan
bilangan bulat, tidak bisa dengan bilangan desimal. Supaya lengan robot dapat mengambil
setiap objek yang diletakan pada posisi 1 sampai dengan posisi 12, beberapa centroid titik
peletakan objek harus digeser posisinya. Perpindahan centroid peletakan objek pada sumbu
x dan sumbu y dapat dilihat pada tabel 4.15. Proses penentuan nilai centroid peletakan objek
pada area yang berukuran 28 cm x 21 cm sama dengan gambar 4.10. Pada implementasinya,
centroid peletakan objek di bor dengan diameter 4 mm. Pengeboran dilakukan pada area
sesuai dengan centroid posisi peletakan objek. Hal ini bertujuan untuk memberi lubang pada
centroid sehingga dalam peletakannya, objek dapat diletakan tepat di centroid masing-
masing area peletakan objek.
0
10
20
30
40
50
60
70
80
90
1 2 3 4 5 6 7 8 9 10 11 12
Sud
ut
Posisi Peletakan Objek
Grafik Perbandingan Sudut Pergerakan Servo 3
Nilai Sudut (Praktik) Nilai Sudut (Teori)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
96
Tabel 4.15. Nilai Centroid Peletakan Objek Sebelum dan Sesudah di Pindahkan
Posisi
Sebelum di Pindah
Sesudah di Pindah
Perpindahan Centroid
Peletakan Objek
Sumbu x
(cm)
Sumbu y
(cm)
Sumbu x
(cm)
Sumbu y
(cm)
Sumbu
X
(mm)
Sumbu y
(mm)
1 3,5 17,5 3,7 17 + 0,2 + 0,5
2 10,5 17,5 10,8 17,5 + 0,3 0
3 17,5 17,5 17,5 17,5 0 0
4 24,5 17,5 24,7 17,5 + 0,2 0
5 3,5 10,5 3,5 10,5 0 0
6 10,5 10,5 10,5 10,2 0 + 0,3
7 17,5 10,5 17,8 10,6 + 0,3 - 0,1
8 24,5 10,5 24,3 10,5 - 0,2 0
9 3,5 3,5 3,5 3,8 0 - 0,3
10 10,5 3,5 11,1 3,5 + 0,6 0
11 17,5 3,5 17,5 3,5 0 0
12 24,5 3,5 24,7 3,5 + 0,2 0
|Rerata Perpindahan| 0,16 0,1
Keterangan : Sumbu X ( + Geser ke Kanan, - Geser ke Kiri)
Sumbu Y ( + Geser ke Atas, - Geser ke Bawah)
4.2.4. Pengujian Keberhasilan Sistem Mengenali Bentuk dan Posisi Objek
Pada tugas akhir ini, dilakukan pengujian keberhasilan sistem mengenali bentuk dan
posisi objek. Objek yang dikenali berbentuk kubus, tabung dan prisma segitiga sedangkan
peletakan objek dilakukan pada posisi 1 hingga posisi 12. Pengujian dilakukan untuk
masing-masing objek pada 12 posisi peletakan benda dengan 5 kali percobaan. Tingkat
keberhasilan sistem ditunjukan oleh tabel 4.16 dan gambar objek yang dikenali bentuk dan
posisinya dapat dilihat pada lampiran.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
97
Tabel 4.16. Pengujian Keberhasilan Sistem Mengenali Bentuk dan Posisi Objek
Posisi Percobaan
ke-1
Percobaan
ke-2
Percobaan
ke-3
Percobaan
ke-4
Percobaan
ke-5
K T P K T P K T P K T P K T P
1 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
2 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
3 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
4 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
5 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
6 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
7 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
8 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
9 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
10 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
11 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
12 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √
Keterangan : K = Kubus, T = Tabung, P = Prisma Segitiga
: √ = Berhasil , X = Tidak Berhasil
Berdasarkan data hasil pengujian seperti ditunjukan pada tabel 4.16, maka dapat
disimpulkan bahwa sistem mampu mengenali bentuk dan posisi objek 100% apabia sesuai
dengan batasan masalah yang telah ditentukan sebelumnya dan dengan catatan intensitas
pencahayaanya sebesar 60 lux sampai dengan 80 lux.
4.2.5. Pengujian Keberhasilan Lengan Robot Saat Mengambil dan
Memindahkan Objek Berdasarkan Bentuk dan Posisi
Pengujian keberhasilan lengan robot saat mengambil dan meletakan objek berdasarkan
bentuk dan posisi dilakukan sebanyak 25 kali percobaan. Percobaan dilakukan dengan
mengkombinasikan jumlah dan bentuk objek yang diletakan pada area, orientasi peletakan
objek, posisi peletakan objek. Ketika sistem mengenali bentuk dan posisi objek, maka matlab
akan mengirimkan lima karakter secara serial kepada mikrokontroler Atmega32.
Mikrokontroler akan menterjemahkan masing-masing karakter yang diterima untuk
mengontrol pergerakan lengan robot saat mengambil dan meletakan objek ke kotak
peletakan benda. Pengujian keberhasilan lengan robot saat mengambil dan meletakan objek
berdasarkan bentuk dan posisi ditunjukan oleh tabel 4.17 dan tabel 4.18 sedangkan gambar
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
98
bentuk dan posisi objek yang diuji beserta GUI matlabnya ditunjukan pada gambar 4.18,
gambar 4.19, gambar 4.20, gambar 4.21, dan gambar 4.22.
Tabel 4.17. Pengujian lengan robot saat mengambil dan memindahkan objek
Percobaan
ke-
Keterangan Hasil
Pengujian Posisi Bentuk Obejk
1 2 Tabung √
2 3 Tabung √
3 6 Tabung √
4 8 Tabung √
5 9 Tabung √
6 1 Prisma Segitiga √
12 Kubus √
7 3 Prisma Segitiga √
5 Kubus √
8 7 Prisma Segitiga √
4 Kubus √
9 9 Prisma Segitiga √
3 Kubus √
10 11 Prisma Segitiga √
12 Kubus √
11
4 Prisma Segitiga √
6 Kubus √
7 Tabung √
12
1 Prisma Segitiga √
2 Kubus √
4 Tabung √
13
9 Prisma Segitiga √
6 Kubus √
3 Tabung √
14
12 Prisma Segitiga √
10 Kubus √
8 Tabung √
15
2 Prisma Segitiga √
7 Kubus √
11 Tabung √
16
3 Prisma Segitiga √
5 Tabung √
10 Tabung √
11 Prisma Segitiga √
17
4 Prisma Segitiga √
7 Tabung √
10 Tabung √
12 Prisma Segitiga √
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
99
Tabel 4.18. (Lanjutan) Pengujian lengan robot saat mengambil
dan memindahkan objek
Percobaan
ke-
Keterangan Hasil
Pengujian Posisi Bentuk Obejk
18
1 Prisma Segitiga √
6 Tabung √
9 Tabung √
3 Prisma Segitiga √
19
2 Prisma Segitiga √
7 Tabung √
6 Tabung √
4 Prisma Segitiga √
20
3 Prisma Segitiga √
2 Tabung √
12 Tabung √
10 Prisma Segitiga √
21
1 Tabung √
6 Prisma Segitiga √
7 Prisma Segitiga √
9 Tabung √
12 Kubus √
22
2 Tabung √
8 Prisma Segitiga √
7 Prisma Segitiga √
4 Tabung √
2 Kubus √
23
4 Tabung √
5 Prisma Segitiga √
9 Prisma Segitiga √
12 Tabung √
9 Kubus √
24
7 Tabung √
8 Prisma Segitiga √
1 Prisma Segitiga √
4 Tabung √
12 Kubus √
25
6 Tabung √
8 Prisma Segitiga √
2 Prisma Segitiga √
9 Tabung √
10 Kubus √
Keterangan : √ (Berhasil) , X (Tidak Berhasil)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
100
Gambar 4.18. Pengujian sistem lengan robot dengan 1 objek
Gambar 4.19. Pengujian sistem lengan robot dengan 2 objek
Gambar 4.20. Pengujian sistem lengan robot dengan 3 objek
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
101
Gambar 4.21. Pengujian sistem lengan robot dengan 4 objek
Gambar 4.22. Pengujian sistem lengan robot dengan 5 objek
Berdasarkan tabel 4.17 sampai dengan tabel 4.19 dapat dianalisa bahwa lengan robot
dapat mengambil dan memindahkan objek ke kotak peletakan benda berdasarkan bentuk dan
posisi. Hal ini dapat dibuktikan dengan melihat tingkat keberhasilan lengan robot dalam
mengambil dan meletakan objek seperti ditunjukan tabel 4.17 sampai dengan tabel 4.19.
Khusus pengambilan objek di posisi 1, gripper harus menggeser objek kekiri terlebih dahulu
untuk dapat mencengkram objek. Hal ini perlu dilakukan karena dengan desain gripper
seperti ditunjukan pada gambar 3.7, saat mengambil objek di posisi 1, gripper akan
menyentuh dan menggeser objek di area posisi 2, sehingga dapat menyebabkan objek di
posisi 2 tidak terambil. Tingkat keberhasilan lengan robot pada 75 kali pengambilan dan
pemindahan objek yaitu 100% dengan catatan sebagai berikut :
1. Semua wiring antara minimum sistem ATmega32 dan lengan robot dipastikan
terkoneksi, dikarenakan jika ada wiring yang tidak terkoneksi, akan meyebabkan
servo tidak bergerak.
2. Mekanik lengan robot harus dipastikan tersambung antara base, lengan bawah,
lengan atas dan juga gripper, dikarenakan jika ada sambungan yang tidak
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
102
tersambung akan mempengaruhi pergerakan lengan robot dalam mengambil dan
memindahkan objek.
3. peletakan benda sesuai dengan batasan masalah.
4.3. Analisa dan Pembahasan Perangkat Lunak
Pada bagian ini, akan dibahas tentang program computer vision di software matlab dan
program pergerakan robot di software codevision AVR.
4.3.1. Software Matlab
Pada sub bab ini, akan dibahas listing program yang di program menggunakan
software matlab diantaranya penjelasan inisialisasi komunikasi USART, inisialisasi
webcam, proses akuisisi citra, proses image processing, proses labeling dan segmentasi,
proses pengenalan bentuk dan posisi objek, proses penentuan posisi objek, proses
pengiriman data dari matlab ke mikrokontroler, serta tampilan GUI matlab.
4.3.1.1. Inisialisasi Komunikasi USART
Supaya matlab dengan mikrokontroler dapat berkomunikasi, maka pada bagian
program matlab harus dilakukan inisialisasi komunikasi USART terlebih dahulu. Hal ini
dikarenakan pada bagian laptop dengan mikrokontroler harus memiliki nilai baudrate yang
sama. Jika kedua perangkat tersebut memiliki nilai baudrate yang berbeda, maka dipastikan
kedua perangkat ini tidak akan dapat berkomunikasi. Program inisialisasi komunikasi
USART ditunjukan oleh gambar 4.23, gambar 4.24, dan gambar 4.25.
Gambar 4.23. Listing program inisialisasi komunikasi USART
Gambar 4.24. (lanjutan) Listing program inisialisasi komunikasi USART
%inisialisasi komunikasi serial
komunikasi = serial ('COM5', 'BaudRate',9600);
fopen(komunikasi); %membuka port komunikasi
guidata(hObject,handles);
%menutup dan menghapus komunikasi
guidata(hObject,handles);
fclose(komunikasi);
delete(komunikasi);
clear komunikasi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
103
Gambar 4.25. (lanjutan) Listing program inisialisasikomunikasi USART
4.3.1.2. Inisialisasi Webcam
Untuk melakukan proses pengolahan citra, maka dibutuhkan perangkat keras berupa
kamera atau webcam yang digunakan untuk mengakuisisi citra. Oleh karena itu, diperlukan
inisialisasi webcam, supaya dapat terhubung dan dikenali oleh matlab. Inisialisasi webcam
ditunjukan oleh gambar 4.26.
Gambar 4.26. Listing program inisialisasi webcam
Listing program tersebut merupakan inisialisasi webcam. Winvideo merupakan nama
adaptor kamera webcam, angka 1 adalah DeviceID kamera, YUY2 merupakan format citra
hasil capturing webcam yang memiliki resolusi 320 x 240 pixel.
4.3.2.3. Proses Akuisisi Citra
Proses akuisisi dilakukan menggunakan webcam. Proses akuisisi citra dilakukan
dengan meng-capture atau memindai citra analog kemudian mengkonversinya menjadi citra
digital. Akuisisi citra oleh webcam bertujuan untuk mendapatkan citra digital objek yang
akan diolah dalam image processing. Program matlab akusisi citra mengacu pada flowchart
yang ditunjukan oleh gambar 3.21. Listing program akuisisi citra ditunjukan oleh gambar
4.27.
Gambar 4.27. Listing program akuisisi citra
Proses akuisisi dimulai dengan meng-ON kan webcam terlebih dahulu dengan perintah
“start” sehingga webcam akan menampilkan video citra yang akan diakuisisi. Perintah
program “stoppreview” adalah fungsi internal matlab yang digunakan untuk menghentikan
fprintf(komunikasi,'a');
%proses inisialisasi webcam
vidobj = videoinput('winvideo',1,'YUY2_320x240');
% Proses capture citra objek
start(vidobj);
pause(0.5);
trigger(vidobj);
stoppreview(vidobj);
frame=getdata(vidobj);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
104
video citra objek agar dapat di capture oleh webcam. Capture citra dilakukan menggunakan
fungsi internal matlab “getdata”.
4.3.2.4. Proses Image Preprocessing
Proses image preprocessing merupakan tahap awal dalam pengolahan citra digital.
Citra hasil capturing webcam memiliki format gambar YUY2. Citra hasil capturing webcam
harus dikonversi terlebih dahulu menjadi citra berwarna dengan cara menggunakan fungsi
internal matlab “yuy2torgb”. Citra RGB dikonversi menjadi citra grayscale menggunakan
fungsi internal matlab “rgb2gray” untuk diproses. Kemudian citra grayscale dikonversi
menjadi citra biner menggunakan fungsi internal matlab “im2bw” dengan nilai treshold
0,25. Nilai 0,25 merupakan nilai treshold untuk mengkonversi citra grayscale menjadi citra
biner. Nilai 0,25 didapatkan dari hasil evaluasi beberapa percobaan, dan yang menghasilkan
kualitas citra yang lebih baik adalah nilai 0,25. Nilai 0.25 merupakan nilai tengah antara
hasil percobaan yang menghasilkan citra biner dengan kualitas yang baik yaitu dengan nilai
treshold 0,2 dan 0,3. Percobaan dilakukan sebanyak lima kali, yaitu dengan nilai treshold
0,1 sampai dengan 0,5 pada intensitas cahaya sebesar 60 lux sampai dengan 80 lux. Intensitas
cahaya diukur menggunakan sensor cahaya pada smartphone menggunakan aplikasi lux
meter. Dari hasil percobaan, dapat disimpulkan bahwa pemberian nilai treshold yang tidak
tepat dapat mengurangi kualitas citra biner.
Citra hasil percobaan nilai treshold ditunjukan pada gambar 4.28, gambar 4.29,
gambar 4.30 gambar 4.31 dan gambar 4.32. Program matlab image preprocessing mengacu
pada flowchart yang ditunjukan oleh gambar 3.22. Listing program image preprocessing
ditunjukan oleh gambar 4.33.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
105
Gambar 4.28. Hasil capturing webcam dengan nilai treshold 0,1
Gambar 4.29. Hasil capturingwebcam dengan nilai treshold 0,2
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
106
Gambar 4.30. Hasil capturing webcam dengan nilai treshold 0,3
Gambar 4.31. Hasil capturing webcam dengan nilai treshold 0,4
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
107
Gambar 4.32. Hasil capturing webcam dengan nilai treshold 0,5
Gambar 4.33. Listing program image preprocessing
Citra biner dapat memiliki noise. Noise tersebut disebabkan oleh beberapa faktor,
diantaranya adalah faktor cahaya sehingga harus dilakukan proses noise filtering
menggunakan fungsi internal matlab “medfilt2”. Proses ini bertujuan untuk menghilangkan
noise agar citra dapat diproses dan di identifikasi. Nilai kernel matrix noise filtering yang
digunakan dalam penelitian ini yaitu 3x3. Nilai 3x3 merupakan nilai default median filtering
pada software matlab sehingga tidak perlu ditulis dalam program. Semakin besar nilai kernel
matrixnya, maka noise yang lebih besar dapat dihilangkan dari citra, tetapi tepi citra objek
akan ter-noise filtering juga sehingga bentuk objek tidak akan sempurna.
%image preprocessing
citra1=yuy2torgb(frame);
citra2=rgb2gray(citra1);
citrabiner=im2bw(citra2,0.25);
citranf=medfilt2(citrabiner);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
108
4.3.2.5. Proses Labeling dan Segmentasi
Setelah dilakukan proses image preprocessing pada citra digital, proses selanjutnya
adalah labeling citra objek. Proses ini bertujuan untuk memberi label atau identitas pada
masing-masing citra objek. Fungsi internal matlab untuk labeling objek adalah “bwlabel”.
Citra hasil labeling kemudian di segmentasi untuk di indentifikasi bentuk dan posisinya satu
per satu. Proses segmentasi yaitu, untuk segmenytasi objek pertama, jika terdapat nilai pixel
yang tidak sama dengan satu, maka nilai pixel diubah menjadi bernilai nol sedangkan untuk
pixel yang bernilai satu akan tetap bernilai satu sehingga didapatkan hasil segmentasi objek
pertama. Pada segmentasi objek kedua, jika terdapat nilai pixel yang tidak sama dengan dua,
maka nilai pixel diubah menjadi bernilai nol sedangkan untuk pixel yang bernilai dua akan
diubah menjadi bernilai satu sehingga didapatkan hasil segmentasi objek kedua.
Program matlab labeling dan segmentasi objek mengacu pada flowchart yang
ditunjukan oleh gambar 3.23. Listing program labeling dan segmentasi citra ditunjukan oleh
gambar 4.34.
Gambar 4.34. Listing program labeling dan segmentasi citra
%Memberi label untuk tiap objek dalam citra biner
c = bwlabel(a);
%segementasi citra objek
o1=c==1;
o2=c==2;
o3=c==3;
o4=c==4;
o5=c==5;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
109
4.3.2.6. Proses Pengenalan Bentuk Objek
Proses pengenalan bentuk objek dilakukan setelah proses segmentasi pada citra objek.
Proses pengenalan bentuk didasarkan pada hasil perhitungan nilai area, perimeter dan
thinnes ratio pada objek. Program matlab pengenalan bentuk objek mengacu pada
flowchart yang ditunjukan oleh gambar 3.24. Listing program perhitungan nilai area,
perimeter dan thinnes ratio ditunjukan oleh gambar 4.35.
Gambar 4.35. Listing program perhitungan nilai area, perimeter, thinness ratio objek
“jumobjek=max(max(c));” digunakan untuk menghitung banyaknya objek pada citra.
Proses ini bertujuan untuk menentukan proses looping program perhitungan area, perimeter
dan thinness ratio. Fungsi internal matlab yang digunakan untuk menghitung area dan
perimeter adalah “regionprops”. Nilai hasil perhitungan area disimpan dalam variabel dba
dalam bentuk matriks, sedangkan nilai hasil perhitungan perimeter disimpan dalam variabel
dbp matriks. Nilai dalam variabel dba dan dbp digunakan untuk perhitungan thinness ratio.
Nilai thinness ratio masing-masing objek disimpan dalam variabel f0 dalam bentuk matriks.
Masing-masing objek memiliki nilai thinness ratio yang berbeda-beda. Nilai tersebut yang
digunakan sebagai acuan untuk mengelompokan bentuk objek. Listing program penentuan
bentuk objek berdasarkan nilai thiness ratio ditunjukan pada gambar 4.36 dan gambar 4.37.
%perhitungan perimeter dan area
jumobjek=max(max(c));
for k=1:jumobjek
objek=c==k;
d0=regionprops(double(objek),'Perimeter');
d1=d0.Perimeter;
dbPerimeter(:,k)=d1;
e0=regionprops(double(objek),'Area');
e1=e0.Area;
dbArea(:,k)=e1;
end
dbp=dbPerimeter;
dba=dbArea;
%perhitungan thinness ratio
jumobjek=max(max(c));
for k=1:jumobjek
f0=(4*pi*dba(k))/dbp(k)^2;
dbthiness(:,k)=f0;
end
tr=dbthiness;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
110
Gambar 4.36. Listing program penentuan bentuk objek
Gambar 4.37. (Lanjutan) Listing program penentuan bentuk objek
Listing program tersebut merupakan bagian dari subrutin program utama untuk citra
hasil segmentasi pada posisi 1. Nilai thinness ratio objek pertama diambil dari matriks kolom
ke 1 dan baris ke 1 pada variabel f0, untuk objek ke 2 diambil dari matriks kolom ke 2 dan
baris ke 1 begitu seterusnya. Kemudian nilai tersebut dibandingkan satu persatu untuk
menentukan bentuk objek. Arrayoutput merupakan array yang menyimpan nilai sebagai
kode bentuk serta posisi objek. Nilai dalam arrayoutput akan dikonversikan menjadi bentuk
jumobjek=max(max(c));
%Menentukan output posisi dan bentuk objek
for k = 1 : jumobjek
%mengambil data centroid dan thinness ratio
dari matrik pada variabel db
%dan f0
db=dbcentroid(:,k);
f0=dbthiness(1,k);
%posisi 1
if db(1,1) > 240 && db(1,1) < 320 && db
(2,1) < 80
if f0 < 0.95 && f0 > 0.8
if (k==1)
arrayoutput = [1];
arraychar = [1];
elseif (k>1)
arrayoutput = [arrayoutput 1];
arraychar = [arraychar 1];
end
elseif f0 < 1.2 && f0 > 0.95
if (k==1)
arrayoutput = [2];
arraychar = [2];
elseif (k>1)
arrayoutput = [arrayoutput 2];
arraychar = [arraychar 2];
end
elseif f0 < 0.8 && f0 > 0.66
if (k==1)
arrayoutput = [3];
arraychar = [3];
elseif (k>1)
arrayoutput = [arrayoutput 3];
arraychar = [arraychar 3];
end
end
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
111
dan posisi objek untuk dioutputkan pada GUI matlab. Proses penentuan bentuk objek
dilakukan sebanyak jumlah objek yang dikenali pada citra digital.
4.3.2.7. Proses Penentuan Posisi Objek
Proses penentuan posisi objek didasarkan pada nilai centroid objek. Penentuan posisi
dilakukan dengan membagi area peletakan objek menjadi 12 posisi. Masing-masing posisi
memiliki batas nilai pixel sebagai batas antara posisi 1 dengan yang lainnya. Proses ini
bertujuan untuk mengelompokan nilai centroid objek berada di posisi 1 hingga posisi 12.
Untuk menentukan nilai centroid, dilakukan perhitungan pada masing-masing objek yang
akan di identifikasi. Program matlab penentuan posisi objek mengacu pada flowchart yang
ditunjukan oleh gambar 3.25. Listing program perhitungan centroid ditunjukan pada gambar
4.38.
Gambar 4.38. Listing program perhitungan centoid
Fungsi internal matlab “regionprops” adalah perintah untuk menghitung nilai
centroid. Perhitungan centroid dilakukan pada masing-maisng citra objek dan hasilnya
disimpan dalam variabel db dalam bentuk matriks. Listing program penentuan posisi objek
ditunjukan pada gambar 4.39.
%Perhitungan centroid
jumobjek=max(max(c));
for k=1:jumobjek;
objek=c==k;
c0=regionprops(double(objek),'Centroid');
c1=c0.Centroid;
dbcentroid(:,k)=c1;
end
db=dbcentroid;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
112
Gambar 4.39. Listing program penentuan posisi objek
Listing program tersebut merupakan bagian dari subrutin program utama citra hasil
segmentasi objek ke1 pada posisi 2. Program “db (1,1) < 240 && db (1,1) > 160 && db
(2,1) < 80” merupakan program untuk mengambil data nilai centroid pada matriks baris 1,
kolom 1 dan baris 2, kolom 1 pada variabel db. Nilai centroid tersebut dibandingankan
dengan nilai batas pixel untuk posisi 2 yaitu nilai y < 240 dan y > 160 serta x < 80. Proses
ini dilakukan untuk masing-masing posisi pada subrutin program utama hingga nilai
centroidnya sesuai dengan batas (x,y).
Arrayoutput merupakan array yang digunakan untuk menyimpan nilai sebagai kode
bentuk serta posisi objek. Nilai didalam arrayoutput akan dikonversikan menjadi bentuk dan
posisi objek untuk dioutputkan pada GUI matlab.
%Posisi 2
elseif db(1,1) < 240 && db (1,1) > 160 && db (2,1) < 80
if f0 < 0.95 && f0 > 0.8
if (k==1)
arrayoutput = [4];
arraychar = [4];
elseif (k>1)
arrayoutput = [arrayoutput 4];
arraychar = [arraychar 4];
end
elseif f0 < 1.2 && f0 > 0.95
if (k==1)
arrayoutput = [5];
arraychar = [5];
elseif (k>1)
arrayoutput = [arrayoutput 5];
arraychar = [arraychar 5];
end
elseif f0 < 0.8 && f0 > 0.66
if (k==1)
arrayoutput = [6];
arraychar = [6];
elseif (k>1)
arrayoutput = [arrayoutput 6];
arraychar = [arraychar 6];
end
end
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
113
4.3.2.8. Proses Pengiriman Data dari Matlab ke Mikrokontroler
Setelah bentuk dan posisi masing-masing objek dikenali, proses selanjutnya adalah
mengirimkan karakter ke mikrokontroler untuk menggerakan lengan robot dalam
mengambil dan meletakan benda sesuai dengan jumlah objek yang di identifikasi. Sebelum
karakter dikirimkan, karakter harus diurutkan terlebih dahulu mulai dari yang terkecil hingga
yang terbesar. Proses ini bertujuan supaya lengan robot mengambil benda dengan urutan
posisi terkecil hingga terbesar. Karakter dalam matlab tidak dapat diurutkan, sehingga dalam
program subrutin utama, dilakukan penambahan data pada variabel arraychar. Program
matlab pengiriman data dari matlab ke mikrokontroler mengacu pada flowchart yang
ditunjukan oleh gambar 3.28. Listing program penambahan data pada variabel arraychar
ditunjukan pada gambar 4.40.
Gambar 4.40. Listing program penambahan arraychar objek di posisi posisi 4
Penambahan data arraychar untuk segmentasi objek ke1 ditulis dengan progran
“arraychar = [10]”, “arraychar = [11]”, dan “arraychar = [12]”, sedangkan penambahan data
array citra hasil segmentasi 2,3,4,5 ditulis dengan program “ arraychar = [arraychar 10]”, “
arraychar = [arraychar 11]” dan “ arraychar = [arraychar 12]” yang bertujuan untuk
menambah data arraychar disamping kanan data arraychar sebelumnya.
%Posisi 4
elseif db(1,1) < 80 && db (2,1) < 80
if f0 < 0.95 && f0 > 0.8
if (k==1)
arrayoutput = [10];
arraychar = [10];
elseif (k>1)
arrayoutput = [arrayoutput 10];
arraychar = [arraychar 10];
end
elseif f0 < 1.2 && f0 > 0.95
if (k==1)
arrayoutput = [11];
arraychar = [11];
elseif (k>1)
arrayoutput = [arrayoutput 11];
arraychar = [arraychar 11];
end
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
114
Data arraychar akan menyimpan nilai yang menunjukan bentuk dan posisi benda yang
akan dikirimkan ke mikrokontroler. Setelah proses penambahan data arraychar di program
subrutin utama, data arraychar memiliki kemungkinan terisi kurang dari 5 data, ini
dikarenakan objek yang dikenali kurang dari lima objek. Untuk itu dilakukan penyortiran
yang bertujuan untuk melengkapi arraychar menjadi lima data dengan cara menambah data
arraychar dengan angka 0 sampai dengan total nilai yang disimpan di dalam arraychar
berjumlah lima data. Listing program pelengkapan data arraychar ditunjukan oleh gambar
4.41 dan gambar 4.42.
Gambar 4.41. Listing program mengisi arraychar secara lengkap (5 data)
Gambar 4.42. (lanjutan) Listing program mengisi arraychar secara lengkap (5 data)
%mengisi arraychar dengan 5 data 0 (objek = 0)
if jumobjek == 0
arraychar = [0 0 0 0 0];
%mengisi arraychar dengan 4 data 0 (objek = 1)
elseif jumobjek == 1
for k=1:4
arraychar = [arraychar 0];
end
%mengisi arraychar dengan 3 data 0 (objek = 2)
elseif jumobjek == 2
for k=1:3
arraychar = [arraychar 0];
end
%mengisi arraychar dengan 2 data 0 (objek = 3)
elseif jumobjek == 3
for k=1:2
arraychar = [arraychar 0];
end
%mengisi arraychar dengan 1 data 0 (objek = 4)
elseif jumobjek == 4
for k=1:1
arraychar = [arraychar 0];
end
%tidak menambah data arraychar
(objek = 5)
elseif jumobjek == 5
arraychar = [arraychar];
end
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
115
Setelah data arraychar lengkap (5 data), dilakukan proses pengurutan nilai dari yang
terkecil hingga terbesar menggunakan perintah program “sort”. Listing program pengurutan
data arraychar ditunjukan oleh gambar 4.43.
Gambar 4.43. Listing program sort array
Proses selanjutnya adalah mengkonversi nilai masing-masing arraychar menjadi
karakter yang akan dikirim ke mikrokontroler. Proses pengkonversian dilakukan satu per
satu, dimulai dari data arraychar pertama sampai dengan ke lima. Listing program
pengkonversian arraychar menjadi karakter ditunjukan oleh gambar 4.44 sampai gambar
3.50.
Gambar 4.44. Listing program pengkonversian data arraychar menjadi karakter
%mengurutkan data array mulai data terkecil hingga data terbesar
dataarray=sort(arraychar);
%program mengkonversi dataarray menjadi
%karakter untuk dikirim ke mikro
data=dataarray(f);
if (data==1)
guidata(hObject,handles);
fprintf(komunikasi,'a');
guidata(hObject,handles);
elseif (data==2)
guidata(hObject,handles);
fprintf(komunikasi,'b');
guidata(hObject,handles);
elseif (data==3)
guidata(hObject,handles);
fprintf(komunikasi,'c');
guidata(hObject,handles);
elseif (data==4)
guidata(hObject,handles);
fprintf(komunikasi,'d');
guidata(hObject,handles);
elseif (data==5)
guidata(hObject,handles);
fprintf(komunikasi,'e');
guidata(hObject,handles);
elseif (data==6)
guidata(hObject,handles);
fprintf(komunikasi,'f');
guidata(hObject,handles);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
116
Gambar 4.45. (lanjutan) Listing program pengkonversian data arraychar menjadi karakter
Gambar 4.46. (lanjutan) Listing program pengkonversian data arraychar menjadi karakter
elseif (data==7)
guidata(hObject,handles);
fprintf(komunikasi,'g');
guidata(hObject,handles);
elseif (data==8)
guidata(hObject,handles);
fprintf(komunikasi,'h');
guidata(hObject,handles);
elseif (data==9)
guidata(hObject,handles);
fprintf(komunikasi,'i');
guidata(hObject,handles);
elseif (data==10)
guidata(hObject,handles);
fprintf(komunikasi,'j');
guidata(hObject,handles);
elseif (data==11)
guidata(hObject,handles);
fprintf(komunikasi,'k');
guidata(hObject,handles);
elseif (data==12)
guidata(hObject,handles);
fprintf(komunikasi,'l');
guidata(hObject,handles);
elseif (data==13)
guidata(hObject,handles);
fprintf(komunikasi,'m');
guidata(hObject,handles);
elseif (data==14)
guidata(hObject,handles);
fprintf(komunikasi,'n');
guidata(hObject,handles);
elseif (data==15)
guidata(hObject,handles);
fprintf(komunikasi,'o');
guidata(hObject,handles);
elseif (data==16)
guidata(hObject,handles);
fprintf(komunikasi,'p');
guidata(hObject,handles);
elseif (data==17)
guidata(hObject,handles);
fprintf(komunikasi,'q');
guidata(hObject,handles);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
117
Gambar 4.47. (lanjutan) Listing program pengkonversian data arraychar menjadi karakter
Gambar 4.48. (lanjutan) Listing program pengkonversian data arraychar menjadi karakter
elseif (data==18)
guidata(hObject,handles);
fprintf(komunikasi,'r');
guidata(hObject,handles);
elseif (data==19)
guidata(hObject,handles);
fprintf(komunikasi,'s');
guidata(hObject,handles);
elseif (data==20)
guidata(hObject,handles);
fprintf(komunikasi,'t');
guidata(hObject,handles);
elseif (data==21)
guidata(hObject,handles);
fprintf(komunikasi,'u');
guidata(hObject,handles);
elseif (data==22)
guidata(hObject,handles);
fprintf(komunikasi,'v');
guidata(hObject,handles);
elseif (data==23)
guidata(hObject,handles);
fprintf(komunikasi,'w');
guidata(hObject,handles);
elseif (data==24)
guidata(hObject,handles);
fprintf(komunikasi,'x');
guidata(hObject,handles);
elseif (data==25)
guidata(hObject,handles);
fprintf(komunikasi,'y');
guidata(hObject,handles);
elseif (data==26)
guidata(hObject,handles);
fprintf(komunikasi,'z');
guidata(hObject,handles);
elseif (data==27)
guidata(hObject,handles);
fprintf(komunikasi,'!');
guidata(hObject,handles);
elseif (data==28)
guidata(hObject,handles);
fprintf(komunikasi,'#');
guidata(hObject,handles);
elseif (data==29)
guidata(hObject,handles);
fprintf(komunikasi,'$');
guidata(hObject,handles);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
118
Gambar 4.49. (lanjutan) Listing program pengkonversian data arraychar menjadi karakter
Gambar 4.50. (lanjutan) Listing program pengkonversian data arraychar menjadi karakter
Listing program tersebut merupakan program konversi data arraychar menjadi
karakter. Karakter ‘0’ menunjukan tidak ada data citra objek pada hasil segmentasi tertentu.
Nilai data arraychar yang sudah dikonversi menjadi karakter, kemudian dikirim secara serial
kse mikrokontroler. Pengiriman data ke mikrokontroler berupa lima data karakter yang akan
diterima dan diterjemahkan oleh mikrokontroler untuk menggerakan lengan robot.
elseif (data==30)
guidata(hObject,handles);
fprintf(komunikasi,'%');
guidata(hObject,handles);
elseif (data==31)
guidata(hObject,handles);
fprintf(komunikasi,'^');
guidata(hObject,handles);
elseif (data==32)
guidata(hObject,handles);
fprintf(komunikasi,'&');
guidata(hObject,handles);
elseif (data==33)
guidata(hObject,handles);
fprintf(komunikasi,'*');
guidata(hObject,handles);
elseif (data==34)
guidata(hObject,handles);
fprintf(komunikasi,'(');
guidata(hObject,handles);
elseif (data==35)
guidata(hObject,handles);
fprintf(komunikasi,')');
guidata(hObject,handles);
elseif (data==36)
guidata(hObject,handles);
fprintf(komunikasi,'+');
guidata(hObject,handles);
elseif (data==0)
guidata(hObject,handles);
fprintf(komunikasi,'0');
guidata(hObject,handles);
end
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
119
4.3.1.9. Tampilan GUI Matlab
GUI (Grapichal User Interface) merupakan suatu tampilan yang berfungsi sebagai
antarmuka antara user dan komputer sehingga mempermudah dalam pengawasan program
yang sedang terjadi atau dieksekusi. GUI memiliki peran yang penting karena dengan adanya
GUI, user dapat melihat informasi yang ditampilkan oleh program. Tampilan GUI yang
dibuat ditunjukan oleh gambar 4.51.
Gambar 4.51. Tampilan GUI Matlab
Terdapat beberapa fasilitas yang terdapat pada GUI yang digunakan yaitu axes, edit
text, dan push button. Axes 1 berfungsi untuk menampilkan citra secara langsung dari
webcam, axes 2 berfungsi untuk menampilkan citra biner, axes 3 berfungsi menampilkan
citra berwarna. Edit text 2 sampai edit text 6 berfungsi menampilkan posisi objek, sedangkan
edit text 7 sampai edit text 11 berfungsi menampilkan bentuk objek. Push button merupakan
tombol yang berfungsi sebagai controler, yaitu untuk mengaktifkan webcam, meng-capture
objek, memproses pengenalan bentuk dan posisi objek serta pengiriman data array secara
serial ke mikrokontroler. Bagian petunjuk posisi berfungsi untuk menunjukan posisi
peletakan objek pada area. Bagian yang terakhir yaitu exit yang berfungsi untuk keluar dari
GUI dan program matlab.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
120
4.3.2. Software Codevision AVR
Pada sub bab ini akan dibahas dan dijelaskan tentang masing-masing fungsi pada
listing program yang diprogram menggunakan software codevision AVR diantaranya
inisialisasi komunikasi serial USART, inisialisasi timer0, program menerima data serial dari
matlab, program pengendali motor servo dan sub rutin program utama dalam menampilkan
data karakter, bentuk dan posisi benda di LCD serta program pergerakan lengan robot saat
mengambil dan meletakan benda. Program pada mikrokontroler dibuat berdasarkan wiring
motor servo pada minimum sistem Atmega32 yang dapat dilihat di lampiran.
4.3.2.1. Inisialisasi Komunikasi USART
Pada bagian ini berfungsi sebagai inisialisasi dan pengaturan register-register dalam
komunikasi USART untuk menghubungkan laptop dengan ATmega32. Listing program
inisialisasi komunikasi USART ditunjukan oleh gambar 4.52.
Gambar 4.52. Listing Program inisialisasi komunikasi USART pada codevision AVR
Mikrokontroler Atmega32 hanya difungsikan untuk menerima data serial yang dikirim
oleh matlab sehingga USART Receiver On, sedangkan USART Transmitter di Off kan.
Mode USART yang digunakan adalah asynchronus yaitu komunikasi serial dengan masing-
masing memiliki sumber clock sendiri. Baudrate yang digunakan yaitu 9600 bps.
Register-register yang digunakan untuk inisialisasi USART yaitu UCSRA, UCSRB,
UCSRC, UBRRH, UBRRL. Register UCSRA tidak diberikan nilai karena bit-bit registernya
akan set sesuai dengan program yang sedang di eksekusi. Register UCSRB diberi nilai 0x90,
dalam biner sama dengan 10010000. Nilai 10010000 menunjukan bahwa bit 7 dan bit 4 di
set dengan nilai 1. Bit 7 berfungsi mengaktifkan interupsi RX complete sedangkan bit 4
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
121
berfungsi untuk mengangktifkan pin RX saluran USART. Register UCSRC diberi nilai
0x86, dalam biner sama dengan 10000110. Nilai 10000110 menunukan bahwa bit 7, bit 2,
dan bit 1 diset dengan nilai 1. Bit 7 berfungsi untuk menulis atau membaca register UCSRC,
bit 2 dan bit 1 dikombinasikan dengan bit 2 dalam register UCSRB yang berfungsi untuk
mengatur jumlah karakter serial bit yang digunakan untuk memilih lebar data. Register
UBRRH diberi nilai 0x00 dan UBRRL diberi nilai 0x47. Nilai 0x00 dan 0x47 menunjukan
bahwa pada komunikasi USART yang digunakan, memiliki frekuensi kristal 11,059200 Mhz
dan baudrate 9600 bps.
4.2.3.2. Inisialisasi Timer0
Timer0 digunakan sebagai pembangkit sinyal PWM. Timer yang digunakan
menggunakan sumber clock yaitu sistem clock serta memiliki frekuensi clock sebesar
11,059200 Mhz. Mode timer yang digunakan adalah mode normal sehingga register TCCR0
diberi rnilai 0x01. Timer0 yang akan mencacah nilai mulai dari 0 sampai dengan 255 yang
digunakan untuk membangkitkan sinyal PWM. Sinyal PWM digunakan untuk
mengendalikan motor servo. Inisialisasi timer0 ditunjukan oleh gambar 4.53.
Gambar 4.53. Listing program inisialisasi Timer0
4.3.2.3. Program Menerima Data Serial dari Matlab
Program untuk menerima data menggunakan fasilitas interupsi. Interupsi yang
digunakan yaitu dengan memanfaatkan RXC pada register UCSRB. Bit register ini akan set
ketika data yang masuk ke dalam UDR sudah lengkap dan belum dibaca sehingga dapat
membangkitkan interupsi. Ketika interupsi dibangkitkan, data yang dikirim dari matlab akan
disimpan dalam varibel. Data yang dikirim oleh matlab berjumlah lima karakter. Masing-
masing karakter memiliki variabel penyimpanan. Tujuannya yaitu masing-masing variabel
yang menyimpan data karakter akan dibandingankan dengan karakter pada mikrokontroler
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 11059,200 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x01;
TCNT0=0x00;
OCR0=0x00;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
122
untuk menentukan pergerakan lengan robot. Variabel yang digunakan untuk menyimpan
data yang dikirim matlan yaitu a,b,c,d dan e.
Pada penelitian ini, variabel yang akan digunakan untuk menyimpan data
dideklarasikan dengan tipe data char. Tipe data char merupakan tipe data yang hanya mampu
menyimpan 8 bit data, sehingga hanya bisa menerima satu karakter. Deklarasi variabel untuk
menerima data komunikasi serial USART ditunjukan pada gambar 4.54.
Gambar 4.54. Deklarasi tipe data variabel untuk menerima data serial USART
Program menerima data serial yang digunakan dalam komunikasi USART ini adalah
scanf. Scanf merupakan fungsi yang dapat menerima beberapa data dan menyimpan data
pada beberapa variabel. Tetapi pada penggunaanya, jumlah karakter yang dikirim harus
sama dengan jumlah variabel yang akan digunakan sebagai tempat penyimpanan data. Scanf
dapat menerima data angka maupun string. Untuk menerima data angka, variabel
dideklarasikan dengan “d” sedangkan data untuk string dideklarasikan dengan “%”. Listing
program menerima data serial USART menggunakan fungsi scanf ditunjukan oleh gambar
4.55.
Gambar 4.55. Listing program menerima data serial USART dengan scanf
Huruf f merupakan varibel yang menyimpan angka 1. Variabel ini digunakan sebagai
pemicu untuk mengeksekusi sub rutin program utama didalam fungsi while. Variabel ee
diberi nilai 0. Varibel ini digunakan sebagai counter untuk menentukan pemberian nilai OCR
pada servo base.
char a,b,c,d,e;
//interupsi untuk menerima data serial
interrupt [USART_RXC] void myinterrupt (void)
{
scanf("%s %s %s %s %s", &a, &b, &c, &d, &e);
f = 1;
ee=0;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
123
4.3.2.4. Pengendali Motor Servo
Untuk dapat mengendalikan motor servo yang dihubungkan pada PORTB.0,
PORTB.1 PORTB.2 dan PORTB.3, maka harus diinisialisasi sesuai dengan port yang akan
digunakan terlebih dahulu. Listing program inisialisasi servo pada PORTB.0, PORTB.1
PORTB.2 dan PORTB.3 ditunjukan pada gambar 4.56.
Gambar 4.56. Listing program mendefinisikan servo
Program pengendali motor servo menggunakan fasilitas interrupt timer0. Timer0
digunakan sebagai pembangkit pulsa PWM untuk menggerakan motor servo. Listing
program pengendali sudut putar motor servo ditunjukan pada gambar 4.57.
Gambar 4.57. Listing program pengendali sudut putar motor servo
Listing program pada gambar 4.51 adalah program interrupt timer0. Nilai i++ artinya
adalah timer mulai mencacah dari 0 sampai dengan 255, jika lebih dari nilai itu, maka timer
overflow dan mulai mengaktifkan PWM. Nilai 864 merupakan nilai overflow selama periode
motor servo yaitu 20 ms. Kemudian pemberian logika 1 pada tiap port, apabila kondisi nilai
//inisialisasi port servo
#define servo1 PORTB.0
#define servo2 PORTB.1
#define servo3 PORTB.2
#define servo4 PORTB.3
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
i++;
if (i>864) {i = 0;}
else
{
if(i<data1){servo1 = 1;}
else {servo1=0;}
if(i<data2){servo2 = 1;}
else {servo2=0;}
if(i<data3){servo3 = 1;}
else {servo3=0;}
if(i<data4){servo4 = 1;}
else {servo4=0;}
}
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
124
i lebih kecil daripada nilai variabel servo1, servo2, servo3 dan servo4 sehingga mulai
pemberianpulsa PWM agar motor servo bergerak. Pemberian logika 0, jika kondisinya tidak
terpenuhi maka PORTB akan direset. Data1, data 2, data 3, data 4 merupakan variabel yang
menyimpan nilai OCR untuk menggerakan motor servo.
Gambar 4.58. Fungsi program gerak kubus di posisi 1
Fungsi program lengan robot mengambil objek di posisi satu dan memindahkannya
kekotak peletakan objek kubus ditunjukan oleh gambar 4.58. Void gerak_kubus1 merupakan
fungsi program yang akan diekseskusi ketika di posisi 1 terdapat objek kubus. Urutan
pergerakan motor servo ketika memindahkan objek yaitu gerak ambil yang di program untuk
posisi satu sampai dengan dua belas, gerak siaga meletakan objek, kemudian gerak
peletakan objek ke kotak peletakan objek, selanjutnya adalah robot kembali standby untuk
mengambil objek selanjutnya. Jika tidak ada objek lagi, maka lengan robot akan standbylagi.
Standbylagi merupakan posisi awal lengan robot sebelum mengambil objek untuk pertama
kali.
void gerak_kubus1()
{
gerak_ambil1(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
125
Gambar 4.59. Listing program fungsi counter pergerakan lengan robot mengambil objek
Listing program fungsi counter pergerakan lengan robot mengambil objek ditunjukan
oleh Gambar 4.59. Variabel ee yang digunakan untuk menentukan pemberian nilai OCR
pada servo 1. Variabel alpa = 1 artinya adalah memberi nilai OCR pada servo 1 untuk
pengambilan objek pertama, sedangkan alpa = 2 artinya adalah memberi nilai OCR pada
servo 1 untuk pengambilan objek kedua, ketiga, keempat dan kelima. Perbedaan pemberian
nilai OCR terjadi karena masing-masing servo memiliki karakteristik dan keakuratan yang
berbeda-beda, akan tetapi pemberian nilai OCR yang berbeda tidak menganggu pergerakan
robot dalam mengambil dan memindahkan benda hanya saja pemberian nilai OCR untuk
servo satu dilakukan 2 kali. Pemberian OCR pertama untuk kondisi pengambilan objek
pertama, sedangkan pemberian OCR kedua untuk kondisi pengambilan objek kedua, ketiga,
keempat dan kelima.
// fungsi counter pergerakan robot mengambil benda
void awal()
{
ee=ee+1;
for(y=1;y<=2;y++)
{
if (ee==1)
{
alpa=1;
}
else if (ee==2)
{
alpa=2;
}
else if (ee==3)
{
alpa=2;
}
else if (ee==4)
{
alpa=2;
}
else if (ee==5)
{
alpa=2;
}
}
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
126
Gambar 4.60. Listing program gerak ambil di posisi 1
Gambar 4.61. (lanjutan) listing program gerak ambil di posisi 1
//pergerakan robot mengambil benda di posisi 1
void gerak_ambil1()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=60;data1--) //135 Derajat
{delay_ms(20);};
aa=60;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1<=60;data1++) //135 Derajat
{delay_ms(20);};
aa=60;
delay_ms(200);
}
delay_ms(200);
for(data2=48;data2>=41;data2--) //65 Derajat
{delay_ms(50);};
ab=41;
delay_ms(200);
for(data3=48;data3>=35;data3--) //40 Derajat
{delay_ms(70);};
ac=35;
delay_ms(500);
//program menggeser dan mengambil objek di posisi 1
for(data1=60;data1<=61;data1++) //140 Derajat
{delay_ms(60);};
delay_ms(300);
for(data2=41;data2>=40;data2--) //55 Derajat
{delay_ms(60);};
delay_ms(300);
for(data3=35;data3>=33;data3--) //35 Derajat
{delay_ms(70);};
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(20);};
ad=51;
delay_ms(1000);
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
127
Listing program yang ditunjukan pada gambar 4.60 dan 4.61 merupakan pemberian
nilai OCR pada masing-masing servo pada saat mengambil objek di posisi satu. Khusus
pengambilan objek di posisi 1, lengan robot tidak langsung mengambil objek, tetapi objek
terlebih dahulu digeser sedikit kekiri oleh gripper, kemudian gripper akan mencengkeram
objek. Hal ini karena pada pengambilan objek di posisi satu, apabila objek tidak digeser
kekiri, maka gripper lengan robot akan menyentuh dan mengubah posisi objek yang berada
diposisi ke dua.
Gambar 4.62. Listing program gerak siaga
//pergerakan robot siaga
void siaga()
{
da= 1;
if (da==1)
{
for (o=1;o<=4;o++)
{
switch (o)
{
case 1:
{
if (ac < 48)
{
for (data3=ac;data3<=48;data3++) //90 Derajat
{delay_ms(50);};
bc=48;
delay_ms(100);
break;
}
else if (ac > 48)
{
for (data3=ac;data3>=48;data3--) //90 Derajat
{delay_ms(50);};
bc=48;
delay_ms(100);
break;
}
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
128
Gambar 4.63. (lanjutan) listing program gerak siaga
Gambar 4.64. (Lanjutan) listing program gerak siaga
case 2:
{
if (ab < 48)
{
for (data2=ab;data2<=48;data2++) //90 Derajat
{delay_ms(50);};
bb=48;
delay_ms(100);
break;
}
else if (ab > 48)
{
for (data2=ab;data2>=48;data2--) //90 Derajat
{delay_ms(50);};
bb=48;
delay_ms(100);
break;
}
}
case 3:
{
if (aa < 46)
{
for (data1=aa;data1<=46;data1++) //90 Derajat
{delay_ms(40);};
ba=46;
delay_ms(100);
break;
}
else if (aa > 46)
{
for (data1=aa;data1>=46;data1--) //90 Derajat
{delay_ms(40);};
ba=46;
delay_ms(100);
break;
}
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
129
Gambar 4.65. (lanjutan) listing program gerak siaga
Gambar 4.66. Listing program gerak peletakan kubus
case 4:
{
data4 = 51;
bd = 51 ;
delay_ms(500);
break;
}
}
}
da=0;
}
}
//pergerakan robot meletakan objek kubus di kotak hijau(1)
void gerak_peletakankubus()
{
db= 1;
if (db==1)
{
for (p=1;p<=4;p++)
{
switch (p)
{
case 1:
{
if (ba < 22)
{
for (data1=ba;data1<=22;data1++) //0 Derajat
{delay_ms(20);};
ca=22;
delay_ms(100);
break;
}
else if (ba > 22)
{
for (data1=ba;data1>=22;data1--) //0 Derajat
{delay_ms(20);};
ca=22;
delay_ms(100);
break;
}
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
130
Gambar 4.67. (Lanjutan) listing program gerak peletakan kubus
Gambar 4.68. (Lanjutan) listing program gerak peletakan kubus
case 2:
{
if (bb < 36)
{
for (data2=bb;data2<=36;data2++) //45 Derajat
{delay_ms(50);};
cb=36;
delay_ms(100);
break;
}
else if (bb > 36)
{
for (data2=bb;data2>=36;data2--) //45 Derajat
{delay_ms(50);};
cb=36;
delay_ms(100);
break;
}
}
case 3:
{
if (bc < 33)
{
for (data3=bc;data3<=33;data3++) //35 Derajat
{delay_ms(50);};
cc=33;
delay_ms(1000);
break;
}
else if (bc > 33)
{
for (data3=bc;data3>=33;data3--) //35 Derajat
{delay_ms(50);};
cc=33;
delay_ms(1000);
break;
}
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
131
Gambar 4.69. (Lanjutan) listing program gerak peletakan kubus
Gambar 4.70. Listing program gerak standby1
case 4:
{
for (data4=bd;data4>=25;data4--) //10 Derajat
{delay_ms(25);};
cd=25;
delay_ms(1000);
break;
}
}
}
db=0;
}
}
//pergerakan robot kembali standby setelah meletakan benda di
kotak hijau
void standby1()
{
de= 1 ;
if (de==1)
{
for (q=1;q<=4;q++)
{
switch (q)
{
case 1:
{
if (cc < 48)
{
for (data3=cc;data3<=48;data3++) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
else if (cc > 48)
{
for (data3=cc;data3>=48;data3--) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
132
Gambar 4.71. (Lanjutan) listing program gerak standby1
Gambar 4.72. (Lanjutan) listing program gerak standby1
case 2:
{
if (cb < 48)
{
for (data2=cb;data2<=48;data2++) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
else if (cb > 48)
{
for (data2=cb;data2>=48;data2--)//90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
}
case 3:
{
if (ca < 46)
{
for (data1=ca;data1<=46;data1++) //90 Derajat
{delay_ms(20);};
delay_ms(100);
break;
}
else if (ca > 46)
{
for (data1=ca;data1>=46;data1--) //90 Derajat
{delay_ms(20);};
delay_ms(100);
break;
}
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
133
Gambar 4.73. (Lanjutan) listing program gerak standby1
Gambar 4.74. listing program standbylagi
Listing program pergerakan lengan robot ketika bergerak siaga setelah mengambil
objek kubus diposisi 1, pergerakan meletakan objek kubus, pergerakan standby untuk
bersiap mengambil objek selanjutnya ditunjukan oleh gambar 4.62 sampai dengan gambar
4.74. Pada listing program, terdapat fungsi for yang digunakan untuk mencacah nilai OCR
satu persatu sehingga pergerakan motor servo menjadi lebih halus. Dengan menggunakan
fungsi for, OCR motor servo untuk fungsi yang sebelumnya dieksekusi dan fungsi yang
selanjutnya akan dieksekusi, nilainya harus sama, sehingga didalam fungsi switch case
digunakan fungsi if yang berfungsi untuk menentukan pemberian nilai OCR pada motor
servo berdasarkan nilai OCR motor servo pada fungsi yang sebelumnya dieksekusi. Hal ini
karena OCR motor servo ketika mengambil objek di posisi satu hingga posisi dua belas,
nilainya berbeda-beda. Nilai-nilai OCR yang berbeda-beda pada masing-masing fungsi
case 4:
{
data4=25;
delay_ms(1000);
break;
}
}
}
de=0;
}
}
// pergerakan robot kembali ke posisi awal setelah meletakan
semua objek
void standbylagi()
{
data1=74; // 180
delay_ms(1000);
data2=48; //90
delay_ms(1000);
data3=48; //90
delay_ms(1000);
data4=25; //0
delay_ms(1000);
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
134
disimpan di dalam variabel. Tujuannya adalah variabel yang menyimpan nilai OCR motor
servo digunakan untuk mengawali pernyataan pada fungsi for.
Delay yang digunakan pada fungsi for sebesar 20 ms. Delay 20 ms merupakan lama
waktu untuk mencacah satu nilai OCR pada fungsi for. Pemberian delay sebesar 20 ms
menyebabkan lengan robot bergerak lebih halus dan cepat. Semakin besar delay yang
diberikan, maka pergerakan lengan robot akan semakin lambat tetapi pergerakannya tetap
halus. Pemberian delay 500 ms dan 1000 ms bertujuan memberi jeda waktu pada lengan
robot untuk melakukan pergerakan selanjutnya.
4.3.2.5. Subrutin Program Utama
Pada bagian ini, akan dibahas mengenai subrutin program utama yang akan dieksekusi
untuk menggerakan lengan robot dalam mengambil dan meletakan benda berdasarkan
bentuk dan posisinya. Pergerakan lengan robot mengacu pada flowchart yang terdapat
dilampiran.
Subrutin program utama terdapat pada fungsi while sehingga akan dieksekusi secara
terus menerus, tetapi program pergerakan lengan robot akan dieksekusi ketika variabel f
bernilai 1. Variabel f akan bernilai 1 ketika terjadi interupsi RXC complete. Pada subrutin
program utama, masing-masing variabel yang digunakan untuk menyimpan karakter yang
dikirim matlab, akan diterjemahkan satu persatu oleh mikrokontroler, tujuannya untuk
mengeksekusi fungsi program pergerakan lengan robot dalam mengambil dan
memindahkan objek berdasarkan bentuk dan posisi. Penerjemahan dilakukan sebanyak lima
kali dengan menggunakan fungsi switch case. Informasi data karakter yang diterima oleh
mikrokontroler beserta informasi bentuk dan posisi objek ditampilkan pada LCD 16x2.
Listing program subrutin utama dapat di lihat pada lampiran.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
135
BAB V
KESIMPULAN DAN SARAN
5.1. Kesimpulan
Dari hasil pengujian serta pengambilan data pada aplikasi computer vision pada
lengan robot pemindah benda berdasarkan bentuk dan posisi, dapat diambil kesimpulan:
1. Sistem dapat mengenali bentuk dan posisi objek 100 % saat mengidentifikasi
objek.
2. Lengan robot mampu memindahkan objek yang diletakan dengan orientasi
bebas serta posisi yang acak pada centroid area-area tertentu.
3. Peletakan posisi objek sesuai dengan batasan masalah, membuat sistem dan
lengan robot bekerja 100%.
5.2. Saran
Saran-saran bagi pengembangan selanjutnya adalah :
1. Peletakan dan posisi objek dibuat bebas, tidak tergantung pada area-area
tertentu.
2. Proses konversi citra biner menggunakan binerisasi automatic agar sistem
dapat bekerja pada segala intensitas cahaya.
3. Gripper dibuat model vacum agar mudah dalam mengambil objek disegala
posisi.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
136
Daftar Pustaka
[1] Budiharto, W. dan Purwanto, D., 2012, Robot Vision - Teknik membangun robot
cerdas masa depan, C.V Andi Offset, Yogyakarta.
[2] Budiharto, W. 2014, Robotika Modern - Teori dan Implementasi (Edisi Revisi), C.V
Andi Offset, Yogyakarta.
[3] Putra, G.A., Perancangan dan Implementasi Computer Vision Pada Robot
Pendeteksi Objek Berbasis Smartphone Android dan Mikrokontroler Atmega128,
http://perpustakaan.fmipa.unpak.ac.id/file/e-jurnal%20065111277.pdf, diakses 1
Desember 2018.
[4] Hasan, I. 2011, Aplikasi Pengenalan Objek Untuk Lengan Robot Pemisah Benda
Berdasarkan Bentuk Benda, Tugas Akhir, Jurusan Teknik Elektro, FST, Universitas
Sanata Dharma, Yogyakarta.
[5] Setyanto, K.D., Fibriani, I., dan Sumardi., ----, Pengendalian Mobile Robot Vision
Mengguakan Webcam Pada Objek Arah Panah Berbasis Rasberry PI, Jurnal Arus
Elektro Indonesia, Vol 2, No 1, hal 126-132.
[6] Kadir, A. dan Susanto, A., 2013, Teori dan Aplikasi Pengolahan Citra, C.V Andi
Offset, Yogyakarta.
[7] Marques, O., 2011, Practical Image and Video Processing Using Matlab, John
Wiley & Sons Inc, New Jersey.
[8] Pamungkas, A,. ----, Tresholding, https://pemrogramanmatlab.com/pengolahan-
citra-digital/segmentasi-citra/thresholding-menggunakan-matlab/, diakses 8
Februari 2019.
[9] Maulana, I., Andono, P.N., 2016, Analisa Perbandingan Adaptif Median Filter Dan
Median Filter Dalam Reduksi Noise Salt & Pepper, Cogito Smart Journal. Vol. 2.
No. 2, hal 157-166.
[10] Pamungkas, A,. ----, Pengolahan Citra Digital, https://pemrogramanmatlab.com
/pengolahan-citra-digital/perbaikan-kualitas-citra/, diakses 9 Februari 2019.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
137
[11] Pamungkas, A,. ----, Segmentasi Citra,
https://pemrogramanmatlab.com/pengolahan-citra-digital/segmentasi-citra/, diakses
tanggal 8 Februari 2019.
[12] Pranoto, S., 2011, Monitoring Ruang Dengan Webcam Yang Dapat Di Akses Melalui
Handphone Menggunakan Jaringan WI-FI, http://eprints.undip.ac.id/25268/,
diakses 8 Februari 2018.
[13] Logitech, ----, Webcam C170, https://www.logitech.com/id-id/product/webcam-
c170, diakses 12 November 2018.
[14] Pitowarno, E. 2006, Robotika - Desain, Kontrol dan Kecerdasan Buatan, C.V Andi
Offset, Yogyakarta.
[15] Robotics Beta, ----, ----, https://robotics.stackexchange.com/questions/7091/design-
and-construction-of-universal-robotic-arm-5kg-1m, diakses 1 Desember 2018.
[16] Robo Savvy, ----, ----, https://robosavvy.com/store/dagu-2dof-robot-arm-with-
gripper-and-servos-13cm.html, diakses 1 Desember 2018.
[17] ----, 2019, Motor servo, www.elektronika-dasar.web.id/motor-servo/, diakses 1
Desember 2018.
[18] ----, ----, ----, https://servodatabase.com, diakses 1 Desember 2018.
[19] ----, ----, Servo Wiring Informtion, http://fatlion.com/sailplanes/servos.html, diakses
1 Desember 2018.
[20] Tipler, P.A., 1998, FISIKA Untuk Sains Dan Teknik, Edisi 3 jilid 1, Erlangga,
Bandung.
[21] ----, ----, Konsep Momen Gaya Atau Torsi, https://fisikazone.com, diakses 9 Maret
2019.
[22] ----, ----, Torsi, www.fisikazone.com, diakses 9 Maret 2019.
[23] Jumini, S., Muhlisoh, L., 2013, Pengaruh Perbedaan Panjang Poros Suatu Benda
Terhadap Kecepatan Sudut Putar, Seminar Nasional Sains dan Pendidikan Sains
VIII, Fakultas Sains dan Matematika UKSW, Salatiga.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
138
[24] ----, ----, Dinamika Rotasi, https://www.studiobelajar.com/dinamika-rotasi/,
diakases 16 Maret 2019.
[25] ----, ----, Invers Kinematics, http://www.sml.ee.upatras.gr/UploadedFiles/Inverse
Kinematics.pdf, diakses 10 Februari 2019.
[26] Marzuki, A., ----, Pulse Width Modulation (PWM),
http://achamad.staff.ipb.ac.id/wp-content/plugins/as-pdf/andri_mz Pulse%20Width
%20Modulation%20(PWM).pdf, di akses 1 Desember 2018.
[27] Syahrul, 2014, Pemrogaman Mikrokontroler AVR Bahasa Assembly dan C,
Informatika, Bandung.
[28] ----, 2011, Data sheet Mikrokontroler Atmega32, Atmel.
[29] ---, 2019, Pengertian Power Supply dan Jenis-Jenisnya,
https://teknikelektronika.com /pengertian-power-supply-jenis-catu-daya/, diakses 1
Desember 2018.
[30] Surjono, D.H., 2011, Elektronika Lanjut, Cerdas Ulet Kreatif, Jawa Timur.
[31] ----, ----, 5V 2A Regulated Switching Power Supply, https://www.fasttech.com
/product/1270302-5v-2a-regulated-switching-power-supply, diakses 1 Desember
2018
[32] ----, ----, Towerpro SG90 9g Micro Servo,
https://www.rcshopbd.com/product/tower-pro-sg90-9g-micro-servo/, diakses 6
Februari 2019.
[33] ----, ----, ----, https://hobbyking.com/en_us/jx-pdi-6225mg-300-coreless-metal-gear-
high-torque-digital-servo-25-3kg-0-21sec-62g.html?___store=en_us, diakses 6
Februari 2019.
[34] Setiawan, M., 2018, Pengenalan Huruf Jepang Hiragana Menggunakan Ekstraksi
Ciri Polar Fourier Transform Dan Pengklasifikasi SVM , Tugas Akhir, Jurusan
Teknik Elektro, Universitas Sanata Dharma, Yogyakarta.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
139
[35] Syahmenan, M., Supriyanto, H., Nugraha, N.,---- Rancangan Bangun Sistem Panen
Propolis Otomatis Untuk Sarang Lebah/Modular Trigona Hive Berbasis Raspberry
Pi Dan Komunikasi SMS, https://www.academia.edu/37865248/RANCANG_
BANGUN_SISTEM_PANEN_PROPOLIS_OTOMATIS_UNTUK_SARANG_LE
BAH_MODULAR_TRIGONA_HIVE_BERBASIS_RASPBERRY_PI_DAN_KO
MUNIKASI_SMS, diakses 23 Juni 2019.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-1
LAMPIRAN
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-2
Kontur Moore [34]
Minimum Sistem ATmega32
Sistem Minimum AVR DIP-40 dan Downloader USB-ASP .Sistem minimum yang
dirancang untuk IC Mikrokontroller AVR ATMEGA dengan kemasan DIP-40. Tipe
mikrokontroller yang dapat digunakan pada PCB ini antara lain: MEGA8535, MEGA16,
MEGA32. PCB ini dibuat untuk memudahkan proses perancangan prototipe kontroller
berbasis mikrokontroller. Sistem minimum telah dilengkapi dengan Onboard Downloader
USB ASP, sehingga memudahkan proses flash IC.
1. Dimensi PCB 85mm x 65mm
2. Input Tegangan 7-12V DC dengan Barrel Jack
3. Dilengkapi Onboard Downloader USB-ASP
4. Dilengkapi Regulator Tegangan 5V 1A DC
5. 24 Digital I/O
6. 8 Analog input (resolusi 10 bit)
( a ) (b)
(c)
(d)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-3
7. Clock 11,0592MHz
8. Tombol Reset
9. LED Power Status Sismin (Merah )
10. LED Power Status Downloader (Merah )
11. LED Busy Status Downloader (Hijau)
Motor Servo JX PDI-6225-300.
Specification:
Brand: JX
Model: PDI-6225MG-300 25kg
Motor: High quality core motor
Max Angle:300°
Pulse width:800-2200μs=180°
Pulse width:500-2500μs=320°
Dead band: 4μs/1520μs / 330hz
Operating Speed (4.8V): 0.25 sec/60°
Operating Speed (6V): 0.21 sec/60°
Stall Torque (4.8V): 19.9 kg.cm
Stall Torque (6V): 25.3 kg.cm
Connector Wire Length: JR 260 mm
Bearing: 2BB
Application: RC Car Robot Airplane
Dimensions: 56X20X45mm
Weight: 65g
Package information:
Package size: 65 x 50 x 40mm / 2.56 x 1.97 x 1.58in
Package weight: 85g / 3oz
Brand gift box package
Package list:
1 x JX PDI-6225MG-300 25kg Metal Gear Digital Servo
1 x Spare Parts Set
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-4
Motor Servo SG90
Usb To Serial TTL PL2303HX PL2303 Serial Converter
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-5
Webcam Logitech c170h
Connection Type USB
USB Type USB 2.0
USB VID_PID 082B
UVC Support Yes
Microphone Yes
Microphone Type Mono
Lens and Sensor Type Plastic
Focus Type Fixed
Optical Resolution True 640x480,
I1.3MP nterpolated
Diagonal Field of View (FOV) 58°
Focal Length 2.3 mm
Image Capture (4:3 SD) 640x480, 1.3MP, 3MP, 5MP
Image Capture (16:9 W) 320x180, 360P
Video Capture (4:3 SD) 320x240, 640x480, 1024x768
Video Capture (16:9 W) 320x180, 360P
Frame Rate (max) 640x480@30
Right Light N/A
Video Effects (VFX) N/A
Buttons N/A
Indicator Lights (LED) Yes
Privacy Shade No
Tripod Mounting Option N/A
Universal Clip Adjustability 71mm
Cable Length 4 Feet, 121.92 CM
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-6
Wiring Motor Servo Beserta LCD 16x2 Pada Minimum Sistem Atmega32
SERVO 1
SERVO 2
SERVO 4
SERVO 3
PORTB.0
PORTB.1
PORTB.2
PORTB.3
VCC 5VGND Port D0 (RX)
US
B
(RX)
(TX)
VCCGND
ATmega32
USB to Serial
PWM
Vcc
Gnd
PWM
Vcc
Gnd
Vcc
Gnd
Vcc
Gnd
PWM
PWM
VCC 5V
GND
VSS VDD VO RSRWED5D6D7 D4
PORTA.0
PORTA.1
PORTA.2
PORTA.3
PORTA.4
PORTA.5
PORTA.6
PORTA.7
LCD 16x2
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-7
Tabel Nilai OCR dan Nilai Sudut Masing-masing Servo
Sudut
(Derajat)
Nilai OCR
Servo 1 Servo 2 Servo 3 Servo 4
0 22 23 23 22
5 23 24 25 23
10 24 26 26 25
15 25 27 27 26
20 26 28 29 27
25 28 30 30 30
30 30 32 32 31
35 31 33 33 33
40 33 34 35 35
45 34 36 36 38
50 37 37 37 40
55 38 39 39 41
60 39 40 40 45
65 40 41 41 47
70 41 43 43 50
75 42 45 44 52
80 44 46 45 54
85 45 47 47 57
90 46 48 48 60
95 49 50 50 62
100 50 52 51 65
105 52 53 52 67
110 53 54 54 70
115 54 55 55 72
120 55 57 57 75
125 57 59 58 77
130 59 60 60 80
135 60 62 62 81
140 61 63 63 84
145 62 64 64 86
150 64 65 66 88
155 65 66 67 91
160 66 67 69 93
165 68 69 70 95
170 70 70 71 100
175 71 71 73 101
180 72 73 75 102
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-8
Sudut Lebar Pulsa (ms)
Servo 1 Servo 2 Servo 3 Servo 4
0 0,51 0,53 0,53 0,51
5 0,53 0,56 0,58 0,53
10 0,56 0,60 0,60 0,58
15 0,58 0,63 0,63 0,60
20 0,60 0,65 0,67 0,63
25 0,65 0,69 0,69 0,69
30 0,69 0,74 0,74 0,72
35 0,72 0,76 0,76 0,76
40 0,76 0,79 0,81 0,81
45 0,79 0,83 0,83 0,88
50 0,86 0,86 0,86 0,93
55 0,88 0,90 0,90 0,95
60 0,90 0,93 0,93 1,04
65 0,93 0,95 0,95 1,09
70 0,95 1,00 1,00 1,16
75 0,97 1,04 1,02 1,20
80 1,02 1,06 1,04 1,25
85 1,04 1,09 1,09 1,32
90 1,06 1,11 1,11 1,39
95 1,13 1,16 1,16 1,44
100 1,16 1,20 1,18 1,50
105 1,20 1,23 1,20 1,55
110 1,23 1,25 1,25 1,62
115 1,25 1,27 1,27 1,67
120 1,27 1,32 1,32 1,74
125 1,32 1,37 1,34 1,78
130 1,37 1,39 1,39 1,85
135 1,39 1,44 1,44 1,88
140 1,41 1,46 1,46 1,94
145 1,44 1,48 1,48 1,99
150 1,48 1,50 1,53 2,04
155 1,50 1,53 1,55 2,11
160 1,53 1,55 1,60 2,15
165 1,57 1,60 1,62 2,20
170 1,62 1,62 1,64 2,31
175 1,64 1,64 1,69 2,34
180 1,67 1,69 1,74 2,36
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-9
Tabel Sudut Tiap Servo untuk Mengambil dan Memindahkan Objek Kubus (Teori)
Posisi Sudut
Servo 1 Servo 2 Servo 3 Servo 4
Siaga 900 900 900 250
Mengambil Benda
Posisi 1 1320 490 230 700
Posisi 2 1060 300 140 700
Posisi 3 740 300 140 700
Posisi 4 490 490 230 700
Posisi 5 1190 850 510 700
Posisi 6 1010 700 380 700
Posisi 7 800 700 380 700
Posisi 8 610 850 510 700
Posisi 9 1120 1080 760 700
Posisi 10 980 1010 670 700
Posisi 11 830 1010 670 700
Posisi 12 680 1080 760 700
Meletakan benda
Kotak 1
(Kubus) 00 550 200 100
Tabel Sudut Tiap Servo untuk Mengambil dan Memindahkan Objek Tabung (Teori)
Posisi Sudut
Servo 1 Servo 2 Servo 3 Servo 4
Siaga 900 900 900 250
Mengambil Benda
Posisi 1 1320 490 230 700
Posisi 2 1060 300 140 700
Posisi 3 740 300 140 700
Posisi 4 490 490 230 700
Posisi 5 1190 850 510 700
Posisi 6 1010 700 380 700
Posisi 7 800 700 380 700
Posisi 8 610 850 510 700
Posisi 9 1120 1080 760 700
Posisi 10 980 1010 670 700
Posisi 11 830 1010 670 700
Posisi 12 680 1080 760 700
Meletakan benda
Kotak 2
(Tabung) 00 1050 650 100
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-10
Tabel Sudut Tiap Servo untuk Mengambil dan Meletakan Objek Prisma (Teori)
Posisi Sudut
Servo 1 Servo 2 Servo 3 Servo 4
Siaga 900 900 900 250
Mengambil Benda
Posisi 1 1320 490 230 700
Posisi 2 1060 300 140 700
Posisi 3 740 300 140 700
Posisi 4 490 490 230 700
Posisi 5 1190 850 510 700
Posisi 6 1010 700 380 700
Posisi 7 800 700 380 700
Posisi 8 610 850 510 700
Posisi 9 1120 1080 760 700
Posisi 10 980 1010 670 700
Posisi 11 830 1010 670 700
Posisi 12 680 1080 760 700
Meletakan benda
Kotak 3
(Prisma) 210 1050 650 100
Tabel Inisialisasi karakter objek kubus beserta posisinya
Karakter Bentuk Objek Posisi Objek
A Kubus 1
D Kubus 2
G Kubus 3
J Kubus 4
M Kubus 5
P Kubus 6
S Kubus 7
V Kubus 8
Y Kubus 9
# Kubus 10
^ Kubus 11
( Kubus 12
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-11
Inisialisasi karakter objek tabung beserta posisinya
Karakter Bentuk Objek Posisi Objek
B Tabung 1
E Tabung 2
H Tabung 3
K Tabung 4
N Tabung 5
Q Tabung 6
T Tabung 7
W Tabung 8
Z Tabung 9
$ Tabung 10
& Tabung 11
) Tabung 12
Inisialisasi karakter objek prisma segitiga beserta posisinya
Karakter Bentuk Objek Posisi Objek
C Prisma segitiga 1
F Prisma segitiga 2
I Prisma segitiga 3
L Prisma segitiga 4
O Prisma segitiga 5
R Prisma segitiga 6
U Prisma segitiga 7
X Prisma segitiga 8
! Prisma segitiga 9
% Prisma segitiga 10
* Prisma segitiga 11
+ Prisma segitiga 12
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-12
Tabel Invers Kinematic
No Keterangan Jarak
1 Jarak poros servo 1 dengan centroid posisi 1 16 cm
2 Jarak poros servo 1 dengan centroid posisi 2 13 cm
3 Jarak poros servo 1 dengan centroid posisi 3 13 cm
4 Jarak poros servo 1 dengan centroid posisi 4 16 cm
5 Jarak poros servo 1 dengan centroid posisi 5 22 cm
6 Jarak poros servo 1 dengan centroid posisi 6 19 cm
7 Jarak poros servo 1 dengan centroid posisi 7 19 cm
8 Jarak poros servo 1 dengan centroid posisi 8 22 cm
9 Jarak poros servo 1 dengan centroid posisi 9 28 cm
10 Jarak poros servo 1 dengan centroid posisi 10 26 cm
11 Jarak poros servo 1 dengan centroid posisi 11 26 cm
12 Jarak poros servo 1 dengan centroid posisi 12 28 cm
13 Jarak poros servo 1 dengan peletakan kubus 15 cm
14 Jarak poros servo 1 dengan peletakan prisma 25 cm
15 Jarak poros servo 1 dengan peletakan tabung 27 cm
16 Panjang lengan bawah 14 cm
17 Panjang lengan atas 28 cm
18 Tinggi pencengkeraman objek di posisi 1-12 1,75 cm
19 Tinggi peletakan objek di kotak peletakan 4,5 cm
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-13
Analisa Pergerakan Servo 1 (Base)
Skematik Controller Lampu Penerangan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-14
Flowchart Utama
Mulai
Selesai
Lengan robot
standby
Akusisi citra
objek
webcam
Image
preprocessing
Pengenalan
bentuk dan
posisi objek
Karakter =
a,d,g #,^,(?
Karakter =
b,e,h $,&,)?
Lengan robot
mengambil objek
kubus di posisi 1...12
dan meletakkan di
kotak1
Lengan robot
siaga
List karakter
= 0?
Ya Ya Ya
Ya
TidakTidak
Tidak
Matlab mengirim
list karakter ke
mikrokontroler
Output :
LCD
Mikrokontroler
menerima List karakter
?
Ya
Tidak
Lengan robot
mengambil Objek
tabung di posisi 1...12
dan meletakkan di
kotak2
Lengan robot
mengambil objek
prisma di posisi 1...12
dan meletakkan di
kotak3
R
R
Membaca list
karakter
Lengan robot
posisi
standby
Labeling dan
Segmentasi
Apakah ada objek?
Karakter =
c,f,i %,*,+?
Tidak
Ya
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-15
Flowchart Pergerakan Lengan Robot
Mulai
Input :
List
Karakter
matlab
Karakter =
a?
Servo 1
berputar ke
Sudut A1
Servo 2
berputar ke
Sudut B1
Servo 3
berputar ke
Sudut C1
Servo 4
berputar ke
Sudut D1
Lengan robot
dalam posisi
standby
Lengan robot
posisi siaga
Karakter =
b?
Servo 1
berputar ke
Sudut E1
Servo 2
berputar ke
Sudut F1
Servo 3
berputar ke
Sudut G1
Servo 4
berputar ke
Sudut H1
Karakter =
c?
Servo 1
berputar ke
Sudut I1
Servo 2
berputar ke
Sudut J1
Servo 3
berputar ke
Sudut K1
Servo 4
berputar ke
Sudut L1
Karakter =
d?
Servo 1
berputar ke
Sudut A2
Servo 2
berputar ke
Sudut B2
Servo 3
berputar ke
Sudut C2
Servo 4
berputar ke
Sudut D2
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Lengan robot
posisi siaga
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
List
karakter =
0?
Selesai
Membaca list
karakter
A
Men
gam
bil B
en
da
Meletak
an
Ben
da
H
H I J K L M N
Ya Ya Ya Ya
Tidak Tidak Tidak TidakKarakter =
e?
Servo 1
berputar ke
Sudut E2
Servo 2
berputar ke
Sudut F2
Servo 3
berputar ke
Sudut G2
Servo 4
berputar ke
Sudut H2
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Ya
O P
Lengan robot
posisi
standby
Tidak
Tidak
Ya
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-16
Karakter =
f?
Servo 1
berputar ke
Sudut I2
Servo 2
berputar ke
Sudut J2
Servo 3
berputar ke
Sudut K2
Servo 4
berputar ke
Sudut L2
Lengan robot
posisi siaga
Karakter =
g?
Servo 1
berputar ke
Sudut A3
Servo 2
berputar ke
Sudut B3
Servo 3
berputar ke
Sudut C3
Servo 4
berputar ke
Sudut D3
Karakter =
h?
Servo 1
berputar ke
Sudut E3
Servo 2
berputar ke
Sudut F3
Servo 3
berputar ke
Sudut G3
Servo 4
berputar ke
Sudut H3
Karakter =
i?
Servo 1
berputar ke
Sudut I3
Servo 2
berputar ke
Sudut J3
Servo 3
berputar ke
Sudut K3
Servo 4
berputar ke
Sudut L3
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
posisi siaga
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Karakter =
j?
Servo 1
berputar ke
Sudut A4
Servo 2
berputar ke
Sudut B4
Servo 3
berputar ke
Sudut C4
Servo 4
berputar ke
Sudut D4
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Tidak TidakTidakTidakTidakBA
Men
gam
bil B
enda
Meletak
ka
n B
end
a
I
Ya Ya Ya Ya Ya
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-17
Meletak
kan
Ben
da
Men
gam
bil B
en
da
Karakter =
k?
Servo 1
berputar ke
Sudut E4
Servo 2
berputar ke
Sudut F4
Servo 3
berputar ke
Sudut G4
Servo 4
berputar ke
Sudut H4
Lengan robot
posisi siaga
Karakter =
l?
Servo 1
berputar ke
Sudut I4
Servo 2
berputar ke
Sudut J4
Servo 3
berputar ke
Sudut K4
Servo 4
berputar ke
Sudut L4
Karakter =
m?
Servo 1
berputar ke
Sudut A5
Servo 2
berputar ke
Sudut B5
Servo 3
berputar ke
Sudut C5
Servo 4
berputar ke
Sudut D5
Karakter =
n?
Servo 1
berputar ke
Sudut E5
Servo 2
berputar ke
Sudut F5
Servo 3
berputar ke
Sudut G5
Servo 4
berputar ke
Sudut H5
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut F13
Servo 4
berputar ke
Sudut G13
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut A13
Servo 3
berputar ke
Sudut A13
Servo 4
berputar ke
Sudut A13
Lengan robot
posisi siaga
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Karakter =
o?
Servo 1
berputar ke
Sudut I5
Servo 2
berputar ke
Sudut J5
Servo 3
berputar ke
Sudut K5
Servo 4
berputar ke
Sudut L5
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Tidak TidakTidakTidakTidakCB
J
Ya Ya Ya Ya Ya
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-18
Meletak
kan B
enda
Men
gam
bil B
enda
Karakter =
p?
Servo 1
berputar ke
Sudut A6
Servo 2
berputar ke
Sudut B6
Servo 3
berputar ke
Sudut C6
Servo 4
berputar ke
Sudut D6
Lengan robot
posisi siaga
Karakter =
q?
Servo 1
berputar ke
Sudut E6
Servo 2
berputar ke
Sudut F6
Servo 3
berputar ke
Sudut G6
Servo 4
berputar ke
Sudut H6
Karakter =
r?
Servo 1
berputar ke
Sudut I6
Servo 2
berputar ke
Sudut J6
Servo 3
berputar ke
Sudut K6
Servo 4
berputar ke
Sudut L6
Karakter =
s?
Servo 1
berputar ke
Sudut A7
Servo 2
berputar ke
Sudut B7
Servo 3
berputar ke
Sudut C7
Servo 4
berputar ke
Sudut D7
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Lengan robot
posisi siaga
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Karakter =
t?
Servo 1
berputar ke
Sudut E7
Servo 2
berputar ke
Sudut F7
Servo 3
berputar ke
Sudut G7
Servo 4
berputar ke
Sudut H7
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Tidak TidakTidakTidakTidakDC
K
Ya Ya Ya Ya Ya
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-19
Meletak
ka
n B
end
aM
eng
amb
il Ben
da
Karakter =
u?
Servo 1
berputar ke
Sudut I7
Servo 2
berputar ke
Sudut J7
Servo 3
berputar ke
Sudut K7
Servo 4
berputar ke
Sudut L7
Lengan robot
posisi siaga
Karakter =
v?
Servo 1
berputar ke
Sudut A8
Servo 2
berputar ke
Sudut B8
Servo 3
berputar ke
Sudut C8
Servo 4
berputar ke
Sudut D8
Karakter =
w?
Servo 1
berputar ke
Sudut E8
Servo 2
berputar ke
Sudut F8
Servo 3
berputar ke
Sudut G8
Servo 4
berputar ke
Sudut H8
Karakter =
x?
Servo 1
berputar ke
Sudut I8
Servo 2
berputar ke
Sudut J8
Servo 3
berputar ke
Sudut K8
Servo 4
berputar ke
Sudut L8
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
posisi siaga
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Karakter =
y?
Servo 1
berputar ke
Sudut A9
Servo 2
berputar ke
Sudut B9
Servo 3
berputar ke
Sudut C9
Servo 4
berputar ke
Sudut D9
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Tidak TidakTidakTidakTidakED
L
Ya Ya Ya Ya Ya
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-20
Meletak
ka
n B
end
aM
eng
amb
il Ben
da
Karakter =
z?
Servo 1
berputar ke
Sudut E9
Servo 2
berputar ke
Sudut F9
Servo 3
berputar ke
Sudut G9
Servo 4
berputar ke
Sudut H9
Lengan robot
posisi siaga
Karakter =
!?
Servo 1
berputar ke
Sudut I9
Servo 2
berputar ke
Sudut J9
Servo 3
berputar ke
Sudut K9
Servo 4
berputar ke
Sudut L9
Karakter =
#?
Servo 1
berputar ke
Sudut A10
Servo 2
berputar ke
Sudut B10
Servo 3
berputar ke
Sudut C10
Servo 4
berputar ke
Sudut D10
Karakter =
$?
Servo 1
berputar ke
Sudut E10
Servo 2
berputar ke
Sudut F10
Servo 3
berputar ke
Sudut G10
Servo 4
berputar ke
Sudut H10
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi siaga
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Karakter =
%?
Servo 1
berputar ke
Sudut I10
Servo 2
berputar ke
Sudut J10
Servo 3
berputar ke
Sudut K10
Servo 4
berputar ke
Sudut L10
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Tidak TidakTidakTidakTidakFE
Ya Ya Ya Ya Ya
M
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-21
Karakter =
^?
Servo 1
berputar ke
Sudut A11
Servo 2
berputar ke
Sudut B11
Servo 3
berputar ke
Sudut C11
Servo 4
berputar ke
Sudut D11
Lengan robot
posisi siaga
Karakter =
&?
Servo 1
berputar ke
Sudut E11
Servo 2
berputar ke
Sudut F11
Servo 3
berputar ke
Sudut G11
Servo 4
berputar ke
Sudut H11
Karakter =
*?
Servo 1
berputar ke
Sudut I11
Servo 2
berputar ke
Sudut J11
Servo 3
berputar ke
Sudut K11
Servo 4
berputar ke
Sudut L11
Karakter =
(?
Servo 1
berputar ke
Sudut A12
Servo 2
berputar ke
Sudut B12
Servo 3
berputar ke
Sudut C12
Servo 4
berputar ke
Sudut D12
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut A13
Servo 2
berputar ke
Sudut B13
Servo 3
berputar ke
Sudut C13
Servo 4
berputar ke
Sudut D13
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Lengan robot
posisi siaga
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Karakter =
)?
Servo 1
berputar ke
Sudut E12
Servo 2
berputar ke
Sudut F12
Servo 3
berputar ke
Sudut G12
Servo 4
berputar ke
Sudut H12
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut E13
Servo 2
berputar ke
Sudut F13
Servo 3
berputar ke
Sudut G13
Servo 4
berputar ke
Sudut H13
Tidak TidakTidakTidakTidak
N
GF Karakter =
+?
Servo 1
berputar ke
Sudut I12
Servo 2
berputar ke
Sudut J12
Servo 3
berputar ke
Sudut K12
Servo 4
berputar ke
Sudut L12
Lengan robot
posisi siaga
Servo 1
berputar ke
Sudut I0
Servo 2
berputar ke
Sudut J0
Servo 3
berputar ke
Sudut K0
Servo 4
berputar ke
Sudut L0
Ya Ya Ya Ya Ya Ya
Men
gam
bil B
enda
Meletak
kan B
enda
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-22
Listing Program Invers Kinematik
%Nilai Input
% x = jarak horizontal antara poros servo 1 dengan objek (cm)
% y = Nilai setengah dari tinggi objek (Pengambilan objek) (cm)
% y = Tinggi gripper diatas kotak peletakan objek (Peletakan objek)(cm)
% a1 = Panjang lengan bawah (cm)
% a2 = Panjang lengan atas (cm)
%Program menghitung sudut servo 2
dataq2 = (x^2+y^2-a1^2-a2^2)/(2*a1*a2);
q2 = acosd(dataq2)
sudutservo2 = (abs(180-q2))
%Program menghitung sudut servo 3
Nilaia = (((cosd(q2)*a2)+a1)*y);
Nilaib = sind(q2)*a2*x;
Nilaipa = Nilaia-Nilaib;
Nilaic = (((cosd(q2)*a2) +a1)*x);
Nilaid = sind(q2)*a2*y;
Nilaipb = Nilaic+Nilaid;
Hasil1 = Nilaipa/Nilaipb;
q1 = atand(Hasil1)
if q1 < 0
sudutservo3 = (abs(180+q1))
else
sudutservo3 = (abs(q1))
end
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-23
Listing Program Matlab
function varargout = TA1(varargin) % TA1 MATLAB code for TA1.fig % TA1, by itself, creates a new TA1 or raises the existing % singleton*. % % H = TA1 returns the handle to a new TA1 or the handle to % the existing singleton*. % % TA1('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in TA1.M with the given input arguments. % % TA1('Property','Value',...) creates a new TA1 or raises the % existing singleton*. Starting from the left, property value pairs
are % applied to the GUI before TA1_OpeningFcn gets called. An % unrecognized property name or invalid value makes property
application % stop. All inputs are passed to TA1_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only
one % instance to run (singleton)". % % See also: GUIDE, GUIDATA,
% Edit the above text to modify the response to help TA1
% Last Modified by GUIDE v2.5 10-May-2019 22:48:04
% Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @TA1_OpeningFcn, ... 'gui_OutputFcn', @TA1_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end
if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT
% --- Executes just before TA1 is made visible. function TA1_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to TA1 (see VARARGIN)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-24
% Choose default command line output for TA1 handles.output = hObject;
% Update handles structure guidata(hObject, handles);
% UIWAIT makes TA1 wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. function varargout = TA1_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
% --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global vidobj %untuk mendeklarasikan variabel vidobj secara global
%proses inisialisasi webcam imaqhwinfo vidobj = videoinput('winvideo',1,'YUY2_320x240');
% vidobj.FramesPerTrigger=1; % triggerconfig(vidobj,'manual'); % vidRes=get(vidobj,'VideoResolution')
% Tampilkan pada axes nBands=get(vidobj,'NumberOfBands'); hImage=image(zeros(240,320,nBands),'parent',handles.axes1); preview(vidobj,hImage)
% --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global a global vidobj
vidobj.FramesPerTrigger=1; triggerconfig(vidobj,'manual');
% Tampilkan objek pada area di axes 1 nBands=get(vidobj,'NumberOfBands');
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-25
image(zeros(240,320,nBands),'parent',handles.axes1);
% Proses capture citra objek start(vidobj); pause(0.5); trigger(vidobj); stoppreview(vidobj); frame=getdata(vidobj);
%image preprocessing citra1=yuy2torgb(frame); citra2=rgb2gray(citra1); citrabiner=im2bw(citra2,0.25); citranf=medfilt2(citrabiner);
a = citranf;
% Menampilkan citra berwarna di axes 3 axes(handles.axes3); imshow(citra1) axis on;
% Menampilkan citra biner di axes 2 axes(handles.axes2); imshow(citranf) axis on; vidobj = videoinput('winvideo',1,'YUY2_320x240');
% Tampilkan objek pada area di axes 1 nBands=get(vidobj,'NumberOfBands'); hImage=image(zeros(240,320,nBands),'parent',handles.axes1); preview(vidobj,hImage)
% ================================================== % Internal function of function pushbutton1_Callback % ================================================== function newdata = yuy2torgb(data) % Konversi format YUY2 ke RGB % http://www.mathworks.com/matlabcentral/newsreader/view_thread/263490 % Access date: 11 June 2014
Y = single(data(:,:,1)); U = single(data(:,:,2)); V = single(data(:,:,3));
C = Y-16; D = U-128; E = V-128;
R = uint8((298*C+409*E+128)/256); G = uint8((298*C-100*D-208*E+128)/256); B = uint8((298*C+516*D+128)/256);
newdata = uint8(zeros(size(data))); newdata(:,:,1)=R; newdata(:,:,2)=G; newdata(:,:,3)=B;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-26
% =================================
% --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
global arraychar
%Reset semua input output set(handles.text2, 'string',[]); set(handles.text3, 'string',[]); set(handles.text4, 'string',[]); set(handles.text5, 'string',[]); set(handles.text6, 'string',[]); set(handles.text7, 'string',[]); set(handles.text8, 'string',[]); set(handles.text9, 'string',[]); set(handles.text10,'string',[]); set(handles.text11,'string',[]);
global a
%Memberi label untuk tiap objek dalam citra biner c = bwlabel(a);
%segementasi citra objek o1=c==1; o2=c==2; o3=c==3; o4=c==4; o5=c==5;
%perhitungan perimeter dan area jumobjek=max(max(c)); for k=1:jumobjek objek=c==k; d0=regionprops(double(objek),'Perimeter'); d1=d0.Perimeter; dbPerimeter(:,k)=d1; e0=regionprops(double(objek),'Area'); e1=e0.Area; dbArea(:,k)=e1; end dbp=dbPerimeter; dba=dbArea;
%perhitungan thinness ratio jumobjek=max(max(c));
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-27
for k=1:jumobjek f0=(4*pi*dba(k))/dbp(k)^2; dbthiness(:,k)=f0; end tr=dbthiness;
%Perhitungan centroid jumobjek=max(max(c)); for k=1:jumobjek; objek=c==k; c0=regionprops(double(objek),'Centroid'); c1=c0.Centroid; dbcentroid(:,k)=c1; end db=dbcentroid;
global arraychar global arrayoutput
jumobjek=max(max(c)); %Menentukan output posisi dan bentuk objek for k = 1 : jumobjek %mengambil data centroid dan thinness ratio dari matrik pada variabel db %dan f0 db=dbcentroid(:,k); f0=dbthiness(1,k); %posisi 1 if db(1,1) > 240 && db(1,1) < 320 && db (2,1) < 80 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [1]; arraychar = [1]; elseif (k>1) arrayoutput = [arrayoutput 1]; arraychar = [arraychar 1]; end elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [2]; arraychar = [2]; elseif (k>1) arrayoutput = [arrayoutput 2]; arraychar = [arraychar 2]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [3]; arraychar = [3]; elseif (k>1) arrayoutput = [arrayoutput 3]; arraychar = [arraychar 3]; end end
%Posisi 2 elseif db(1,1) < 240 && db (1,1) > 160 && db (2,1) < 80 if f0 < 0.95 && f0 > 0.8 if (k==1)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-28
arrayoutput = [4]; arraychar = [4]; elseif (k>1) arrayoutput = [arrayoutput 4]; arraychar = [arraychar 4]; end elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [5]; arraychar = [5]; elseif (k>1) arrayoutput = [arrayoutput 5]; arraychar = [arraychar 5]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [6]; arraychar = [6]; elseif (k>1) arrayoutput = [arrayoutput 6]; arraychar = [arraychar 6]; end end
%Posisi 3 elseif db(1,1) > 80 && db (1,1) < 160 && db (2,1) < 80 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [7]; arraychar = [7]; elseif (k>1) arrayoutput = [arrayoutput 7]; arraychar = [arraychar 7]; end elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [8]; arraychar = [8]; elseif (k>1) arrayoutput = [arrayoutput 8]; arraychar = [arraychar 8]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [9]; arraychar = [9]; elseif (k>1) arrayoutput = [arrayoutput 9]; arraychar = [arraychar 9]; end end
%Posisi 4 elseif db(1,1) < 80 && db (2,1) < 80 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [10]; arraychar = [10]; elseif (k>1)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-29
arrayoutput = [arrayoutput 10]; arraychar = [arraychar 10]; end elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [11]; arraychar = [11]; elseif (k>1) arrayoutput = [arrayoutput 11]; arraychar = [arraychar 11]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [12]; arraychar = [12]; elseif (k>1) arrayoutput = [arrayoutput 12]; arraychar = [arraychar 12]; end end
%Posisi 5 elseif db(1,1) > 240 && db (1,1) < 320 && db (2,1) > 80 && db (2,1)
< 160 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [13]; arraychar = [13]; elseif (k>1) arrayoutput = [arrayoutput 13]; arraychar = [arraychar 13]; end elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [14]; arraychar = [14]; elseif (k>1) arrayoutput = [arrayoutput 14]; arraychar = [arraychar 14]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [15]; arraychar = [15]; elseif (k>1) arrayoutput = [arrayoutput 15]; arraychar = [arraychar 15]; end end
%Posisi 6 elseif db(1,1) < 240 && db (1,1) > 160 && db (2,1) > 80 && db (2,1)
< 160 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [16]; arraychar = [16]; elseif (k>1) arrayoutput = [arrayoutput 16];
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-30
arraychar = [arraychar 16]; end elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [17]; arraychar = [17]; elseif (k>1) arrayoutput = [arrayoutput 17]; arraychar = [arraychar 17]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [18]; arraychar = [18]; elseif (k>1) arrayoutput = [arrayoutput 18]; arraychar = [arraychar 18]; end end
%Posisi 7 elseif db(1,1) < 160 && db (1,1) > 80 && db (2,1) > 80 && db (2,1) <
160 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [19]; arraychar = [19]; elseif (k>1) arrayoutput = [arrayoutput 19]; arraychar = [arraychar 19]; end elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [20]; arraychar = [20]; elseif (k>1) arrayoutput = [arrayoutput 20]; arraychar = [arraychar 20]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [21]; arraychar = [21]; elseif (k>1) arrayoutput = [arrayoutput 21]; arraychar = [arraychar 21]; end end
%Posisi 8 elseif db(1,1) < 80 && db (2,1) > 80 && db (2,1) < 160 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [22]; arraychar = [22]; elseif (k>1) arrayoutput = [arrayoutput 22]; arraychar = [arraychar 22]; end
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-31
elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [23]; arraychar = [23]; elseif (k>1) arrayoutput = [arrayoutput 23]; arraychar = [arraychar 23]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [24]; arraychar = [24]; elseif (k>1) arrayoutput = [arrayoutput 24]; arraychar = [arraychar 24]; end end
%Posisi 9 elseif db(1,1) < 320 && db (1,1) > 240 && db (2,1) > 160 && db (2,1)
< 240 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [25]; arraychar = [25]; elseif (k>1) arrayoutput = [arrayoutput 25]; arraychar = [arraychar 25]; end elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [26]; arraychar = [26]; elseif (k>1) arrayoutput = [arrayoutput 26]; arraychar = [arraychar 26]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [27]; arraychar = [27]; elseif (k>1) arrayoutput = [arrayoutput 27]; arraychar = [arraychar 27]; end end
%Posisi 10 elseif db(1,1) < 240 && db (1,1) > 160 && db (2,1) > 160 && db (2,1)
< 240 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [28]; arraychar = [28]; elseif (k>1) arrayoutput = [arrayoutput 28]; arraychar = [arraychar 28]; end elseif f0 < 1.2 && f0 > 0.95
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-32
if (k==1) arrayoutput = [29]; arraychar = [29]; elseif (k>1) arrayoutput = [arrayoutput 29]; arraychar = [arraychar 29]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [30]; arraychar = [30]; elseif (k>1) arrayoutput = [arrayoutput 30]; arraychar = [arraychar 30]; end end
%Posisi 11 elseif db(1,1) < 160 && db(1,1) > 80 && db (2,1) < 240 && db (2,1) >
160 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [31]; arraychar = [31]; elseif (k>1) arrayoutput = [arrayoutput 31]; arraychar = [arraychar 31]; end elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [32]; arraychar = [32]; elseif (k>1) arrayoutput = [arrayoutput 32]; arraychar = [arraychar 32]; end elseif f0 < 0.8 && f0 > 0.66 if (k==1) arrayoutput = [33]; arraychar = [33]; elseif (k>1) arrayoutput = [arrayoutput 33]; arraychar = [arraychar 33]; end end
%Posisi 12 elseif db(1,1) < 80 && db(2,1) < 240 && db(2,1) > 160 if f0 < 0.95 && f0 > 0.8 if (k==1) arrayoutput = [34]; arraychar = [34]; elseif (k>1) arrayoutput = [arrayoutput 34]; arraychar = [arraychar 34]; end elseif f0 < 1.2 && f0 > 0.95 if (k==1) arrayoutput = [35];
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-33
arraychar = [35]; elseif (k>1) arrayoutput = [arrayoutput 35]; arraychar = [arraychar 35]; end elseif f0 < 0.8 && f0 > 0.6 if (k==1) arrayoutput = [36]; arraychar = [36]; elseif (k>1) arrayoutput = [arrayoutput 36]; arraychar = [arraychar 36]; end end end end
global arrayoutput %program mengurutkan arrayoutput arrayoutput1 = sort(arrayoutput);
%program mengisi arrayoutput1 secara lengkap (5 data) jumobjek=max(max(c));
%mengisi arrayoutput1 dengan 5 data 0 (objek = 0) if jumobjek == 0 arrayoutput1 = [0 0 0 0 0];
%mengisi arrayoutput1 dengan 4 data 0 (objek = 1) elseif jumobjek == 1 for r=1:4 arrayoutput1 = [arrayoutput1 0]; end
%mengisi arrayoutput1 dengan 3 data 0 (objek = 2) elseif jumobjek == 2 for r=1:3 arrayoutput1 = [arrayoutput1 0]; end
%mengisi arrayoutput1 dengan 2 data 0 (objek = 3) elseif jumobjek == 3 for r=1:2 arrayoutput1 = [arrayoutput1 0]; end
%mengisi arrayoutput1 dengan 1 data 0 (objek = 4) elseif jumobjek == 4 for r=1:1 arrayoutput1 = [arrayoutput1 0]; end
%tidak menambah data arrayoutput (objek = 5) elseif jumobjek == 5 arrayoutput1 = [arrayoutput1]; end
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-34
%program menampilkan posisi dan bentuk objek di GUI counter=0; for x=1:5 %output 1 datax = arrayoutput1(x); if (datax==1) posisi = '1'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==2) posisi = '1'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==3) posisi = '1'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==4); posisi = '2'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==5) posisi = '2'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==6) posisi = '2'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==7) posisi = '3'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==8) posisi = '3'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==9) posisi = '3'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==10) posisi = '4'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==11) posisi = '4'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==12) posisi = '4'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==13) posisi = '5'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==14) posisi = '5';
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-35
bentuk = 'TABUNG'; counter = counter+1; elseif (datax==15) posisi = '5'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==16) posisi = '6'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==17) posisi = '6'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==18) posisi = '6'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==19) posisi = '7'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==20) posisi = '7'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==21) posisi = '7'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==22) posisi = '8'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==23) posisi = '8'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==24) posisi = '8'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==25) posisi = '9'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==26) posisi = '9'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==27) posisi = '9'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==28) posisi = '10'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==29)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-36
posisi = '10'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==30) posisi = '10'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==31) posisi = '11'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==32) posisi = '11'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==33) posisi = '11'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==34) posisi = '12'; bentuk = 'KUBUS'; counter = counter+1; elseif (datax==35) posisi = '12'; bentuk = 'TABUNG'; counter = counter+1; elseif (datax==36) posisi = '12'; bentuk = 'PRISMA SEGITIGA'; counter = counter+1; elseif (datax==0); posisi = ''; bentuk = ''; counter=counter+1; end if (counter==1) set(handles.text2,'string',posisi) set(handles.text7,'string',bentuk) elseif (counter==2) set(handles.text3,'string',posisi) set(handles.text8,'string',bentuk) elseif (counter==3) set(handles.text4,'string',posisi) set(handles.text9,'string',bentuk) elseif (counter==4) set(handles.text5,'string',posisi) set(handles.text10,'string',bentuk) elseif (counter==5) set(handles.text6,'string',posisi) set(handles.text11,'string',bentuk) end end
%program mengisi arraychar secara lengkap (5 data) global arraychar
jumobjek=max(max(c));
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-37
%mengisi arraychar dengan 5 data 0 (objek = 0) if jumobjek == 0 arraychar = [0 0 0 0 0]; %mengisi arraychar dengan 4 data 0 (objek = 1) elseif jumobjek == 1 for k=1:4 arraychar = [arraychar 0]; end %mengisi arraychar dengan 3 data 0 (objek = 2) elseif jumobjek == 2 for k=1:3 arraychar = [arraychar 0]; end %mengisi arraychar dengan 2 data 0 (objek = 3) elseif jumobjek == 3 for k=1:2 arraychar = [arraychar 0]; end %mengisi arraychar dengan 1 data 0 (objek = 4) elseif jumobjek == 4 for k=1:1 arraychar = [arraychar 0]; end %tidak menambah data arraychar (objek = 5) elseif jumobjek == 5 arraychar = [arraychar]; end
%program komunikasi serial for f=1:5
if ~ isempty (instrfind) fclose (instrfind); delete(instrfind); end
global arraychar
%mengurutkan data array mulai data terkecil hingga data terbesar dataarray=sort(arraychar)
%inisialisasi komunikasi serial komunikasi = serial ('COM5', 'BaudRate',9600); fopen(komunikasi); %membuka port komunikasi guidata(hObject,handles);
%program mengkonversi dataarray menjadi %karakter untuk dikirim ke mikro data=dataarray(f); if (data==1) guidata(hObject,handles); fprintf(komunikasi,'a'); guidata(hObject,handles); elseif (data==2) guidata(hObject,handles); fprintf(komunikasi,'b'); guidata(hObject,handles); elseif (data==3)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-38
guidata(hObject,handles); fprintf(komunikasi,'c'); guidata(hObject,handles); elseif (data==4) guidata(hObject,handles); fprintf(komunikasi,'d'); guidata(hObject,handles); elseif (data==5) guidata(hObject,handles); fprintf(komunikasi,'e'); guidata(hObject,handles); elseif (data==6) guidata(hObject,handles); fprintf(komunikasi,'f'); guidata(hObject,handles); elseif (data==7) guidata(hObject,handles); fprintf(komunikasi,'g'); guidata(hObject,handles); elseif (data==8) guidata(hObject,handles); fprintf(komunikasi,'h'); guidata(hObject,handles); elseif (data==9) guidata(hObject,handles); fprintf(komunikasi,'i'); guidata(hObject,handles); elseif (data==10) guidata(hObject,handles); fprintf(komunikasi,'j'); guidata(hObject,handles); elseif (data==11) guidata(hObject,handles); fprintf(komunikasi,'k'); guidata(hObject,handles); elseif (data==12) guidata(hObject,handles); fprintf(komunikasi,'l'); guidata(hObject,handles); elseif (data==13) guidata(hObject,handles); fprintf(komunikasi,'m'); guidata(hObject,handles); elseif (data==14) guidata(hObject,handles); fprintf(komunikasi,'n'); guidata(hObject,handles); elseif (data==15) guidata(hObject,handles); fprintf(komunikasi,'o'); guidata(hObject,handles); elseif (data==16) guidata(hObject,handles); fprintf(komunikasi,'p'); guidata(hObject,handles); elseif (data==17) guidata(hObject,handles); fprintf(komunikasi,'q'); guidata(hObject,handles);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-39
elseif (data==18) guidata(hObject,handles); fprintf(komunikasi,'r'); guidata(hObject,handles); elseif (data==19) guidata(hObject,handles); fprintf(komunikasi,'s'); guidata(hObject,handles); elseif (data==20) guidata(hObject,handles); fprintf(komunikasi,'t'); guidata(hObject,handles); elseif (data==21) guidata(hObject,handles); fprintf(komunikasi,'u'); guidata(hObject,handles); elseif (data==22) guidata(hObject,handles); fprintf(komunikasi,'v'); guidata(hObject,handles); elseif (data==23) guidata(hObject,handles); fprintf(komunikasi,'w'); guidata(hObject,handles); elseif (data==24) guidata(hObject,handles); fprintf(komunikasi,'x'); guidata(hObject,handles); elseif (data==25) guidata(hObject,handles); fprintf(komunikasi,'y'); guidata(hObject,handles); elseif (data==26) guidata(hObject,handles); fprintf(komunikasi,'z'); guidata(hObject,handles); elseif (data==27) guidata(hObject,handles); fprintf(komunikasi,'!'); guidata(hObject,handles); elseif (data==28) guidata(hObject,handles); fprintf(komunikasi,'#'); guidata(hObject,handles); elseif (data==29) guidata(hObject,handles); fprintf(komunikasi,'$'); guidata(hObject,handles); elseif (data==30) guidata(hObject,handles); fprintf(komunikasi,'%'); guidata(hObject,handles); elseif (data==31) guidata(hObject,handles); fprintf(komunikasi,'^'); guidata(hObject,handles); elseif (data==32) guidata(hObject,handles); fprintf(komunikasi,'&');
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-40
guidata(hObject,handles); elseif (data==33) guidata(hObject,handles); fprintf(komunikasi,'*'); guidata(hObject,handles); elseif (data==34) guidata(hObject,handles); fprintf(komunikasi,'('); guidata(hObject,handles); elseif (data==35) guidata(hObject,handles); fprintf(komunikasi,')'); guidata(hObject,handles); elseif (data==36) guidata(hObject,handles); fprintf(komunikasi,'+'); guidata(hObject,handles); elseif (data==0) guidata(hObject,handles); fprintf(komunikasi,'0'); guidata(hObject,handles); end
%menutup dan menghapus komunikasi guidata(hObject,handles); fclose(komunikasi); delete(komunikasi); clear komunikasi end
% --- Executes on button press in pushbutton5. function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
%exit GUI matlab close all % --- Executes on selection change in popupmenu1. function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1
contents as cell array % contents{get(hObject,'Value')} returns selected item from
popupmenu1
% --- Executes during object creation, after setting all properties. function popupmenu1_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns
called
% Hint: popupmenu controls usually have a white background on Windows.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-41
% See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
% --- Executes on button press in pushbutton8. function pushbutton8_Callback(hObject, eventdata, handles) % hObject handle to pushbutton8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% --- Executes during object creation, after setting all properties. function popupmenu2_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns
called
% Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
% --- Executes during object deletion, before destroying properties. function text20_DeleteFcn(hObject, eventdata, handles) % hObject handle to text20 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-42
Listing Program AVR
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
// JUDUL SKRIPSI : APLIKASI COMPUTER VISION PADA LENGAN ROBOT
PEMINDAH BENDA BERDASARKAN BENTUK DAN POSISI
// NAMA : ALBERTUS ADIT TRIANGGORO
// NIM : 155114066
Project :
Version :
Date : 28/03/2019
Author : Windows User
Company : pc
Comments :
Chip type : ATmega32
Program type : Application
AVR Core Clock frequency : 11,059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
*****************************************************
//file header program
#include <mega32.h>
#include <delay.h>
#include <stdio.h>
//inisialisasi port servo
#define servo1 PORTB.0
#define servo2 PORTB.1
#define servo3 PORTB.2
#define servo4 PORTB.3
//deklarasi variabel signed int i = 0, data1 = 0, data2 = 0, data3 = 0, data4 = 0;
int z, f, aa, ab, ac, ad, ba, bb, bc, bd, ca, cb, cc, cd, da, db, dc, dd, de, df, dg;
int o = 1;
int p = 1;
int q = 1;
int r = 1;
int s = 1;
int t = 1;
int u = 1;
int x = 1;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-43
int y = 1;
int ee, alpa ;
// Alphanumeric LCD functions
#include <alcd.h>
char a,b,c,d,e;
// Standard Input/Output functions
#include <stdio.h>
//interupsi untuk menerima data serial
interrupt [USART_RXC] void myinterrupt (void)
{
scanf("%s %s %s %s %s", &a, &b, &c, &d, &e);
f = 1;
ee=0;
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
i++;
if (i>864) {i = 0;}
else
{
if(i<data1){servo1 = 1;}
else {servo1=0;}
if(i<data2){servo2 = 1;}
else {servo2=0;}
if(i<data3){servo3 = 1;}
else {servo3=0;}
if(i<data4){servo4 = 1;}
else {servo4=0;}
}
}
// Declare your global variables here
// fungsi counter pergerakan robot mengambil benda
void awal()
{
ee=ee+1;
for(y=1;y<=2;y++)
{
if (ee==1)
{
alpa=1;
}
else if (ee==2)
{
alpa=2;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-44
}
else if (ee==3)
{
alpa=2;
}
else if (ee==4)
{
alpa=2;
}
else if (ee==5)
{
alpa=2;
}
}
}
//pergerakan robot mengambil benda di posisi 1
void gerak_ambil1()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=60;data1--) //135 Derajat
{delay_ms(20);};
aa=60;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1<=60;data1++) //135 Derajat
{delay_ms(20);};
aa=60;
delay_ms(200);
}
delay_ms(200);
for(data2=48;data2>=41;data2--) //65 Derajat
{delay_ms(50);};
ab=41;
delay_ms(200);
for(data3=48;data3>=35;data3--) //40 Derajat
{delay_ms(70);};
ac=35;
delay_ms(500);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-45
//program menggeser dan mengambil objek di posisi 1
for(data1=60;data1<=61;data1++) //140 Derajat
{delay_ms(60);};
delay_ms(300);
for(data2=41;data2>=40;data2--) //55 Derajat
{delay_ms(60);};
delay_ms(300);
for(data3=35;data3>=33;data3--) //35 Derajat
{delay_ms(70);};
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(20);};
ad=51;
delay_ms(1000);
}
//pergerakan robot mengambil benda di posisi 2
void gerak_ambil2()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=51;data1--) //105 Derajat
{delay_ms(20);};
aa=51;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1<=50;data1++) //100 Derajat
{delay_ms(20);};
aa=50;
delay_ms(200);
}
for(data2=48;data2>=30;data2--) //25 Derajat
{delay_ms(50);};
ab=30;
delay_ms(200);
for(data3=48;data3>=25;data3--) //5 Derajat
{delay_ms(70);};
ac=25;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-46
//pergerakan robot mengambil benda di posisi 3
void gerak_ambil3()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=43;data1--) //80 Derajat
{delay_ms(20);};
aa=43;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1>=43;data1--) //80 Derajat
{delay_ms(20);};
aa=43;
delay_ms(200);
}
for(data2=48;data2>=30;data2--) //25 Derajat
{delay_ms(50);};
ab=30;
delay_ms(200);
for(data3=48;data3>=25;data3--) //5 Derajat
{delay_ms(70);};
ac=25;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
//pergerakan robot mengambil benda di posisi 4
void gerak_ambil4()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=37;data1--) //50 Derajat
{delay_ms(20);};
aa=37;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1>=37;data1--) //50 Derajat
{delay_ms(20);};
aa=37;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-47
delay_ms(200);
}
for(data2=48;data2>=38;data2--) //50 Derajat
{delay_ms(50);};
ab=38;
delay_ms(200);
for(data3=48;data3>=32;data3--) //30 Derajat
{delay_ms(70);};
ac=32;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
//pergerakan robot mengambil benda di posisi 5
void gerak_ambil5()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=57;data1--) //125 Derajat
{delay_ms(20);};
aa=57;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1<=54;data1++) //115 Derajat
{delay_ms(20);};
aa=54;
delay_ms(20);
}
for(data2=48;data2>=45;data2--) //75 Derajat
{delay_ms(50);};
ab=45;
delay_ms(200);
for(data3=48;data3>=38;data3--) //55 Derajatt
{delay_ms(70);};
ac=38;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-48
//pergerakan robot mengambil benda di posisi 6
void gerak_ambil6()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=51;data1--) //105 Derajat
{delay_ms(20);};
aa=51;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1<=49;data1++) //95 Derajat
{delay_ms(20);};
aa=49;
delay_ms(200);
}
for(data2=48;data2>=43;data2--) //70 Derajat
{delay_ms(50);};
ab=43;
delay_ms(200);
for(data3=48;data3>=36;data3--) //45 Derajat
{delay_ms(70);};
ac=36;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
//pergerakan robot mengambil benda di posisi 7
void gerak_ambil7()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=45;data1--) //85 Derajat
{delay_ms(20);};
aa=45;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1>=44;data1--) //80 Derajat
{delay_ms(20);};
aa=44;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-49
delay_ms(200);
}
for(data2=48;data2>=43;data2--) //70 Derajat
{delay_ms(50);};
ab=43;
delay_ms(200);
for(data3=48;data3>=36;data3--) //45 Derajat
{delay_ms(70);};
ac=36;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
//pergerakan robot mengambil benda di posisi 8
void gerak_ambil8()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=40;data1--) //65 Derajat
{delay_ms(20);};
aa=40;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1>=40;data1--) //65 Derajat
{delay_ms(20);};
aa=40;
delay_ms(200);
}
for(data2=48;data2>=47;data2--) //85 Derajat
{delay_ms(50);};
ab=47;
delay_ms(200);
for(data3=48;data3>=40;data3--) //60 Derajat
{delay_ms(70);};
ac=40;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-50
//pergerakan robot mengambil benda di posisi 9
void gerak_ambil9()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=55;data1--) //115 Derajat
{delay_ms(20);};
aa=55;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1<=52;data1++) //105 Derajat
{delay_ms(20);};
aa=52;
delay_ms(200);
}
for(data2=48;data2<=51;data2++) //100 Derajat
{delay_ms(50);};
ab=51;
delay_ms(200);
for(data3=48;data3>=46;data3--) //85 Derajat
{delay_ms(70);};
ac=46;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
//pergerakan robot mengambil benda di posisi 10
void gerak_ambil10()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=50;data1--) //100 Derajat
{delay_ms(20);};
aa=50;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1<=48;data1++) //95 Derajat
{delay_ms(20);};
aa=48;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-51
delay_ms(200);
}
for(data2=48;data2<=50;data2++) //95 Derajat
{delay_ms(50);};
ab=50;
delay_ms(200);
for(data3=48;data3>=44;data3--) //75 Derajat
{delay_ms(70);};
ac=44;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
//pergerakan robot mengambil benda di posisi 11
void gerak_ambil11()
{
awal();
delay_ms(100);
if (alpa==1)
{
for(data1=74;data1>=46;data1--) //85 Derajat
{delay_ms(20);};
aa=45;
}
else if (alpa==2)
{
for(data1=46;data1>=45;data1--) //85 Derajat
{delay_ms(20);};
aa=45;
}
for(data2=48;data2<=50;data2++) //95 Derajat
{delay_ms(50);};
ab=52;
delay_ms(200);
for(data3=48;data3>=45;data3--) //80 Deajat
{delay_ms(70);};
ac=45;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-52
//pergerakan robot mengambil benda di posisi 12
void gerak_ambil12()
{
awal();
if (alpa==1)
{
for(data1=74;data1>=42;data1--) //70 Derajat
{delay_ms(20);};
aa=42;
delay_ms(200);
}
else if (alpa==2)
{
for(data1=46;data1>=42;data1--) //70 Derajat
{delay_ms(20);};
aa=42;
delay_ms(200);
}
for(data2=48;data2<=52;data2++) //100 Derajat
{delay_ms(50);};
ab=52;
delay_ms(200);
for(data3=48;data3>=46;data3--) //80 Derajat
{delay_ms(70);};
ac=46;
delay_ms(200);
for(data4=25;data4<=51;data4++) //70 Derajat
{delay_ms(30);};
ad=51;
delay_ms(1000);
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-53
//pergerakan robot siaga
void siaga()
{
da= 1;
if (da==1)
{
for (o=1;o<=4;o++)
{
switch (o)
{
case 1:
{
if (ac < 48)
{
for (data3=ac;data3<=48;data3++) //90 Derajat
{delay_ms(50);};
bc=48;
delay_ms(100);
break;
}
else if (ac > 48)
{
for (data3=ac;data3>=48;data3--) //90 Derajat
{delay_ms(50);};
bc=48;
delay_ms(100);
break;
}
}
case 2:
{
if (ab < 48)
{
for (data2=ab;data2<=48;data2++) //90 Derajat
{delay_ms(50);};
bb=48;
delay_ms(100);
break;
}
else if (ab > 48)
{
for (data2=ab;data2>=48;data2--) //90 Derajat
{delay_ms(50);};
bb=48;
delay_ms(100);
break;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-54
}
case 3:
{
if (aa < 46)
{
for (data1=aa;data1<=46;data1++) //90 Derajat
{delay_ms(40);};
ba=46;
delay_ms(100);
break;
}
else if (aa > 46)
{
for (data1=aa;data1>=46;data1--) //90 Derajat
{delay_ms(40);};
ba=46;
delay_ms(100);
break;
}
}
case 4:
{
data4 = 51;
bd = 51 ;
delay_ms(500);
break;
}
}
}
da=0;
}
}
//pergerakan robot meletakan objek kubus di kotak hijau(1)
void gerak_peletakankubus()
{
db= 1;
if (db==1)
{
for (p=1;p<=4;p++)
{
switch (p)
{
case 1:
{
if (ba < 22)
{
for (data1=ba;data1<=22;data1++) //0 Derajat
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-55
{delay_ms(20);};
ca=22;
delay_ms(100);
break;
}
else if (ba > 22)
{
for (data1=ba;data1>=22;data1--) //0 Derajat
{delay_ms(20);};
ca=22;
delay_ms(100);
break;
}
}
case 2:
{
if (bb < 36)
{
for (data2=bb;data2<=36;data2++) //45 Derajat
{delay_ms(50);};
cb=36;
delay_ms(100);
break;
}
else if (bb > 36)
{
for (data2=bb;data2>=36;data2--) //45 Derajat
{delay_ms(50);};
cb=36;
delay_ms(100);
break;
}
}
case 3:
{
if (bc < 33)
{
for (data3=bc;data3<=33;data3++) //35 Derajat
{delay_ms(50);};
cc=33;
delay_ms(1000);
break;
}
else if (bc > 33)
{
for (data3=bc;data3>=33;data3--) //35 Derajat
{delay_ms(50);};
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-56
cc=33;
delay_ms(1000);
break;
}
}
case 4:
{
for (data4=bd;data4>=25;data4--) //10 Derajat
{delay_ms(25);};
cd=25;
delay_ms(1000);
break;
}
}
}
db=0;
}
}
//pergerakan robot meletakan objek tabung di kotak merah(2)
void gerak_peletakantabung()
{
dc= 1;
if (dc==1)
{
for (t=1;t<=4;t++)
{
switch (t)
{
case 1:
{
if (ba < 22)
{
for (data1=ba;data1<=22;data1++) //0 Derajat
{delay_ms(20);};
ca=22;
delay_ms(100);
break;
}
else if (ba > 22)
{
for (data1=ba;data1>=22;data1--)//0 Derajat
{delay_ms(20);};
ca=22;
delay_ms(100);
break;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-57
}
case 2:
{
if (bb < 49)
{
for (data2=bb;data2<=49;data2++) //90 Derajat
{delay_ms(50);};
cb=49;
delay_ms(100);
break;
}
else if (bb > 49)
{
for (data2=bb;data2>=49;data2--)//90 Derajat
{delay_ms(50);};
cb=49;
delay_ms(100);
break;
}
}
case 3:
{
if (bc < 44)
{
for (data3=bc;data3<=44;data3++) //75 Derajat
{delay_ms(50);};
cc=44;
delay_ms(1000);
break;
}
else if (bc > 44)
{
for (data3=bc;data3>=44;data3--) //75 Derajat
{delay_ms(50);};
cc=44;
delay_ms(1000);
break;
}
}
case 4:
{
for (data4=bd;data4>=25;data4--) //10 Derajat
{delay_ms(25);};
cd=25;
delay_ms(1000);
break;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-58
}
}
dc=0;
}
}
//pergerakan robot meletakan objek prismasegitiga di kotak kuning(3)
void gerak_peletakanprismasegitiga()
{
dd= 1;
if (dd==1)
{
for (u=1;u<=4;u++)
{
switch (u)
{
case 1:
{
if (ba < 28)
{
for (data1=ba;data1<=28;data1++) //25 Derajat
{delay_ms(20);};
ca=28;
delay_ms(100);
break;
}
else if (ba > 28)
{
for (data1=ba;data1>=28;data1--) //25 Derajat
{delay_ms(20);};
ca=28;
delay_ms(100);
break;
}
}
case 2:
{
if (bb < 51)
{
for (data2=bb;data2<=51;data2++) //100 Derajat
{delay_ms(50);};
cb=51;
delay_ms(100);
break;
}
else if (bb > 51)
{
for (data2=bb;data2>=51;data2--) //100 Derajat
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-59
{delay_ms(50);};
cb=51;
delay_ms(100);
break;
}
}
case 3:
{
if (bc < 47)
{
for (data3=bc;data3<=47;data3++) //85 Derajat
{delay_ms(50);};
cc=47;
delay_ms(100);
break;
}
else if (bc > 47)
{
for (data3=bc;data3>=47;data3--) //85 Derajat
{delay_ms(50);};
cc=47;
delay_ms(1000);
break;
}
}
case 4:
{
for (data4=bd;data4>=25;data4--) //10 Derajat
{delay_ms(25);};
cd=25;
delay_ms(1000);
break;
}
}
}
dd=0;
}
}
//pergerakan robot kembali standby setelah meletakan benda di kotak hijau
void standby1()
{
de= 1 ;
if (de==1)
{
for (q=1;q<=4;q++)
{
switch (q)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-60
{
case 1:
{
if (cc < 48)
{
for (data3=cc;data3<=48;data3++) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
else if (cc > 48)
{
for (data3=cc;data3>=48;data3--) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
}
case 2:
{
if (cb < 48)
{
for (data2=cb;data2<=48;data2++) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
else if (cb > 48)
{
for (data2=cb;data2>=48;data2--)//90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
}
case 3:
{
if (ca < 46)
{
for (data1=ca;data1<=46;data1++) //90 Derajat
{delay_ms(20);};
delay_ms(100);
break;
}
else if (ca > 46)
{
for (data1=ca;data1>=46;data1--) //90 Derajat
{delay_ms(20);};
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-61
delay_ms(100);
break;
}
}
case 4:
{
data4=25;
delay_ms(1000);
break;
}
}
}
de=0;
}
}
//pergerakan robot kembali standby setelah meletakan benda di kotak merah
void standby2()
{
df= 1 ;
if (df==1)
{
for (r=1;r<=4;r++)
{
switch (r)
{
case 1:
{
if (cc < 48)
{
for (data3=cc;data3<=48;data3++) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
else if (cc > 48)
{
for (data3=cc;data3>=48;data3--) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
}
case 2:
{
if (cb < 48)
{
for (data2=cb;data2<=48;data2++) //90 Derajat
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-62
{delay_ms(50);};
delay_ms(100);
break;
}
else if (cb > 48)
{
for (data2=cb;data2>=48;data2--) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
}
case 3:
{
if (ca < 46)
{
for (data1=ca;data1<=46;data1++) //90 Derajat
{delay_ms(20);};
delay_ms(100);
break;
}
else if (ca > 46)
{
for (data1=ca;data1>=46;data1--) //90 Derajat
{delay_ms(20);};
delay_ms(100);
break;
}
}
case 4:
{
data4=25;
delay_ms(1000);
break;
}
}
}
df=0;
}
}
//pergerakan robot kembali standby setelah meletakan benda di kotak kuning
void standby3()
{
dg= 1;
if (dg==1)
{
for (s=1;s<=5;s++)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-63
{
switch (s)
{
case 1:
{
if (cc < 54)
{
for (data3=cc;data3<=54;data3++) //110 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
else if (cc > 54)
{
for (data3=cc;data3>=54;data3--) //110 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
}
case 2:
{
if (cb < 48)
{
for (data2=cb;data2<=48;data2++) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
else if (cb > 48)
{
for (data2=cb;data2>=48;data2--) //90 Derajat
{delay_ms(50);};
delay_ms(100);
break;
}
}
case 3:
{
if (ca < 46)
{
for (data1=ca;data1<=46;data1++) //90 Derajat
{delay_ms(20);};
delay_ms(100);
break;
}
else if (ca > 46)
{
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-64
for (data1=ca;data1>=46;data1--) //90 Derajat
{delay_ms(20);};
delay_ms(100);
break;
}
}
case 4:
{
data4=25;
delay_ms(1000);
break;
}
case 5: //90
{
if (cc < 48)
{
for (data3=cc;data3<=48;data3++) //90 Derajat
{delay_ms(50);};
delay_ms(500);
break;
}
else if (cc > 48)
{
for (data3=cc;data3>=48;data3--) //90 Derajat
{delay_ms(50);};
delay_ms(500);
break;
}
}
}
}
dg=0;
}
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-65
// fungsi program pergerakan total robot mengambil objek di posisi 1
void gerak_kubus1()
{
gerak_ambil1(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung1()
{
gerak_ambil1(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
}
void gerak_prismasegitiga1()
{
gerak_ambil1(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// fungsi program pergerakan total robot mengambil objek di posisi 2
void gerak_kubus2()
{
gerak_ambil2(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung2()
{
gerak_ambil2(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
}
void gerak_prismasegitiga2()
{
gerak_ambil2(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-66
}
// fungsi program pergerakan total robot mengambil objek di posisi 3
void gerak_kubus3()
{
gerak_ambil3(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung3()
{
gerak_ambil3(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
}
void gerak_prismasegitiga3()
{
gerak_ambil3(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// fungsi program pergerakan total robot mengambil objek di posisi 4
void gerak_kubus4()
{
gerak_ambil4(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung4()
{
gerak_ambil4(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
}
void gerak_prismasegitiga4()
{
gerak_ambil4(); delay_ms(10);
siaga();
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-67
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// fungsi program pergerakan total robot mengambil objek di posisi 5
void gerak_kubus5()
{
gerak_ambil5(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung5()
{
gerak_ambil5(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
}
void gerak_prismasegitiga5()
{
gerak_ambil5(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// fungsi program pergerakan total robot mengambil objek di posisi 6
void gerak_kubus6()
{
gerak_ambil6(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung6()
{
gerak_ambil6(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
}
void gerak_prismasegitiga6()
{
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-68
gerak_ambil6(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// fungsi program pergerakan total robot mengambil objek di posisi 7
void gerak_kubus7()
{
gerak_ambil7(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung7()
{
gerak_ambil7(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
}
void gerak_prismasegitiga7()
{
gerak_ambil7(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// fungsi program pergerakan total robot mengambil objek di posisi 8
void gerak_kubus8()
{
gerak_ambil8(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung8()
{
gerak_ambil8(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-69
void gerak_prismasegitiga8()
{
gerak_ambil8(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// fungsi program pergerakan total robot mengambil objek di posisi 9
void gerak_kubus9()
{
gerak_ambil9(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung9()
{
gerak_ambil9(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
}
void gerak_prismasegitiga9()
{
gerak_ambil9(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// fungsi program pergerakan total robot mengambil objek di posisi 10
void gerak_kubus10()
{
gerak_ambil10(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung10()
{
gerak_ambil10(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-70
}
void gerak_prismasegitiga10()
{
gerak_ambil10(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// fungsi program pergerakan total robot mengambil objek di posisi 11
void gerak_kubus11()
{
gerak_ambil11(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung11()
{
gerak_ambil11(); delay_ms(10);
siaga();
gerak_peletakantabung(); delay_ms(10);
standby2();
}
void gerak_prismasegitiga11()
{
gerak_ambil11(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// fungsi program pergerakan total robot mengambil objek di posisi 12
void gerak_kubus12()
{
gerak_ambil12(); delay_ms(10);
siaga();
gerak_peletakankubus(); delay_ms(10);
standby1();
}
void gerak_tabung12()
{
gerak_ambil12(); delay_ms(10);
siaga();
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-71
gerak_peletakantabung(); delay_ms(10);
standby2();
}
void gerak_prismasegitiga12()
{
gerak_ambil12(); delay_ms(10);
siaga();
gerak_peletakanprismasegitiga(); delay_ms(10);
standby3();
}
// pergerakan robot kembali ke posisi awal setelah meletakan semua objek
void standbylagi()
{
data1=74; // 180
delay_ms(1000);
data2=48; //90
delay_ms(1000);
data3=48; //90
delay_ms(1000);
data4=25; //0
delay_ms(1000);
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0xff;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xff;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-72
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 11059,200 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x01;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-73
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0xff;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 4
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-74
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);
// Global enable interrupts
#asm("sei")
while (1)
{
if (data1 !=74 && data2 != 48 && data3 != 48 && data4 !=51)
{
data4=25;
delay_ms(100);
data3=48;
delay_ms(100);
data2=48;
delay_ms(100);
data1=74;
delay_ms(100);
}
if(f==1)
{
z=1;
while(z)
{
for(x=1;x<=5;x++)
{
switch (x)
{
case 1:
{
//Program utama pergerakan robot mengambil objek di posisi 1 dan
menampilkan data di LCD
if (a == '0')
{
break;
}
else if (a == 'a')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter a"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 KUBUS"); delay_ms(10);
gerak_kubus1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-75
}
else if (a == 'b')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter b"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 TABUNG");delay_ms(10);
gerak_tabung1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'c')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter c"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 PRISMA");delay_ms(10);
gerak_prismasegitiga1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 2 dan
menampilkan data di LCD
else if (a == 'd')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter d"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 KUBUS");delay_ms(10);
gerak_kubus2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'e')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter e"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 TABUNG");delay_ms(10);
gerak_tabung2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'f')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter f"); delay_ms(20);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-76
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 PRISMA");delay_ms(10);
gerak_prismasegitiga2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 3 dan
menampilkan data di LCD
else if (a == 'g')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter g"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 KUBUS");delay_ms(10);
gerak_kubus3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'h')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter h"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 TABUNG");delay_ms(10);
gerak_tabung3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'i')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter i"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 PRISMA");delay_ms(10);
gerak_prismasegitiga3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 4 dan
menampilkan data di LCD
else if (a == 'j')
{
lcd_gotoxy(0,0);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-77
lcd_putsf("Karakter j");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 KUBUS");delay_ms(10);
gerak_kubus4(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'k')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter k"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 TABUNG");delay_ms(10);
gerak_tabung4();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'l')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter l"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 PRISMA");delay_ms(10);
gerak_prismasegitiga4(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 5 dan
menampilkan data di LCD
else if (a == 'm')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter m"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 KUBUS");delay_ms(10);
gerak_kubus5(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'n')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter n"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 TABUNG");delay_ms(10);
gerak_tabung5(); delay_ms(10);
lcd_clear(); delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-78
break;
}
else if (a == 'o')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter o"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 PRISMA");delay_ms(10);
gerak_prismasegitiga5();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 6 dan
menampilkan data di LCD
else if (a == 'p')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter p"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 KUBUS");delay_ms(10);
gerak_kubus6(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'q')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter q"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 TABUNG");delay_ms(10);
gerak_tabung6();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'r')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter r"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 PRISMA");delay_ms(10);
gerak_prismasegitiga6();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 7 dan
menampilkan data di LCD
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-79
else if (a == 's')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter s"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 KUBUS");delay_ms(10);
gerak_kubus7(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 't')
{
lcd_gotoxy(0,0);
lcd_putsf("0Karakter t"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 TABUNG");delay_ms(10);
gerak_tabung7();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'u')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter u"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 PRISMA");delay_ms(10);
gerak_prismasegitiga7(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 8 dan
menampilkan data di LCD
else if (a == 'v')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter v"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 KUBUS");delay_ms(10);
gerak_kubus8(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'w')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter w"); delay_ms(20);
lcd_gotoxy(0,1);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-80
lcd_putsf("POSISI 8 TABUNG");delay_ms(10);
gerak_tabung8();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'x')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter x"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 PRISMA");delay_ms(10);
gerak_prismasegitiga8(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 9 dan
menampilkan data di LCD
else if (a == 'y')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter y"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 KUBUS");delay_ms(10);
gerak_kubus9();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == 'z')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter z"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 TABUNG");delay_ms(10);
gerak_tabung9();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == '!')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter !"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 PRISMA");delay_ms(10);
gerak_prismasegitiga9(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-81
//Program utama pergerakan robot mengambil objek di posisi 10 dan
menampilkan data di LCD
else if (a == '#')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter #"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 KUBUS");delay_ms(10);
gerak_kubus10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == '$')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter $"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 TABUNG");delay_ms(10);
gerak_tabung10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == '%')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter %"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 PRISMA");delay_ms(10);
gerak_prismasegitiga10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 11 dan
menampilkan data di LCD
else if (a == '̂ ')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter ^"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 KUBUS");delay_ms(10);
gerak_kubus11(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == '&')
{
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-82
lcd_gotoxy(0,0);
lcd_putsf("Karakter &"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 TABUNG");delay_ms(10);
gerak_tabung11(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == '*')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter *"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 PRISMA");delay_ms(10);
gerak_prismasegitiga11();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 12 dan
menampilkan data di LCD
else if (a == '(')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter ("); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 KUBUS");delay_ms(10);
gerak_kubus12();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == ')')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter )"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 TABUNG");delay_ms(10);
gerak_tabung12();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (a == '+')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter +"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 PRISMA");delay_ms(10);
gerak_prismasegitiga12();delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-83
lcd_clear(); delay_ms(10);
break;
}
}
case 2:
{
//Program utama pergerakan robot mengambil objek di posisi 1 dan
menampilkan data di LCD
if (b == '0')
{
break;
}
else if (b == 'a')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter a");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 KUBUS");delay_ms(10);
gerak_kubus1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'b')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter b");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 TABUNG");delay_ms(10);
gerak_tabung1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'c')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter c");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 PRISMA");delay_ms(10);
gerak_prismasegitiga1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 2 dan
menampilkan data di LCD
else if (b == 'd')
{
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-84
lcd_gotoxy(0,0);
lcd_putsf("Karakter d"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 KUBUS");delay_ms(10);
gerak_kubus2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'e')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter e");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 TABUNG");delay_ms(10);
gerak_tabung2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'f')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter f"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 PRISMA");delay_ms(10);
gerak_prismasegitiga2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 3 dan
menampilkan data di LCD
else if (b == 'g')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter g"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI e KUBUS");delay_ms(10);
gerak_kubus3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'h')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter h"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 TABUNG");delay_ms(10);
gerak_tabung3(); delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-85
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'i')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter i");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 PRISMA");delay_ms(10);
gerak_prismasegitiga3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 4 dan
menampilkan data di LCD
else if (b == 'j')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter j"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 KUBUS");delay_ms(10);
gerak_kubus4(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'k')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter k"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 TABUNG");delay_ms(10);
gerak_tabung4();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'l')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter l");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 PRISMA");delay_ms(10);
gerak_prismasegitiga4(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-86
//Program utama pergerakan robot mengambil objek di posisi 5 dan
menampilkan data di LCD
else if (b == 'm')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter m"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 KUBUS");delay_ms(10);
gerak_kubus5(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'n')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter n"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 TABUNG");delay_ms(10);
gerak_tabung5(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'o')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter o"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 PRISMA");delay_ms(10);
gerak_prismasegitiga5();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 6 dan
menampilkan data di LCD
else if (b == 'p')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter p"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 KUBUS");delay_ms(10);
gerak_kubus6(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'q')
{
lcd_gotoxy(0,0);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-87
lcd_putsf("Karakter q"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 TABUNG");delay_ms(10);
gerak_tabung6();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'r')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter r"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 PRISMA");delay_ms(10);
gerak_prismasegitiga6();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 7 dan
menampilkan data di LCD
else if (b == 's')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter s"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 KUBUS");delay_ms(10);
gerak_kubus7(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 't')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter t"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 TABUNG");delay_ms(10);
gerak_tabung7();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'u')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter u"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 PRISMA");delay_ms(10);
gerak_prismasegitiga7(); delay_ms(10);
lcd_clear(); delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-88
break;
}
//Program utama pergerakan robot mengambil objek di posisi 8 dan
menampilkan data di LCD
else if (b == 'v')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter v"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 KUBUS");delay_ms(10);
gerak_kubus8(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'w')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter w"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 TABUNG");delay_ms(10);
gerak_tabung8();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == 'x')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter x"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 PRISMA");delay_ms(10);
gerak_prismasegitiga8(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 9 dan
menampilkan data di LCD
else if (b == 'y')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter y"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 KUBUS");delay_ms(10);
gerak_kubus9();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-89
else if (b == 'z')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter z"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 TABUNG");delay_ms(10);
gerak_tabung9();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == '!')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter !"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 PRISMA");delay_ms(10);
gerak_prismasegitiga9(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 10 dan
menampilkan data di LCD
else if (b == '#')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter #"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 KUBUS");delay_ms(10);
gerak_kubus10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == '$')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter $"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 TABUNG");delay_ms(10);
gerak_tabung10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == '%')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter %"); delay_ms(20);
lcd_gotoxy(0,1);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-90
lcd_putsf("POSISI 10 PRISMA");delay_ms(10);
gerak_prismasegitiga10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 11 dan
menampilkan data di LCD
else if (b == '̂ ')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter ^"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 KUBUS");delay_ms(10);
gerak_kubus11(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == '&')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter &"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 TABUNG");delay_ms(10);
gerak_tabung11(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == '*')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter *"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 PRISMA");delay_ms(10);
gerak_prismasegitiga11();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 12 dan
menampilkan data di LCD
else if (b == '(')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter ("); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 KUBUS");delay_ms(10);
gerak_kubus12();delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-91
lcd_clear(); delay_ms(10);
break;
}
else if (b == ')')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter )"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 TABUNG");delay_ms(10);
gerak_tabung12();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (b == '+')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter +"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 PRISMA");delay_ms(10);
gerak_prismasegitiga12();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
}
case 3:
{
//Program utama pergerakan robot mengambil objek di posisi 1 dan
menampilkan data di LCD
if(c == '0')
{
break;
}
else if (c == 'a')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter a"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 KUBUS");delay_ms(10);
gerak_kubus1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'b')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter b"); delay_ms(20);
lcd_gotoxy(0,1);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-92
lcd_putsf("POSISI 1 TABUNG");delay_ms(10);
gerak_tabung1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'c')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter c"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 PRISMA");delay_ms(10);
gerak_prismasegitiga1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 2 dan
menampilkan data di LCD
else if (c == 'd')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter d"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 KUBUS");delay_ms(10);
gerak_kubus2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'e')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter e"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 TABUNG");delay_ms(10);
gerak_tabung2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'f')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter f"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 PRISMA");delay_ms(10);
gerak_prismasegitiga2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-93
//Program utama pergerakan robot mengambil objek di posisi 3 dan
menampilkan data di LCD
else if (c == 'g')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter g"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 KUBUS");delay_ms(10);
gerak_kubus3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'h')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter h"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 TABUNG");delay_ms(10);
gerak_tabung3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'i')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter i");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 PRISMA");delay_ms(10);
gerak_prismasegitiga3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 4 dan
menampilkan data di LCD
else if (c == 'j')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter j");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 KUBUS");delay_ms(10);
gerak_kubus4(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'k')
{
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-94
lcd_gotoxy(0,0);
lcd_putsf("Karakter k"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 TABUNG");delay_ms(10);
gerak_tabung4();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'l')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter l"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 PRISMA");delay_ms(10);
gerak_prismasegitiga4(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 5 dan
menampilkan data di LCD
else if (c == 'm')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter m"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 KUBUS");delay_ms(10);
gerak_kubus5(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'n')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter n"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 TABUNG");delay_ms(10);
gerak_tabung5(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'o')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter o"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 PRISMA");delay_ms(10);
gerak_prismasegitiga5();delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-95
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 6 dan
menampilkan data di LCD
else if (c == 'p')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter p"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 KUBUS");delay_ms(10);
gerak_kubus6(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c== 'q')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter q"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 TABUNG");delay_ms(10);
gerak_tabung6();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'r')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter r"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 PRISMA");delay_ms(10);
gerak_prismasegitiga6();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 7 dan
menampilkan data di LCD
else if (c == 's')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter s"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 KUBUS");delay_ms(10);
gerak_kubus7(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-96
}
else if (c == 't')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter t"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 TABUNG");delay_ms(10);
gerak_tabung7();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'u')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter u"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 PRISMA");delay_ms(10);
gerak_prismasegitiga7(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 8 dan
menampilkan data di LCD
else if (c == 'v')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter v");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 KUBUS");delay_ms(10);
gerak_kubus8(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'w')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter w");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 TABUNG");delay_ms(10);
gerak_tabung8();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'x')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter x"); delay_ms(20);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-97
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 PRISMA");delay_ms(10);
gerak_prismasegitiga8(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 9 dan
menampilkan data di LCD
else if (c == 'y')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter y"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 KUBUS");delay_ms(10);
gerak_kubus9();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == 'z')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter z"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 TABUNG");delay_ms(10);
gerak_tabung9();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == '!')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter !"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 PRISMA");delay_ms(10);
gerak_prismasegitiga9(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 10 dan
menampilkan data di LCD
else if (c == '#')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter #"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 KUBUS");delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-98
gerak_kubus10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == '$')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter $"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 TABUNG");delay_ms(10);
gerak_tabung10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == '%')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter %");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 PRISMA");delay_ms(10);
gerak_prismasegitiga10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 11 dan
menampilkan data di LCD
else if (c == '̂ ')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter ^"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 KUBUS");delay_ms(10);
gerak_kubus11(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == '&')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter &"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 TABUNG");delay_ms(10);
gerak_tabung11(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == '*')
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-99
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter *"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 PRISMA");delay_ms(10);
gerak_prismasegitiga11();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 12 dan
menampilkan data di LCD
else if (c == '(')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter ("); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 KUBUS");delay_ms(10);
gerak_kubus12();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == ')')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter )"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 TABUNG");delay_ms(10);
gerak_tabung12();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (c == '+')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter +"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 PRISMA");delay_ms(10);
gerak_prismasegitiga12();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
}
case 4:
{
//Program utama pergerakan robot mengambil objek di posisi 1 dan
menampilkan data di LCD
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-100
if (d == '0')
{
break;
}
else if (d == 'a')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter a"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 KUBUS");delay_ms(10);
gerak_kubus1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'b')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter b"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 TABUNG");delay_ms(10);
gerak_tabung1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'c')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter c"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 PRISMA");delay_ms(10);
gerak_prismasegitiga1(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 2 dan
menampilkan data di LCD
else if (d == 'd')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter d"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 KUBUS");delay_ms(10);
gerak_kubus2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'e')
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-101
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter e"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 TABUNG");delay_ms(10);
gerak_tabung2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'f')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter f"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 PRISMA");delay_ms(10);
gerak_prismasegitiga2(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 3 dan
menampilkan data di LCD
else if (d == 'g')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter g"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 KUBUS");delay_ms(10);
gerak_kubus3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'h')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter h"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 TABUNG");delay_ms(10);
gerak_tabung3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'i')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter i"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 PRISMA");delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-102
gerak_prismasegitiga3(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 4 dan
menampilkan data di LCD
else if (d == 'j')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter j"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 KUBUS");delay_ms(10);
gerak_kubus4(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'k')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter k"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 TABUNG");delay_ms(10);
gerak_tabung4();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'l')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter l"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 PRISMA");delay_ms(10);
gerak_prismasegitiga4(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 5 dan
menampilkan data di LCD
else if (d == 'm')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter m"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 KUBUS");delay_ms(10);
gerak_kubus5(); delay_ms(10);
lcd_clear(); delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-103
break;
}
else if (d == 'n')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter n"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 TABUNG");delay_ms(10);
gerak_tabung5(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'o')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter o"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 PRISMA");delay_ms(10);
gerak_prismasegitiga5();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 6 dan
menampilkan data di LCD
else if (d == 'p')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter p"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 KUBUS");delay_ms(10);
gerak_kubus6(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'q')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter q");delay_ms(20);
lcd_gotoxy(1,1);
lcd_putsf("POSISI 6 TABUNG");delay_ms(10);
gerak_tabung6();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'r')
{
lcd_gotoxy(0,0);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-104
lcd_putsf("Karakter r"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 PRISMA");delay_ms(10);
gerak_prismasegitiga6();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 7 dan
menampilkan data di LCD
else if (d == 's')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter s"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 KUBUS");delay_ms(10);
gerak_kubus7(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 't')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter t"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 TABUNG");delay_ms(10);
gerak_tabung7();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'u')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter u"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 PRISMA");delay_ms(10);
gerak_prismasegitiga7(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 8 dan
menampilkan data di LCD
else if (d == 'v')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter v"); delay_ms(20);
lcd_gotoxy(0,1);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-105
lcd_putsf("POSISI 8 KUBUS");delay_ms(10);
gerak_kubus8(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'w')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter w"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 TABUNG");delay_ms(10);
gerak_tabung8();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'x')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter x"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 PRISMA");delay_ms(10);
gerak_prismasegitiga8(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 9 dan
menampilkan data di LCD
else if (d == 'y')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter y"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 KUBUS");delay_ms(10);
gerak_kubus9();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == 'z')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter z"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 TABUNG");delay_ms(10);
gerak_tabung9();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-106
else if (d == '!')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter !"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 PRISMA");delay_ms(10);
gerak_prismasegitiga9(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 10 dan
menampilkan data di LCD
else if (d == '#')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter #"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 KUBUS");delay_ms(10);
gerak_kubus10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == '$')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter $"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 TABUNG");delay_ms(10);
gerak_tabung10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == '%')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter %"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 PRISMA");delay_ms(10);
gerak_prismasegitiga10(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 11 dan
menampilkan data di LCD 1
else if (d == '̂ ')
{
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-107
lcd_gotoxy(2,0);
lcd_putsf("Karakter ^"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 KUBUS");delay_ms(10);
gerak_kubus11(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == '&')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter &"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 TABUNG");delay_ms(10);
gerak_tabung11(); delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == '*')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter *");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 PRISMA");delay_ms(10);
gerak_prismasegitiga11();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
//Program utama pergerakan robot mengambil objek di posisi 12 dan
menampilkan data di LCD
else if (d == '(')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter ("); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 KUBUS");delay_ms(10);
gerak_kubus12();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
else if (d == ')')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter )"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 TABUNG");delay_ms(10);
gerak_tabung12();delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-108
lcd_clear(); delay_ms(10);
break;
}
else if (d == '+')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter +"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 PRISMA");delay_ms(10);
gerak_prismasegitiga12();delay_ms(10);
lcd_clear(); delay_ms(10);
break;
}
}
case 5:
{
//Program utama pergerakan robot mengambil objek di posisi 1 dan
menampilkan data di LCD
if (e == '0')
{
standbylagi();
z=0;
f=0;
}
else if (e == 'a')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter a");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 KUBUS");delay_ms(10);
gerak_kubus1(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'b')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter b");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 TABUNG");delay_ms(10);
gerak_tabung1(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-109
else if (e == 'c')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter c"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 1 PRISMA");delay_ms(10);
gerak_prismasegitiga1(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 2 dan
menampilkan data di LCD
else if (e == 'd')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter d");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 KUBUS");delay_ms(10);
gerak_kubus2(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'e')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter e"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 TABUNG");delay_ms(10);
gerak_tabung2(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'f')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter f"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 2 PRISMA");delay_ms(10);
gerak_prismasegitiga2(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-110
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 3 dan
menampilkan data di LCD
else if (e == 'g')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter g"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 KUBUS");delay_ms(10);
gerak_kubus3(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'h')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter h"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 TABUNG");delay_ms(10);
gerak_tabung3(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'i')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter i"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 3 PRISMA");delay_ms(10);
gerak_prismasegitiga3(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 4 dan
menampilkan data di LCD
else if (e == 'j')
{
lcd_gotoxy(0,0);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-111
lcd_putsf("Karakter j"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 KUBUS");delay_ms(10);
gerak_kubus4(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'k')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter k"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 TABUNG");delay_ms(10);
gerak_tabung4();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'l')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter l"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 4 PRISMA");delay_ms(10);
gerak_prismasegitiga4(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 5 dan
menampilkan data di LCD
else if (e == 'm')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter m");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 KUBUS");delay_ms(10);
gerak_kubus5(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-112
else if (e == 'n')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter n"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 TABUNG");delay_ms(10);
gerak_tabung5(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'o')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter o"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 5 PRISMA");delay_ms(10);
gerak_prismasegitiga5();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 6 dan
menampilkan data di LCD
else if (e == 'p')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter p");delay_ms(20);;
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 KUBUS");delay_ms(10);
gerak_kubus6(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'q')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter q");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 TABUNG");delay_ms(10);
gerak_tabung6();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-113
z=0;
f=0;
}
else if (e == 'r')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter r"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 6 PRISMA");delay_ms(10);
gerak_prismasegitiga6();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 7 dan
menampilkan data di LCD
else if (e == 's')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter s");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 KUBUS");delay_ms(10);
gerak_kubus7(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 't')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter t"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 TABUNG");delay_ms(10);
gerak_tabung7();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'u')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter u"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 7 PRISMA");delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-114
gerak_prismasegitiga7(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 8 dan
menampilkan data di LCD
else if (e == 'v')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter v"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 KUBUS");delay_ms(10);
gerak_kubus8(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'w')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter w"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 TABUNG");delay_ms(10);
gerak_tabung8();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'x')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter x"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 8 PRISMA");delay_ms(10);
gerak_prismasegitiga8(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 9 dan
menampilkan data di LCD
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-115
else if (e == 'y')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter y"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 KUBUS");delay_ms(10);
gerak_kubus9();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == 'z')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter z"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 TABUNG");delay_ms(10);
gerak_tabung9();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == '!')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter !"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 9 PRISMA");delay_ms(10);
gerak_prismasegitiga9(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 10 dan
menampilkan data di LCD
else if (e == '#')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter #"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 KUBUS");delay_ms(10);
gerak_kubus10(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-116
z=0;
f=0;
}
else if (e == '$')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter $"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 TABUNG");delay_ms(10);
gerak_tabung10(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == '%')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter %");delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 10 PRISMA");delay_ms(10);
gerak_prismasegitiga10(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 11 dan
menampilkan data di LCD
else if (e == '̂ ')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter ^"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 KUBUS");delay_ms(10);
gerak_kubus11(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == '&')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter &"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 TABUNG");delay_ms(10);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-117
gerak_tabung11(); delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == '*')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter *"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 11 PRISMA");delay_ms(10);
gerak_prismasegitiga11();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
//Program utama pergerakan robot mengambil objek di posisi 12 dan
menampilkan data di LCD
else if (e == '(')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter ("); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 KUBUS");delay_ms(10);
gerak_kubus12();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == ')')
{
lcd_gotoxy(0,0);
lcd_putsf("Karakter )"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 TABUNG");delay_ms(10);
gerak_tabung12();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
else if (e == '+')
{
lcd_gotoxy(0,0);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-118
lcd_putsf("Karakter +"); delay_ms(20);
lcd_gotoxy(0,1);
lcd_putsf("POSISI 12 PRISMA");delay_ms(10);
gerak_prismasegitiga12();delay_ms(10);
lcd_clear(); delay_ms(10);
standbylagi();
z=0;
f=0;
}
}
}
}
}
}
}
}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-119
Pengujian Nilai OCR dan Sudut Servo 1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-120
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-121
Pengujian Nilai OCR dan Sudut Servo 2
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-122
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-123
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-124
Pengujian Nilai OCR dan Sudut Servo 3
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-125
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
L-126
Pengujian OCR dan Sudut Servo 4
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI