Monograf KENDALI REROUTE AUTOMATED GUIDED VEHICLE … · kendali monograf reroute automated guided...
Transcript of Monograf KENDALI REROUTE AUTOMATED GUIDED VEHICLE … · kendali monograf reroute automated guided...
Monograf
KENDALI REROUTE AUTOMATED GUIDED VEHICLE (AGV)
LINE FOLLOWER SISTEM P.I.D
Afianto, S.T., M.T., M.Sc.
Jakarta, Maret 2020
LP2M POLITEKNIK MANUFAKTUR ASTRA
b
Monograf
KENDALI REROUTE AUTOMATED GUIDED VEHICLE (AGV)
LINE FOLLOWER SISTEM P.I.D
oleh
Afianto, S.T., M.T., M.Sc.
Jakarta, Maret 2020
LP2M POLITEKNIK MANUFAKTUR ASTRA
c
Monograf “Kendali Reroute Automated Guided Vehicle (AGV) Line Follower Sistem P.I.D”
Penulis: Afianto, S.T., M.T., M.Sc.
ISBN: 978-602-71320-8-5
Editor: Dr. Syahril Ardi, S.T., M.T. Hak cipta dilindungi Undang-Undang Dilarang memperbanyak monograf ini dalam bentuk apapun untuk tujuan komersial, kecuali untuk keperluan pendidikan, dengan mencantumkan penulis dan penerbit.
Penerbit: LP2M Politeknik Manufaktur Astra Jl. Gaya Motor Raya no.8 Sunter II Jakarta Utara Jakarta 14330 Indonesia Telp/Fax: +62-21 651 9555/+62-21 651 9821 Email: [email protected] Website: https://lppm.polman.astra.ac.id
i
KATA PENGANTAR
Puji syukur kehadirat Allah SWT yang telah memberikan rahmat dan hidayah-Nya
sehingga penulis dapat menyelesaikan tulisan monograf yang berjudul “Kendali Reroute
Automated Guided Vehicle (AGV) Line Follower Sistem P.I.D” ini tepat pada waktunya.
Adapun tujuan dari penulisan monograf ini adalah untuk menambah wawasan dan
pengetahuan tentang pengendalian AGV jenis Line Follower bagi para pembaca dan juga
penulis, yang selanjutnya bisa diaplikasikan untuk kepentingan yang bermanfaat.
Pendistribusian material/barang proses di industri, saat ini adalah menjadi pilihan
yang tepat dan perlu guna meningkatkan produktivitas. Pilihannya adalah dengan proses
secara otomatisasi guna mengurangi biaya produksi dan meningkatkan kualitas. Proses
pendistribusian otomatis tersebut salah satunya adalah dengan menggunakan mobile robot
model Automatic Guided Vehicle (AGV) Line Follower. Robot AGV Line Follower mempunyai
navigasi dengan mendeteksi dan bergerak mengikuti garis dengan bantuan sensor
photodiode, sensor tersebut sebagai pendeteksi garis pergerakan AGV sesuai ke tempat
tujuan.
Tulisan ini akan memberikan wawasan dan pengetahuan tentang model penggerak
AGV, jenis dan sistim pengendali motor DC. Dan yang menjadi fokus penulis adalah
bagaimana model pengendali motor DC menggunakan sistim Proposional Integral Derivatif
(PID) yang dikombinasikan dengan pengendalian Reroute. Reroute sendiri berfungsi untuk
mengendalikan AGV Line Follower apabila pergerakan keluar dari lintasan/jalur dan bisa
secara otomatis mendeteksi kembali ke lintasan/jalur yang benar untuk melanjutkan
pergerakannya menuju lokasi tujuan.
Pada akhirnya penggunaan AGV Line Follower tersebut akan memberikan dampak
positif yang banyak bagi penggunannya dalam proses pendistribusian material/barang, yaitu
sebagai berikut waktu akan lebih efektif, tepat dan efisien, kemudahan dalam pengaturan
rute/flesibel, pengupahan karyawan berkurang, menghilangkan kelalaian akibat human error
dan angka kecelakaan kerja dapat diminimalisasi. Monograf ini, dapat tersusun dengan baik
tentunya hasil dari bantuan berbagai pihak. Oleh karena itu, penulis mengucapkan terima
kasih kepada pihak-pihak yang telah membagi sebagian pengetahuannya yang tidak bisa
penulis ucapkan satu persatu hingga akhirnya dapat menyelesaikan monograf ini.
ii
Penulis juga berharap kritik dan saran yang membangun untuk monograf ini. Sebab,
penulis sangat menyadari bahwa monograf yang disusun ini masih jauh dari kesempurnaan.
Semoga tulisan monograf ini bermanfaat bagi kita semua.
Jakarta, 13 Maret 2020
Penulis Afianto, S.T., M.T., M.Sc.
iii
DAFTAR ISI
Kata Pengantar …………………………………………………………………………………..……..……………...…………i
Daftar Isi………………………………………………………………………………………………….….………….……………iii
Daftar Gambar ……………………………………………………………………………….…………..…..……….…………iv
Bab 1. Pendahuluan ……………………………………………………………………………………….………..………….1
1.1. Latar Belakang………………………………………………………………………..…...........…..…….….1
1.2. Tujuan dan Manfaat……………………………………………………………………..……………..…….1
1.3. Tinjauan Pustaka………………………………………………………………………………………..………2
1.3.1. Automated Guided Vehicle (AGV)………………………………….………………………..2
1.3.2. Sistim Kendali……………………………………………………………….…………………………3
1.3.3. Mikrokontroler……………………………………………………………….……………….……..6
Bab 2. Model Penggerak AGV ……………………………………………………………………….……..………………7
2.1. Model Two Differential Drives as Steering………………………………………………..………..7
2.2. Model One Drive And One Steering…………………………………………………….………………8
2.3. Model Four Differential Wheels Drive As Steering……………………………………………...8
2.4. Model Four Mecanum Wheels……………………………………………………………………………9
Bab 3. Metode AGV Line Follower Kendali PID……………………………………………………………………13
3.1. AGV Line Follower……………………………………………………………………..…………..…………13
3.2. Konsep Kendali PID (Proportional-Integral–Derivative)…………………………….………17
3.3. Pemprograman P.I.D…………………………………………………………………………………………24
Bab 4. Metode Reroute AGV……………………………………………………………….……………………..………32
Bab 5. Konsep Pembuatan AGV………………………………………………….………………………………………39
5.1. Pembuatan Rangkaian Elektrik AGV…………………………………………………………………39
5.2. Wiring Diagram Kontroler AGV Line Follower 2 Roda Penggerak………………………44
Bab 6. Penutup ……………………………………………………………………………………..…………………………..46
Daftar Pustaka …………………………………………………………………………………………………………………..47
Lampiran ……………………………………………………………………………………………………………………………48
iv
DAFTAR GAMBAR
DAFTAR GAMBAR
Gambar 1. Diagram Sistem Kendali …………………………………………………………..3 Gambar 2. Sistem Kontrol Loop Terbuka………………………………………………….…4 Gambar 3. Sistem Kontrol Loop Tertutup……………………………………………………5 Gambar 4. Model AGV Two Differential Drives as Steering……………………………....7 Gambar 5. Kendali Pergerakan AGV Two Differential Drives as Steering……………..8 Gambar 6. Kendali Pergerakan AGV model One Drive And One Steering……………..8 Gambar 7. Model AGV Four Differential Wheels Drive As Steering…………………….9 Gambar 8. Model AGV Four Mecanum Wheel……………………………………………….9 Gambar 9. Gerak Maju dan Mundur AGV………………………………………………….10
Gambar 10. Gerak Kanan dan Kiri AGV…………………………………………………….10 Gambar 11. Gerak serong kanan dan kiri AGV……………………………………………11 Gambar 12. Gerak Putar Kanan dan Putar Kiri AGV………………………………….…11 Gambar 13. Gerak Belok Kanan dan Belok Kiri AGV…………………………………..12 Gambar 14. Gerak Lateral Kanan dan Kiri AGV………………………………………….12 Gambar 15. AGV dan Track Line Follower………………………………………………….13 Gambar 16. Prinsip Kerja Sensor Pendeteksi Garis………………………………………14 Gambar 17. Cara Kerja Kendali Dasar AGV Line Follower non-PID………………….15 Gambar 18. Pemetaan Sensor Garis untuk Line Follwer……………………………….15 Gambar 19. Diagram Blok Kendali AGV Line Follower………………………………….16 Gambar 20. Blok Diagram Kendali PID……………………………………………………..17 Gambar 21. Sinyal Tanggapan Kendali PID……………………………………………….19 Gambar 22. Blok Diagram Kendali Proposional…………………………………………..20 Gambar 23. Sinyal Tanggapan Kendali Proposional…………………………………….21 Gambar 24. Blok Diagram Kendali Integral………………………………………………..21 Gambar 25. Sinyal Tanggapan Kendali Integral………………………………………….21 Gambar 26. Sinyal Tanggapan Kendali Integral………………………………………….22 Gambar 27. Blok Diagram Kendali Derivative……………………………………………..22 Gambar 28. Sinyal Tanggapan Kendali Derivative……………………………………….23 Gambar 29. Ilustrasi Pemberian Bobot Sensor……………………………………………25 Gambar 30. Flowchart perancangan program AGV………………………………………30 Ganbar 31. Model Reroute AGV belok kanan……………………………………………...32 Gambar 32. Sensor Line Follower…………………………………………………………….33 Gambar 33. Siklus Reroute ke kanan……………………………………………………….34 Gambar 34. Model Reroute AGV belok kiri…………………………………………………35 Gambar 35. Siklus Reroute ke kanan……………………………………………………….35 Gambar 36. Gerak lurus AGV melakukan Reroute arah kanan………………………36
Gambar 37. Gerak lurus AGV melakukan Reroute arah kiri…………………………..37 Gambar 38. Model AGV melakukan 2 tahap Reroute……………………………………38 Gambar 39. Mikrokontroler Arduino Mega…………………………………………………40 Gambar 40. Motor Planetary Gearbox……………………………………………………….40 Gambar 41. Rangkaian Driver H-Bridge…………………………………………………….41 Gambar 42. Driver Single Motor BTS 7960………………………………………………..42 Gambar 43. Sensor garis/jalur TCRT5000…………………………………………………42 Gambar 44. Baterai LiPo………………………………………………………………………..43 Gambar 45. Konverter DC-DC Step Up/Down…………………………………………….43 Gambar 46. Diagram Pengkabelan Rangkaian Daya AGV………………………………44 Gambar 47. Diagram Pengkabelan Rangkaian I/O Mikrokontroler…………………..45
1
Bab 1. PENDAHULUAN
1.1. Latar Belakang
Era industri 4.0 memicu pengaplikasikan teknologi yang mengarah pada otomatisasi dalam
segala hal, industri-industri saat ini mulai memanfaatkan teknologi robotika untuk membantu
tugas-tugas manusia, hal ini ditujukan untuk meningkatkan produktifitas serta kualitas
produk. Tidak terkecuali salah satu proses yang sangat penting dalam rantai produksi yaitu
distribusi barang produksi yaitu pada proses pemindahan barang dari suatu tempat ke tempat
lain. Model transportasi menggunakan kemudi yang dilakukan oleh manusia akan segera
ditinggalkan, hal ini didorong oleh beberapa penemuan teknologi maju yang dapat
mengurangi bahkan sampai menghilangkan beberapa resiko pada manusia maupun material.
Hal – hal yang bisa menjadi masalah dengan model kemudi manusia adalah kelalaian manusia
sehingga terjadi kesalahan lokasi baik asal maupun tujuan pengiriman atau sampai terjadinya
kecelakaan, belum lagi tentang biaya tenaga kerja yang semakin tinggi. Untuk itu, diperlukan
otomatisasi pada sarana-sarana pendistribusian tersebut, salah satu penerapan otomatisasi
pada sarana pendistribusian barang yaitu Automatic Guided Vehicle (AGV). AGV merupakan
suatu alat transportasi untuk memindahkan suatu barang/material, dikendalikan secara
otomatis menggunakan navigasi yang nantinya dapat bergerak mengikuti jalur yang telah
ditentukan hingga sampai tujuan. Model transportasi otomatis untuk distribusi
barang/material tersebut bisa dilakukan secara cepat dan efisien. Dengan melihat manfaat
yang begitu banyak seperti efisiensinya tinggi, handal, ketahanan yang kuat, fleksibel, dan
akurasi gerak yang tinggi, inilah yang membuat AGV banyak digunakan di industri dalam
proses manufaktur, perakitan dan logistic, rumah makan hingga rumah sakit. Ada hal lain yang
sebenarnya harus dihindari adalah pemanfaatan AGV Line Follower yang menggunakan
panduan garis atau sejenisnya, sebab akan mengganggu keindahan, kebersihan dan kerapian
lingkungan. Hal tersebut tidak disarankan untuk area perkantoran dan lingkungan kampus.
1.2. Tujuan dan Manfaat
Alat transportasi otomatis AGV ini memiliki tujuan utama adalah untuk meningkatkan
produktifitas dengan memperhatikan faktor lingkungan global, yaitu untuk mengurangi
pencemaran lingkungan dengan mengurangi emisi gas buang. Adapun manfaat dari
2
pengaplikasian AGV tentu dapat menurunkan biaya operator dan faktor kecelakaan kerja.
Pengurangan biaya transportasi secara langsung akan berdampak pada penurunan biaya
produksi.
1.3. Tinjauan Pustaka
1.3.1. Automated Guided Vehicle (AGV)
Alat transportasi AGV berjalan dengan panduan/navigasi untuk pemindahan atau
pendistribusian barang dari satu tempat ke tempat yang lainnya. Panduannya bisa berupa
garis Line Follower, ada juga teknologi pemandu dengan laser (laser guided) dan bahkan
ada yang menggunakan LPS (local positioning system) semacam GPS tapi hanya untuk
daerah ruangan tertentu saja. Adapun penggunaan AGV dalam menjalankan usahannya
dapat memberikan beberapa dampak keuntungan:
a) Pengendalian biaya, biaya sistem AGV sangat dapat diprediksi, sementara biaya tenaga
kerja cenderung meningkat dan dapat berubah dengan cepat tergantung pada kondisi
ekonomi lokal atau pada saat permintaan produk meningkat.
b) Handal, keandalan dan pengiriman tepat waktu yang dilakukan oleh AGV meningkatkan
efisiensi operasi. Kemampuan untuk beroperasi dengan waktu yang non-stop namun
tetap menjaga konsistensi dalam operasi.
c) Keamanan, AGV selalu mengikuti jalur panduan dan akan berhenti jika mengalami
adanya halangan, hal ini dapat meningkatkan keselamatan pekerja di sekitarnya. Pada
indutri manufaktur sering kali alat transportasi difungsikan untuk membawa barang
yang besar dan berat, hal ini ada kalanya potensi human error sehingga muncul bahaya
cidera atau kecelakaan kerja terhadap pekerja. Dengan pengendalian gerakan pada AGV
yang diatur seaman mungkin maka dapat mengurangi kecelakaan kerja serta kerusakan
produk yang dibawa. Serta kehilangan barang atau kesalahan penempatan barang
dapat dilacak dengan cepat oleh sistem.
d) Kemudahan, bebas jelajah. Adanya roller atau belt conveyor cukup membantu
produktifitas tapi tidak mampu mengatasi permasalahan saat kebutuhan yang komplek
dan tuntutan fleksibilitas operasional meningkat. AGV menghilangkan masalah akses
yang dibuat oleh konveyor dan membutuhkan lebih sedikit ruang daripada forklift
konvensional, serta memungkinkan untuk akses ke lorong yang lebih sempit
e) Fleksibel, AGV pada logistik gudang juga harus fleksibel terhadap variable yang ada
seperti : Jalur navigasi dapat diubah karena kebutuhan produksi dan layout yang
3
berkembang bahkan teknologi sekarang AGV mampu melakukan pergerakan dengan
memberikan program secara teaching, mampu dikombinasikan dengan konveyor,
tersedia sistem yang dapat dikolaborasi dengan perangkat lain seperti robot lengan.
f) Efisien, AGV harus mampu bekerja efisien terhadap waktu operasionalnya terutama
dalam proses alur transfer barang. Kemampuan yang diperlukan seperti pendeteksian
rute terpendek secara akuran, perencanaan rute alternatif saat terdapat hambatan,
pemetaan posisi barang-barang agar mudah ditelusuri hingga penambahan informasi
layout gudang untuk infomasi titik penjemputan dan pengiriman.
g) Pengurangan biaya operasi - Pengisian dan penanganan baterai bisa otomatis dengan
sistem AGV dan akselerasi / perlambatan pergerakan yang dikontrol ini meminimalkan
keausan pada komponen.
h) Repeatability, AGV dapat diprediksi dan andal dalam melakukan tugas gerakan yang
berulang – ulang.
i) Terorganisir, Pada skala gudang yang besar, tentu akan diperlukan lebih dari 1 AGV dan
banyak fasilitas yang harus dilayani. Maka robot harus dirancang untuk dapat bekerja
sama dalam 1 armada terpusat. Dengan kendali armada terpusat maka dapat
diintegerasikan dengan perangkat lunak pengelolaan pabrik atau gudang seperti MES
atau WMS, sehingga kontrol lalu lintas dan rute dapat direncanakan secara optimal.
j) Skalabilitas, Lebih banyak AGV dapat ditambahkan untuk memperluas kapasitas dan
throughput.
1.3.2. Sistim Kendali
Sistem kendali/kontrol didefinisikan suatu alat atau susunan alat yang terkait sedemikian rupa
sehinga dapat memerintah, mengarahkan, atau mengatur keadaan dari suatu sistem diri sendiri
atau sistem lain. Sistem kendali tersusun atas sub-sistem dan proses (plants) yang diberikan input
sebagai kinerja yang diinginkan untuk mendapatkan keluaran (output). Gambar 1 di bawah ini
menununjukkan blok diagram untuk sistem kendali paling sederhana.
Gambar 1. Diagram Sistem Kendali
4
Pada Sistem Kendali, dapat diklasifikasikan pada beberapa hal:
1. Sistem Kendali Manual dan Otomatik,
2. Sistem Lingkar Terbuka (Open Loop) dan Lingkar Tertutup (Closed Loop)
3. Sistem Kendali Kontinu dan Diskrit
4. Sumber penggerak: Elektrik, Mekanik, Pneumatik, dan Hidraulik
Sistem Kendali Manual dilakukan oleh manusia yang bertindak sebagai operator,
sedangkan Sistem Kendali Otomatik dilakukan oleh peralatan yang bekerja secara otomatis
dan operasinya dibawah pengawasan manusia. Ada dua jenis system kendali yaitu Sistem
Kendali Lingkar Terbuka (Open Loop) dan Sistem Kendali Lingkar Tertutup (Closed Loop),
dan bisa dijelaskan secara singkat sebagai berikut :
a. Sistem Kendali Lingkar Terbuka (Open Loop), mengendalikan suatu proses dimana
besaran keluaran tidak digunakan sebagai umpan balik terhadap besaran masukan,
sehingga variable yang dikendalikan pada keluaran tidak dapat dibandingkan terhadap
nilai/variable yang diinginkan pada masukan.
Gambar 2. Sistem Kontrol Loop Terbuka
Pada Sistem Kendali Loop Terbuka memiliki beberapa keuntungan antara lain,
sederhana, harganya murah, dapat dipercaya. Namun sistem kendali ini memiliki
kekurangan yaitu kurang akurat karena tidak terdapat koreksi terhadap kesalahan
pada keluarannya. Dengan adanya gangguan, sistem control terbuka tidak dapat
melaksanakan tugas yang sesuai diharapkan. Sistem kontrol terbuka dapat digunakan
hanya jika hubungan antara masukan dan keluaran diketahui dan tidak terdapat
gangguan internal maupun eksternal.
b. Sistem Kendali Lingkar Tertutup (Closed Loop) mengendalikan suatu proses dengan
memanfaatkan besaran keluaran untuk digunakan sebagai umpan balik pada besaran
masukan, sehingga variable yang dikendalikan dapat dibandingkan terhadap
nilai/variable yang diinginkan. Perbedaan nilai yang terjadi antara besaran keluaran
dengan besaran masukan ini digunakan sebagai koreksi yang merupakan sasaran
pengendalian suatu proses.
5
Gambar 3. Sistem Kontrol Loop Tertutup
Sinyal kesalahan penggerak, yang merupakan selisih antara sinyal masukan dan sinyal
umpan balik, diumpankan ke kontroler untuk memperkecil kesalahan dan membuat
agar keluaran sistem mendekati harga yang diinginkan.
Berikut ini adalah bagian-bagian pada sistem kendali tertutup:
1. Masukan (Input), merupakan rangsangan yang diberikan pada sistem kontrol,
merupakan nilai yang diinginkan bagi variabel yang dikontrol selama pengontrolan.
Harga ini tidak tergantung pada keluaran sistem
2. Keluaran (Output), merupakan tanggapan pada sistem kontrol, merupakan harga yang
akan dipertahankan bagi variabel yang dikontrol, dan merupakan harga yang
ditunjukan oleh alat pencatat
3. Beban (Plant) merupakan sistem fisis yang akan dikontrol (misalnya mekanis, elektris,
hidraulik ataupun pneumatic).
4. Alat Kontrol/Kendali (Controller), merupakan peralatan/ rangkaian untuk mengontrol
beban (sistem). Alat ini bisa digabung dengan penguat
5. Elemen Umpan Balik, menunjukan/mengembalikan hasil pencatan ke detector
sehingga bisa dibandingkan terhadap harga yang diinginkan (di stel)
6. alat deteksi kesalahan (Error Detector), merupakan alat pendeteksi kesalahan yang
menunjukan selisih antara masukan (input) dan respons melalui umpan balik
(feedback path).
7. Gangguan merupakan sinyal-sinyal tambahan yang tidak diinginkan. Gangguan ini
cenderung mengakibatkan nilai keluaran berbeda dengan harga masukanya,
gangguan ini biasanya disebabkan oleh perubahan beban sistem, bisa juga karena
adanya perubahan kondisi lingkungan, getaran ataupun yang lain.
6
1.3.3. Mikrokontroler
Mikrokontroler merupakan sebuah IC yang dirancang untuk mengatur operasi tertentu
dalam sistem tertanam. Mikrokontroler terdiri atas prosesor (CPU), memori, dan
input/output peripheral, dimana ketiga komponen tersebut berada pada satu chip.
Mikrokontroler digunakan dalam berbagai sistem dan perangkat, ada kalanya suatu
perangkat yang komplek menggunakan beberapa mikrokontroler untuk menangani
tugasnya masing-masing yang selanjutnya bekerja bersama dalam sistem. Mikrokontroler
mengirim dan menerima data menggunakan perangkat I/O dan memproses data tersebut
pada prosesor untuk melakukan tugas yang ditentukan.
Komponen utama pada mikrokontroler adalah:
Prosesor (CPU) dapat dianggap sebagai otak perangkat. CPU bertugas untuk memproses
dan melaksanakan berbagai instruksi yang mengarahkan fungsi mikrokontroler. Seperti
halnya melakukan perhitungan aritmatika dasar, logika dan operasi I/O. CPU juga
melakukan operasi transfer data, yang mengkomunikasikan perintah ke komponen lain
dalam sistem tertanam yang lebih besar.
Memori mikrokontroler digunakan untuk menyimpan data yang diterima dan digunakan
prosesor sebagai tanggapan respon dari instruksi yang telah diprogram untuk dijalankan.
Mikrokontroler memiliki dua jenis memori utama: pertama Memori Program, yang
menyimpan informasi jangka panjang tentang instruksi yang dilakukan CPU. Memori
Program adalah memori yang tidak mudah hilang, artinya menyimpan informasi dari waktu
ke waktu tanpa memerlukan sumber daya. Kedua Memori Data, yang diperlukan untuk
penyimpanan data sementara saat instruksi sedang dijalankan. Memori data tidak stabil,
artinya data yang dipegangnya bersifat sementara dan hanya dipertahankan jika perangkat
terhubung ke sumber daya.
Input/Output Peripherals - Perangkat input dan output adalah antarmuka untuk
menghubungkan prosesor (CPU) ke perangkat di luar mikrokontroler. Port input menerima
informasi dan mengirimkannya ke prosesor dalam bentuk data biner. Prosesor menerima
data itu dan mengirimkan instruksi yang diperlukan ke perangkat keluaran yang
menjalankan tugas di luar mikrokontroler.
7
Bab 2. Model Penggerak AGV
2.1. Model Two Differential Drives as Steering: model dengan 2 buah motor penggerak yang
secara perbedaan kecepatan mengatur arah gerak dan belok AGV sehingga fungsi roda
penggerak juga menjadi steering arah pergerakan AGV. AGV model ini paling banyak
diaplikasikan sebab disamping lebih mudah juga lebih murah dalam membuatnya. Berikut
adalah contoh desain AGV model Two differential Driver as Steering.
Gambar 4. Model AGV Two Differential Drives as Steering
Untuk berbelok ke kiri, putaran roda kanan dibuat lebih cepat. Sebaliknya untuk berbelok
ke kanan, putaran roda kiri dibuat lebih cepat. Jenis AGV ini membutuhkan 2 buah roda
Casters sebagai penggerak yang terpasang pada Motor DC, serta 1 buah roda Caster bantuan
sebagai roda penyangga untuk membantu agar AGV dapat berdiri sejajar dan dapat
berbelok. AGV jenis ini dibuat untuk dapat bergerak 2 arah (maju dan mundur). Berikut
digambarkan bagaimana kondisi arah putaran dan kecepatan dari motor agar AGV bisa melakukan
gerak maju, belok kanan, dan belok kiri. Adapun untuk pergerakan mundur maka 2 motor penggerak
diputar dengan arah terbalik dari arah maju dengan kecepatan yang sama.
8
Gambar 5. Kendali Pergerakan AGV Two Differential Drives as Steering
2.2. Model One Drive And One Steering: AGV jenis ini memisahkan antara roda yang
digunakan sebagai penggerak (drive), dan roda yang digunakan sebagai pengemudi (steering).
AGV jenis ini dibuat untuk bergerak 1 arah saja (maju). Gambar dibawah ini memberikan
gambaran bagaimana kondisi arah putaran dan kecepatan dari motor agar AGV bisa melakukan
gerak maju, belok kanan, dan belok kiri. Adapun untuk pergerakan mundur untuk AGV model ini
tidak disarankan sebab akan mengendalikan AGV dengan sukup rumit.
Gambar 6. Kendali Pergerakan AGV model One Drive And One Steering
2.3. Model Four Differential Wheels Drive As Steering: AGV jenis ini menggunakan 4 buah roda
dengan motor penggerak, yang secara diferensial dapat mengatur arah belok AGV. AGV jenis ini
dibuat untuk dapat bergerak bergerak 2 arah (maju dan mundur), dan berbelok ke kanan dan ke
kiri dengan mengatur kecepatan dari 2 roda sisi kanan dan 2 roda sisi kiri yang berbeda. AGV
9
model ini biasanya digunakan untuk dibebani, mendorong atau menarik beban yang besar
sehingga membutuhkan torsi yang besar pula.
Gambar 7. Model AGV Four Differential Wheels Drive As Steering
2.4. Model Four Mecanum Wheels: AGV ini adalah pengembangan dari AGV tipe ke (4) yang
sudah dijelaskan diatas. Namun menggunakan mecanum wheels sebagai roda
penggeraknya, sehingga AGV dapat bergerak bebas dan memungkinkan gerakan berputar
sampai 360 derajat. AGV tipe ini adalah tipe yang paling modern saat ini, dan tergolong
omnidirection, yang artinya dapat bergerak kemanapun (maju, mundur, kanan, kiri,
serong kanan, serong kiri dan berputar).
Gambar 8. Model AGV Four Mecanum Wheel
10
Berikut ini akan dijelaskan bagaimana AGV Model Four Mecanum Wheel melakukan 16 arah
Gerakan.
1. Gerak Maju dan Mundur
Gambar 9. Gerak Maju dan Mundur AGV
AGV akan bergerak maju atau mundur, dengan cara ke 4 roda mecanum berputar searah dan
berkecepatan yang sama (arah dan kecepatan tiap roda, ditunjukan oleh gambar panah di sisi
roda).
2. Gerak Ke Kanan dan Ke Kiri
Gambar
Gambar 10. Gerak Kanan dan Kiri AGV
AGV akan bergerak ke kanan dan ke kiri, dengan cara ke 2 roda mecanum yang berlisangan
berputar searah jarum jam (CW) dan 2 roda mecanum yang bersilangan lainnya berputar
berlawanan arah jarum jam (CCW) dengan kecepatan ke 4 roda yang sama.
3. Gerak Serong kanan dan Serong kiri
11
Gambar 11. Gerak serong kanan dan kiri AGV
AGV akan melakukan gerakan serong kanan dan kiri apabila ke 2 roda mecanum yang
berlisangan berputar searah jarum jam (CW) dan 2 roda mecanum yang bersilangan lainnya
tidak diputar (diam) dengan kecepatan ke 2 roda yang berputar adalah sama.
4. Gerak Putar Kanan dan Putar Kiri
Gambar 12. Gerak Putar Kanan dan Putar Kiri AGV
AGV akan melakukan gerakan putar kanan dan putar kiri apabila ke 2 roda mecanum yang
disisi sama berputar searah jarum jam (CW) dan 2 roda mecanum disisi sama lainnya berputar
berlawanan arah jarum jam (CCW) dengan kecepatan ke 4 roda yang adalah sama.
12
5. Gerak Belok Kanan dan Belok Kiri
Gambar 13. Gerak Belok Kanan dan Belok Kiri AGV
AGV akan melakukan gerakan belok kanan dan belok kiri apabila ke 2 roda mecanum yang
disisi sama berputar searah jarum jam (CW) dengan kecepatan sama besar dan 2 roda
mecanum disisi sama lainnya berputar searah jarum jam (CW) juga, namun dengan kecepatan
yang lebih rendah dari 2 roda sisi lainnya.
6. Gerak Lateral Kanan dan Lateral Kiri
Gambar 14. Gerak Lateral Kanan dan Kiri AGV
AGV akan melakukan Gerakan Lateral kanan atau kiri, bila 2 roda depan atau 2 roda belakan
saja yang digerakan dengan arah yang saling berlawanan.
13
Bab 3. Metode AGV Line Follower Kendali PID
AGV merupakan suatu kendaraan yang dikendalikan secara manual dan otomatis
menggunakan sistem navigasi dengan pengendalian pola gerakan menuju tempat yang dituju.
Sistem navigasi menjadi bagian terpenting agar AGV dapat bergerak secara mandiri. Berikut ini
adalah tipe berdasarkan navigasinya :
1. Tipe Rail, yaitu tipe navigasi dengan memberikan rel disepanjang jalur yang akan dilewati
AGV.
2. Tipe Wired, yaitu tipe navigasi yang menggunakan kabel yang di tanam di lantai kemudian
AGV dibekali sensor yang mendeteksi medan elektromagnet dari kabel.
3. Tipe Line Tape, yaitu tipe navigasi dengan menggunakan garis yang dibuat dengan
membedakan warna terhadap lantai (optical) atau magnetic tape.
4. Tipe Laser, yaitu tipe navigasi dengan menggunakan laser transmiter pada AGV dan
sejumlah laser reflector yang ditempatkan di titik – titik tertentu. Pantulan dari titik – titik
tersebut memberikan gambaran bagi AGV untuk memetakan lingkungan sekitarnya.
3.1. AGV Line Follower
Gambar 15. AGV dan Track Line Follower
AGV Line Follower atau biasa disebut Line tracer merupakan suatu AGV yang mampu bergerak
mengikuti jalur panduan garis. Sensor garis berfungsi untuk mendeteksi garis jalur (track) dan
memberitahukan posisi AGV pada pengendali (mikrokontroler), sehingga AGV tersebut dapat tetap
14
berjalan di jalurnya dengan baik. Dengan kata lain sensor garis ini berperan seperti panca indera pada
manusia. Garis pandu yang digunakan dalam hal ini adalah garis putih yang ditempatkan dalam
permukaan yang gelap atau sebaliknya garis gelap yang ditempatkan dalam permukaan yang putih.
Berikut Komponen Input, control dan output pada kendali AGV Line Follower ;
1. Sensor Garis AGV, dengan bantuan sensor sebagai input, AGV dapat menentukan arah gerakannya,
dalam line follower ini sensor garis yang digunakan jenis sensor inframerah. Perakitan sensor tersebut
cukup mudah, yaitu menggunakan satu buah komponen photodiode dan satu buah Light Emitting
Diode (LED) infra merah atau sering diganti dengan LED Superbright dengan warna tertentu yang
dipasang secara berdampingan. LED akan memancarkan cahaya ke permukaan dan pantulan cahaya
tersebut akan diterima oleh photodiode. Prinsip kerja pendeteksian garis pandu dari AGV tersebut
adalah bahwa tiap-tiap warna permukaan memiliki kemampuan untuk memantulkan cahaya yang
berbeda-beda. Warna putih memiliki kemampuan memantulkan cahaya lebih banyak (paling baik),
sebaliknya warna hitam memiliki kemampuan memantulkan cahaya sangat sedikit (paling buruk)
bahkan bisa dikatakan menyerap cahaya. Hal itulah yang digunakan untuk sebagai prinsip mendeteksi
garis pandu tersebut. Gambar dibawah ini adalah menjelaskan secara ilustrasi terjadinya proses kirim-
terima cahaya dan bagaimana posisi peletakkan antara LED sebagai transmitter (Tx) dan Photodioda
sebagai Receiver (Rx). Terlihat bahwa posisi Rx sebaiknya berada didepan dari Tx pada arah gerak AGV,
adapun jarak optimal antara bagian pemantul dan sensor anatar 3-5 mm. Bagian Sensor Rx yang
menerima cahaya dari pantulan warna putih dari Tx akan mengeluarkan sinyal Logic “1”, sebaliknya
Rx akan memberikan logic “0” bila cahaya dari Tx dipantulkan oleh warna hitam (terserap).
Gambar 16. Prinsip Kerja Sensor Pendeteksi Garis
AGV line follower yang yang paling dasar adalah AGV line follower yang tanpa menggunakan
PID kontrol dalam sistem pengaturannya, jadi hanya mengandalkan akurasi dari pembacaan
sensor dan gerak dari motor yang dikendalikan oleh motor driver. Model tersebut bisa
digambarkan pada gambar dibawah ini, yaitu bila AGV hanya menggunakan 2 buah sensor
garis. Saat AGV berada di posisi tengah artinya ke dua buah sensor mendapatkan logic “1”
maka mikrokontroler memerintahkan driver motor dengan nilai yang sama sehingga
15
diharapkan putaran motor sama sehingga didapatkan gerak maju lurus. Namun apabila salah
satu mendapatkan logic “0” dan yang lain logic “1” maka mikrokontroler untuk memberikan
nilai berbeda ke driver motor yang selanjutnya motor akan merespon dengan putaran yang
berbeda untuk melakukan AGV gerak berbelok menuju kearah yang benar agar didapat kedua
sensor berlogic “1”.
Gambar 17. Cara Kerja Kendali Dasar AGV Line Follower non-PID
Model AGV line follower yang lain yaitu AGV line follower yang tetap tidak menggunakan
kontrol PID, jadi hanya menggunakan pembacaan 8 sensor garis dan arah gerak motor driver.
Untuk prinsip kerja dari AGV line follower basic level 8 sensor garis, yaitu seperti gambar
berikut.
Gambar 18. Pemetaan Sensor Garis untuk Line Follwer
16
Gambar diatas adalah pemetaan sensor garis, dimana sensor diarea “BELOK KIRI” maksudnya
yaitu jika sensor-sensor yang berwarna merah mendeteksi track hitam maka sensor akan
memerintahkan motor driver untuk berbelok kearah kiri. Begitu pula jika sensor-sensor yang
berwarna biru diarea “BELOK KANAN” mendeteksi track hitam maka sensor akan
memerintahkan motor driver untuk berbelok kearah kanan. Untuk sensor diarea “LURUS”
artinya track yang terbaca oleh sensor hitam adalah track lurus yang ditandai dengan
aktifnya dua sensor warna hitam yang berada dibagian tengah, ini memerintahkan driver
untuk gerak lurus yaitu kecepatan motor sama. AGV line follower jenis ini pergerakannya
pada track masih kasar, tidak mulus saat membelok atau menikung, namun jika
yang menggunakan PID akan berjalan mulus seperti kereta api yang berjalan pada tracknya,
saat menikung pun akan terlihat lebih halus dari pada yang tidak menggunakan PID.
2. Aktuator perperan sebagai output merupakan elektromekanik yang memiliki daya gerak, dalam
pembuatan suatu AGV pastilah kita menggunakan aktuator, karena memang aktuator inilah yang
menggerakkan AGV tersebut. Pada umumnya aktuator yang digunakan adalah motor DC magnet
permanen dan biasanya menambahkan gear box. Gear Box tersebut berfungsi sebagai pereduksi
putaran atau rotate per minute (rpm) dari motor dan juga berfungsi menghasilkan kekutan putar
(torsi) yang lebih besar. Perlu diketahui bahwa sebuah AGV tidak hanya memerlukan kecepatam
motor yang tinggi, tetapi juga torsi yang besar. Untuk model AGV tertentu kecepatan motor bahkan
tidak diperlukan, namun lebih diperlukan kemampuan torsi yang besar.
3. Kontroller, bagian ini sebagai pengendali utama (main controller), yaitu mengolah masukkan dari
rangkaian sensor untuk dilakukan operasi program yang selanjutnya memberikan respon ke rangkaian
keluaran pada driver actuator yang selanjutkan akan menggerakkan motor. Secara garis besar cara
kerja kendali AGV line follower dapat digambarkan dalam blok berikut :
Gambar 19. Diagram Blok Kendali AGV Line Follower
17
3.2. Konsep Kendali PID (Proportional-Integral–Derivative)
Pada AGV line follower memiliki beberapa tingkatan level, yaitu level basic dan level
professional atau advance, untuk yang basic yaitu AGV hanya mengandalkan sensor dan
motor driver seperti yang sudah dijelaskan diatas, namun jika level advance atau professional
tidak hanya mengandalkan pembacaan sensor dan motor drive namun juga membutuhkan
rumus agar AGV dapat berjalan stabil dan mulus saat di lintasan, agar lebih jelas berikut
adalah penjelasan prinsip kerja masing-masing level dalam AGV line follower. AGV line
follower yang advance level yaitu AGV line follower yang menggunakan PID kontrol sebagai
pengontrol untuk jalannya AGV. PID adalah Proportional, Integral dan Derivative, secara
sederhana maksud dari Proportional yaitu untuk memperbaiki respon transien, Integral
digunakan untuk menghilangkan error steady state, dan Derivative digunakan untuk
memberikan efek redaman, ketiga faktor tersebut sangatlah penting untuk terciptanya
suatu sistem yang sempurna, baik untuk jalannya AGV saat lurus, mundur atau
berbelok. Kombinasi yang bisa digunakan untuk sebagai sistem kontrol yaitu PI, PD dan
PID, selain dari itu, tidak diperkenankan untuk digunakan karena akan menimbulkan efek
yang tidak diinginkan.
PID merupakan kontroler mekanisme umpan balik yang biasanya dipakai pada sistem kontrol
industri. Sebuah kontroler PID secara kontinyu menghitung nilai kesalahan sebagai beda
antara setpoint yang diinginkan dan variabel proses terukur pada feedback value. Kontroler
mencoba untuk meminimalkan nilai kesalahan setiap waktu dengan penyetelan variabel
kontrol ke nilai baru yang ditentukan oleh formula PID.
Gambar 20. Blok Diagram Kendali PID
18
Definisi-definisi PID
Dalam Kontrol PID ada beberapa istilah-istilah yang digunakan. Berikut adalah istilah-istilah
yang digunakan pada kendali AGV Line follower:
a) Target Position (set-point) adalah untuk mengikuti garis, posisi ini adalah garis tengah.
Di mana akan merepresentasikannya dengan nilai nol.
b) Measured Position (feedback value) adalah seberapa jauh ke kiri atau ke kanan
terhadap garis. Nilai ini dapat negatif atau positif untuk merepresentasikan posisi
relatif terhadap garis.
c) Error adalah perbedaan antara target position dan measured position.
d) Proportional adalah mengukur berapa jauh AGV keluar dari garis. ProPortional
merupakan dasar untuk membaca posisi AGV dengan menggunakan sensor. Semakin
banyak sensor yang terpasang semakin banyak data, maka akan semakin akurat AGV
dapat mengukur posisi AGV di atas garis.
e) Integral adalah mengukur akumulasi error terhadap waktu. Nilai integral naik ketika
AGV tidak berada di tengah garis. Semakin lama AGV tidak berada di tengah garis,
semakin tinggi nilai integral.
f) Derivative adalah mengukur seberapa sering AGV bergerak dari kiri ke kanan atau dari
kanan ke kiri.
g) Faktor P = Kp, adalah konstanta yang digunakan untuk memperbesar dan memperkecil
pengaruh dari ProPortional.
h) Faktor I = Ki, adalah konstanta yang digunakan untuk memperbesar dan memperkecil
pengaruh dari Integral.
i) Faktor D = Kd, adalah konstanta yang digunakan untuk memperbesar dan
memperkecil pengaruh dari Derivative.
Keluaran kendali Proposional (P) memiliki hubungan yang proporsional (seimbang) dengan
error (deviasi). Jika Kp di-set tinggi, tanggapannya cepat, tetapi jika terlalu tinggi sistem
menjadi tidak stabil.
Kendali Integral (I) untuk mengoreksi keluaran dengan mengintegralkan error. Dalam kasus
penyetelan (adjustment) kendali P, error yang besar akan menghasilkan penyetelan keluaran
besar, jika error kecil penyetelan keluaran akan kecil juga. Namun error tidak dapat dibuat
nol, kinerja integral mengkonpensasi masalah ini. Koreksi integral dilakukan dengan
mengakumulasi error disetiap pembacaan PV, sehingga akhirnya deviasi nol. Tidak seperti
19
kendali P, kendali I jarang digunakan sendirian melainkan dikombinasikan dengan dengan
kendali Proporsional atau dengan kendali Proposional Derivative.
Kendali Derivative (D) akan bekerja pada saat peralihan, jika tidak ada perubahan error maka
keluaran kendali nol. Kendali D memiliki aksi meredam sehingga memperbaiki lonjakan, pada
keluaran kendali Derivatif (D) akan proporsional terhadap laju (rate) perubahan error. Seperti
kendali I, kendali D akan dikombinasikan dengan kendali Proporsional atau dengan kendali
Proposional Integral.
Gambar 21. Sinyal Tanggapan Kendali PID
Keluaran sinyal kendali PID dirumuskan:
u(t) = KP · e(t) + KI ·∫e(t)dt + KD · de(t)/dt
Dalam persamaan waktu diskrit maka keluaran sinyal kendali dirumuskan:
PID = Kp · e(k) + Ki · [e(k-1) + e(k)] · Ts + Kd · [e(k) - e(k-1)] / Ts
dimana;
PID = Sinyal keluaran kendali
Kp = Gain proporsional, parameter tuning
Ki = Gain Integral, parameter tuning
Kd = Gain Derivatif, parameter tuning
Ts = waktu cuplik (sampling time)
e(k) = Error (Sp – PV)
e(k-1) = Last Error
Sp = Setpoint
PV = Variabel proses (bobot sensor pembacaan)
20
Dengan Kp, Ki, and Kd, semuanya positif, menandakan koefisien untuk Proporsional, Integral,
dan Derivatif, secara berurutan, pada model ini:
Proporsional (P) bertanggung jawab untuk nilai kesalahan saat ini. Contohnya, jika nilai
kesalahan besar dan positif, maka keluaran kontrol juga besar dan positif.
Integral (I) bertanggung jawab untuk nilai kesalahan sebelumnya. Contoh, jika keluaran saat
ini kurang besar, maka kesalahan akan terakumulasi terus menerus, dan kontroler akan
merespon dengan keluaran lebih tinggi.
Derivatif (D) bertanggung jawab untuk kemungkinan nilai kesalahan mendatang, berdasarkan
pada rate perubahan tiap waktu.
Karena kontroler PID hanya mengandalkan variabel proses terukur, bukan pengetahuan
mengenai prosesnya, maka dapat secara luas digunakan. Dengan penyesuaian (tuning) ketiga
parameter model, kontroler PID dapat memenuhi kebutuhan proses. Respon kontroler dapat
dijelaskan dengan bagaimana responnya terhadap kesalahan, besarnya overshoot dari
setpoint, dan derajat osilasi sistem. penggunaan algoritme PID tidak menjamin kontrol sistem
akan optimum atau stabil. Beberapa aplikasi mungkin hanya menggunakan satu atau dua
term untuk memberikan kontrol sistem yang sesuai. Hal ini dapat dicapai dengan mengontrol
parameter yang lain menjadi nol. Kontroler PID dapat menjadi kontroler PI, PD, P atau I
tergantung aksi apa yang digunakan. Kontroler PI biasanya adalah kontroler paling umum.
Berikut ada beberapa kondisi keluaran dengan menggunakan simulasi system kendali :
a. Kontroler Proportional
Persamaan matematis =
Gambar 22. Blok Diagram Kendali Proposional
21
Gambar 23. Sinyal Tanggapan Kendali Proposional
b. Kontroler Integral
Persamaan matematis :
Gambar 24. Blok Diagram Kendali Integral
Gambar 25. Sinyal Tanggapan Kendali Integral
22
Gambar 26. Sinyal Tanggapan Kendali Integral
c. Kontroler Derivative
Fungsi dari kontroler derivative yaitu;
1. Memberikan efek redaman pada sistem yang berosilasi
2. Memperbaiki respon transien, karena memberikan aksi saat ada perubahan error
3. D hanya berubah saat ada perubahan error, sehingga saat ada error statis D
tidak beraksi.
Persamaan matematis :
Gambar 27. Blok Diagram Kendali Derivative
23
Gambar 28. Sinyal Tanggapan Kendali Derivative
Prinsip Kendali PID pada AGV Line Follower dengan berbagai persamaan matematis diatas
bisa dijelaskan lebih lanjut sebagai berikut, nilai Proporsional (P) kira-kira akan sebanding
dengan posisi AGV terhadap garis. Artinya, jika AGV tepat di tengah garis maka nilai
proporsional tepat 0. Nilai integral mencatat sejarah gerakan AGV, hal ini merupakan jumlah
dari semua nilai proporsional yang dicatat sejak AGV mulai berjalan. Derivatif adalah tingkat
perubahan nilai proporsional. Nilai P.I.D adalah ukuran kesalahan yang ditemui ketika AGV
mengikuti garis. Adapun nilai Kp, Ki dan Kd adalah konstanta proporsional, integral, dan
derivatif sebagai parameter yang kemudian dikalikan dengan kesalahan untuk menyesuaikan
posisi AGV.
d. Menetukan Parameter Nilai Konstanta Kontroler P I D
Untuk menemukan nilai parameter PID: nilai Kp, Ki dan Kd, harus melakukan ujicoba dengan
mengvariasikan nilai ke-3 parameter tersebut, sehingga didapat pergerakan yang baik/stabil
pada segala kondisi. Karena nilai konstanta tersebut akan berbeda-beda pada unit AGV dan
ukuran line yang berbeda. Nilai konstanta PID di masukan secara trial and error, sehingga
proses ini dilakukan dengan metode eksperimental nilai Kp, Ki dan Kd pada formula PID hingga
ditemukan hasil sistem yang stabil. Disarankan mulai dari pemberian nilai dasar pada Driver
Aktuator berupa nilai PWM yang rendah untuk mendapatkan kecepatan motor dasar yang
rendah. Kemudian masukkan nilai Kp dan Kd dengan nilai kecil. Kemudian beranjak kenilai
yang lebih besar dan untuk menghasilkan koreksi yang baik, perlu dikalikan dengan konstanta
yang lebih besar dan dengan demikian, nilai Kp biasannya akan lebih kecil dibandingkan
dengan nilai Kd. Bisa dilakukan dengan mulai hanya dengan Nilai Kp saja, dan kemudian ketika
mendapatkan gerakan yang baik, mulai menambahkan nilai Kd dan lakukan ujicoba tersebut
berulangkali untuk mendapatkan gerakan AGV yang halus dan baik pada segala kondisi
24
lintasan. Demikian juga dalam menentukan nilai Ki seperti yang dilakukan pada proses
mencari nilai Kd. Secara singkat bisa dilakukan langkah-langkah cara untuk masukan Kp, Ki, Kd
kontrol PID pada AGV line follower adalah sebagai berikut:
1. Menggunakan kontrol proporsional terlebih dahulu, dengan mengabaikan konstanta
integratif dan derivatifnya, dengan memberikan nilai nol pada integratif dan derivatif.
2. Menambahkan terus konstanta proporsional maksimum hingga keadaan stabil namun
AGV masih akan berosilasi.
3. Untuk meredam osilasi, maka tambahkan konstanta derivatif dengan membagi dua nilai
proporsional, amati keadaan pergerakan AGV hingga stabil dan lebih responsif.
4. Jika sistem AGV telah stabil, kontrol integratif dapat menjadi opsional, dalam artian jika
ingin mencoba-coba tambahkan kontrol integratif tersebut, namun pemberian nilai
integratif yang tidak tepat dapat membuat pergerakan AGV menjadi tidak stabil.
5. Nilai set point kecepatan dan nilai batas bawah/atas memberikan acuan kecepatan AGV.
6. Nilai time sampling (waktu cuplik) juga mempengaruhi perhitungan PID, saat penggunaan
kontrol integratif dan derivatif.
3.3. Pemprograman P.I.D
Pada pemrograman AGV disini sebagai line follower, pada pelaksanaannya seringkali dijumpai
hasil dengan keadaan yang sangat kurang stabil dan membutuhkan program yang dapat
membantu AGV agar stabil pada saat mengikuti line, maka dari itu dibuatlah program PID
sebagai pembantu AGV menstabilkan diri dalam berjalan mengikuti line yang telah dibuat.
Formula PID akan mengolah bobot error yang diberikan oleh program pemetaan bobot sensor
dan akan menentukan hasil sinyal kendalinya sendiri sesuai dengan bobot sensor yang
terbaca. Program tracking line yaitu program untuk mengambil hasil pembacaan sensor
terhadap line dan program motor drive PID yaitu program yang digunakan untuk
mengendalikan kecepatan motor dengan acuan data hasil pembacaan sensor pada program
tracking line. Kestabilan pergerakan AGV dalam berjalan mengikuti line sangatlah penting
karena apabila pergerakan AGV tidak stabil, maka akan mempengaruhi pada segi keamanan
penggunaan AGV. Untuk mendapatkan kestabilan dalam pergerakan AGV mengikuti line,
diperlukan tuning kontrol PID. Tuning kontrol PID ini bertujuan untuk menentukan parameter
aksi kontrol Proporsional, Integratif, Derivatif pada AGV. Proses ini dapat dilakukan dengan
cara trial and error, seperti yang sudah dijelaskan diatas dalam menentukan nilai parameter
25
Kp, Ki dan Kd. Keunggulan cara ini yaitu tidak perlu mengidentifikasi plant, membuat model
matematis plant, menentukan parameter plant dengan grafis ataupun analitis. Jika berbicara
kontrol AGV line follower dengan PID maka bukanlah kontrol PID yang sebenarnya sebab pada
AGV line follower elemen ukur (sensor) sebagai umpan balik (feedback) tidak terdapat pada
plant (motor penggerak) dari AGV, yang seharusnya adalah sensor terdapat di plant (motor
penggerak), dengan contoh tachometer atau encoder yang terletak pada motor. sedangkan
pada AGV line follower sensor berupa pendeteksi garis (tidak terletak pada plant) dan dari
hasil kondisi garis tersebut barulah dikontrol ke motor (plant), walaupun begitu kontrol PID
masih dapat diterapkan untuk mengendalikan AGV line follower. Berikut dijelaskan
penggunaaan istilah pada persamaan kendali PID yang akan digunakan.
1. SP = Set Point, merupakan suatu parameter nilai acuan atau nilai yang diinginkan.
2. PV = Present Value, nilai bobot pembacaan sensor saat itu atau variabel terukur yang
diumpan balikan oleh sensor sebagai sinyal feedback.
3. Error = nilai kesalahan, deviasi atau simpangan antar variabel terukur atau bobot sensor
(PV) dengan nilai acuan (SP), dimana nilai Error = SP – PV
4. Nilai Sekarang: Nilai saat ini yg merupakan pembacaan sensor sesaat.
Setelah memahami alur pengendalian PID, berikut ilustrasi pemberian bobot sensor (nilai
kesalahan pembacaan sensor) pada AGV yang akan dibuat:
Gambar 29. Ilustrasi Pemberian Bobot Sensor
26
Gambar di atas merupakan ilustrasi pemberian bobot sensor di mana nilai dari boot sensor
tersebut berdasarkan posisi sensor membaca line yang telah ditentukan.
Proses pemberian bobot sensor dapat dilakukan dengan proses pemetaan
(mapping) pembacaan sensor terhadap line, berikut salah satu sampel proses mapping
sensor dengan jumlah sensor sebanyak 8 buah seperti pada gambar diatas :
0 0 1 1 1 1 1 1 >> (PV= +3)
1 0 0 1 1 1 1 1 >> (PV= +2)
1 1 0 0 1 1 1 1 >> (PV= +1)
1 1 1 0 0 1 1 1 >> (PV= 0)
1 1 1 1 0 0 1 1 >> (PV= -1)
1 1 1 1 1 0 0 1 >> (PV= -2)
1 1 1 1 1 1 0 0 >> (PV= -3)
Tabel 1. Pemetaan Bobot Sensor
Nilai “0” merepresentasikan sensor mengenai garis dan nilai “1” berarti diluar garis. Kondisi
ideal AGV terjadi saat kondisi AGV pada PV = 0 (ditunjukan diatas kondisi nilai sensor =
11100111). Jika PV tidak sama dengan 0 berarti AGV tidak berada pada kondisi ideal dan
artinya ada sinyal kesalahan (error). Pada kondisi error inilah formula PID akan menentukan
hasil perhitungan untuk memberikan sinyal kendali yang mengkondisikan nilai keluaran ke
masing-masing driver motor.
Untuk contoh aplikasi PID pada sensor AGV line follower yaitu seperti yang di ilustrasikan
pada gambar diatas, misal nilai awal PWM normal = 20 (base-speed). Maksud dari gambar
diatas yaitu terdapat kecepatan awal sebesar 20 yang mana kecepatan penuh dari driver
motor untuk memutarkan motor pada AGV, terdapat nilai 0 pada dua sensor yang terdapat
pada bagian tengah, artinya pada saat kedua sensor tengah ini aktif (PV= 0), motor driver
tidak mengurangi kecepatan pada PWM yang ada pada motor driver sehingga nilainya tetap
20 untuk PWM driver A demikian juga PWM B bernilai 20. Namun jika sensor yang kedua
aktif pada bagian kanan (PV= -1), maka terdapat nilai hasil perhitungan PID = -5 yang artinya
untuk PWM A bernilai 15 (20 – 5) dan PWM B tetap bernilai 20, ini mengakibatkan AGV akan
berbelok ke kanan sedikit karena kecepatan PWM A tidak sama dengan PWM B, selanjutnya
jika sensor ke tiga kanan yang aktif maka akan dikurangi dengan nilai -10 dari hasil
perhitungan PID, sehingga menghasilkan PWM A bernilai 10 (20-10) dan PWM B tetap 20,
27
ini mengakibatkan AGV berbelok ke kanan lebih dalam, jika yang terkena itu adalah sensor
ke-empat kanan maka hasil perhitungan PID bernilai -20 maka nilai PWM A bernilai 0 (20-20)
dan PWM B bernilai 30, sehingga roda kanan akan berhenti karena PWM A = 0 dan roda kanan
akan berjalan karena nilainya tetap 20, ini mengakibatkan AGV berbelok tajam kearah kanan,
begitu pula prinsip kerja untuk sensor pada bagian kiri. Itulah penjelasan singkat mengenai
PID kontrol yang biasa digunakan sebagai penyempurna dari sebuah output sistem, sehingga
sistem dapat berjalan secara stabil dengan sedikit error dan kesalahan.
A. Perencanaan Program PID
Sebagai dasar pembuatan program PID ada beberapa tahapan yang bisa dimulai dengan penggunaan
perhitungan sederhana Proposional dan Derivative, yaitu melakukan :
Tugas pertama adalah menghitung kesalahan. Ini juga bisa disebut nilai proporsional yaitu
proporsional dengan posisi AGV terhadap garis. Sebagai contoh diatas bila kumpulan sensor
akan memberikan nilai maksimal hingga minimal adalah 0 – 128, maka didapat sebagai nilai
setpoint adalah 64. Perhitungan nilai Error = Nilai Setpoint - Nilai Sekarang = 64 – posisi.
Penempatan sensor tujuan adalah untuk mencapai keadaan kesalahan nol dalam persamaan
PID. Sensor yang memberikan pembacaan posisi 64 berarti AGV berada ditempat yang
ideal/tengah garis. Sehingga bila nilai pembacaan dimasukkan pada perhitungan diatas, akan
didapat nilai 0, yaitu Error = 64 - position = 64 - 64 = 0.
Tugas kedua adalah menentukan kecepatan motor dan arah yang disesuaikan.
int error = 64-position;
int motorSpeed = Kp * error + Kd * (error - lastError);
lastError = error;
int rightMotorSpeed = rightBaseSpeed + motorSpeed;
int leftMotorSpeed = leftBaseSpeed - motorSpeed;
Beberapa Jenis Kesalahan dalam Kendali PID
Kadang muncul kesalahan kecil di bagian persamaan PID bisa menjadi masalah besar. Sebagai
contoh, menggunakan persamaan error = 64 – posisi, ini berfungsi untuk pengikut garis
mengikuti garis putih pada latar belakang hitam. Jika garis yang dimiliki adalah garis hitam
pada latar belakang putih, mungkin perlu menggunakan persamaan error = position – 64. Hal
lain yang mungkin muncul adalah jika AGV berada pada posisi 128 yang berarti AGV berada
pada posisi paling kanan. Namun roda AGV masih terus berputar sehingga AGV terus bergerak
28
kekanan, hal ini bisa dilakukan penyesuaian pada persamaan gerakan putaran motor.
Sehingga persamaan bisa ditambahkan persamaan lain pada PID untuk bisa mendapatkan
putaran roda yang benar dan sesuai kondisinya, seperti pada formula berikut
RightMotorSpeed = RightBaseSpeed + MotorSpeed; ( + might need to be changed to - )
LeftMotorSpeed = LeftBaseSpeed - MotorSpeed; ( - might need to be changed to + )
Pada pemetaan bobot sensor di atas terdapat kondisi pembacaan sensor yang ditunjukkan
dengan 8 bilangan biner di mana bilangan tersebut mewakili kondisi pembacaan sensor
terhadap line warna hitam. Kemudian terdapat kolom PV yang merupakan nilai bobot sensor
yang digunakan oleh program AGV untuk berjalan menggikuti line. Secara lengkap dan
bertahap dapat dituliskan program PID untuk gerakan AGV Line follower, sebagai berikut :
B. Kendali Proportional
Kondisi ideal pada AGV adalah bergerak maju lurus mengikuti garis, dengan kata lain PV = 0
(nilai sensor = 11100111). Dari sini dapat diasumsikan bahwa Set Point (SP) / kondisi ideal
adalah saat SP = 0. Dengan mengetahui besar error, mikrokontroler dapat memberikan nilai
PWM motor kiri dan kanan yang sesuai agar dapat menuju ke posisi ideal (SP = 0). Besarnya
nilai PWM ini dapat diperoleh dengan menggunakan kontrol Proporsional (P), di mana diawali
dengan perhitungan P = error x Kp (Kp adalah konstanta proporsional yang nilainya di set
sendiri dari hasil tuning).
Perhitungan Kontroler Proporsional
Sp_sensor = 0 ‘setpoint sensor
Error = Sp_sensor – PV ‘nilai error
P = Error*Kp ‘proporsional kontrol
Aplikasi kontrol proporsional pada PWM ialah sebagai berikut:
Pwm1 = Sp_kecepatan + P ‘motor kiri
Pwm2 = Sp_kecepatan – P ‘motor kanan
C. Kendali Derivatif
Jika pergerakan AGV masih terlihat bergelombang, dapat ditambahkan kontrol Derivatif (D).
Kontrol D digunakan untuk mengukur seberapa cepat AGV bergerak dari kiri ke kanan atau
dari kanan ke kiri. Semakin cepat bergerak dari satu sisi ke sisi lainnya, maka semakin besar
nilai D. Konstanta D (Kd) digunakan untuk menambah atau mengurangi imbas dari derivatif.
29
Dengan mendapatkan nilai Kd yang tepat pergerakan sisi ke sisi yang bergelombang akibat
dari kontrol proporsional bisa diminimalisasi. Nilai D didapat dari D = Kd/Ts*rate, di mana Ts
ialah time sampling atau waktu cuplik. Adapun rate didapat dari error – last_error, dalam
program nilai error (SP – PV) dan error saat itu menjadi nilai last_error. Untuk menambahkan
kontrol D, program dimodifikasi menjadi:
Perhitungan Kontroler Proporsional + Derivatif
Sp_sensor = 0 ‘setpoint sensor
Error = Sp_sensor – Pv ‘nilai error
P = Kp * Error ‘proporsional kontrol
D1 = Kd * 10 ‘derivatif kontrol
D2 = D1 / Ts
D3 = Error – Last_error ‘rate
D = D2 * D3
Last_error = Error ‘error lampau
Pd = P + D ‘proporsional-derivatif kontrol
Aplikasi kontrol proporsional dan drivatif pada PWM ialah sebagai berikut:
Pwm1 = Sp_kecepatan + Pd ‘motor kiri
Pwm2 = Sp_kecepatan – Pd ‘motor kanan
D. Kendali Integral
Bila kendali P + D sudah membuat pergerakan AGV cukup smooth, maka penambahan
Integratif menjadi opsional. Jika ingin mencoba-coba bisa ditambahakan kendali Integratif (I).
I digunakan untuk mengakumulasi error dan mengetahui durasi error. Dengan
menjumlahkan error disetiap pembacaan PV akan memberikan akumulasi offset yang harus
diperbaiki sebelumnya. Saat AGV bergerak menjauhi garis, maka nilai error akan bertambah.
Semakin lama tidak mendapatkan SP, maka semakin besar nilai I. Dengan mendapatkan nilai
Ki yang tepat, imbas dari Integratif bisa dikurangi. Nilai akumulasi error = error + last_error.
Untuk menambahkan kontrol I, maka program di modifikasi menjadi:
Perhitungan Kontroler Proporsional + Integratif + Derivatif
Sp_sensor = 0 ‘setpoint sensor
Error = Sp_sensor – Pv ‘nilai error
P = Kp * Error ‘proporsional kontrol
D1 = Kd * 10 ‘derivatif kontrol
D2 = D1 / Ts
D3 = Error – Last_error ‘rate
30
D = D2 * D3
I1 = Ki / 10 ‘integratif kontrol
I2 = Error + Last_error ‘akumulasi error
I3 = I1 * I2
I = I3 * Ts
Last_error = Error ‘error lampau
Pd = P + D ‘proporsional-derivatif kontrol
Pid = Pd+I ‘proporsional-integratif-derivatif
Aplikasi kontrol proporsional, integratif dan drivatif pada PWM ialah sebagai
berikut:
Pwm1 = Sp_kecepatan + Pid ‘motor kiri
Pwm2 = Sp_kecepatan – Pid ‘motor kanan
E. Berikut flowchart perancangan program AGV
Gambar 30. Flowchart perancangan program AGV
31
Saat mengaktifkan tombol ON pada AGV, maka AGV akan langsung mendeteksi jalur yang
terbaca pada sensor yang digunakan sebagai pemandu AGV dalam melakukan pergerakan,
sensor akan mengirimkan logika 0 pada pin alamat masing-masing sensor dan pergerakan
driver AGV akan mengikuti jalur yang ada. AGV dapat menentukan suatu pilihan jalur yaitu
akan berbelok kekanan atau kekiri serta pilihan lurus bila menemui jalur perempatan. Untuk
menghentikannya cukup dengan menekan tombol stop.
32
Bab 4. Metode Reroute AGV
Jika ke delapan sensor tersebut pada contoh di atas semuanya tidak aktif (11111111), maka
dapat diperkirakan AGV tersebut berada di luar lintasan, dikarenakan tidak adanya satu
sensorpun yang aktif. Biasanya untuk permasalahan seperti ini, AGV diprogram untuk
berjalan mundur sampai salah satu sensor aktif, jadi AGV dapat berada dalam lintasan
kembali, untuk meneruskan perjalanan. Namun yang kami jelaskan dibawah ini adalah
metode kembali ke lintasan (Reroute) dengan menggunakan menggunakan memori data
sensor aktif terakhir yang terbaca untuk digunakan pengambilan keputusan mikrokontroler
melakukan putaran parabolik.
Ganbar 31. Model Reroute AGV belok kanan
Pada gambar 31 diatas, memperlihatkan adanya pergerakan AGV yang seharusnya belok ke
kanan namun yang terjadi adalah AGV berjalan lurus. Kesalahan ini bisa terjadi karena
kecepatan motor yang terlalu tinggi dan tidak bisa direspon oleh mikrokontroler untuk
33
memerintahkan belok ke kanan, atau sebab lain. Untuk mengatasi hal tersebut kita harus
memberikan dulu tanda atau pemetaan sensor yang digunakan. Seperti pada gambar di
bawah ini terdapat 8 sensor dengan identitas sebagai berikut :
Gambar 32. Sensor Line Follower
Barisan atas pada sensor adalah bagian penerima (Receiver/Rx), dan barisan bawah adalah
bagian pengirim (Transmiter/Tx).
Sensor berwarna merah no 1, 2, 3 adalah sensor yang bertugas untuk memberikan respon
agar AGV berbelok ke kiri apabila dia mendeteksi garis.
Sensor berwarna hitan no 4 dan 5 adalah sensor yang bertugas untuk memberikan respon
agar AGV lurus apabila dia mendeteksi garis.
Sensor berwarna biru no 6 , 7, 8 adalah sensor yang bertugas untuk memberikan respon
agar AGV berbelok ke kanan apabila dia mendeteksi garis.
Pada saat AGV mengalami kesalahan jalur seperti pada gambar 31 diatas maka dapat dibuat
siklus pergerakan sensor secara tahap per tahap seperti gambar 33 dibawah ini. Pada saat
posisi S1 maka AGV masih dalam jalur dan pada posisi S2 adalah posisi terakhir sensor
mengenai jalur/line, adapun yang terakhir mendeteksi jalur adalah sensor no 8. Seharusnya
AGV adalah belok ke kanan namun AGV tetap melakukan gerakan lurus dan pada posisi S3
akhirnya AGV dalam kondisi keluar jarus dimana seluruh sensor tidak ada yang mendeteksi
jalur. Maka apabila hal tersebut terjadi program mikrokontroler melakukan proses
mengambil data sensor terakhir yang dibaca, dalam hal ini adalah sensor biru no 8.
Selanjutnya AGV akan diperintahkan untuk melakukan pergerakan membelok ke arah kanan
mengikuti grafik parabolik hingga sensor no 8 menemukan jalur dan AGV akan berbelok ke
kiri untuk melanjutkan perjalanan.
34
Gambar 33. Siklus Reroute ke kanan
Pada kasus yang lain adalah saat AGV mengalami kesalahan jalur seperti pada gambar 34
dibawah, maka dapat dibuat siklus pergerakan sensor secara tahap per tahap seperti gambar
35. Pada saat posisi S1 maka AGV masih dalam jalur dan pada posisi S2 adalah posisi terakhir
sensor mengenai jalur/line, adapun yang terakhir mendeteksi jalur adalah sensor no 1.
Seharusnya AGV adalah belok ke kiri namun AGV tetap melakukan gerakan lurus dan pada
posisi S3 akhirnya AGV dalam kondisi keluar jarus dimana seluruh sensor tidak ada yang
mendeteksi jalur. Maka apabila hal tersebut terjadi program mikrokontroler melakukan
proses mengambil data sensor terakhir yang dibaca, dalam hal ini adalah sensor biru no 1.
Selanjutnya AGV akan diperintahkan untuk melakukan pergerakan membelok ke arah kiri
mengikuti grafik parabolik hingga sensor no 1 menemukan jalur dan AGV akan berbelok ke
kanan untuk melanjutkan perjalanan.
35
Gambar 34. Model Reroute AGV belok kiri
Gambar 35. Siklus Reroute ke kanan
36
Pada Gambar 36 dibawah, memberikan gambaran pergerakan AGV yang seharusnya adalah lurus,
namun melakukan penyimpangan kearah kanan sehingga keluar jalur dan mengakibatkan seluruh
sensor tidak dapat mendeteksi jalur. Maka pada Gambar 36 yang berada disampingnya adalah gambar
siklus tahap per tahap bagaimana AGV melakukan Reroute untuk kembali ke jalur perjalanannya. Yaitu
pada saat posisi di S2 terlihat bahwa AGV terakhir mendeteksi jalur dengan sensor no 1, maka ketika
AGV meninggalkan jalur kearah kanan posisi S3, maka mikrokontroler memberikan perintah ke AGV
untuk melakukan pergerakan belok kearah kiri secara parabolic. Gerakan belok ini hingga sensor no
1 kembali mendeteksi jalur, yang selanjutnya AGV merubah gerakan untuk belok kiri dan melanjutkan
perjalanan.
Gambar 36. Gerak lurus AGV melakukan Reroute arah kanan.
37
Pada Gambar 37 berikutnya adalah memberikan gambaran sebaliknya dari gambar 36 diatas yaitu
pergerakan AGV yang seharusnya adalah lurus, namun melakukan penyimpangan kearah kiri sehingga
keluar jalur dan mengakibatkan seluruh sensor tidak dapat mendeteksi jalur. Maka pada Gambar 37
yang berada disampingnya adalah gambar siklus tahap per tahap bagaimana AGV melakukan Reroute
untuk kembali ke jalur perjalanannya. Yaitu posisi S1 AGV masih berada posisi yang benar, namun
pada saat posisi di S2 terlihat bahwa AGV mulai mengalami penyimpangan dan terakhir mendeteksi
jalur dengan sensor no 8. Maka ketika AGV meninggalkan jalur kearah kiri posisi S3, mikrokontroler
memberikan perintah ke AGV untuk melakukan pergerakan belok kearah kanan secara parabolic.
Gerakan belok ini hingga sensor no 8 kembali mendeteksi jalur, yang selanjutnya AGV merubah
gerakan untuk belok kanan dan melanjutkan perjalanan.
Gambar 37. Gerak lurus AGV melakukan Reroute arah kiri.
Reroute selanjutnya seperti terlihat pada Gambar 38, adalah apabila terjadi penyimpangan gerakan
AGV hingga keluar jalur yang sudah terlalu jauh sehingga langkah Reroute tahap 1 dengan melakukan
sekali rotasi ini gagal, yaitu sensor belum bisa menemukan jalur. Hal ini bisa disebabkan karena
Gerakan AGV yang terlalu cepat sehingga pada saat meninggalkan jalurpun terlalu jauh. Untuk hal itu,
38
mikrokontroler perlu melakukan Reroute tahap 2 dimana gerakan rotasi kedua ini menggunakan
diameter jalur rotasi yang lebih lebar. Pada kasus ini akan menjadi mudah bila AGV mengfusikan
encoder pada motornya sehingga feedback untuk mengetahui apakah AGV sudah melakukan satu
rotasi atau belum akan lebih presisi. Dan untuk mulai melakukan Gerakan menambah diameter rotasi,
seperti pada Gerakan dari P7 ke P8 adalah dengan menambah nilai 5% PWM pada driver motor
sebelah kiri, adapun nilai PWM pada driver motor sebelah kanan tetap. Sehingga bila sudah
mendeteksi jalur Kembali pada P11, maka AGV akan berbelok kearah kanan.
Gambar 38. Model AGV melakukan 2 tahap Reroute
39
Bab 5. Konsep Pembuatan AGV
5.1. Pembuatan Rangkaian Elektrik AGV
Pembuatan rangkaian elektrik pada AGV ini digunakan Arduino sebagai piranti proses yang
akan mengolah data pembacaan dari sensor TCRT5000 sebagai mengatur gerakan dan
kecepatan motor melalui driver motor. Penjelasan masing-masing komponen elektrik AGV
Line Follower, dapat dijelaskan sebagai berikut :
A. Mikrokontroler
Mikrokontroler yang berperan sebagai “otak” pengendali AGV ini menggunakan Arduino
Mega 2560 dan yang kami gunakan dan saat ini tersedia tidak lagi menggunakan chip FTDI
untuk fungsi USB to Serial Converter seperti pada chip ATmega8u2 pada Ver 1 dan Ver 2,
melainkan menggunakan chip ATmega16u2 pada Ver 3. Secara fisik, ukuran Arduino Mega
2560 kurang lebih 2 kali lebih besar dari Arduino Uno, ini untuk mengakomodasi lebih
banyaknya pin Digital dan Analog pada board Arduino Mega 2560 tersebut. Arduino Mega
2560 mempunyai 4 port serial. Ukuran Flash Memory yang lebih besar kapasitasnya
memungkinkan pembuatan program yang dibuat hingga sebesar 256KB. Pengembangan
mikrokontroller Arduino Mega 2560 dapat digunakan pada aplikasi Arduino IDE. Aplikasi IDE
itu merupakan kependekan dari Integrated Developtment Enviroenment. Arduino
menggunakan bahasa pemrograman sendiri yang menyerupai bahasa C. Arduino IDE dibuat
dari bahasa pemrograman JAVA. Arduino IDE juga dilengkapi dengan library C/C++ yang biasa
disebut wiring yang membuat operasi input dan output menjadi lebih mudah. Arduino IDE ini
dikembangkan dari software Processing yang dirombak menjadi Arduino IDE khusus untuk
pemrograman dengan Arduino.
40
Gambar 39. Mikrokontroler Arduino Mega
B. MotorDC
Motor listrik DC ini bertugas untuk menggerakkan AGV kearah yang telah ditentukan oleh
mikrokontroler. Kebutuhan gaya untuk menggerakkan AGV harus disesuaikan dengan torsi
motor DC yang digunakan, sebab apabila tidak sesuai maka AGV tidak dapat bergerak atau
sebaliknya akan menjadi overspec yang berujung tidak efisien. Saat ini berkembang motor DC
dengan jenis Planetary gearbox, bahkan sudah dilengkapi dengan sensor putaran berupa
encoder.
Gambar 40. Motor Planetary Gearbox
41
C. Driver Motor
Driver motor merupakan rangkaian yang menghubungkan mikrokontroller dengan motor.
Driver motor berfungsi sebagai piranti yang bertugas untuk menjalankan motor baik
mengatur arah putaran motor maupun kecepatan putar motor, dengan memisahkan catu
daya antara mikrokontroller dan motor. Hal ini perlu dipisahkan karena arus serta tegangan
yang dikeluarkan oleh mikrokontroller tidak bisa memenuhi kebutuhan motor. Salah satu
jenis driver motor adalah : Driver H-Bridge, Driver type H digunakan untuk mengontrol
putaran motor yang dapat diatur arah putarannya CW (searah jarum jam) maupun CCW
(berlawanan jarum jam). Adapun untuk mengatur kecepatan putaran motor adalah dengan
mengatur besaran nilai tegangan input driver atau dengan mengatur nilai-nilai PWM (Pulse
Width Modulation), yaitu mengatur duty cycle dari pulsa yang diberikan. Untuk pengendalian
motor DC dengan metode PWM pada rangkaian driver motor DC H-bridge ini kecepatan
putaran motor DC dapat dihasilkan pengendalian dengan baik. Apabila menggunakan metode
logika TTL “0” dan “1”, maka rangkaian ini hanya dapat mengendalikan arah putaran motor
DC saja dengan kecepatan putaran motor DC maksimum. Rangkaian driver motor DC H-Bridge
ini menggunakan rangkaian jembatan power driver berupa transistor 4 unit semua berjenis
NPN atau dengan susunan bisa 2 jenis NPN dan 2 buah jenis PNP. Untuk lebih aman rangkaian
dilengkapi dengan proteksi impuls tegangan induksi motor DC berupa dioda yang dipasang
paralel dengan masing-masing transistor secara reverse bias.
Gambar 41. Rangkaian Driver H-Bridge
42
Gambar 42. Driver Single Motor BTS 7960
D. Sensor
Sensor yang digunakan pada AGV Line Follower adalah sensor garis. Type Sensor garis dengan
seri TCRT5000 adalah sensor reflektif atau pantulan yang dibuat dengan sebuah Infrared
sebagai pemancar (Tx) dan foto transistor sebagai penerima (Rx). Prinsip sensor TCRT5000
adalah mendeteksi warna berdasarkan penyerapan warna dan intensitas pematulan sinar
infra merah yang dipancarkan oleh transmiter (IR led) dan diterima oleh receiver (foto
transistor). Dari perbedaan identitas tersebut digunakan sebagai bias pada basis foto
transistor yang terkandung didalam sensor TCRT5000. Sensor TCRT5000 sering digunakan
untuk membaca benda dengan memanfaatkan pantulan cahaya, ketika pantulan cahaya
infrared dinilai kurang atau tidak ada (pada objek berwarna gelap atau hitam), foto transistor
tidak aktif dan terminal output dari modul akan memberikan nilai HIGH. Jika terdapat
pantulan cahaya yang dinilai memadai (pada permukaan terang atau putih) maka intensitas
cahaya yang dipantulkan dan diterima oleh foto transistor menjadi cukup besar untuk berada
dalam kondisi nyala dan terminal output pada modul akan memberikan nilai LOW (indikator
led akan menyala).
Gambar 43. Sensor garis/jalur TCRT5000
43
E. Baterai
Baterai adalah perangkat yang mengandung sel listrik didalamnya dan dapat menyimpan
energi yang dapat dikonversi menjadi daya. Baterai berfungsi sebagai sumber tenaga listrik.
Baterai yang digunakan pada AGV menggunakan baterai Lithium Polymer (Li-Po) 6S (22,2 V)
berkapasitas 5000 mAh. Baterai Lithium Polymer (Li-Po) tidak menggunakan cairan sebagai
elektrolit melainkan menggunakan elektrolit polimer kering yang berbentuk seperti lapisan
film tipis, disusun berlapis-lapis diantara anoda dan katoda yang mengakibatkan pertukaran
ion. Metode seperti ini membuat baterai Li-Po dapat dibuat berbagai bentuk dan ukuran.
Gambar 44. Baterai LiPo
F. Konverter DC-DC Step Up/Down Voltage
Gambar 45. Konverter DC-DC Step Up/Down
Modul konventer DC ke DC (DC-DC Converter) ini menggunakan IC LM2596S yang merupakan
Integrated Circuit (IC) untuk mengubah tingkatan tegangan (voltage level) arus searah / Direct
44
Curent (DC) menjadi lebih rendah dibanding tegangan masukannya. Pengubah daya DC-DC (DC-
DC Converter) tipe peralihan atau dikenal juga dengan sebutan DC Chopper dimanfaatkan terutama
untuk penyediaan tegangan keluaran DC yang bervariasi besarannya sesuai dengan permintaan pada
beban. Daya masukan dari proses DC-DC tersebut adalah berasal dari sumber daya DC yang biasanya
memiliki tegangan masukan yang tetap. Secara umum ada dua fungsi pengoperasian dari DC Chopper
yaitu penaikan tegangan dimana tegangan keluaran yang dihasilkan lebih tinggi dari tegangan
masukan, dan penurunan tegangan dimana tegangan keluaran lebih rendah dari tegangan masukan.
Komponen yang digunakan untuk menjalankan fungsi penghubung tersebut tidak lain adalah switch
(solid state electronic switch) seperti misalnya Thyristor, MOSFET, IGBT, GTO.
5.2. Wiring Diagram Kontroler AGV Line Follower 2 Roda Penggerak.
Gambar 46. Diagram Pengkabelan Rangkaian Daya AGV
45
Gambar 47. Diagram Pengkabelan Rangkaian I/O Mikrokontroler
46
Bab 6. PENUTUP
Kesimpulan
1. Automatic Guided Vehicle (AGV) berbasis Line Follower adalah AGV dengan navigasi
berupa garis/line sebagai jalur, baik gerakan lurus dan berbelok serta mampu bekerja
sesuai dengan rencana yang dibuat diawal desain. Dalam hal diatas menggunakan
garis yang berbeda warna secara kontras antara jalur (hitam) dan diluar jalur
(terang/putih).
2. Untuk menghasilkan pengedalian pergerakan AGV yang stabil dan presisi terhadap
garis/line jalur adalah menggunakan Kendali Proposional Integral Derivative (PID
Control).
3. Ada dua jenis Roda Penggerak yaitu 2 roda dan 4 roda yang bisa sekaligus sebagai
steering AGV.
4. Metode Reroute adalah salah satu cara untuk mengembalikan penyimpangan
pergerakan AGV yang tidak sesuai dengan rute yang telah ditentukan di awal desain.
47
DAFTAR PUSTAKA
[1] Ogata, Katsuhiko. 1997. Teknik Kontrol Automatik Jilid 1. Jakarta: Penerbit Erlangga
[2] Pakdaman,M.Sanaatiyan,M.M.,"Design and Implementation of Line Follower Robot,", Second
International Conference on Computer and Electrical Engineering TCCEE '09, vol.2, pp.585590,
Dec.2009.
[3] https://en.wikipedia.org/wiki/PID_controller
[4] http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction§ion=ControlPID
[5] https://www.researchgate.net/figure/Vehicle-motion-according-to-the-direction-and-angular-
speed-of-the-wheels-6_fig4_233867057/download
[6] https://www.researchgate.net/figure/H-Bridge-motor-drive-circuit-for-one-DC-motor-The-
infrared-communication-module-is_fig3_221915427
[7] https://circuitdigest.com/microcontroller-projects/line-follower-robot-using-arduino
[8] https://easyeda.com/GATSAN/DIY_Line_Follower_Robot-8fc88c7a7021462eb5941adca1d404f1
[9] https://tutorial.cytron.io/2015/07/31/line-following-robot-using-lsa08-digital-mode/
[10] https://www.elektroindonesia.com/elektro
48
LAMPIRAN
Program Bascom AVR
Penjelasan di bagian ini akan diberikan program untuk pembuatan AGV line follower basik
untuk 2 roda penggerak dan 4 roda penggerak, sehingga akan menemukan perbedaan yang
jelas antara keduanya, disarankan untuk diawali pembuatan AGV line follower yang 2 roda
untuk menghindari kerumitan dan ketidakpahaman akan program PID dan alur eksekusinya.
/*****************************************************************
PROGRAM UTAMA AGV 2 WHEEL
*****************************************************************/
//MOTOR 1
#define M1rpwm 2
#define M1lpwm 3
//MOTOR 2
#define M2rpwm 4
#define M2lpwm 5
//kondisi awal pwm motor -------------------------------------------------------------------------------------------------
---------------------------------------------------------------------
int PWM_M1 = 0;
int PWM_M2 = 0;
//inisialisasi port tombol ----------------------------------------------------------------------------------------------------
------------------------------------------------------------------
const int Start = 20;
const int Stop = 21;
//Inisialisasi INDIKATOR -----------------------------------------------------------------------------------------------------
------------------------------------------------------------------
const int onn = 6; //robot jalan
const int off = 7; //robot stop
49
//inisIalisasi obstacle sensor ------------------------------------------------------------------------------------------------
----------------------------------------------------------------------
const int obstacle_1 = 16; //tx2
//inisialisasi pin sensor -------------------------------------------------------------------------------------------------------
---------------------------------------------------------------
const int sensor7 = 23;
const int sensor6 = 25;
const int sensor5 = 27;
const int sensor4 = 29;
const int sensor3 = 31;
const int sensor2 = 33;
const int sensor1 = 35;
const int sensor8 = 37;
const int sensor15 = 39;
const int sensor14 = 41;
const int sensor13 = 43;
const int sensor12 = 45;
const int sensor11 = 47;
const int sensor10 = 49;
const int sensor9 = 51;
//inisialisasi value sensor ----------------------------------------------------------------------------------------------------
------------------------------------------------------------------
int PV1 = 0;
int PV2 = 0;
int PV3 = 0;
int PV4 = 0;
int PV5 = 0;
int PV6 = 0;
int PV7 = 0;
50
int PV8 = 0;
int PV9 = 0;
int PV10 = 0;
int PV11 = 0;
int PV12 = 0;
int PV13 = 0;
int PV14 = 0;
int PV15 = 0;
//inisialisasi value sensor kiri kanan tengah ----------------------------------------------------------------------------
---------------------------------------------------------------------
int PVL = 0;
int PVR = 0;
//kondisi terakhir pembacaan sensor ------------------------------------------------------------------------------------
-----------------------------------------------------------------------
int LAST = 0;
//Inisialisasi PID ----------------------------------------------------------------------------------------------------------------
------------------------------------------------------------
unsigned long LAST_COMPUTE = millis();
unsigned long DT = 10;
float PV = 0;
float ERR = 0;
float ERR_LAST = 0;
float INTEGRAL = 0;
float DERIVATIVE = 0;
float KP = 15;
float KI = 0.15;
float KD = 10000;
int AGVON = 0;
int AGVON_last = 0;
51
int MAX_PID = 8000;
int MAX_PWM = 255;
int MAX_KECEPATAN = 0;
int SPEED = 40;
int HITUNG_PID = 0;
int PID = 0;
int PID_M1 = 0;
int PID_M2 = 0;
int PID_LAST = 0;
int PID_START_MAX = MAX_PID;
int PID_START_MIN = -MAX_PID;
//inisialisai mode --------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------
int Mode = 0;
int Modecabang = 0;
int x = 0;
int y = 0;
boolean parsing = false;
//INISIALISASI KONDISI AGV ------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------
String AGVstate = "OFF";
String AGVstate_last = "OFF";
int obstaclee = 0;
int obstaclee_last = 0;
int CWM = 0;
int CWM_last = 0;
void setup() {
52
//set pin motor
pinMode(M1rpwm, OUTPUT);
pinMode(M1lpwm, OUTPUT);
pinMode(M2rpwm, OUTPUT);
pinMode(M2lpwm, OUTPUT);
//set pin tombol
pinMode(Start, INPUT_PULLUP);
pinMode(Stop, INPUT_PULLUP);
//set pin indikator
pinMode(onn, OUTPUT);
pinMode(off, OUTPUT);
//set pin obstacle
pinMode(obstacle_1, INPUT);
//set pin sensor sebagai input
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(sensor3, INPUT);
pinMode(sensor4, INPUT);
pinMode(sensor5, INPUT);
pinMode(sensor6, INPUT);
pinMode(sensor7, INPUT);
pinMode(sensor8, INPUT);
pinMode(sensor9, INPUT);
pinMode(sensor10, INPUT);
pinMode(sensor11, INPUT);
pinMode(sensor12, INPUT);
pinMode(sensor13, INPUT);
53
pinMode(sensor14, INPUT);
pinMode(sensor15, INPUT);
//set Low semua sensor
digitalWrite(sensor1, LOW);
digitalWrite(sensor2, LOW);
digitalWrite(sensor3, LOW);
digitalWrite(sensor4, LOW);
digitalWrite(sensor5, LOW);
digitalWrite(sensor6, LOW);
digitalWrite(sensor7, LOW);
digitalWrite(sensor8, LOW);
digitalWrite(sensor9, LOW);
digitalWrite(sensor10, LOW);
digitalWrite(sensor11, LOW);
digitalWrite(sensor12, LOW);
digitalWrite(sensor13, LOW);
digitalWrite(sensor14, LOW);
digitalWrite(sensor15, LOW);
//SERIAL BEGIN
Serial.begin(115200);
}
//set pwm motor
void setmotor1(int pwm1) {
analogWrite(M1rpwm, pwm1);
}
void setmotor2(int pwm2) {
54
analogWrite(M2lpwm, pwm2);
}
//set kondisi indikator
void indikator_AGVon() {
digitalWrite(onn, HIGH);
digitalWrite(off, LOW);
}
void indikator_AGVoff() {
digitalWrite(onn, LOW);
digitalWrite(off, HIGH);
}
//set obstacle
void obstacle() {
//SENSOR MENDETEKSI BENDA
if (x == 0 && digitalRead(obstacle_1) == HIGH) {
x = 1;
obstaclee = 1;
}
//SENSOR TIDAK MENDETEKSI BENDA
else if (digitalRead(obstacle_1) == LOW) {
x = 2;
obstaclee = 0;
}
else if (x == 2 && digitalRead(obstacle_1) == HIGH) {
x = 0;
55
}
}
//pembacaan sensor
void read_sensor() {
//PEMBACAAN SENSOR STRAIGHT
if (digitalRead(sensor8) == HIGH) {
//SENSOR 1
if (digitalRead(sensor1) == HIGH) {
PV1 = 1;
} else {
PV1 = 0;
}
//SENSOR 2
if (digitalRead(sensor2) == HIGH) {
PV2 = 1;
} else {
PV2 = 0;
}
//SENSOR 3
if (digitalRead(sensor3) == HIGH) {
PV3 = 1;
} else {
PV3 = 0;
56
}
//SENSOR 4
if (digitalRead(sensor4) == HIGH) {
PV4 = 1;
} else {
PV4 = 0;
}
//SENSOR 5
if (digitalRead(sensor5) == HIGH) {
PV5 = 1;
} else {
PV5 = 0;
}
//SENSOR 6
if (digitalRead(sensor6) == HIGH) {
PV6 = 1;
} else {
PV6 = 0;
}
//SENSOR 7
if (digitalRead(sensor7) == HIGH) {
PV7 = 1;
} else {
57
PV7 = 0;
}
//SENSOR 8
if (digitalRead(sensor8) == HIGH) {
PV8 = 0;
PVL = 0;
PVR = 0;
} else {
PV8 = 0;
}
//SENSOR 9
if (digitalRead(sensor9) == HIGH) {
PV9 = -1;
} else {
PV9 = 0;
}
//SENSOR 10
if (digitalRead(sensor10) == HIGH) {
PV10 = -1;
} else {
PV10 = 0;
}
//SENSOR 11
58
if (digitalRead(sensor11) == HIGH) {
PV11 = -1;
} else {
PV11 = 0;
}
//SENSOR 12
if (digitalRead(sensor12) == HIGH) {
PV12 = -1;
} else {
PV12 = 0;
}
//SENSOR 13
if (digitalRead(sensor13) == HIGH) {
PV13 = -1;
} else {
PV13 = 0;
}
//SENSOR 14
if (digitalRead(sensor14) == HIGH) {
PV14 = -1;
} else {
PV14 = 0;
}
59
//SENSOR 15
if (digitalRead(sensor15) == HIGH) {
PV15 = -1;
} else {
PV15 = 0;
}
PV = PV1 + PV2 + PV3 + PV4 + PV5 + PV6 + PV7 + PV8 + PV9 + PV10 + PV11 + PV12 + PV13 + PV14 +
PV15;
}
else {
//PEMBACAAN SENSOR LEFT
if (digitalRead(sensor1) == HIGH) {
PVL = 7;
LAST = 1;
}
else if (digitalRead(sensor2) == HIGH) {
PVL = 6;
LAST = 1;
}
else if (digitalRead(sensor3) == HIGH) {
PVL = 5;
LAST = 1;
}
else if (digitalRead(sensor4) == HIGH) {
PVL = 4;
LAST = 1;
}
60
else if (digitalRead(sensor5) == HIGH) {
PVL = 3;
LAST = 1;
}
else if (digitalRead(sensor6) == HIGH) {
PVL = 2;
LAST = 1;
}
else if (digitalRead(sensor7) == HIGH) {
PVL = 1;
LAST = 1;
}
//PEMBACAAN SENSOR RIGHT
if (digitalRead(sensor15) == HIGH) {
PVR = -7;
LAST = 2;
}
else if (digitalRead(sensor14) == HIGH) {
PVR = -6;
LAST = 2;
}
else if (digitalRead(sensor13) == HIGH) {
PVR = -5;
LAST = 2;
}
else if (digitalRead(sensor12) == HIGH) {
61
PVR = -4;
LAST = 2;
}
else if (digitalRead(sensor11) == HIGH) {
PVR = -3;
LAST = 2;
}
else if (digitalRead(sensor10) == HIGH) {
PVR = -2;
LAST = 2;
}
else if (digitalRead(sensor9) == HIGH) {
PVR = -1;
LAST = 2;
}
//Reroute MENYIMPAN KONDISI PEMBACAAN SENSOR TERAKHIR
if ((digitalRead(sensor1) == LOW) && (digitalRead(sensor2) == LOW) && (digitalRead(sensor3) ==
LOW) && (digitalRead(sensor4) == LOW) && (digitalRead(sensor5) == LOW) &&
(digitalRead(sensor6) == LOW) && (digitalRead(sensor7) == LOW) && (digitalRead(sensor8) == LOW)
&& (digitalRead(sensor9) == LOW) && (digitalRead(sensor10) == LOW) && (digitalRead(sensor11) ==
LOW) && (digitalRead(sensor12) == LOW) && (digitalRead(sensor13) == LOW) &&
(digitalRead(sensor14) == LOW) && (digitalRead(sensor15) == LOW)) {
if (LAST == 1) {
PV = 7;
}
if (LAST == 2) {
PV = -7;
}
62
}
else {
PV = PVL + PVR;
}
}
}
//set perhitungan pid motor
void pid_motor() {
//MENGHITUNG SATUAN WAKTU (DT)
if ( millis() - LAST_COMPUTE >= DT) {
read_sensor(); //pembacaan sensor
//PERHITUNGAN NILAI PID
ERR = PV;
float P = KP * ERR;
INTEGRAL = (ERR - ERR_LAST) / DT;
float I = KI * INTEGRAL;
DERIVATIVE = (ERR - ERR_LAST) / DT;
float D = KD * DERIVATIVE;
//PENJUMLAHAN NILAI PID
HITUNG_PID = P + I + D;
PID = PID + HITUNG_PID;
//JUMLAH ERROR TERAKHIR
63
ERR_LAST = ERR;
//MERUBAH PRESENTASE KECEPATAN MAKSIMAL
MAX_KECEPATAN = (MAX_PWM * SPEED) / 100;
// MENYESUAIKAN DENGAN BATAS KECEPATAN
if (PID > PID_START_MAX) PID = PID_START_MAX;
if (PID < PID_START_MIN) PID = PID_START_MIN;
//JIKA NILAI PID BERUBAH
if (PID != PID_LAST) {
//PENYESUAIAN PID
if (PV == 0) {
PID = 0;
}
if (PID == 0) {
PID_M1 = 0;
PID_M2 = 0;
}
//MENENTUKAN NILAI PID MOTOR 1
else if (PID > 0) {
PID_M1 = PID;
PID_M2 = 0;
}
//MENENTUKAN NILAI PID MOTOR 2
else if (PID < 0) {
64
PID_M1 = 0;
PID_M2 = -PID;
}
PWM_M1 = MAX_PID - PID_M1;
PWM_M2 = MAX_PID - PID_M2;
// GERAKAN SESUAI DENGAN PID
PWM_M1 = map(PWM_M1, 0, MAX_PID, 50, MAX_KECEPATAN);
PWM_M2 = map(PWM_M2, 0, MAX_PID, 50, MAX_KECEPATAN);
if (PWM_M1 <= 50) {
PWM_M1 = 10;
PWM_M2 = PWM_M2 + 10;
}
if (PWM_M2 <= 50) {
PWM_M2 = 10;
PWM_M1 = PWM_M1 + 10;
}
//SET PWM MOTOR
setmotor1(PWM_M1);
setmotor2(PWM_M2);
//MENENTUKAN PEMBACAAN TERAKHIR PID UNTUK SYARAT MASUK PID YANG BARU
PID_LAST = PID;
}
LAST_COMPUTE = millis();
}
65
}
void loop() {
//READ TOMBOL -------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------
if (digitalRead(Start) == LOW) {
if (Mode == 0) {
Mode = 1;
//KETIKA SENSOR BELUM MEMBACA GARIS
if (PID == 0) {
setmotor1(MAX_KECEPATAN);
setmotor2(MAX_KECEPATAN);
indikator_AGVon();
y = 1;
}
}
}
if ( digitalRead(Stop) == LOW) {
if (Mode == 1) {
Mode = 0;
}
}
switch (Mode) {
case 0:
if (AGVON == 1) {
AGVON = 0;
66
}
setmotor1(0);
setmotor2(0);
PWM_M1 = 0;
PWM_M2 = 0;
PID = 0;
HITUNG_PID = 0;
PV = 0;
LAST = 0;
indikator_AGVoff();
x = 0;
LAST = 0;
AGVstate = "OFF";
break;
case 1:
AGVON = 1;
pid_motor();
indikator_AGVon();
y = 0;
AGVstate = "ON";
break;
}
//KETIKA MEMBACA SENSOR SAFETY ----------------------------------------------------------------------------------
--------------------------------------------------------------------------------
//KETIKA ROBOT MEMBACA GARIS
if (Mode == 1 && x == 1) {
setmotor1(0);
67
setmotor2(0);
}
if (Mode == 1 && x == 2) {
Mode = 1;
}
//KETKA ROBOT TIDAK MEMBACA GARIS
if (y == 1 && x == 1) {
setmotor1(0);
setmotor2(0);
y = 2;
}
if (y == 2 && x == 2) {
setmotor1(MAX_KECEPATAN);
setmotor2(MAX_KECEPATAN);
y = 1;
}
//KETKA ROBOT KELUAR DARI PEMBACAAN GARIS DENGAN MODE 1
if (Mode == 1 && PID == 0 && x == 2) {
if ((digitalRead(sensor1) == LOW) && (digitalRead(sensor2) == LOW) && (digitalRead(sensor3) ==
LOW) && (digitalRead(sensor4) == LOW) && (digitalRead(sensor5) == LOW) &&
(digitalRead(sensor6) == LOW) && (digitalRead(sensor7) == LOW) && (digitalRead(sensor8) == LOW)
&& (digitalRead(sensor9) == LOW) && (digitalRead(sensor10) == LOW) && (digitalRead(sensor11) ==
LOW) && (digitalRead(sensor12) == LOW) && (digitalRead(sensor13) == LOW) &&
(digitalRead(sensor14) == LOW) && (digitalRead(sensor15) == LOW)) {
if (LAST == 1) {
PV = 7;
}
if (LAST == 2) {
68
PV = -7;
}
}
Mode = 1;
}
}
69
PENJELASAN PROGRAM PID AGV 4 WHEEL
Define alamat pin motor
dc ke arduino
70
Adapun jumlah sensor yang di gunakan sebanyak 11 buah yang dimana sensor di mulai dari
sebelah kanan AGV
Define alamat pin sensor ke
Arduino
71
Kemudian di lakukan
inisialisasi kondisi bahwa
sensor keaanda LOW atau
tidak aktif
asdasdasd
Kemudian dilakukan declare variable
yang akan di gunakan pada program PID
asdasdasd
Kemudian dilakukan
declare variable PWM yang
akan di hitung oleh PID dan
di salurkan ke masing
masing motor
asdasdasd
72
73
Kemudiaan dilakukan
declare output kutub
positive negative untuk
program cw dan ccw nya
nanti
Kemudiaan dilakukan
inisialisasi sensor sebagai
input di arduino
74
*Note
Error di tulis sebagai nilai error inputan dari sensor line follower yang memberikan nilai error
dari 0 , samapi 10 atau 0 samapai -10
Kemudiaan dilakukan
penulisan program
perhitungan pid di program
arduino
void pidcontrolkanan(){
void pidcontrolkiri(){
Kemudian ada tahap pengelelola nilai pwm yang
di pisah menjadi dua yaitu # void
pidcontrolkanan(){ dan # void pidcontrolkiri(){
75
*Note di program bernama “setpoint” terdapat nilai pwm yang telah di tetapkan yaitu setengah
dari nilai pwm 225 yang kemudian di jumlah atau di kurang dengan nilai variable “pidvalue”
,pidvalue ini di dapat dari perhitungan error yang di berikan oleh sensor line followe yang
bernilai 0 sampai 10 atau 0 sampai -10 .efek dari perhitungan ini adalah memberikan besar
kecil nya pwm yang di berikan oleh hasil perhitungan PID , kemudian nilai pw ini akan
memberkikan efek belok terhadap roda AGV tersebut yang di taro di tempat variable B_kanan1
, B_kanan2 , B_kiri1 , B_kiri2.
76
Kemudia di dalam “void pidkanan” dan “void pidkiri” akan mengambil nilai pwm yang telah
di hitung oleh program PID dan menjalankan motor berdasarkan kecepatan yang telah
disesuaikan berdasaran perhitungan PID.
Adapun kemungkinan jika hasil pembacaan sensor berada di error paling besar yaitu bernilai
10 atau -10 dan hasil perhitungan PID tidak memungkinkan dan beresiko keluar jalur saya
memtusukan untuk membuat program rotary(berputar) agar dapat kembali kedalam jalurnya
dengan metode reverse .
77
Kemudia ini adalah proses inisialisasi variable
pada sensor line follower yang di beri nama
“s1state” dan seterusnya
78
// pemetaan sensor
// 36 35 34 33 32 31 30 29 28 27 26
// s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1
// 1 1 1 1 1 1 0 0 0 0 0 = = rotary kiri
// 1 0 0 0 0 0 0 0 0 0 0 = = -10
// 1 1 0 0 0 0 0 0 0 0 0 = = -9
// 1 1 1 0 0 0 0 0 0 0 0 = = -8
// 0 1 1 0 0 0 0 0 0 0 0 = = -7
// 0 1 1 1 0 0 0 0 0 0 0 = = -6
// 0 0 1 1 0 0 0 0 0 0 0 = = -5
// 0 0 1 1 1 0 0 0 0 0 0 = = -4
// 0 0 0 1 1 0 0 0 0 0 0 = = -3
// 0 0 0 1 1 1 0 0 0 0 0 = = -2
// 0 0 0 0 1 1 0 0 0 0 0 = = -1
// 0 0 0 0 1 1 1 0 0 0 0 = error = 0
// 0 0 0 0 0 1 1 0 0 0 0 = = 1
// 0 0 0 0 0 1 1 1 0 0 0 = = 2
// 0 0 0 0 0 0 1 1 0 0 0 = = 3
// 0 0 0 0 0 0 1 1 1 0 0 = = 4
// 0 0 0 0 0 0 0 1 1 0 0 = = 5
// 0 0 0 0 0 0 0 1 1 1 0 = = 6
// 0 0 0 0 0 0 0 0 1 1 0 = = 7
// 0 0 0 0 0 0 0 0 1 1 1 = = 8
// 0 0 0 0 0 0 0 0 0 1 1 = = 9
// 0 0 0 0 0 0 0 0 0 0 1 = = 10
// 0 0 0 0 0 1 1 1 1 1 1 = = rotary kanan
// 36 35 34 33 32 31 30 29 28 27 26
// s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1
Kemudia ada tahap pemetaan
sensor dari ketika sensor detek
garis hitam nilai yang bernilai 1
menandakan sensor dalam
keaadaan detek
79
if((s1state == LOW) &&(s2state == LOW)&&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
HIGH)&&(s6state == HIGH)&&(s7state == HIGH)&&(s8state == LOW)&&(s9state == LOW)&&(s10state ==
LOW)&&(s11state == LOW))
{Serial.println (" error=0");
error = 0;
pid();
pidkanan();
pidcontrolkanan();
pidkiri();
pidcontrolkiri();
}
else if ((s1state == HIGH) &&(s2state == HIGH)&&(s3state == HIGH) &&(s4state == HIGH)&&(s5state ==
HIGH)&&(s6state == HIGH)&&(s7state == HIGH) &&(s8state == HIGH)&&(s9state == HIGH)&&(s10state
== HIGH)&&(s11state == HIGH))
{
STOP();
}
else if ((s1state == LOW) &&(s2state == LOW)&&(s3state == LOW) &&(s4state == LOW)&&(s5state ==
HIGH)&&(s6state == HIGH)&&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println (" error=1");
error = 1;
pid();
Kemudia ada tahap terkahir yaitu proses pemanggilan
program sesuai dengan pemetaan yang dapat terjadi
sekaligus memberikan nilai error pada variable “error”
80
pidkanan();
pidcontrolkanan();
}
else if ((s1state == LOW) &&(s2state == LOW)&&(s3state == LOW)&&(s4state == HIGH)&&(s5state ==
HIGH)&&(s6state == HIGH) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println (" error=2");
error = 2;
pid();
pidkanan();
pidcontrolkanan();
}
else if ((s1state == LOW)&&(s2state ==LOW)&&(s3state == LOW)&&(s4state == HIGH) &&(s5state ==
HIGH) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println (" error=3");
error = 3;
pid();
pidkanan();
pidcontrolkanan();
}
else if ((s1state == LOW)&&(s2state ==LOW)&&(s3state == HIGH)&&(s4state == HIGH) &&(s5state ==
HIGH) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println (" error=4");
error = 4;
pid();
pidkanan();
pidcontrolkanan();
}
else if ((s1state == LOW)&&(s2state ==LOW)&&(s3state == HIGH) &&(s4state == HIGH) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println (" error=5");
81
error = 5;
pid();
pidkanan();
pidcontrolkanan();
}
else if ((s1state == LOW)&&(s2state ==HIGH) &&(s3state == HIGH) &&(s4state == HIGH) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println (" error=6");
error = 6;
pid();
pidkanan();
pidcontrolkanan();
}
else if ((s1state == LOW)&&(s2state ==HIGH) &&(s3state == HIGH) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println (" error=7");
error = 7;
pid();
pidkanan();
pidcontrolkanan();
}
else if ((s1state == HIGH)&&(s2state ==HIGH) &&(s3state == HIGH) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println(" error=8");
error = 8;
pid();
pidkananrotary();
pidcontrolkanan();
}
82
else if ((s1state == HIGH)&&(s2state ==HIGH) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println(" error=9");
error = 9;
pid();
pidkananrotary();
pidcontrolkanan();
}
else if ((s1state == HIGH)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println(" error=10");
error = 10;
pid();
pidkananrotary();
pidcontrolkanan();
}
else if ((s1state == LOW)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == HIGH)&&(s7state == HIGH) &&(s8state== LOW)&&(s9state== LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println(" error=-1");
error = -1;
pid();
pidkiri();
pidcontrolkiri();
}
else if ((s1state == LOW)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == HIGH) &&(s7state == HIGH) &&(s8state== HIGH)&&(s9state== LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println(" error=-2");
error = -2;
pid();
pidkiri();
83
pidcontrolkiri();
}
else if ((s1state == LOW)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == HIGH) &&(s8state == HIGH)&&(s9state== LOW)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println(" error=-3");
error = -3;
pid();
pidkiri();
pidcontrolkiri();
}
else if ((s1state == LOW)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == HIGH) &&(s8state == HIGH)&&(s9state == HIGH)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println(" error=-4");
error = -4;
pid();
pidkiri();
pidcontrolkiri();
}
else if ((s1state == LOW)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == HIGH)&&(s9state == HIGH)&&(s10state
== LOW)&&(s11state == LOW))
{Serial.println(" error=-5");
error = -5;
pid();
pidkiri();
pidcontrolkiri();
}
else if ((s1state == LOW)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == HIGH)&&(s9state == HIGH)&&(s10state
== HIGH)&&(s11state == LOW))
{Serial.println(" error=-6");
error = -6;
84
pid();
pidkiri();
pidcontrolkiri();
}
else if ((s1state == LOW)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == HIGH)&&(s10state
== HIGH)&&(s11state == LOW))
{Serial.println(" error=-7");
error = -7;
pid();
pidkiri();
pidcontrolkiri();
}
else if ((s1state == LOW)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == HIGH)&&(s10state
== HIGH)&&(s11state == HIGH))
{Serial.println(" error=-8");
error = -8;
pid();
pidkirirotary();
pidcontrolkiri();
}
else if ((s1state == LOW)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== HIGH)&&(s11state == HIGH))
{Serial.println(" error=-9");
error = -9;
pid();
pidkirirotary();
pidcontrolkiri();
}
else if ((s1state == LOW)&&(s2state ==LOW) &&(s3state == LOW) &&(s4state == LOW) &&(s5state ==
LOW) &&(s6state == LOW) &&(s7state == LOW) &&(s8state == LOW)&&(s9state == LOW)&&(s10state
== LOW)&&(s11state == HIGH))
85
{Serial.println(" error=-10");
error = -10;
pid();
pidkirirotary();
pidcontrolkiri();
}
}