Robot soccer beroda berbasis raspberry PI 3 sebagai prototype ERSBI 2017
TUGAS AKHIR
ROBOT SOCCER BERODA BERBASIS RASPBERRY
PI 3 SEBAGAI PROTOTYPE ERSBI 2017
Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Teknik
Program Studi Teknik Elektro
STEVANUS DAMAITYAS FAJAR
NIM : 135114003
JURUSAN TEKNIK ELEKTRO
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
(2)
SMALL SIZE SOCCER ROBOT BASSE ON
RASPBERRY PI 3 AS ERSBI 2017’s PROTOTYPE
Presented as Partial Fulfilment of the Requierment To Obtain the Sarjana Teknik Degree In Electrical Engineering Study Program
STEVANUS DAMAITYAS FAJAR
NIM : 135114003
ELECTRICAL ENGINEERING STUDY PROGRAM
FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2017
ii(3)
TUGAS AKHIR
ROBOT SOCCER BERODA BERBASIS RASPBERRY
PI 3 SEBAGAI PROTOTYPE ERSBI 2017
Oleh :
STEVANUS DAMAITYAS FAJAR
NIM : 135114003
Telah disetujui oleh :
Pembimbing
Ir. Tjendro M.Kom. Tanggal : 24 Mei 2017
(4)
HALAMAN PENGESAHAN
TUGAS AKHIR
ROBOT SOCCER BERODA BERBASIS RASPBERRY
PI 3 SEBAGAI PROTOTYPE ERSBI 2017
oleh :
STEVANUS DAMAITYAS FAJAR
NIM : 135114003
Telah dipertahankan di depan panitia penguji Pada tanggal 2 Juni 2017
Telah disetujui oleh:
Susunan Panitia Penguji:
Nama Lengkap Tanda Tangan
Ketua Martanto S.T., M.T. ………...
Sekretaris Ir. Tjendro M.T. ………...
Anggota Petrus Setyo Prabowo S.T., M.T. ………...
Yogyakarta,
Fakultas Sains dan Teknologi Universitas Sanata Dharma Dekan,
Sudi Mungkasi, S.Si.,M.Math.Sc.,Ph.D
(5)
PERNYATAAN KEASLIAN KARYA
Saya menyatakan dengan sesungguhnya bahwa tugas akhir ini tidak memuat karya orang lain, kecuali yang saya sebutkan dalam kutpan dan daftar pustaka layaknya sebuah karya ilmiah.
Yogyakarta, 26 Mei 2017
Stevanus Damaityas Fajar
(6)
HALAMAN PERSEMBAHAN DAN MOTTO HIDUP
MOTTO :
Do What You Love and Love What You Do
Skripsi ini saya persembahkan untuk...
Tuhan Yesus Juruslamatku,
Ayah, Ibu, Simbah, dan seluruh keluarga yang tercinta,
Maria Isabella yang tersayang,
dan Teman-teman dari Teknik Elektro dan lainya.
(7)
LEMBAR PERNYATAN PERSETUJUAN PUBLIKASI
KARYA ILMIAH UNTUK KEPENTINGAN
AKADEMIS
Yang bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma:
Nama : Stevanus Damaityas Fajar
Nomor Kemahasiswaan : 135114003
Demi pengembangan ilmu pengetahuan, saya memberikan kepada perpustakaan Universitas Sanata Dharma karya ulmiah saya berjudul :
ROBOT SOCCER BERODA BERBASIS RASPBERRY
PI 3 SEBAGAI PROTOTYPE ERSBI 2017
Beserta perangkat yang diperlukan ( bila ada ). Dengan demikian saya memberikan kepada Perpustakaan Universitas Sanata Dharma hak untuk menyimpan, mengalihkan dalam bentuk media lain, mengolahnya dalam bentuk pangkalan data, mendistribusikan secara terbatas dan mempublikannya di internet atau media lain untuk kepentingan akademis tampa perlu meminta ijin dari saya maupun memberikan royalty kepada saya selama tetap mencantumkan nama saya sebagai penulis.
Demikian pernyataan ini saya buat dengan sebenarnya.
Yogyakarta, 26 Mey 2017
(Stevanus Damaityas Fajar)
(8)
INTISARI
Perkembangan teknologi robotika di Indonesia tidaklah lepas dari Kontes Robot Indonesia (KRI). Diadakanya KRI bertujuan untuk meningkatkan kreativitas dan kemampuan mahasiswa perguruan tinggi dalam pengembangan teknologi robotika. KRI terdiri dari beberapa cabang atau divisi, salah satunya adalah Ekshibisi Robot Soccer Beroda Indonesia (ERSBI). Penelitian ini bertujuan membuat sebuah prototipe robot ERSBI yang dapat dimanfaatkan oleh Teknik Elektro Universitas Sanata Dharma di dalam KRI.
Penelitian ini menggunakan komputer mini Raspberry Pi 3 sebagai pengendali. Pengambilan keputusan dalam penelitian ini berdasarkan pada data yang diterima dari
coach computer. Penelitian ini berkomunikasi secara nirkabel dengan coach computer
menggunakan modul socket python untuk mengirim dan menerima data yang diperlukan. Dari data yang diterima keputusan akan diambil untuk mencapai sebuah titik tertentu. Penelitian ini didukung oleh motor dc untuk bergerak dan menggiring bola, solenoid untuk menendang bola , dan sensor jarak untuk mendeteksi adanya bola.
Sistem dalam penelitian ini berhasil membuat sebuah prototipe robot ERSBI yang dapat berkomunikasi, dan mengambil keputusan dengan baik. Sistem berhasil mengabil keputusan untuk bergerak menuju tempat atau titik dengan data dari coach computer
dengan rata-rata error posisi akhir x adalah 1,66% dan y adalah 3,13%. Sistem berhasil berkomunikasi dengan sangat baik karena data yang dikrim dan data yang diterima adalah sama.
kata kunci : KRI, Robot Soccer, Raspberry Pi, Python.
(9)
ABSTRACT
The development of robotics technology in Indonesia is not separated from Kontes Robot Indonesia (KRI). KRI held aimed at improving the creativity and ability of college students in the development of robotics technology. KRI consists of several branches or divisions, one of which is the Ekshibishi Robot Soccer Beroda Indonesia (ERSBI). This research aims to create a prototype of ERSBI robot that can be utilized by Electrical Engineering study program of Sanata Dharma University in KRI.
This research uses a Raspberry Pi 3 as a main controller. Decision making in this research is based on data, that received from coach computer. This research communicates with a coach computer using a python socket module to send and receive required data by wireless. From the received data decision will be taken to reach a certain point. This research is supported by dc motors for moving and dribbling ball, solenoid to kick the ball, and proximity sensor to detect the ball.
The system in this research successfully created a ERSBI’ robot prototype that can communicate, and make decisions well. The system succeeds making the decision to move toward a place or point with data received from the coach computer with an average error of x position is 1.66% and y position is 3.13%. The system succeeds communicating very well because the data send and the data received is same.
keywords : KRI, Soccer Robot, Raspberry Pi, Python
(10)
KATA PENGANTAR
Puji dan syukur penulis panjatkan kepada Tuhan Yesus Kristus karena atas segala rahmat-Nya sehingga penulis dapat menyelesaikan laporan tugas akhir ini dengan baik. Laporan tugas ini disusun untuk memenuhi syarat memperoleh gelar sarjana.
Selama pembuatan tugas akhir ini penulis menyadari bahwa begitu banyak pihak yang memberikan bantuan baik berupa ide atau gagasan, dukungan moral, maupun bantuan materi. Oleh karena itu, peneliti ingin mengucapkan terimakasih kepada :
1. Kedua orangtua penulis ayah Agustinus Yulianto dan ibu Lucia Sriwiningsih, dan seluruh keluarga yang telah banyak memberikan dukungan, kasih sayang dan motivasi selama ini.
2. Petrus Setyo Prabowo S.T., M.T. . Ketua Program Studi Teknik Elektro Universitas Sanata Dharma.
3. Ir. Tjendro M.Kom., Dosen pembimbing yang dengan penuh kasih, kesabaran dan pengertian untuk membimbing dalam menyelesaikan Tugas Akhir ini.
Penulis menyadari bahwa dalam penyusunan tugas akhir masih memiliki kekurangan. Oleh karena itu, penulis mengharapkan masukan kritik dan saran yang membangun agar tugas akhir ini menjadi lebih baik. Semoga tugas akhir ini dapat bermanfaat sebagaimana mestinya.
Yogyakarta, 26 Mey 2017 Penulis
Stevanus Damaityas Fajar
(11)
Daftar Isi
TUGAS AKHIR...i
FINAL PROJECT...ii
HALAMAN PERSETUJUAN...iii
HALAMAN PENGESAHAN...iv
PERNYATAAN KEASLIAN KARYA...v
HALAMAN PERSEMBAHAN DAN MOTTO HIDUP...vi
LEMBAR PERNYATAN PERSETUJUAN PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIS...vii
INTISARI...viii
ABSTRACT...ix
KATA PENGANTAR...x
Dartar Gambar...xiv
Daftar Tabel...xvi
BAB I PENDAHULUAN...1
1.1 Latar Belakang...1
1.2 Tujuan dan Manfaat Penelitian...2
1.3 Batasan Masalah...2
1.4 Metodologi Penelitian...3
Gambar 1.1. Diagram Blok Perancangan...3
BAB I DASAR TEORI...5
2.1 Raspberry Pi 3...5
2.1.1 Spesifikasi...5
2.1.2 GPIO (General Purpose Input Output)...6
2.2 Python...6
2.3 Module Socket...7
2.4 DT-Proto Arduino Shield...8
2.5 Driver Motor L298...8
2.6 Sensor Jarak...9
2.7 Teorema Pythagoras...10
(12)
2.10 Solenoid...12
BAB III RANCANGAN PENELITIAN...13
3.1 Perancangan Perangkat Keras (Hardware)...13
3.1.1 Perancangan Mekanik...14
3.1.2 Perancangan Elektrik Sistem pengendali...16
3.1.2.1 Rangkaian Raspberry Pi dengan DT-Proto Arduino Pi-Shield...16
3.1.2.2 Rangakaian DT-Proto Arduino Pi-Shield dengan Modul Driver Motor L298 dan Sensor Bola...17
3.2 Perancangan Perangkat Lunak (Software)...18
3.2.1 Perancangan Perangkat Lunak Secara Umum...18
3.2.2 Perancangan Perangkat Lunak Komunikasi...24
BAB IV HASIL DAN PEMBAHASAN...25
4.1 Implementasi Penelitian...25
4.1.1 Bentuk Fisik Robot...25
4.1.2 Sistem KelistrikanRobot...27
4.1.3 Software Robot...28
4.1.3.1 Program Komunikasi...29
4.1.3.2 Fungsi kode_data...30
4.1.3.3 Penentuan Error Sudut...30
4.1.3.4 Fungsi PID...32
4.2 Perubahan Perancangan...33
4.2.1 Perubahan Bentuk Robot...33
4.2.2 Perubahan Warna Pengenal Robot...34
4.2.3 Perubahan Penggunaan Level Shifter...34
4.2.4 Perubahan Kode dan Format Pengiriman...35
4.3 Pengujian Robot...36
4.3.1 Pengujian Komunikasi...36
4.3.2 Pengujian Response Robot...37
BAB V KESIMPULAN DAN SARAN...42
5.1 Kesimpulan...42
5.2 Saran...42
(13)
(14)
Dartar Gambar
Gambar 1.1. Diagram Blok Perancangan...3
Gambar 2.1. Raspberry Pi...5
Gambar 2.2. General Purpose Input Output[3]...6
Gambar 2.3. DT-Proto Arduino PiShield...8
Gambar 2.4. Selektor Tegangan...8
Gambar 2.5. Modul Driver Motor l298...9
Gambar 2.6. Obstacle Avoidance Sensor Module...9
Gambar 2.7. Segitiga Siku-siku...10
Gambar 2.8. Motor DC...11
Gambar 2.9. Arah Arus dan Medan Magnet...11
Gambar 2.10 Solenoid...12
Gambar 2.11 Medan Magnet...12
Gambar 3.1. Blok Diagram Sistem...13
Gambar 3.2. Rancangan Robot...14
Gambar 3.3. Rancngan Robot Tampak Belakang...14
Gambar 3.4. Rancangan Robot Tampak Depan...15
Gambar 3.5. Rancangan Robot Tampak Samping...15
Gambar 3.6.Rancangan Robot...15
Gambar 3.7. Solenoid Penendang...16
Gambar 3.8. Rangkaian Raspberry Pi dengan DT-Proto Arduino Pi-Shield[16]...16
Gambar 3.9. Rangkaian Level Shifter ke Driver Motor l298...17
Gambar 3.10. DT-Proto Arduino Pi Shield ke Sensor bola...18
Gambar 3.11. Diagram Alir Perancangan Perangkat Lunak...19
Gambar 3.12. Flowchart Fungsi Eksekusi...20
Gambar 3.13. Flowchart Fungsi Menuju Target...20
Gambar 3.14. Flowchart Fungsi Rebut Bola...21
Gambar 3.15. Flowchart Fungsi Menuju Gawang...22
Gambar 3.16. Flowchart Fungsi Menghindar...22
Gambar 3.17. Flowchart Fungsi OlahData....23 xiv
(15)
Gambar 4.1 Fisik Robot...25
Gambar 4.2 Tampak Atas...26
Gambar 4.3 Tampak Depan...26
Gambar 4.4 Tampak Belakang...26
Gambar 4.5 Tampak Kiri...26
Gambar 4.6 Tanpak Kanan...27
Gambar 4.7 Tampak Bawah...27
Gambar 4.8 Pembagian Daya...27
Gambar 4.9 Keseluruhan Sistem...28
Gambar 4.10 Pengkabelan...28
Gambar 4.11 Denah Sudut Diterima...31
Gambar 4.12 Log...34
Gambar 4.13. Grafik response PID KP = 4 ; KI = 0 ; KD = 0...38
Gambar 3.14. Grafik response PID KP = 5 ; KI = 0 ; KD = 0...38
Gambar 4.15. Grafik respon PID KP = 5 ; KI = 0 ; KD = 2,5...39
Gambar 4.16. Grafik respon PID KP = 5 ; KI = 0 ; KD = 2...39
(16)
Daftar Tabel
Tabel 3.1.Kode dan Format Pengiriman...24
Tabel 4.1 Daftar Contoh Error...31
Tabel 4.2 Format Penerimaan Data...35
Tabel 4.3 Data Komunikasi dari Coach Computer ke Robot...36
Tabel 4.4 data komunikasi dari robot ke coach compute...37
Tabel 4.5 Pengujian Response Robot...40
Tabel 4.6 Data Diterima saat Robot di Luar Jangkauan Kamera...41
(17)
BAB I
PENDAHULUAN
1.1
Latar Belakang
Sepakbola adalah salah satu cabang olah raga yang populer bagi masyarakat di Indonesia maupun dunia. FIFA merupakan organisasi sepak bola ditingkat dunia yang beranggotakan organisasi sepakbola dari seluruh negara di dunia. Indonesia memiliki sebuah organisasi sepak bola yaitu Persatuan Sepak Bola Seluruh Indonesia (PSSI). Ketenaran sepak bola membuat banyak atlet sepak bola yang berpenghasilan sangat Tinggi. Perkembangan teknologi saat ini sangat pesat salah satunya teknologi robotika. Saat ini robot memiliki peran yang penting bagi kehidupan manusia, mulai dari bidang kesehatan, kedokteran, pertanian, sampai bidang teknologi manufaktur. Saat ini robot sudah masuk di kehidupan rumah tangga, mulai dari mainan anak-anak hingga alat bantu pekerjaan sehari-hari.
Di Indonesia kemajuan robotika dapat dilihat dari Kontes Robot Indonesia (KRI). Kontes Robot Indonesia (KRI) adalah sebuah wadah bagi setiap mahasiswa untuk menyalurkan, menumbuh kembangkan, dan mengukur kemampuan mereka dalam bidang robotika. Kontes Robot Indonesia ini sebuah tempat pembuktian eksistensi sebuah perguruan tinggi ditingkat nasional.
Keberadaan sepakbola sebagai hiburan telah mengarah ke dunia robotika. Terbukti saat ini bidang sepakbola telah masuk dalam agenda Kontes Robot Indonesia (KRI), dalam Kontes Robot Sepak Bola Indonesia (KRSBI). Saat itu KRSBI hanya memiliki divisi robot humanoid, oleh karena itu mahasiswa dari perguruan tinggi negeri maupun swasta berlomba untuk menciptakan dan mengembangkan robot pemain sepak bola dengan kecerdasan buatan.
Diadakannya Ekshibisi Sepakbola Robot Beroda Indonesia (ESRBI) 2016 di Politeknik Negeri Surabaya, menunjukan bahwa perkembangan robotika di Indonesia semakin baik. Peraturan ESRBI dijabarkan dalam Panduan Ekshibisi Sepakbola Robot Beroda Indonesia (ESRBI) 2016 [1]. Terdiri dari peraturan pertandingan, dimensi lapangan
(18)
pertandingan dan Spesifikasi robot. Universitas Sanata Dharma belum ikut berpartisipasi dalam ESRBI 2016 ini.
Dari permasalahan di atas maka penelitian ini akan memberikan kontribusi kepada Universitas Sanata Dharma dengan pembuatan prototype robot sepakbola yang memenuhi persyaratan ESRBI 2016. Prototype ini dibuat dapat bergerak ke segala arah, menendang dan dapat berkomunikasi secara nirkabel dengan coach computer. Robot bergerak berdasarkan data dari coach computer.
Penelitian ini akan menggunakan Raspberry Pi komputer mini yang akan menjadi pengendali utama dalam robot ESRBI. Raspberry Pi akan mengendalikan motor DC, sistem tendangan, sensor bola, dan juga komunikasi nirkabel dengan coach computer.
1.2
Tujuan dan Manfaat Penelitian
Tujuan dari penelitian yang dilakukan ini adalah Terciptanya suatu prototype robot yang memenuhi persyaratan Ekshibisi Sepakbola Robot Beroda Indonesia (ERSBI)..
Manfaat yang diharapkan dari penelitian ini adalah :
1. Memberikan sebuah kontribusi sebagai bahan acuan untuk sepakbola robot di Indonesia khususnya tim robotika Universitas Sanata Dharma dalam Ekshibisi Sepakbola Robot Indonesia 2017.
2. Memberikan solusi kontrol nirkabel berbasis linux.
1.3 Batasan Masalah
Agar tugas akhir ini dapat sesuai dengan apa yang menjadi tujuan dan menghinddari terlalu kompleksnya permasalahan yang akan muncul, maka perlu adanya batasan masalah. Batasan masalah yang sesuai dengan judul tugas akhir ini dan Panduan Ekshibisi Sepakbola Robot Beroda Indonesia (ESRBI) 2016. Adapun batasan masalahnya adalah[1]:
1. Robot dapat melakukan komunikasi secara nirkabel dengan Coach Computer. 2. Lapangan pertandingan berukuran 6m x 4m.
3. Bola yang digunakan adalah bola tenis berwarna orange.
(19)
5. Dimensi maksimal robot, diameter 40cm dan tinggi 30cm.
6. Menggunakan mini komputer Raspberry Pi sebagai penerima data dan pengendali aktuator robot.
7. Menggunakan motor DC sebagai aktuator. 8. Menggunakan Solenoid sebagai aktuator. 9. Robot dapat bergerak ke segala arah.
1.4
Metodologi Penelitian
Berdasarkan Pada tujuan yang ingin dicapai maka metode-metode yang digunakan adalah sebagai berikut:
1. Studi literatur dan referensi, yaitu mempelajari buku-buku dan makalah-makalah dari pustaka yang berhubungan dengan Raspberry Pi, Motor DC, solenoid, dan juga komunikasi nirkabel.
2. Studi kasus terhadap alat yang telah dibuat sebelumnya. Tahap ini dilakukan guna memahami prinsip kerja alat sebelumnya.
3. Perancangan Sistem software dan hardware. Tahap ini bertujuan untuk mencari dan menentukan komponen-komponen suatu sistem yang akan dibuat dengan mempertimbangkan faktor-faktor permasalahan dan kebutuhan yang telah ditentukan.
Gambar 1.1. Diagram Blok Perancangan. Robot Coach
Computer
.
RaspBerry PI
.
Motor DC
Motor DC
Motor DC
Kom wireless
(20)
1. Pembuatan sistem hardware dan software. Berdasarkan gambar mikrokomputer sebagai kontrol utama. Mikrokomputer yang digunakan adalah Raspberry Pi. Data yang dikirim oleh coach computer akan diterima oleh Raspberry Pi, data tersebut akan diproses oleh Raspberry Pi untuk mengendalikan sistem aktuator robot.
2. Proses pengujian dan pengambilan data. Teknik pengambilan data dilakukan dengan cara menguji keseluruhan sistem dengan menggabungkan antara rangkaian kendali dengan rangkaian aktuator dan coach computer. Pengambilan data yang dilakukan dengan menerima perintah dari coach computer dan melakukan perintah dari coach computer.
3. Analisa dan kesimpulan hasil perancangan. Analisa data dilakukan dengan memeriksa apakah alat suah bekerja sesuai dengan perancangan awal dan bisa sesuai dengan kondisi yang diinginkan, meliputi kemampuan komunikasi nirkabel
(21)
BAB II
DASAR TEORI
2.1 Raspberry Pi 3
Gambar 2.1. Raspberry Pi.
Raspberry Pi 3 merupakan sebuah mikrokomputer yang memiliki ukuran sebesar kartu tanda pengenal yang dimiliki oleh banyak orang. Raspberry Pi3 adalah generasi ketiga Raspberry Pi [2] dan merupakan tipe dangan spesifikasi yang paling tinggi dibandingkan dengan tipe-tipe Raspberry Pi yang lainnya. Raspberry Pi 3 dilengkapi dengan penambahan beberapa fitur konektivitas yang ada yaitu penambahan adapter
wireless LAN dan juga bluetooth.
2.1.1 Spesifikasi
Spesfikasi dari Raspberry Pi 3 adalah sebagai berikut [2]:
• CPU A 1.2 GHz 64 - bit quad-core ARMv8
• RAM 1 GB RAM
• 40 GPIO pin
• 802.11n Wireless LAN
(22)
2.1.2 GPIO (
General Purpose Input Output
)
Gambar 2.2. General Purpose Input Output[3].
GPIO atau General Purpose Input Output merupakan port atau pin penghubung dengan alat elektronik lain sebagai input atau output. Pin GPIO dapat digunakan untuk segala macam keperluan. GPIO dapat digunakan dengan baik sebagai input ataupun
output[15]. Tujuan adanya GPIO adalah untuk memenuhi sistem integrator dalam memperluas dan membangun sistem lengkap yang membutuhkan pin tambahan dari chip berupa sinyal kontrol ataupun data.
GPIO disediakan untuk ekspansi disambungkan ke modul atau komponen lainnya. Papan sirkuit embedded seperti Arduino, dan lainnya. GPIO digunakan untuk membaca data atau sinyal dari berbagai sensor lingkungan seperti IR (Infra Red), video, suhu, orientasi 3 dimensi, percepatan dan sebagainya. disamping untuk menulis atau mengirim data melalui output ke motor DC (melalui modul Pulse Width Modulation), audio, display
LCD, atau LED.
2.2
Python
Python adalah sebuah bahasa pemrogramman tingkat tinggi yang berfokus pada tingkat keterbacaan kode dan program mudah di pelajari karena sintak yang jelas dan elegan, dikombinasikan dengan penggunaan module-module siap pakai dan struktur data tingkat tinggi yang efisien. Sintak python yang elegan dan typing dinamika, dan sifatnya
(23)
yang interaktif, object oriented. Menjadikan python bahasa yang ideal untuk pemrogramman scripting dan rapid application development dalam berbagai bidang dan hampir semua platfrom seperti UNIX, Mac, Windows dan LINUX[5].
2.3
Module Socket
Merupakan seebuah module yang dimiliki oleh python untuk pemrogaman jaringan. Module ini dapat di-load atau di-import seperti module-module yang lain di python[7].
Dalam pemrograman jaringan terdapat beberapa istilah seperti[6]:
•
Host adalah suatu node, perangkat yang berada dalam suatu jaringan. Contoh biasanya adalah sebuah komputer.•
Client adalah sebuah host yang meminta layanan ke server.•
Server adalah host yang memberikan layanan kepada client.• Dll.
contoh program penggunaan socket :
#!/usr/bin/env python
importsocket
# menentukan alamat server
server_address = ('localhost', 5000)
# ukuran buffer ketika menerima pesan
SIZE = 1024
# membuat objek socket (proses pertama)
s =socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# koneksi ke server (proses kedua)
s.connect(server_address)
# mengirim pesan ke server (proses ketiga)
s.send("Hi server ... ")
# menerima pesan dari server
message = s.recv(SIZE)
# mencetak pesan dari server
print message
# menutup socket
(24)
2.4
DT-Proto Arduino Shield
Gambar 2.3. DT-Proto Arduino PiShield.
DT-Proto PiShileld merupakan sebuah modul tambahan Raspberry Pi . Modul ini juga merupakan modul adapter atau pengubah level tegangan menjadi 5 volt atau 3,3 volt sesuai dengan jumper selektor I/O[8]. Selain mengubah tegangan modul ini juga mengubah
interface GPIO menjadi interface Arduino. Dengan demikian mempermudah jika akan menggunakan berbagai shield yang dimiliki atau dibuat untuk Arduino.
Untuk dipermudah pemakaian shield ini disediakan library wiringpi dengan demikian penggunaan shield ini menggunakan beberapa sintax yang ada di Arduino, seperti digitalwrite(alamat, data), digitalread(alamat).
Gambar 2.4. Selektor Tegangan.
2.5
Driver Motor L298
Driver motor L298 merupakan sebuah modul yang dapat digunakan untuk mengendalikan motor DC dengan arus maksimum mencapai empat amper. Dengan level
(25)
logika lima volt sebagai logika high. Rangkaian ini voltase suplay IC (integrated Circuit)
sebesar lima volt. Dan menggunakan tegangan suplay motor external maksimal 46 Volt[9].
Gambar 2.5. Modul Driver Motor l298.
2.6
Sensor Jarak
Gambar 2.6. Obstacle Avoidance Sensor Module.
Obstacle Avoidance Sensor Module merupakan sebuah device elektronik yang dapat mendeteksi jarak menggunakan Infra Red dan Photodioda sebagai sensor. Modul ini memiliki tiga port yaitu vcc, gnd dan out. Out di modul ini menggunakan data digital yaitu
(26)
logika low dan high. Modul ini dapat dikalibrasi dengan cara mengatur variable resistor
yang ada untuk menentukan jarak yang diinginkan[10].
2.7
Teorema Pythagoras
Teorema Pythagoras adalah suatu persamaan segitiga siku-siku yang digunakan untuk mencari sisi yang belum diketahui nilainya.
Gambar 2.7. Segitiga Siku-siku.
tan(B)=b
a (2.1)
B=arctan(b
a) (2.2)
c2=a2+b2 (2.3)
Untuk mencari besar sudut dari B pada gambar . Dengan menggunakan persamaan 2.2 maka akan didapatkan bersaran sudut B. Persamaan 2.2 merupakan penjabaran dari persamaan 2.1.
2.8
Motor DC
Motor listrik merupakan perangkat aktuator yang mengubah energi listrik menjadi energi mekanik. Energi mekanik ini akan digunakan untuk memutar roda robot. Motor dc merupakan motor yang menggunakan sumber arus searah. Motor akan menghasilkan energi mekanik yang bergerak berputar. Arah putaran bergantung pada arah arus listrik. Untuk mengubah arah putaran motor dengan cara merubah arah arus listrik atau mengubah polaritas motor dc tersebut.
(27)
Gambar 2.8. Motor DC.
Gambar 2.9. Arah Arus dan Medan Magnet.
Jika arus lewat pada suatu konduktor, timbul medan magnet di sekitar konduktor. Arah medan magnet ditentukan oleh arah aliran arus pada konduktor. Medan magnet yang membawa arus mengelilingi konduktor . Aturan genggaman tangan kanan bisa dipakai untuk menentukan arah garis fluks di sekitar konduktor. Genggam konduktor dengan tangan kanan dengan jempol mengarah pada arah aliran arus, maka jari-jari anda akan menunjukkan arah garis fluks[11][12].
(28)
2.10 Solenoid
Gambar 2.10 Solenoid.
Solenoid merupakan kumparan yang dililitkan secara rapat dan diamsusikan bahwa panjangnya lebih besar daripada diameternya. Dalam kasus solenoid Ideal, panjang kumparan adalah tak hingga dan dibangun dengan kawat yang saling berhimpit dalam lilitanya, dan medan magnet didalamnya adalah seragan dan pararel terhadap sumbu solenoid. kuat medan magnet akan menggerakkan batang besi ke arah medan magnet. Di pasaran terdapat berbagai jenis solenoid dengan tegangan kerja yang berbeda-beda.
Gambar 2.11 Medan Magnet Kuat medan magnet untuk solenoid ideal adalah:
B=η0i n (2.3)
di mana:
• B adalah kuat medan magnet.
• η0 adalah permaebilitas ruang kosong.
• i adalah kuat arus yang mengalir.
(29)
BAB III
RANCANGAN PENELITIAN
Bab ini menjelaskan mengenai perancangan perangkat keras dan lunak bagian penerima dalam robot ERSBI. Perancangan sistem yang akan dibahas pada bab ini terdiri dari dua bagian besar, yaitu:
1. Perancangan perangakat keras (hardware)
• Perancangan mekanik.
• Perancangan rangkaian elektrik sistem pengendali. 2. Perancangan perangkat lunak (software)
• Perancangan Perangkat lunak secara umum.
• Perancangan Perangkat lunak Komunikasi.
3.1
Perancangan Perangkat Keras (
Hardware
)
Perancangan perangkat keras terbagi menjadi perancangan blok diagram sistem, perancangan mekanik, dan driver motor dc serta rangkaian pengendali utama. Perancangan Perangkat keras, terlebih dahulu dilakukan perancangan blok diagram dari keseluruhan sistem dan rancangan robot yang akan dibuat.
Gambar 3.1. Blok Diagram Sistem.
13
Bagian Robot Coach
Computer
Raspberry Pi 3 Module Wireless Driver L298 General Purpose Input Output (GPIO) Sensor Bola solenoid Motor DC Level Shifter 3.3 V To 5 V
.
Kom wireless(30)
Gambar 3.1. merupakan blok diagram sistem. Pada penelitian ini perangkat keras yang akan dibuat terdiri dari dua hal, yaitu bagian user dan robot. Pada bagian user hanya akan ada coach computer sedangkan pada bagian robot terdapat Raspberry PI, Level Shifter Driver Motor DC, Solenoid dan Sensor Bola, Motor DC dan SOlenoid. Komunikasi yang digunakan adalah komunikasi wirelessRaspberry Pi.
Pada penelitian ini hanya akan membuat bagian robot, yaitu Raspberry Pi sebagai pengendali utama dan juga terminal komunikasi nirkabel, driver motor DC, dan juga bentuk robot yang memenuhi peraturan Ekshibisi Sepakbola Robot Beroda Indonesia 2016[1].
3.1.1 Perancangan Mekanik
Gambar 3.2. Rancangan Robot.
(31)
Gambar 3.4. Rancangan Robot Tampak Depan.
Gambar 3.5. Rancangan Robot Tampak Samping.
Gambar 3.6.Rancangan Robot.
Gambar 3.2. sampai dengan gambar 3.6. merupakan gambar keseluruhan design 3D robot sepakbola beroda. Robot terdiri dari tiga buah aktuator yang akan membuat robot dapat bergerak dan menendang bola. Tubuh robot akan dibangun meenggunakan akrilik, dua buah motor DC untuk menentukan gerakan maju, kiri, kanan dan mundur. Sebuah solenoid untuk menendang bola.
Gambar 3.7. merupakan rancangan dari solenoid sebagai aktuator penendang. Tendangan memanfaatkan gerakan dari solenoid jiga dialiri arus listrik, dan kembali jika
(32)
tidak dialiri arus listrik. Bagian inti bergerak solenoid ditambah panjangnya supaya sampai ke bagian depan robot dimana bola akan digiring dan ditendang.
Gambar 3.7. Solenoid Penendang.
3.1.2 Perancangan Elektrik Sistem pengendali
Pada bagian ini terdiri bagian rancangan elektrik pada robot dibagi menjadi: 1. Rangakaian Raspberry Pi dengan DT-Proto Arduino Pi-Shield
2. Rangakaian DT-Proto Arduino Pi-Shield dengan Modul Driver Motor L298 dan Sensor Bola
3.
Rangkaian Modul Driver Motor L298 dengan Motor DC
3.1.2.1
Rangkaian Raspberry Pi dengan DT-Proto Arduino Pi-Shield
Penghubungan GPIO Raspberry Pi dengan DT-Proto Arduino Pi-Shield dengan menghubungkan langsung conector yang ada pada DT-Proto Arduino Pi-Shield ke GPIO. Kemudian penamaan port GPIO pada program python akan berubah ke aturan penamaan
Pi-Shield dengan menggunakan library WiringPi2.
(33)
Penggunaan dari DT-Proto Arduino Pi-Shield adalah untuk mengubah level logika tegangan pada GPIO Raspberry Pi menjadi level logika tegangan lima volt. Dikarenakan untuk mempermudah hubungan dengan komponen yang berlogika lima volt, seperti modul driver motor l298 dan lain-lain.
Gambar 3.8. dan gambar 3.9. adalah gambar hubungan GPIO ke driver motor l298 melalui rangkaian pull up atau level shifter 3,3 Volt ke 5 Volt. Karena level logika tinggi Raspberry Pi adalah 3,3 Volt semaentara L298 menggunakan level logika 5 Volt. Raspberry Pi akan dipasangi dengan DT-Proto Arduino Pi Shield yang mengubah pin map raspberry menjadi pinmap arduino. Kelebihan dari DT-Proto Arduino Pi Shield ini adalah fungsi level shifter yang dimilikinya merubah level tegangan 3,3 volt ke 5 volt.
3.1.2.2
Rangakaian DT-Proto Arduino Pi-Shield dengan Modul Driver
Motor L298 dan Sensor Bola
Gambar 3.9. Rangkaian Level Shifter ke Driver Motor l298.
Dalam penelitian ini sensor jarak akan digunakan sebagai sensor bola. Shield ini akan dipasang dibagian depan robot. Sensor akan mendeteksi apakah ada bola dalam jarak jangkauan sensor yang nantinya dapat di kalibrasi secara manual dengan cara memutar variable resistor yang ada. Rangkaian sensor bola diinputkan ke pin 8 dt-proto arduino pi-shield. Sersor akan bernilai LOW jika tidak menerima bola dan sensor akan bernilai
(34)
HIGH atau lima Volt jika mendeteksi. Kemudian dt-proto arduino pi-Shield akan mengubah level tegangan sehingga dapat diolah oleh Raspberry pi 3.
Gambar 3.10. DT-Proto Arduino Pi Shield ke Sensor bola.
3.2
Perancangan Perangkat Lunak (
Software
)
3.2.1 Perancangan Perangkat Lunak Secara Umum
Dalam perancangan software ini akan dijelaskan bagaimana flowchart atau diagram alir dari keseluruhan program pengendali yang akan dibuat. Robot akan melakukan inisialisasi untuk malakukan komunikasi dengan coach computer lewat jaringan wireless, menerima serta mengolah data yang diterima, dan pengambilan keputusan berdasarkan data yang diterima.
Gambar 3.11 merupakan gambar dari flow chart software keseluruhan robot pada penelitian ini. Robot akan melakukan inisialisasi saat pertama kali dihidupkan. Kemudian robot akan menunggu koneksi dari coach computer. Setelah mendapatkan koneksi robot akan menerima data yang dikirim oleh coach computer berdasarkan kode protokol yang dibuat. Eksekusi data untuk menentukan keputusan dari segala kondisi data uyang diterima.
(35)
Gambar 3.11. Diagram Alir Perancangan Perangkat Lunak.
Gambar 3.12 merupakan Flowchart merupakan dari fungsi eksekusi. Robot akan memeriksa mode yang dikirim dan mengeksekusi menurut mode yang diterima. Jika robot berada dala, mode bersedia maka robot akan menuju target yang ditunjuk oleh coach
computer. Jika robot dalam mode lainnya maka robot akan memeriksa apakah robot membawa bola atau tidak dan akan memilih berdasarkan keadaan bola.
START
Inisialisasi
Terhubung?
STOP Selesai Eksekusi Data
Ya Ya
Tidak
Tidak
(36)
Gambar 3.12. Flowchart Fungsi Eksekusi.
Gambar 3.13. Flowchart Fungsi Menuju Target. Eksekusi Membawa Bola? Rebut Bola Menuju gawang Pos. Bersedia? Menuju Target Return Tidak Tidak Ya Ya Menuju Target Olah Data Xrobot > Xtarget PWMKiri < PWMKanan PWMKiri > PWMKanan Tidak Ya Return PWMKiri = PWMKanan = 0 PWMKiri= PWMKanan
= > 0 Sampai?
A
A
Tidak
(37)
Gambar 3.13. merupakan flowchart yang menjelaskan fungsi menuju target. Dalam fungsi ini robot akan memanggil fungsi olah data untuk mendapatkan dan memeriksa nilai posisi x robot dan posisi x target dengan cara membandingkannya. Jika posisi x robot lebih besar dari posisi x target berarti target berada diposisi yang lebih kanan dibanding robot. Maka robot akan bergerak kekanan dengan cara membuat PWMkanan lebih besar dibanding PWMkiri. Begitu juga sebaliknya. Robot akan memeriksa apakah telah sampai dengan tujuan yang ditetapkan. Jika belum maka robot akan memberikan nilai pwm kanan sama dengan pwm kiri dengan kata lain robot akan bergerak lurus. Dan jika telah sampai maka robot akan berhenti dengan cara menghentikan kedua motor penggeraknya.
Gambar 3.14. Flowchart Fungsi Rebut Bola.
Gambar 3.14. merupakan gambar flowchart dari fungsi rebut bola. Dalam fungsi ini robot akan memanggil fungsi olah data untuk mendapatkan dan memeriksa nilai posisi x robot dan posisi x bola dengan cara membandingkannya. Jika posisi x robot lebih besar dari posisi x bola berarti bola berada diposisi yang lebih kanan dibanding robot. Maka robot akan bergerak kekanan dengan cara membuat PWMkanan lebih besar dibanding PWMkiri. Begitu juga sebaliknya. Robot akan memeriksa apakah telah sampai dengan tujuan yang ditetapkan. Jika belum maka robot akan memberikan nilai pwm kanan sama dengan pwm kiri dengan kata lain robot akan bergerak lurus. Dan jika telah sampai maka robot akan berhenti dengan cara menghentikan kedua motor penggeraknya.
Rebut Bola Olah Data Xrobot > Xbola PWMKiri < PWMKanan PWMKiri > PWMKanan Tidak Ya A Return PWMKiri = PWMKanan = 0 PWMKiri= PWMKanan
= > 0 Sampai?
A
Tidak
(38)
Gambar 3.15. Flowchart Fungsi Menuju Gawang.
Gambar 3.16. Flowchart Fungsi Menghindar.
Gambar 3.15. merupakan gambar flowchart dari fungsi menuju gawang. Data akan diolahh untuk mendapatkan data selisih sudut danjarak terhadap gawang. Robot akan memeriksa nilai posisi x robot dan posisi x target dengan cara membandingkannya. Jika posisi x robot lebih besar dari posisi x target berarti target berada diposisi yang lebih kanan dibanding robot. Maka robot akan bergerak kekanan dengan cara membuat PWMkanan lebih besar dibanding PWMkiri. Begitu juga sebaliknya. Robot akan memeriksa apakah
Menuju Gawang Olah Data Xrobot > Xgawang PWMKiri < PWMKanan PWMKiri > PWMKanan Return Tabrak musuh? Tidak Ya Menghindar Tidak Ya Sampai titik tembak? Tidak Ya Tendang On A B Tendang Off PWMKiri = PWMKanan = 0 PWMKiri= PWMKanan
= > 0 Sampai? A Tidak Ya B Menghindar Xrobot > Xmusuh PWMKiri < PWMKanan PWMKiri > PWMKanan Return Tidak Ya
(39)
telah mencapai titik tembak, yaitu 30 cm dari gawang lawan maka robot akan mengaktifkan mekanisme tendangan.
Gambar 3.16. fungsi menghindar dalam fungsi ini akan memeriksa data posisi xrobot dan xmusuh yang akan mempresentasikan apakah musuh berada di kiri atau di kanan dari robot. Data tersebut akan digunakan untuk membuat keputusan kemana robot harus menghindar.
Gambar 3.17. Flowchart Fungsi Olah Data.
Gambar 3.17 adalah fungsi olah data. Fungsi ini merupakan fungsi dimana data yang diterima akan diolah dan diubah menjadi error sudut dan juga jarak robot dan target. Pengubahan menggunakan teorema pythagoras dan persamaan trigonometri yaitu pada persaman (2.1), (2.2) dan (2.3) untuk mendapatkan nilai r yaitu jarak antara robot dan gawang lawan.
c2=a2+b2 (2.3)
r2=x2+y2
r=
√
x2+y2 Olah DataReturn r dan Es
X1-x=x Y1-x=y
r2=x2+y2 r = ?
(40)
3.2.2 Perancangan Perangkat Lunak Komunikasi
Komunikasi robot dan coach computer akan dilakukan dengan hubungan wireless
menggunakan modul wireless yang telahdisediakan oleh Raspberry Pi 3. Robot akan menerima data dari coach computer, maka dibutuhkan sebuah format. Format ini berfungsi sebagai pengaturan pengiriman dan penerimaan yang tetap supaya tidak terjadi kesalahan dalam pembacaan komunikasi oleh robot.
Dalam penilitian ini akan menggunakan module socket yang dimiliki oleh python. Data yang diterima robot merupakan data string. Dari string akan dipisah kan antara data dan kode. Sebagai berikut:
Kode Data
0-7 A B C D E F
Gambar 3.18. Format Data Diterima.
Gambar 3.18. merupakan bentuk atau format data yang akan diterima. Data yang akan diterima adalah tujuh buah digit desimal. Setiap digitnya memiliki arti yang dijelaskan pada tabel 3.1.
Tabel 3.1. Kode dan Format Pengiriman. Kode
Keterangan Data
0-7 A B C D E F
1 Posisi Robot (x,y) X Y
2 Posisi Bola (x,y) X Y
3 Posisi Lawan (x,y) X Y
4 Posisi Gawang (x,y) X Y
5 Posisi Kiper lawan (x,y) X Y
6 Koreksi sudut +/- Sudut +/- Sudut
7 Posisi tertentu X Y
0 Berhenti X Y
Jadi robot akan menerima data seperti diatas. Contoh data yang dikirim adalah posisi robot nilai x= 100, dan nilai y =98. Maka yang akan diterima oleh robot adalah “1100098”. Data ini akan diterima dan dimasukan dalam sebuah variable string dat. Data dat[0] akan periksa sebagai kode data kemudian dat[1], dat[2], dan dat[3] merupakan data x dari robot. Dan dat[4], dat[5], dan dat[6] marupakan data y.
(41)
BAB IV
HASIL DAN PEMBAHASAN
Pada bab ini akan dibahas mengenai implementasi dari perancangan pada bab 3, perubahan perancangan, dan analisis dari hasil pengujian yang dilakukan. Pengujian sistem diperlukan agar dapat mengetahui kinerja dari keseluruhan sistem yang telah dirancang. Data-data dari hasil pengujian akan dianalisa untuk dapat mengetahui kinerja sistem yang ada. Dari analisa tersebut dimungkinkan adanya revisi atau pengembangan agar sistem dapat bekerja lebih baik.
4.1
Implementasi Penelitian
4.1.1 Bentuk Fisik Robot
Gambar 4.1 Fisik Robot.
Gambar 4.1 sampai 4.7 merupakan gambar fisik dari robot yang dibuat menggunakan bahan akrilik dengan tebal 3mm. Robot berdiameter 25 cm, berwarna hitam dan tinggi 11,6
(42)
cm. Terdiri dari tiga level akrilik. Kontroler, baterai, dan modul-modul elektronik berada pada level ke dua. Sementara level ketiga atau yang teratas adalah tempat pengenal robot untuk coach computer yaitu lingkaran ungu sebagai depan dan lingkaran biru sebagai belakang.
Gambar 4.2 Tampak Atas.
Gambar 4.3 Tampak Depan.
Gambar 4.4 Tampak Belakang.
(43)
Gambar 4.6 Tanpak Kanan.
Gambar 4.7 Tampak Bawah.
4.1.2 Sistem KelistrikanRobot
Penelitian ini menggunakan sebuah baterai pack li-ion 3 sel 11.1 Volt, dan di konversi oleh tiga buah regulator yaitu; pertama regulator buck lima volt untuk mensuplay raspberry pi 3, kedua regulator buck 5 volt untuk mensuplay modul-modul elektronik lain, dan yang ketiga merupakan regulator boost 12 volt untuk mensuplay motor dc.
Gambar 4.8 Pembagian Daya. Battery
Pack Li-Ion 3 cell 11,1V
Regulator buck 5V
Regulator buck 5V Regulator boost 12V
(44)
Gambar 4.9 merupakan keselurahan sistem penelitian. Dengan penambahan driver tip 31 untuk mendrive motor. Gambar 4. 10 merupakan gambar fisik dari sistem.
Gambar 4.9 Keseluruhan Sistem.
Gambar 4.10 Pengkabelan.
4.1.3 Software Robot
Program yang dibuat menggunakan beberapa modul python yang telah ada. Modul-modul yang di-load bertujuan membantu pengendalian penelitian ini.
import RPi.GPIO as gpio import os
import time from socket import
penelitian ini membutuhkan beberapa inisialisasi untuk menatuh port-port GPIO, inisialisasi untuk komunikasi dan juga inisalisasi variabel-variabel yang digunakan.
Raspberry Pi LLC Driver
Motor L298n
Motor Kiri Motor Kanan
Sensor Bola
Driver tip31
Driver tip31
Solenoid
Motor Penggiring
(45)
ls_error = 0 s_error = 0 lj_error = 0 j_error = 0 error = 0 data = 0000000 pv_sudut = 000000000 sp_sudut = 000000000 dkiriml = "0"
enab = 0 tendang = 0 kon = "A"
# Setup GPIO ############################################################ gpio.setmode(gpio.BOARD) gpio.setwarnings(False) gpio.setup(7, gpio.OUT) gpio.setup(11, gpio.OUT) gpio.setup(12, gpio.OUT) gpio.setup(13, gpio.OUT) gpio.setup(15, gpio.OUT) gpio.setup(16, gpio.OUT) gpio.setup(22, gpio.OUT) gpio.setup(19, gpio.OUT) gpio.setup(18, gpio.IN) ki = gpio.PWM(16, 200) ka = gpio.PWM(7, 200) ki.start(0)
ka.start(0)
# Setup Komunikasi ##################################################### host = ""
host1 = "192.168.1.41" #ip addres penerima
port = 13000 #port yang digunakan adalah 13000, harus sama port1 = 14000
buf = 1024 #jumlah maksimal karakter yang diterima addr = (host, port)
addr1 = (host1, port1)
UDPSock = socket(AF_INET, SOCK_DGRAM) UDPSock.bind(addr)
4.1.3.1
Program Komunikasi
Program ini bertujuan untuk membuat sebuah jalan komunikasi antara robot dan
coach computer supaya dapat bertukar data yang saling dibutuhkan. Komunikasi yang akan dilakukan adalah komunikasi dua arah antar coach computer dan Penelitian ini. Bagi penelitian ini data yang dikirim oleh coach computer sangatlah penting karena data inilah yang akan menentukan apa yang harus dilakukan oleh penelitian ini. Program ini
(46)
menggunakan modul socket sama seperti perancangan dengan menggunakan port 13000 untuk menerima dan port 14000 untuk mengirim data.
(data, addr) = UDPSock.recvfrom(buf) print "data diterima \t: " + str(data)
(data, addr) = UDPSock.recvfrom(buf) merupakan perintah untuk menerima data yang di kirim oleh coach computer.
4.1.3.2 Fungsi kode_data
Fungsin kode_data merupakan fungsi untuk memilah data diterima menjadi data variabel sesuai dengan tabel format penerimaan data. Program ini meneteksi array alamat ke nol menjadi patokan data apa yang diterima. Berikut listing dari fungsi kode_data
def kode_data(data):
global kon, j_error, pv_sudut, sp_sudut, tendang, enab if data[0] == '5': enab = int(data[1])
elif data[0] == '6': tendang = int(data[1]) elif data[0] == '7': #print "koreksi sudut"
pv_sudut = int(data[1]+data[2]+data[3]+data[4]) sp_sudut = int(data[5]+data[6]+data[7]+data[8])
elif data[0] == '8': j_error = int(data[1]+data[2]+data[3]) #print "jarak" elif data[0] == '9': kon = str(data[1]) #print "kondisi"
4.1.3.3 Penentuan Error Sudut
Penentuan error sudut tidak lepas dari penentuan letak sudut. Gambar 4.2 merupakan gambar Letak sudut ditentukan oleh coach computer, maka robot harus menentukan error sudut berdasarkan gambar 4.2. Penentuan error dilakukan untuk mengetahui seberapa menyimpang robot dengan tujuan dan menentukan gerakan robot. Jika pv_sudut adalah -45 dan sp_sudut adalah +45 maka error adalah +90, dan sebaliknyab pv_sudut adalah -135 dan sp_sudut adalah +135 maka error sudut harus sama dengan -90.
Penentuan error sudut pada robot dilakukan oleh fungsi olah_data. Dengan menentukan variabel ‘batas’. Batas adalah sudut yang membentuk garis lurus melewati
(47)
pusat sudut. s_error akan bernilai -180 sampai dengan +180 maka untuk mengperkecil nilai error sudut yang ada maka s_error dibagi dengan 9.5. dengan demikian range error adalah -18,95 sampai 18,95. Tabel 4.1 merupakan contoh-contoh nilai error sudut. kemudian diubah menjadi -10 sampai 10.
Gambar 4.11 Denah Sudut Diterima.
Tabel 4.1 Daftar Contoh Error
pv_sudut sp_sudut s_error
-45 -180 -135
-45 -135 -90
-45 -90 -45
-45 -45 0
-45 0 +45
-45 +45 +90
-45 +90 +135
-45 +135 +180
-45 +170 -145
-45 +180 -135
def olah_data():
global error, pv_sudut, sp_sudut batas = 0
s_error = 0 if sp_sudut > 0:
(48)
batas = -180 + sp_sudut if sp_sudut < 0:
batas = 180 + sp_sudut if sp_sudut >= 0:
if pv_sudut >= sp_sudut:
for i in range(sp_sudut, pv_sudut, 1): s_error = s_error - 1 if pv_sudut < sp_sudut:
if pv_sudut >= batas:
for i in range(pv_sudut, sp_sudut, 1): s_error = s_error + 1 if pv_sudut < batas:
for i in range(pv_sudut, sp_sudut, 1): s_error = s_error - 1 if sp_sudut < 0:
if pv_sudut < sp_sudut:
for i in range(pv_sudut, sp_sudut, 1): s_error = s_error + 1 if pv_sudut >= sp_sudut:
if pv_sudut >= batas:
for i in range(sp_sudut, pv_sudut, 1): s_error = s_error + 1 if pv_sudut < batas:
for i in range(sp_sudut, pv_sudut, 1): s_error = s_error - 1 error = s_error / 9.5 #untuk 10 derajat = 1 error
if 3 > s_error > -3: error = 0 if error > 10:
error = 10 elif error < -10:
error = -10
4.1.3.4
Fungsi PID
Dalam fungsi ini dihitung nilai pid dan juga pembatasan nilai pid. Nilai pid digunakan untuk menentukan kecepatan motor kiri dan kana. Penentuan nilai parameter proporsional, integratif, dan derivatif menggunakan metode “heuristik” atau”try and error” itu mencoba. Pembatasan hasil perhitungan s_pid dilakukan agas tidak melebihi nilai dutycycle yang ada.
def pid():
(49)
s_pid = long((3.5 * error) + ((1/0.0006) * (error - ls_error)) + ((1*0.0006) * (error + ls_error)))
if s_pid > 70: s_pid = 70 elif s_pid < -70: s_pid = -70 if j_error > 20:
piki = 35 + s_pid#j_error + s_pid pika = 35 - s_pid#j_error - s_pid elif j_error <= 20:
piki = 0 #+ (s_pid / 2) pika = 0 #- (s_pid / 2) if -0.5 < error < 0.5 and j_error != 0:
piki = 80 pika = 80 if piki <= 15: piki = 0 elif piki >= 99: piki = 99 if pika <= 15: pika = 0 elif pika >= 99: pika = 99 if kon == "A":
pii = piki pia = pika elif kon == "B":
pii = pika pia = piki ls_error = error
ki.ChangeDutyCycle(int(pii)) ka.ChangeDutyCycle(int(pia))
4.2
Perubahan Perancangan
Pada penelitian iini terjadi perubahan perancangan pada Bentuk Robot, penggunaan level shifter, perubahan kode dan format komunikasi.
4.2.1 Perubahan Bentuk Robot
Bentuk robot berubah dari gambar 3.2 sampai gambar 3.6 menjadi bentuk lingkaran seperti pada gambar 4.1 sampai dengan gambar 4.7 . Perubahan bentuk ini dimaksutkan
(50)
supaya jika robot ini menabrak maka akan lebih mudah untuk lolos jika berbentuk lingkaran.
4.2.2 Perubahan Warna Pengenal Robot
Warna pengenal robot pada bab peranacangan adalah merah sebagai depan dan biru sebagai belakang robot berubah menjadi ungu sebagai depan dan biru sebagai belakang. Perubahan ini dikarenakan menurut coach computer warna merah terlalu dekat dengan warna bola yang berwarna orange.
4.2.3 Perubahan Penggunaan
Level Shifter
Gambar 4.12 Log.
Pada perancangan BAB III gambar 3.8 yaitu penggunaan DT-Proto Arduino Pi-Shield digantikan Logic Level Conferter 4 channel. Dengan alasan pada penelitian ini penggunaan level shifter hanya dibutuhkan untuk tiga port GPIO yaitu untuk masukan sensor pendeteksi bola, keluaran driver Solenoid, dan keluaran motor penggiring bola. Sedangkan untuk driver motor L298 dapat dihubungkan langsung ke GPIO raspberry pi, karena logika tinggi pada ic L298 adalah 2,3 sampai dengan 5 VDC[18] sehingga level tegangan GPIO dapat mengontrol IC tersebut.
(51)
4.2.4 Perubahan Kode dan Format Pengiriman
Pada perancangan Kode dan Format Pengiriman di tunjukan oleh tabel 3.1. Pada Penelitian ini Kode dan Format Pengiriman antara Coach Computer dengan robot berubah. Menjadi seperti ditunjukan oleh tabe 4.2. Perubahan ini karena data yang lain tidak perlu dikomunikasikan. Data telah diolah oleh coach computer jadi penelitian ini menjadi lebih efisien karena tiak mrengirim data yang kurang perlu.
Tabel 4.2 Format Penerimaan Data
Kode variabel Format Data
9 Arah Serang A / B
8 Radius 0 - 9 0 – 9 0 - 9
7 Sudut + / - 0 -1 0 – 9 0 – 9 + / - 0 - 9 0 – 9 0 - 9
6 Tendang 0 / 1
5 Kirim 0 / 1
Berhenti ‘exit’
Arah serang data akan diterima dengan format ‘9A’ atau ‘9B’ data A menandakan arah serang kanan dan B arah serang kiri. Variabel radius diterima dengan ‘8 + tiga digit bilangan’ yang menandakan jarak robot dengan target. Variabel sudut diterima dengan format ‘7’ + ‘+/-’ + ‘tiga digit pv_sudut’ + ‘+/-’ + ‘ tiga digit sp sudut’ terjadi perubahan dari perancangan yaitu dalam perancangan data pv dan sp sudut hanya diterima dengan dua digit, perubahan ini karena penelitian ini mengirim lebih dari dua digit sudut. Variabel tendang adalah tanda saat robot harus melakukan tendangan atau tidak. Diterima dengan format ‘91’ untuk menendang dan ‘90’ untuk tidak menendang. Dan variabel kirim merupaka perintah untuk memerintah robot mengirrimkan kondisi bola. Data diterima ‘51’ merupakan perintah untuk robot mengirimkan kondisi bola dan ‘50’ untuk tidak mengirimkan kondisi bola. Pada saat robot menerima perintah dari coach computer untuk mengirimkan data kondisi bola maka data ‘1’ akan dikirim jika bola telah terdeteksi oleh sensor bola pada robot dan ‘0’ jika bola tidak terdeteksi oleh robot.
Arah serang data akan diterima dengan format ‘9A’ atau ‘9B’ data A menandakan arah serang kanan dan B arah serang kiri. Variabel radius diterima dengan ‘8 + tiga digit bilangan’ yang menandakan jarak robot dengan target. Variabel sudut diterima dengan format ‘7’ + ‘+/-’ + ‘tiga digit pv_sudut’ + ‘+/-’ + ‘ tiga digit sp sudut’ terjadi perubahan
(52)
dari perancangan yaitu dalam perancangan data pv dan sp sudut hanya diterima dengan dua digit, perubahan ini karena penelitian ini mengirim lebih dari dua digit sudut. Variabel tendang adalah tanda saat robot harus melakukan tendangan atau tidak. Diterima dengan format ‘91’ untuk menendang dan ‘90’ untuk tidak menendang. Dan variabel kirim merupaka perintah untuk memerintah robot mengirrimkan kondisi bola. Data diterima ‘51’ merupakan perintah untuk robot mengirimkan kondisi bola dan ‘50’ untuk tidak mengirimkan kondisi bola. Pada saat robot menerima perintah dari coach computer untuk mengirimkan data kondisi bola maka data ‘1’ akan dikirim jika bola telah terdeteksi oleh sensor bola pada robot dan ‘0’ jika bola tidak terdeteksi oleh robot.
4.3
Pengujian Robot
Pengujian ini bertujuan untuk menguji robot dalam penelitian ini apakah sesuai dengan tujuan dari penelitian ini dan melihat kemungkinan pengembangan pada robot ini.
4.3.1 Pengujian Komunikasi
Tabel 4.3 Data Komunikasi dari Coach Computer ke Robot No
Data dikirim (coach computer)
Data diterima
(robot) Error (%)
1 1 1 0
2 2 2 0
3 3 3 0
4 4 4 0
5 5 5 0
6 6 6 0
7 7 7 0
8 8 8 0
9 9 9 0
Karena robot penelitian ini ssangat bergantung dengan dari coach computer maka proses komunikasi sangat lah penting dalam penelitian ini. Komunikasi ini dibangung
(53)
dengan module socket yang ada pada python. Alamat yang digunakan dalam komunikasi ini adalah alamat ip komputer.
Dari tabel 4.3 dan tabel 4.4 diketahui data yang dikirim sama dengan data yang diterima. Maka error untuk komunikasi adalah sebesar 0 % karena Error diukur dengan
persamaan sebagai berikut error=data dikirim−data diterima
100
Tabel 4.4 data komunikasi dari robot ke coach computer
No Data dikirim (robot)
Data diterima (coach computer)
Error (%)
1 0 0 0
2 1 1 0
3 2 2 0
4 3 3 0
5 4 4 0
6 5 5 0
7 6 6 0
8 7 7 0
9 8 8 0
4.3.2 Pengujian
Response
Robot
Robot bekerja dengan cara menuju titik dimana Coach Computer tunjukkan. Sehingga data yang dibahas adalah data dimana robot menuju titik tertentu. Pengujian
response robot ini dilakukan untuk mengetahui response robot terhadap data yang diterima dari coach computer. Variabel yang diterima adalah jarak (radius), sp_sudut (sudut tujuan), dan pv_sudut (sudut robot). Untuk menentukan koefisien kp, kd dan ki pada kontroler PID yang digunakan.
Gambar 4.13 sampai dengan 4.16 merupakan gambar grafik respon PID dengan beberapa kombinasi nilai KP, KI, dan KD. Dalam penelitian ini Cycle Time atau Ts sebesar 0,7 mili detik. Sehingga diambil nilai KP 5, KI 0, dan KD 2,5 karena memiliki waktu yang
(54)
lebih cepat untuk mencapai kondisi error nol dari pada kombinasi yang lain seperti pada gambar 4.15.
Gambar 4.13. Grafik response PID KP = 4 ; KI = 0 ; KD = 0.
(55)
Gambar 4.15. Grafik respon PID KP = 5 ; KI = 0 ; KD = 2,5.
Gambar 4.16. Grafik respon PID KP = 5 ; KI = 0 ; KD = 2.
Data titik pada tabel 4.5 diambil dari coach computer dikarenakan robot tidak menerima data titik tersebut. Data yang diambil adalah titik awal robot, posisi tujuan, dan posisi akhir robot setelah proses. Pada tebel error dihitung dengan persamaan
Error=(Posisi Tujuan−Posisi Awal max )
(56)
Dengan nilai max untuk X adalah 640 dan y adalah 480. Data ini diambil untuk mengetahui respon robot untuk mencapai tritik tertentu. Dari tabel 4.5 dapat dilihat bahwa penelitian ini dapat mengarahkan robot untuk mencapai titik tertentu dengan rata-rata error x dan y adalah 1,66% dan 3,13%. Sehingga robot mampu menuju titik tertentu dengan selisih yang lebih kecil antara titik tujuan dan titik akhir.
Tabel 4.5 Pengujian Response robot
No Posisi Awal (x;y) Posisi Tujuan (x;y) Posisi akhir (x;y) Error (x;y) % 1 58;77 465;408 449;398 2,50;2,08 2 494;302 034;079 036;075 0,31;0,83 3 85;187 240;255 228;231 1,88;5,00 4 258;84 300;255 318;236 2,81;3,96 5 318;236 55;334 57;354 0,31;4,17 6 119;435 64;113 58;96 0,94,;0,54 7 115;58 92;315 98;298 0,94;3,54 8 383;065 91;316 80;292 1,72;5,00 9 513;296 49;69 68;87 2,97;3,75 10 494;303 45;73 36;75 1,41;0,42 11 58;77 449;398 465;408 2,50;2,08
Dalam pengujian bermain robot mampu mengambil bola sebanyak tujuh kali dalam sepuluh percobaan. Sehingga tidak semua percoaan robot mampu mengambil bola. Ini dikarenakan robot tidak sepenuhnya tepat dalam menuju titik dimana bola berada. Sehinggga robot tidak selalu mendapatkan bola tepat didepan robot.Saat robot telah mendapatkan bola robot dapat menendang bola. Tendangan mengakibatkan bola meluncur menjauhi sisi depan robot.
Dan jika robot keluar dari jangkauan kamera, robot tidak mampu membedakan apakah robot masih berada dalam jangkauan kamera atau tidak. Karena saat robot keluar dari jangkauan kamera robot tetap menerima data tabel 4.6 seolah berada dalam jangkauan kamera. Karena kemampuan untuk melihat keberadaan robot dan benda-benda lain dalam penelitian ini sepenuhnya dimiliki oleh coach computer.
Untuk memaksimalkan penelitian ini maka diperlukan beberapa perbaikan untuk pengembangannya seperti, perubahan bentuk depan robot yaitu bagian penerima bola supaya lebih maksimal dalam penerimaan dan penguasaan bola. Penambahan torsi pada
(57)
motor supaya robot bisa lebih stabil dan cepat menuju titik yang ditentukan. Dan juga penggantian sistem penendang supaya dapat menendabng lebih keras dan akurat.
Tabel 4.6 Data Diterima saat Robot di Luar Jangkauan Kamera
sp_sudut pv_sudut radius
12 170 117
13 170 117
13 170 118
12 169 118
12 169 118
12 167 118
12 167 118
12 167 118
12 167 118
12 167 118
12 167 118
12 67 118
12 167 118
(58)
BAB V
KESIMPULAN DAN SARAN
5.1
Kesimpulan
Dari hasil pengujian dari robot soccer beroda berbasis raspberry pi 3 sebagai prototipe ERSBI 2017, dapat diambil kesimpulan:
1. Sistem mampu merespon perintah atau data yang diterima untuk bergerak menuju titik tertentu dengan rata-rata error 1,66% untuk nilai x, dan 3,13% untuk nilai y.
2. Sistem mampu medapatkan bola dengan kemungkinan berhasil tujuh dari sepuluh percobaan.
3. Sistem mampu menendang bola.
4. Sistem mampu berkomunikasi dengan baik menggunakan modul socket Python.
5.2
Saran
Saran untuk pengembangan selanjutnya antara lain:
1. Perubahan desain robot supaya lebih maksimal dalam penerimaan bola denaga cara memperlebar area penerimaan bola pada robot.
2. Menggunkan solenoid dengan gaya lebih besar supaya robot mampu menendang bola dengan gaya yang lebih besar.
3. Menggunkan motor yang dengan torsi atau rpm yang lebih besar sehingga robot mampu menopang beban robot dan bergerak lebih cepat.
(59)
DAFTAR PUSTAKA
[1] ---,2016,Panduan Ekshibisi Robot Sepakbola Beroda Indonesia (ERSB),
KRI2016
[2] ---, ---, Raspberry Pi 3Model B,
https://www.raspberrypi.org/products/raspberry-pi-3-model-b/, diakses pada tanggal 20 oktober 2016
[3] ---, ---, GPIO : MODELS A+, B+, RASPBERRY PI 2B AND RASPBERRY PI 3 B, https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/, diakses pada 20 oktober 2016
[4] ---, ---, Raspberry Pi 3 to I2C LCD, http://raspberry-lp2maray.blogspot.co.id/2016/10/raspberry-pi-3-to-i2c-lcd.html, diakses pada 2 november 2016
[5] ---, ---, General Python FAQ, https://docs.python.org/3/faq/general.html#what-is-python-good-for, diakses pada 21 november 2016
[6] ---, 2011, Terminologi Dasar dalam Pemograman Jaringan,
http://studiawan.com/terminologi-dasar-dalam-pemrograman-jaringan/, diakses pada 21 november 2016
[7] ---, 2011, Pemrograman Jaringann Sederhana di Python,
http://studiawan.com/pemrograman-jaringan-sederhana-di-python/, diakses pada 21 november 2016
[8] [email protected], 2014, Manual DT-Proto Arduino PiShield,
indonesia version.
[9] STMicroelectronics, 2000, L298 Dual Full-Brigde Driver, STMicroelectronics, Italy.
[10] –---, 2008, IR Obstacle Sensor, http://researchdesignlab.com/index.php/sensors/ir-obstacle-sensor.html, diakses pada 21 november 2016
[11] Zuhal, Dasar Teknik Tenaga Listrik dan Elektronika Daya. Jakarta: Gramedia, 1988 [12] Sumanto, Mesin Arus Searah. Jogjakarta: Penerbit ANDI OFFSET, 1994
[13] Halliday, 2001 Halliday, David; Resnick, Robert; Walker, Jearl. Fundamentals of Physics (6th ed.). John Wiley & Sons, Inc.
(60)
[14] Siswono, Tatang Yuli Eko; Netty Lastiningsih ,2007. Matematika 2 SMP dan MTs untuk Kelas VIII. Jakarta: Esis/Erlangga
[15] ---, ---, GPIO : RASPBERRY MODELS A AND B,
https://www.raspberrypi.org/documentation/usage/gpio/, diakses pada 21 november 2016
[16] ----, ---- , gambar rpi ke dt-proto shield,
http://www.innovativeelectronics.com/images/img_prod/prod_66/th_dt_proto_Ard uino-pishield_2.jpg, diakses pada 21 november 2016
(61)
(62)
# Data
Posisi awal Posisi Tujuan Posisi Akhir error max
x y x y x y x y x y
58 77 465 408 449 398 2.50% 2.08%
640 480
494 302 34 79 36 75 0.31% 0.83%
85 187 240 255 228 231 1.88% 5.00%
258 84 300 255 318 236 2.81% 3.96%
318 236 55 334 57 354 0.31% 4.17%
119 435 64 113 58 96 0.94% 3.54%
115 58 92 315 98 298 0.94% 3.54%
383 65 91 316 80 292 1.72% 5.00%
513 296 49 69 68 87 2.97% 3.75%
494 303 45 73 36 75 1.41% 0.42%
58 77 449 398 465 408 2.50% 2.08%
Rata-rata 1.66% 3.13%
max 2.97% 5.00%
min 0.31% 0.42%
(63)
# Program
import RPi.GPIO as gpio import os
import time
from socket import * ls_error = 0
s_error = 0 lj_error = 0 j_error = 0 error = 0 data = 0000000 pv_sudut = 000000000 sp_sudut = 000000000 dkiriml = "0"
enab = 0 tendang = 0 kon = "A" # Setup GPIO
(64)
#################################################################### gpio.setmode(gpio.BOARD) gpio.setwarnings(False) gpio.setup(7, gpio.OUT) gpio.setup(11, gpio.OUT) gpio.setup(12, gpio.OUT) gpio.setup(13, gpio.OUT) gpio.setup(15, gpio.OUT) gpio.setup(16, gpio.OUT) gpio.setup(19, gpio.OUT) gpio.setup(22, gpio.OUT) gpio.setup(18, gpio.IN) ki = gpio.PWM(16, 200) ka = gpio.PWM(7, 200) ki.start(0)
ka.start(0)
# Setup Komunikasi
##################################################### host = ""
host1 = "192.168.1.43" #host1 = "192.168.43.195" #host1 = "172.23.14.155" #host1 = "192.168.43.244" #host1 = "192.168.12.142"
port = 13000 #port yang digunakan adalah 13000, harus sama port1 = 14000
buf = 1024 #jumlah maksimal karakter yang diterima addr = (host, port)
addr1 = (host1, port1)
UDPSock = socket(AF_INET, SOCK_DGRAM) UDPSock.bind(addr)
gpio.output(19, False) print "Online" t1=0
def kode_data(data):
global kon, j_error, pv_sudut, sp_sudut, tendang, enab if data[0] == '5':
enab = int(data[1]) elif data[0] == '6':
tendang = int(data[1]) print tendang
elif data[0] == '7':
#print "koreksi sudut"
pv_sudut = int(data[1]+data[2]+data[3]+data[4]) sp_sudut = int(data[5]+data[6]+data[7]+data[8]) elif data[0] == '8':
#print "jarak"
j_error = int(data[1]+data[2]+data[3]) elif data[0] == '9':
#print "kondisi" kon = str(data[1]) elif data[0] == '0':
(65)
def olah_data():
global error, pv_sudut, sp_sudut batas = 0
s_error = 0 if sp_sudut > 0:
batas = -180 + sp_sudut if sp_sudut < 0:
batas = 180 + sp_sudut if sp_sudut >= 0:
if pv_sudut >= sp_sudut:
for i in range(sp_sudut, pv_sudut, 1): s_error = s_error - 1
if pv_sudut < sp_sudut: if pv_sudut >= batas:
for i in range(pv_sudut, sp_sudut, 1): s_error = s_error + 1 if pv_sudut < batas:
for i in range(pv_sudut, sp_sudut, 1): s_error = s_error - 1
if sp_sudut < 0:
if pv_sudut < sp_sudut:
for i in range(pv_sudut, sp_sudut, 1): s_error = s_error + 1 if pv_sudut >= sp_sudut:
if pv_sudut >= batas:
for i in range(sp_sudut, pv_sudut, 1): s_error = s_error + 1 if pv_sudut < batas:
for i in range(sp_sudut, pv_sudut, 1): s_error = s_error - 1
error = s_error / 9.5 #untuk 10 derajat = 1 error #error = s_error / 4.5 # /5 derajat
if 3 > s_error > -3: error = 0 if error > 10:
error = 10 elif error < -10:
error = -10 gpio.output(11, True) gpio.output(12, False) gpio.output(13, True) gpio.output(15, False) #if 130 > s_error > -130:
#gpio.output(11, True) #gpio.output(12, False) #gpio.output(13, True)
(66)
#gpio.output(15, False) #elif s_error >= 130:
#gpio.output(11, False) #gpio.output(12, True) #gpio.output(13, True) #gpio.output(15, False) #elif s_error <= -130:
#gpio.output(11, True) #gpio.output(12, False) #gpio.output(13, False) #gpio.output(15, True) def tampilan():
print 'radius\t\t: {}\nsudut robot\t: {}\nsudut tujuan\t: {}'.format(j_error, pv_sudut, sp_sudut)
def pid():
global ls_error, error, j_error, kon
#s_pid = long((100 * error) + ((1/0.0006) * (error - ls_error)) + ((1*0.0006) * (error + ls_error)))
s_pid = long((3 * error) + ((1 / 0.0007) * (error - ls_error)) + ((0 * 0.0007) * (error + ls_error)))
#s_pid = long((2 * error) + (1.5 * (error - ls_error)) + (0.000001 * (error + ls_error)))
if s_pid > 90: s_pid = 90 elif s_pid < -90:
s_pid = -90
#if s_error < -130 or s_error > 130: #piki = 70
#pika = 70 if j_error > 20:
piki = 30 + s_pid pika = 30 - s_pid elif j_error <= 20:
piki = 0 #+ (s_pid / 2) pika = 0 #- (s_pid / 2) if -0.5 < error < 0.5 and j_error != 0:
piki = 60 pika = 60 if piki <= 10:
piki = 0 elif piki >= 99:
piki = 99 if pika <= 10:
pika = 0 elif pika >= 99:
pika = 99 if kon == "A":
(67)
pii = piki pia = pika elif kon == "B":
pii = pika pia = piki
print 'Error\t\t: {} \nLs Error\t: {} \nJarak\t\t: {} \nPID\t\t: {} \n\t{} Kiri\tkanan {}'.format(error, ls_error, j_error, s_pid, pii, pia)
ls_error = error
ki.ChangeDutyCycle(int(pii)) ka.ChangeDutyCycle(int(pia)) print 'kondisi\t : {}'.format(kon) if __name__ == '__main__':
while True: try:
if gpio.input(18) == False: dkirim = "2"
gpio.output(19, True) elif gpio.input(18) == True:
dkirim = "1"
gpio.output(19, False) print 'enab {}'.format(enab) if enab == 1: #k
UDPSock.sendto(dkirim, addr1) print 'kirim {}'.format(dkirim) enab = 0
t2 = time.time() - t1 print '\t\t\t\t\t{}'.format(t2)
(data, addr) = UDPSock.recvfrom(buf) t1 = time.time()
print "data diterima \t: " + str(data) kode_data(data)
print 'tendang {}'.format(tendang) print(tendang)
if tendang == 1:
gpio.output(22, True) time.sleep(0.1) gpio.output(22, False) time.sleep(0.1) gpio.output(22, True) time.sleep(0.1) gpio.output(22, False) tendang = 0;
olah_data() tampilan() pid()
if data == "exit":#program berhenti jika menerima pesan exit
(68)
ki.ChangeDutyCycle(0) ka.ChangeDutyCycle(0) #ki.stop()
#ka.stop() #gpio.cleanup() #break
except KeyboardInterrupt: gpio.cleanup() UDPSock.close() os._exit(0)
(69)
(70)
(1)
def olah_data():
global error, pv_sudut, sp_sudut batas = 0
s_error = 0 if sp_sudut > 0:
batas = -180 + sp_sudut if sp_sudut < 0:
batas = 180 + sp_sudut if sp_sudut >= 0:
if pv_sudut >= sp_sudut:
for i in range(sp_sudut, pv_sudut, 1): s_error = s_error - 1
if pv_sudut < sp_sudut: if pv_sudut >= batas:
for i in range(pv_sudut, sp_sudut, 1): s_error = s_error + 1 if pv_sudut < batas:
for i in range(pv_sudut, sp_sudut, 1): s_error = s_error - 1
if sp_sudut < 0:
if pv_sudut < sp_sudut:
for i in range(pv_sudut, sp_sudut, 1): s_error = s_error + 1 if pv_sudut >= sp_sudut:
if pv_sudut >= batas:
for i in range(sp_sudut, pv_sudut, 1): s_error = s_error + 1 if pv_sudut < batas:
for i in range(sp_sudut, pv_sudut, 1): s_error = s_error - 1
error = s_error / 9.5 #untuk 10 derajat = 1 error #error = s_error / 4.5 # /5 derajat
if 3 > s_error > -3: error = 0 if error > 10:
error = 10 elif error < -10:
error = -10 gpio.output(11, True) gpio.output(12, False) gpio.output(13, True) gpio.output(15, False) #if 130 > s_error > -130:
#gpio.output(11, True) #gpio.output(12, False) #gpio.output(13, True)
(2)
#gpio.output(15, False) #elif s_error >= 130:
#gpio.output(11, False) #gpio.output(12, True) #gpio.output(13, True) #gpio.output(15, False) #elif s_error <= -130:
#gpio.output(11, True) #gpio.output(12, False) #gpio.output(13, False) #gpio.output(15, True) def tampilan():
print 'radius\t\t: {}\nsudut robot\t: {}\nsudut tujuan\t: {}'.format(j_error, pv_sudut, sp_sudut)
def pid():
global ls_error, error, j_error, kon
#s_pid = long((100 * error) + ((1/0.0006) * (error - ls_error)) + ((1*0.0006) * (error + ls_error)))
s_pid = long((3 * error) + ((1 / 0.0007) * (error - ls_error)) + ((0 * 0.0007) * (error + ls_error)))
#s_pid = long((2 * error) + (1.5 * (error - ls_error)) + (0.000001 * (error + ls_error)))
if s_pid > 90: s_pid = 90 elif s_pid < -90:
s_pid = -90
#if s_error < -130 or s_error > 130: #piki = 70
#pika = 70 if j_error > 20:
piki = 30 + s_pid pika = 30 - s_pid elif j_error <= 20:
piki = 0 #+ (s_pid / 2) pika = 0 #- (s_pid / 2) if -0.5 < error < 0.5 and j_error != 0:
piki = 60 pika = 60 if piki <= 10:
piki = 0 elif piki >= 99:
piki = 99 if pika <= 10:
pika = 0 elif pika >= 99:
pika = 99 if kon == "A":
(3)
pii = piki pia = pika elif kon == "B":
pii = pika pia = piki
print 'Error\t\t: {} \nLs Error\t: {} \nJarak\t\t: {} \nPID\t\t: {} \n\t{} Kiri\tkanan {}'.format(error, ls_error, j_error, s_pid, pii, pia)
ls_error = error
ki.ChangeDutyCycle(int(pii)) ka.ChangeDutyCycle(int(pia)) print 'kondisi\t : {}'.format(kon) if __name__ == '__main__':
while True: try:
if gpio.input(18) == False: dkirim = "2"
gpio.output(19, True) elif gpio.input(18) == True:
dkirim = "1"
gpio.output(19, False) print 'enab {}'.format(enab) if enab == 1: #k
UDPSock.sendto(dkirim, addr1) print 'kirim {}'.format(dkirim) enab = 0
t2 = time.time() - t1 print '\t\t\t\t\t{}'.format(t2)
(data, addr) = UDPSock.recvfrom(buf) t1 = time.time()
print "data diterima \t: " + str(data) kode_data(data)
print 'tendang {}'.format(tendang) print(tendang)
if tendang == 1:
gpio.output(22, True) time.sleep(0.1) gpio.output(22, False) time.sleep(0.1) gpio.output(22, True) time.sleep(0.1) gpio.output(22, False) tendang = 0;
olah_data() tampilan() pid()
if data == "exit":#program berhenti jika menerima pesan exit
(4)
ki.ChangeDutyCycle(0) ka.ChangeDutyCycle(0) #ki.stop()
#ka.stop() #gpio.cleanup() #break
except KeyboardInterrupt: gpio.cleanup() UDPSock.close() os._exit(0)
(5)
(6)