BAB III PERANCANGAN ROBOT
3.1.
BLOK DIAGRAM Perancangan robot pemadam api ini dibagi menjadi 3 bagian utama yaitu mekanik, elektrik, dan perangkat lunak / program. Sebelum masuk pada detail perancangan, sebaiknya mengenal blok diagram rancangan secara keseluruhan.
Gambar 3.1 Blok diagram robot pemadam api.
Blok diagram umum prototipe robot pemadam api ini terdiri dari komponen-komponen utama yaitu sensor api, sensor tabrak, motor penggerak, motor kipas, mikrokontroler, dan perangkat lunak. Masing-
76
masing fungsi dari komponen tersebut akan diintegrasi, dikontrol, dan diprogram menjadi suatu fungsi robot pemadam api. Sebelum
mengintegrasi
komponen-komponen
tersebut
harus
memahami betul variabel dari masing-masing kompone. Variabel-variabel ini sangat penting dalam proses perancangan, pengujian, hingga analisis pada langkah selanjutnya. Variabel yang akan diambil berdasarkan tujuan dari tugas akhir pada bagian awal halaman, sehingga batasan menjadi jelas dalam metodologi analisis dan tidak terjebak spekulasi yang tidak perlu.
Gambar 3.2 Komponen-komponen robot (tampak atas).
Variabel-variabel ini penting untuk dipahami secara detail karena jika masuk
tahap
pengujian
maka
variabel-variabel
ini akan
saling
mempengaruhi dengan variable yang lain. Misalnya pada variabel objek api yang akan dilacak oleh sensor api yang mempunyai batasan yaitu
77
sensor hanya mengenal gelombang cahaya infrared dengan kata lain bahwa sensor tidak bisa membedakan cahaya api, matahari, lampu, dan sebagainya. Hal ini dapat membuat variabel tidak konsisten dan itu akan mempengaruhi akurasi lacak yang akhirnya sering merubah-ubah nilai threshold dalam program yang seharusnya tidak perlu.
3.2.
PERANCANGAN MEKANIK Perancangan mekanik dibagi menjadi 5 sistem mekanik utama yaitu mekanisme tabrakan, pelacak arah api, pemadaman api, penggerak, dan badan robot. Sistem mekanik ini yang akan berinteraksi dengan dunia luar secara fisik seperti bergerak maju-mundur diatas permukaan, menabrak tembok atau penghalang, kipas penghembus angin agar api menjadi padam. Berikut akan dikupas detail satu persatu bagaimana merancang sistem mekanik utama tersebut.
3.2.1. Mekanis tabrakan Mekanis tabrakan adalah mekanisme untuk mendeteksi benda atau penghalang jalir robot secara sentuhan fisik. Dalam rancangan ini penulis menggunakan 2 buah crash sensor (sensor tabrak) yang prinsip kerjanya seperti saklar batas. Bila lengan saklar disentuh / menabrak benda maka saklar posisi kontak (close). Sensor batas ada 2 jenis berdasarkan posisi yaitu sensor tabrak kiri dan kanan.
78
Gambar 3.3 Sensor tabrak kiri dan kanan.
Area cakupan sensor tabrak ini berlaku untuk bidang penghalang rata dan posisi letak di badan robot. Semakin banyak jumlah sensor tabrak maka area cakupan semakin luas atau sensitif. Sehubungan hanya memakai 2 sensor tabrak yang diletakkan pada sisi kiri dan kanan badan robot maka area cakupan terbatas seperti gambar dibawah.
Gambar 3.4 Area cakupan sensor tabrak.
79
Gambar 3.5 Dimensi sensor tabrak (mm).
Gambar 3.6 Konstruksi letak sensor di sudut kiri dan kanan depan.
Kedua sensor tabrak harus dipasang dengan posisi seperti gambar diatas terhadap badan robot agar cakupan area tabrak lebih optimal. Hal ini berlaku untuk penghalang dengan permukaan rata. Jika penghalang memiliki permukaan bergelombang atau menabrak sudut tembok sisi luar menjadi tidak berfungsi. Hal ini akan menjadi batasan pada saat pengujian. Sensor tabrak harus dipasang kuat pada badan robot agar tidak mudah lepas saat terjadi tabrakan. Untuk mengikat sensor tabrak ini memakai
80
kabel ties yang diikat melalui lubang-lubang yang ada pada badan robot. Kabel ties ini menggantikan mur baut besi yang bebannya lebih berat. Semakin berat beban total robot akan semakin berat torsi yang dikeluarkan motor sehingga konsumsi arus juga semakin besar dan arus yang dikeluarkan baterai semakin cepat habis.
3.2.2. Pelacak arah api Pelacak arah api adalah pelacak posisi api dan memberi informasi arah rute api. Sedangkan sensor api sendiri hanya bisa mendeteksi api yang maksimal sudut cakupan deteksi 60º saja. Untuk menjangkau hingga 180º sudut deteksi maka diperlukan mekanik untuk mengarahkan sensor api kesudut yang dikehendaki. Untuk merancang mekanis tersebut dibutuhkan motor servo yang bisa berputar dari 0º-180º atau mengarahkan sensor api ke kiri sebesar 90º dan ke kanan 90º. Motor servo tidak hanya bisa memutar arah sudur secara presisi tetapi vaiabel sudut ini bisa dipakai untuk memberi informasi variabel arah rute api kepada mikrokontroler.
Api Sensor api
60⁰
Gambar 3.7 Sudut jangkauan lacak flame sensor ±60⁰.
81
0⁰
180⁰
Gambar 3.8 Sudut jangkauan lacak dengan motor servo.
Gambar 3.9 Dimensi flame sensor (mm).
Gambar 3.10 Dimensi servo motor (mm).
82
Konstruksi sensor api ini dirancang untuk aplikasi sederhana dalam gedung. Bagian PCB terdapat 2 lubang mur-baut untuk mendukung konstruksi pemasangan di lengan servo motor.
Gambar 3.11 Konstruksi letak flame sensor di lengan servo.
Sensor api cukup dilekatkan dengan hot gun dan ditempelkan pada bagian lengan servo motor seperti gambar diatas. Kemudian servo motor akan ditempatkan pada bagian depan sehingga area pandang sepanjang sudut 180⁰ tidak terhalang oleh komponen robot yang lain.
3.2.3. Pemadam api Pemadam api adalah sistem mekanis untuk memadamkan api. Untuk mekanisme pemadam api ini dipilih motor kipas angin kecil dengan motor DC magnet permanen. Kipas angin ini punya kapasitas hembusan relatif
83
kecil yang mampu memadamkan api lilin kecil dengan jarak maskimal sekitar 10 cm. Motor kipas angin
Api
Gambar 3.12 Sudut jangkauan hembusan motor kipas angin.
Kipas angin ini mempunyai diameter hembus sekitar 5 cm yang cukup untuk memadamkan api lilin kecil dengan jarak antara 5-10 cm. Pemasangan kipas angin ini diletakkan pada bagian depan badan robot. Posisi kipas tidak menghalangi gerakan lengan motor servo tetapi posisi kipas angin semaksimal mungkin didepan badan robot agar daya hembus bisa optimal.
Gambar 3.13 Konstruksi letak kipas angin.
84
Pemasangan badan kipas yang ringan ini cukup dengan lem hot gun. Lem bagian seluruh dasar kaki badan kipas sedemikian rupa sehingga saat terjadi tabrakan keras tidak akan lepas.
3.2.4. Penggerak robot Penggerak robot adalah sistem mekanis untuk mengerakkan robot maju, mundur, dan berputar. Untuk merancang mekanisme penggerak robot sederhana ini dibutuhkan 1 roda bola dan 2 roda silinder. Kontruksi letak ketiga roda ini seperti pada kontruksi kendaraan bajaj tetapi roda kemudi tidak di depan melainkan 2 roda belakang yang dibantu dengan motor. Masing-masing kedua roda belakang ini digerakkan oleh motor secara individu. Sehingga kedua roda belakang bisa melakukan formasi gerakan berputar.
Gambar 3.14 Kontruksi roda penggerak robot.
85
Untuk melakukan gerakan maju maka kedua penggerak motor berputar dengan arah dan kecepatan yang sama. Untuk melakukan gerakan putar ke kiri maka motor roda kanan berputar maju dan motor roda kiri berputar mundur. Begitu juga jika dalam kondisi sebaliknya maka badan robot akan berputar ke kanan. Kontruksi pemasangan kedua motor kiri dan kanan ini sebisa mungkin harus seporos sumbu-sumbu kedua rodanya agar rugi-rugi mekanisme gerak robot bisa diperkecil. Pemasangan motor pada badan robot harus sekuat mungkin agar selama pergerakan tidak merubahan posisi sumbu kedua motor bahkan bisa mengurangi akurasi pelacakan api yang dikarenakan variabel sudut belok tidak sesuai dengan badan robot. Dalam kontruksi pemasangan motor ini diperlukan lem hot gun dan kabel ties. Kedua pengikat ini sudah cukup memberi kekuatan kontruksi motor untuk jenis prototipe ini.
Gambar 3.15 Kontruksi motor penggerak.
86
Letak motor pada badan robot diposisi bagian atas agar permukaan badan robot tetap rata. Cara ini bisa diganti dengan menambah pendukung roda bola depan untuk mendapatkan badan robot kondisi yang rata. Tetapi penambahan aksesoris pendukung tidak boleh menambah total berat robot.
3.2.5. Badan robot Badan robot adalah rangka dasar untuk meletakkan semua perangkat keras robot meliputi mekanik dan elektrik. Bahan kokoh dan ringan adalah syarat mutlak untuk rangka dasar robot. Total berat robot yang besar akan menambah beban penggerak, hal ini dapat mengakibatkan konsumsi sumber arus baterai yang boros dan cepat habis.
Gambar 3.16 Kontruksi badan robot dari DFRobot.
87
Bahan badan robot ini terbuat dari serat karbon yang ringan dan khusus dirancang untuk para penghobi robot dan remote control (RC). Badan robot ini sudah dilengkapi dengan aksesoris yang bisa disesuaikan dengan keinginan kita. Badan robot ini sudah dilengkapi lubang-lubang yang memudahkan untuk pemasangan board mikrokontroler, motor dll. Untuk board Arduino jenis Uno yang umum sudah disediakan sehingga mudah dan instan dalam pemasangannya.
3.3.
PERANCANGAN ELEKTRIK Perancangan elektrik dibagi menjadi 6 sistem elektrik utama yaitu deteksi halangan, deteksi api, pelacak arah api, pemadam api, teknik pengendalian, dan power supply. Sistem elektrik adalah tenaga bagi robot sehingga robot
menjadi hidup dan berinteraksi dengan kondisi
disekitarnya. Sistem mekanik dengan elektrik saling berkaitan satu sama lain. Perancangan yang tepat pada kedua sistem akan menghasilkan rancangan robot yang optimal pada aspek konversi energi daya menjadi mekanis. Berikut akan dijelaskan secara detail bagaimana merancang sistem elektrik utama tersebut.
3.3.1. Pendeteksi halangan Pendeteksi halangan adalah sistem elektrik untuk mendeteksi adanya halangan di jalir yang akan dilalui robot. Prinsip kerja deteksi halangan ini adalah perubahan kondisi arus listrik oleh kontak saklar batas ketika
88
tersentuh halangan. Perubahan kondisi arus listrik ini yang akan digunakan untuk memberi sinyal pada mikrokontroler bahwa robot kondisi menabrak penghalang atau tembok. Dalam rancangan pendeteksi halangan ini penulis menggunakan 2 saklar batas yang masing-masing untuk mendeteksi penghalang bagian kanan robot dan satu lagi di bagian kiri. Dengan demikian mikrokontroler dapat mengetahui kapan menabrak penghalang bagian kanan dan kapan saat menabrak bagian kiri. Crash Sensor (sensor tabrak) memiliki lengan mekanik khusus untuk yang bersentuhan fisik dengan penghalang. Bila lengan saklar disentuh / menabrak benda maka saklar posisi kontak (close). Sensor batas ada 2 jenis berdasarkan posisi yaitu kiri dan kanan.
Gambar 3.17 Sensor tabrak kiri dan kanan pada robot.
89
Kedua sensor tabrak dikoneksi ke pin kanal digital input dan sumber tegangan. Satu sensor tabrak mengambil 1 kanal digital input. Total kanal yang diambil oleh sensor tabrak ini adalah 2 kanal digital input.
Tabel 3.1 Spesifikasi sensor tabrak (kanan / kiri). Spesifikasi
Typical
Jenis sinyal
Digital
Tegangan kerja
5V
Panjang kabel
250 mm
Ukuran
24mm x 20mm x 8mm
GND = hitam VCC = merah Sinyal digital = hijau Gambar 3.18 Warna kabel terminal pin-pin sensor tabrak.
Tabel 3.2 Identifikasi terminal pin dan kabel sensor tabrak. Warna kabel
Keterangan
Pin Terminal
Hijau
Sinyal digital
2 kiri / 3 kanan
Merah
Tegangan sumber
VCC / 5V
Hitam
Grounding
GND
Kabel warna hijau sensor tabrak untuk sinyal bisa langsung diterminasi pada pin digital arduino nomer 2 atau 3 melalui shield servo
90
yang diatasnya. Untuk kabel warna merah (VCC) dan hitam (GND) melalui breadboard mini sebagai distribusi sumber tegangan 5V dan Grounding.
Gambar 3.19 Pengawatan sensor tabrak dengan Arduino.
Gambar 3.20 Koneksi kabel sensor tabrak pada breadboard mini.
91
3.3.2. Pendeteksi api Pendeteksi api adalah sistem elektrik untuk mendeteksi adanya api. Prinsip kerja deteksi api ini adalah sama seperti kerja saklar tetapi menggunakan
semikonduktor
atau
phototransistor.
Jika
didepan
phototransistor ada api yang sejajar garis sumbu horisontal dan vertikal maka terjadi perubahan kondisi arus listrik pada kaki kolektor dan emitor. Perubahan nilai arus listrik ini yang akan digunakan untuk memberi sinyal analog pada mikrokontroler bahwa robot sedang mendeteksi cahaya api. Dalam rancangan pendeteksi ini penulis menggunakan 1 sensor api (flame sensor) untuk mendeteksi api yang diletakkan dibagian depan badan robot. Dengan demikian mikrokontroler dapat mengetahui besar kecil dan arah posisi api tersebut.
Gambar 3.21 Sensor api pada robot.
92
Sensor api menggunakan phototransistor yang sangat sensitif mendeteksi gelombang infrared 760 nm ~ 1100 nm. Sumber cahaya infrared ditimbulkan oleh getaran atom dalam molekul-molekul benda panas. Hal ini bisa terjadi pada las listrik, cahaya matahari, petir, radiasi panas tubuh manusia, dan benda-benda panas yang tidak terlihat oleh mata. Untuk mengurangi gangguan fungsi lacak pada robot, sebaiknya sumber panas / infrared palsu tersebut dihindar selama perancangan hingga tahap pengujian.
Api
Sensor api
60⁰
Gambar 3.22 Sudut jangkauan lacak flame sensor ±60⁰.
Tabel 3.3 Spesifikasi flame sensor YG1006. Keterangan Tegangan Arus Jangkauan lebar-pita Jangkauan jarak deteksi Waktu respon Suhu operasi Aplikasi
Min 4.75 760 0 -25
93
Typical Maks. 5.0 5.30 20 940 1100 ~ 1 15 ~ 85 Dalam ruangan
Unit VDC mA nm m µS ℃
Gambar 3.23 Hubungan sensitif dengan panjang gelombang infrared.
Kurva panjang gelombang pada gambar diatas bisa dari segala sumber cahaya antara 700 nm sampai 1100 nm seperti cahaya api, lampu, petir, matahari, benda panas dll. Sumber cahaya selain api yang dianggap sebagai cahaya palsu. Sensor api ini sangat sensitif terhadap cahaya, untuk itu perlu diperhatikan sumber cahaya palsu seperti lampu, petir, cahaya matahari, benda panas dll. yang berpotensi menggangu proses lacak. Sensor api ini tidak memiliki kemampuan untuk membedakan antara cahaya api, lampu, petir, matahari dan sebagainya. Jadi selama pengujian nanti akan dibatasi hanya melacak api dengan kondisi ruangan yang bebas dari sumber cahaya palsu seperti yang telah disebut diatas. Berdasarkan analisis sebelumnya untuk kurva hubungan antara kecerahan api dengan jarak akan ditunjukkan pada gambar dibawah. Nilai pada skala kecerahan diambil dari nilai yang muncul pada serial monitor. Tipe data untuk nilai kecerahan adalah integer.
94
Gambar 3.24 Hubungan kecerahan dengan jarak. Kurva diatas berlaku untuk kondisi cahaya dalam ruangan tidak terang dan cahaya api lebih mendominasi disekitar sensor api.
Gambar 3.25 Pengawatan flame sensor.
Sensor api adalah sebuah phototransistor yang kaki basis peka terhadap cahaya, sehingga perubahan cahaya akan mempengaruhi besar
95
arus yang mengalir dari kaki kolektor (VCC) ke kaki emitor (D). Perubahan arus pada pin D (data) akan diterima oleh pin analog input kontroler arduino sebagai variabel data masukan sinyal kontinu (analog input)
yang
nanti akan diproses
lebih
lanjut
dalam algoritme
pemrograman.
GND = hitam VCC = merah D / data = biru Gambar 3.26 Warna kabel terminal pin-pin flame sensor.
Tabel 3.4 Identifikasi terminal pin dan kabel flame sensor. Warna kabel
Keterangan
Pin Terminal
Hitam
Grounding
GND
Merah
Tegangan sumber
VCC / 5V
Biru
Data / Sinyal
A0 (analog input)
Kabel-kabel flame sensor tersebut diterminasi pada pin arduino seperti pada tabel diatas. Pada konstruksi single board arduino bagian atas ada pemakaian shield motor servo, jadi pin-pin yang tampak diatas adalah pin board shield. Pin-pin shield ini terhubung lurus dengan pin-pin arduino dibawahnya. Sehubungan pin 5V hanya satu dan yang membutuhkan banyak antara lain flame sensor, crash sensor dll. maka untuk mendistribusikan tegangan 5V ini dengan menggunakan mini board dan kabel jumper.
96
Gambar 3.27 Koneksi kabel flame sensor dengan breadboard mini.
3.3.3. Pelacak arah api Pelacak arah api adalah sistem elektrik untuk mengarahkan sensor api agar jangkauan sudut lacak lebih luas. Prinsip kerja pelacak api ini adalah meletakkan sensor api di motor servo sehingga saat motor servo berputar maka sudut pelacakan semakin luas. Dalam perancangan pelacak arah api ini penulis menggunakan motor servo dengan sudut putar horizontal 0⁰~180⁰. Motor servo dengan sistem PWM ini dapat diatur arah putarannya sesuai keinginan kita. Sehingga proses pelacakan arah api akan memberi informasi arah letak api kepada mikrokontroler untuk mengarahkan robot ke arah api tersebut.
97
Untuk mengendalikan motor servo ini dibutuhkan 1 kanal keluaran sinyal PWM. Arduino Uno sudah dilengkapi pin-pin sinyal keluaran PW M untuk penggerak motor servo. 90⁰
0⁰
180⁰
Gambar 3.28 Sudut jangkauan lacak dengan motor servo.
Tabel 3.5 Spesifikasi servo motor SG90. Spesifikasi
Typical
Kecepatan (no load)
0.12 seconds / 60⁰ (4.8V)
Torsi
1.6 kg / cm (4.8V)
Suhu operasi
-30⁰ C ~ +60⁰ C
Dead Set
7 microseconds
Tegangan kerja
4.8V-6V
Arus kerja
< 500mA
Panjang kabel
180 mm
Ukuran
22mm x 12.5mm x 29.5mm
Berat
9 gram
Posisi 0⁰ (tengah)
1,5 ms pulse
Posisi 90⁰ (arah kanan)
~2 ms pulse
Posisi -90⁰ (arah kiri)
~1 ms pulse
98
PWM = orange VCC = merah GND = coklat
Gambar 3.29 Warna kabel terminal pin-pin servo motor.
Tabel 3.6 Identifikasi terminal pin dan kabel motor servo. Warna kabel
Keterangan
Pin Terminal
Oranye
Sinyal PWM
9 (PWM~)
Merah
Tegangan sumber
VCC / 5V
Coklat
Grounding
GND
Kabel-kabel flame sensor tersebut diterminasi pada pin arduino seperti pada tabel diatas. Pada konstruksi single board arduino bagian atas ada pemakaian shield motor servo, jadi pin-pin yang tampak diatas adalah pin board shield. Pin-pin shield ini terhubung lurus dengan pin-pin arduino dibawahnya. Seperti pengawatan pada flame sensor sebelumnya, bahwa kabelkabel tersebut diterminasi pada breadboard sebagai distribusi terminal pin 5V dan GND board arduino.
99
Gambar 3.30 Koneksi kabel sinyal PWM motor servo.
Gambar 3.31 Konstruksi letak servo motor di sisi depan kerangka robot.
Servo motor ini cukup dilekatkan dengan hot gun dan kabel ties yang ditempelkan pada bagian sisi depan pada kerangka utama robot seperti
100
gambar diatas. Posisi bagian depan ini diharapkan agar area sudut pandang sensor api tidak terhalang oleh komponen robot yang lain.
3.3.4. Pemadam api Pemadam api adalah sistem elektrik untuk memadamkan api. Prinsip kerja pemadam api ini adalah menggunakan kipas angin yang diletakkan di bagian depan badan robot sehingga saat robot mendeteksi ada api tepat di depannya dengan jarak tertentu maka mikrokontroler akan memberi perintah untuk menyalakan motor kipas angin agar api segera padam.
Gambar 3.32 Kipas angin motor DC. Dalam perancangan pemadam api ini penulis menggunakan motor DC relatif kecil yang cukup memadamkan api lilin kecil dengan jarak maksimal 5 cm. Kontruksi motor DC magnet permanen ini sederhana sekali relatif ringan sehingga tidak banyak menambah total beban robot itu sendiri.
101
Untuk mengendalikan motor kipas angin ini dibutuhkan 1 kanal keluaran sinyal digital output. Motor DC ini mempunyai 2 kabel yang masing-masing dikoneksi pada kaki emitor TIP 41C (NPN) negatif (-) dan kabel yang lain dikoneksi pada kutub (+) Vin.
Gambar 3.33 Pengawatan Kipas angin motor DC.
Gambar 3.34 Koneksi kabel sinyal motor kipas angin.
102
3.3.5. Penggerak robot Penggerak robot adalah sistem elektrik penggerak utama (motor drive) pada robot agar robot bisa bergerak maju, mundur, belok sesuai dengan program logika. Prinsip kerja penggerak robot ini adalah menggunakan shield motor (drive) dan motor DC. Shield motor berfungsi sebagai pengendali kecepatan dan arah putar maju/mundur. Motor DC sebagai motor penggerak utama roda robot. Dalam perancangan penggerak motor utama ini penulis menggunakan 2 motor DC yang sudah dilengkapi dengan gearbox sehingga torsi yang dihasilkan cukup untuk melakukan gerakan tugas pemadamam api. Masing-masing motor secara individu dikendalikan kanal keluaran M1 dan M2.
Gambar 3.35 Pengawatan penggerak motor DC dan shield motor.
103
. 2 Motor DC ini mempunyai 2 kabel yang masing-masing dikoneksi pada kutub negatif (M1-) dan kabel yang lain dikoneksi pada pin kanal positif (M1+) untuk motor kanan. Sedangkan motor kiri dikoneksi pada pin (M2+) dan (M2-). Pengawatan motor DC untuk koneksi ke shield ini sangat sederhana yang hanya 2 kabel saja untuk tiap motor tetapi untuk rangkaian sirkuit shield motor H-bridge sendiri cukup banyak. Dalam sirkuit shield terdiri dari empat gerbang logika, IC regulator, L293B, LED, resistor, kapasitor, dan elko. Pengawatan shield motor secara detail ada bagian lampiran.
3.3.6. Teknik pengendalian Teknik pengendalian adalah sistem elektrik untuk mengendalikan robot pemadam api. Tugas-tugas yang dikendalikan meliputi bergerak maju, bergerak mundur, berputar, mendeteksi api, melacak api, menentukan arah letak api, mendekati api, berhenti tepat di depan api dengan jarak tertentu dan sebagainya. Semua tugas ini akan dikendalikan oleh program logika berbasis teknologi mikrokontroler. Mikrokontroler dapat mengintegrasi sistem analog (ADC), digital (DAC), diskrit, semikonduktor (TTL), dan program logika (software). Mikrokontroler terdiri dari 3 bagian utama yaitu kanal masukan (input), kanal keluaran (output), dan pengendali (processor). Prinsip kerja pengendalian ini adalah membaca kanal masukan jika terjadi perubahan variabel maka program logika mengendalikan kanal keluaran. Contoh
104
sistem kendali tabrakan jika saklar tabrak (input) menabrak tembok maka program logika (processor) akan memutuskan untuk mematikan motor pengerak (output). Dengan program logika dalam mikorkontroler ini dapat memangkas rangkaian sirkuit pengawatan sistem kendali lebih mudah, ringkas, fleksibel, dan hemat. Gambar berikut menunjukkan perbedaan rangkaian logika dengan perangkat keras (relay) dengan rangkaian logika (ladder) dengan software.
Gambar 3.36 Sirkuit logika perangkat keras.
Gambar 3.37 Implementasi program logika perangkat lunak.
Dalam perancangan kendali robot ini diperlukan program tool untuk membuat program kendali. Arduino sudah dilengkapi program tool yang disebut Integrated Development Environment (IDE). Semua tugas-tugas robot nanti ditulis memakai IDE ini dalam fungsi-fungsi.
105
Gambar 3.38 Program Sketch Arduino.
Fungsi-fungsi progam nanti harus sesuai dengan tugas-tugas dalam perancangan elektrik sebelumnya yaitu fungsi pendeteksi halangan, pendeteksi api, pelacak arah api, pemadam api, dan untuk penggerak robot akan dibagai lagi mejadi fungsi maju, fungsi mundur, fungsi belok kanan, dan fungsi belok kiri. Teknik penulisan dengan membagi tugas-tugas kedalam fungsi-fungsi ini dapat mempermudah dalam memperbaiki masalah program.
106
Fungsi-fungsi program dalam IDE Arduino disebut sketch. Bahasa program sketch ini mirip dengan bahasa C/C++. Untuk mempermudah menerjemahkan logika tugas-tugas robot kedalam sketch disarankan merancang diagram alir dulu pada tiap-tiap fungsi program. Misalkan tugas pendeteksi halangan akan dirancang teknik pengendalian dengan ditulis ke bahasa program. Pertama membuat diagram alir logika kendali tabrak.
Gambar 3.39 Diagram alir (flowchart) fungsi tabrak.
107
Selanjutnya diagram alir fungsi tabrak diterjemahkan dalam bahasa sketch Arduino.
if (digitalRead(lsL)==HIGH) { Motor berputar mundur pada kecepantan 100 selama 500 milidetik. Setelah itu motor berhenti.
MUNDUR(100); delay(500); }
Gambar 3.40 Penulisan program (sketch) arduino.
Proses penulisan sketch ini sama seperti melakukan pengawatan sirkuit saklar, timer, relay, motor dll. pada kondisi aktualnya tetapi sudah diganti dengan teknik digital gerbang-gerbang logika dan perangkat lunak. Teknik digital gerbang logika adalah TTL terintegrasi dalam chip mikokrontoler. Perangkat lunak adalah platform software untuk membuat program-program kendali sesuai dengan si pemrogram. Teknik pengendalian ini lebih banyak ke sistem perangkat lunak daripada pengawatan perangkat keras. Perangkat keras terdapat pada bagian sinyal input dan output itupun hanya konversi ACD (input), DAC (output), diskrit agar menyesuaikan dengan kondisi perangkat diluar mikrokontoler misalnya tegangan dan arus dinaikkan dengan relay. Untuk lebih detil sistem kendali dalam perangkat lunak ini akan dibahas di subbab perancangan program.
108
3.3.7. Power supply Power supply adalah sistem elektrik untuk mendistribusi sumber daya listrik agar kinerja robot optimal. Dalam perancangan power supply ini penulis memilih baterai ukuran AA sebanyak 6 buah terangkai seri sehingga total 7.2 VDC. Baterai-baterai ini akan ditempatkan pada kotak yang dirancang khusus dan sudah dilengkapi kabel lengkap beserta jack konektornya tipe DC 2.1 untuk Arduino board.
Gambar 3.41 Kotak baterai 6xAA untuk Arduino board.
Untuk merancang sistem distribusi arus DC diperlukan tambahan alat terminasi tambahan agar sumber arus bisa disebar ke komponenkomponen robot. Terminal pin power supply pada Arduino sendiri terbatas. Dalam rancangan distribusi ini penulis memilih alat tambahan terminasinya menggunakan papan hubung serbaguna (bread board). Papan hubung ini sangat membantu dan mempermudah dalam perancangan suatu prototipe yang masih banyak diperlukan modifikasi lebih lanjut. Sehingga bongkar pasang rangkaian tidak menjadi kendala jika menggunakan papan hubung ini. Seperti nanti ada rangkaian transistor saklar untuk kipas angin.
109
Gambar 3.42 Papan hubung serbaguna (bread board).
Sebelum pengawatan seperti gambar diatas, sebaiknya merancang gambar pengawatannya dulu. Gambar pengawatan (wiring diagram) akan mempermudah nanti pada waktu perawatan atau memperbaiki suatu masalah pada robot.
Gambar 3.43 Pengawatan distribusi power supply DC.
110
Komponen-komponen robot yang akan didistribusi sumber arus DC dari baterai ini adalah sebagai berikut. Tabel 3.7 Konsumsi arus komponen-komponen robot. Komponen
Tegangan (V)
Konsumsi Daya (W) 0.235 (tak ada beban) 5 (maksimal)
Konsumsi Arus (A)
Arduino board
5
Motor shield
5 9
7.2
0.8
9
7.2
0.8
Sensor tabrak kanan
5
0.0185
0.0037
Sensor tabrak kiri
5
0.0185
0.0037
Sensor api
5
0.1
0.02
Motor servo
5
0.6
0.12
Motor kipas angin
9
14.4
1.6
Motor penggerak roda kanan Motor penggerak roda kiri
0.047 1
Total
4.39
Tabel 3.8 Ukuran sel baterai. Baterai
Kapasitas (m.Ah)
Tegangan (v)
Massa (gr)
Tinggi (mm)
Panjang (mm)
Lebar (mm)
Diameter (mm)
9V
625
9
45,6
48,5
26,5
17,5
kubus
N
1000
1,5
9
30,2
silinder
-
12
AA
1250
1,5
11,5
44,5
Silinder
-
10,5
AAA
2890
1,5
23
50,5
Silinder
-
14,5
C
8350
1,5
66,2
50
Silinder
-
26,2
D
20500
1,5
148
61,5
silinder
111
34,2
Kapasitas baterai dinyatakan dalam Ampere hours (Ah) = kuat arus (Ampere) x waktu (hour). Artinya baterai dapat memberikan/menyuplai sejumlah arus (Ampere) rata-rata dalam waktu tertentu. Dalam perancangan power supply ini menggunakan baterai AA sebanyak 6 sell yang dirangkai seri. Berdasarkan tabel sel diatas pada baterai AA memiliki kapasitas 1250 m.Ah = 1,25 Ah. Hubung seri 6 x 1,5 V = 7,2 volt. Berarti baterai akan memberi arus pada sirkuit robot 1,25 ampere selama satu jam. Kebutuhan total arus robot jika dipakai serentak adalah 4,39 A. Tetapi dalam aktual pemakaian tidak serentak tetapi bergantian. Semakin lama pakai arus besra akan terus mengalami tegangan turun (drop voltage) dan hal ini akan berdampak pada penurunan kinerja komponen robot seperti kecepatan motor lebih lambat. Perhitungan diatas menggunakan nilai maksimum yang mana semua kanal-kanal I/O terhubung beban dan arus mengalir maksimal secara terus menerus. Pada kondisi aktual tidak seperti kondisi itu, contoh pada saklar tabrak akan mengambil arus hanya pada saat menabrak saja. Motor servo hanya mengkonsumsi daya pada saat proses melacak saja. Motor kipas angin hanya mengkonsumsi daya pada saat tepat didekat api. Jadi dapat diambil kesimpulan untuk konsumsi daya tergantung panjang, lama, kondisi rute menuju api. Semakin jauh, banyak belokan / halangan akan semakin lama dan semakin sering mengkonsumsi arus. Kondisi seperti itu akan membuat arus baterai cepat habis dan hal terburuk adalah robot belum menemukan api karena lama proses melacak tetapi arus baterai sudah habis.
112
Dengan batasan kapasitas baterai ini dirancang untuk kondisi rute sederhana yang seminimal mungkin rute pendek dan robot sudah mendekati api. Sehingga robot bisa menyelesaikan tugasnya hingga motor kipas berputar cukup kencang untuk memadamkan api.
3.4.
PERANCANGAN PROGRAM Perancangan program adalah merancang teknik kendali berbasis perangkat lunak. Pada subbab 3.3.6. perancangan teknik kendali telah dijelaskan bahwa teknik kendali sekarang sudah berbasis perangkat lunak. Perangkat lunak pada dasarnya integrasi teknik gerbang-gerbang digital dengan semikonduktor ADC/DAC yang bisa merancang sistem kendali menjadi lebih mudah, cepat, dan ekonomis. Teknik menulis bahasa program arduino disebut sketch. Merancang sketch seperti merangkai pengawatan sirkuit perangkat keras. Sebelum masuk ke penulisan sketch Arduino untuk setiap tugas-tugas robot dirancang bagan alirnya. Bagan alir ini akan mempermudah bahasa logika menjadi bahasa pemrograman (sketch).
3.4.1. Program navigasi Program navigasi adalah navigasi robot untuk melacak keberadaan sumber api. Navigasi dasar robot ini terdiri maju, mundur, belok kanan, dan belok kiri. Karena robot ini ada 2 motor penggerak kanan dan kiri yang terpisah maka perancangan sketch dimulai dari tiap motor dulu.
113
Gambar 3.44 Bagan alir motor kanan putar maju selama 5 detik.
Sebelum menulis program sketch kendali motor maju diatas harus mendeklarasi dan menentukan nomer pin motor kanan dan mode pinnya terlebih dulu. Pendefinisian nomer pin dengan nama ini supaya mudah dikenal daripada mengingat nomer pin.
#define MotorKanan_Dir 4 #define MotorKanan_Vel 5
Gambar 3.45 Sketch mendefinisi pin nomer 4 dan 5.
114
Sketch baris pertama artinya pin nomer 4 diberi nama “MotorKanan_Dir” untuk arah putar (Direction) motor kanan. Dan sketch baris kedua artinya pin nomer 5 diberi nama “MotorKanan_Vel” untuk kecepatan (Velocity) motor kanan. Selanjutnya mendeklarasi mode pin sebagai input atau output. Karena pin nomer 4 dan 5 memberi sinyal perintah ke motor (shield drive motor) maka keduanya output. void setup() { pinMode(4, OUTPUT); pinMode(5, OUTPUT); }
Gambar 3.46 Sketch deklarasi pin 4 dan 5 sebagai output.
Deklarasi mode pin ditulis di dalam kurung {} pada Void setup(). Sampai langkah ini untuk konfigurasi perangkat keras motor dan motor drive (shield) sudah lengkap untuk motor bagian kanan. Jika pengawatan motor sudah terpasang benar maka motor siap dikendalikan oleh program. Untuk menulis sketch program kendali putar maju motor kanan seperti bagan alir diatas harus didalam kurung {} void loop (). void loop() { digitalWrite(MotorKanan_Dir,HIGH); digitalWrite(MotorKanan_Vel,HIGH); delay(5000); }
Gambar 3.47 Sketch program kendali maju motor kanan.
115
Sketch baris pertama artinya memberi perintah (digitalWrite) pada pin nomer 4 (MotorKanan_Dir) untuk berputar maju (HIGH). Pin nomer 4 sudah dideklarasi menjadi mode output dan automatis memberi sinyal ke shield motor untuk memutar arah maju ke motor bagian kanan. Sketch baris kedua artinya memberi perintah (digitalWrite) pada pin nomer 5 (MotorKiri_Vel) untuk kecepatan penuh (HIGH). Pin nomer 5 sebelumnya sudah dideklrasi menjadi output sehingga automatis memberi sinyal perintah ke shield motor untuk referensi kecepatan penuh. Sketch baris ketiga artinya lama waktu yang diberikan adalah 5 detik (5000 ms) untuk perintah putar maju dan kecepatan penuh pada motor kanan. Untuk membalik putaran tinggal merubah HIGH (putar kanan) menjadi LOW (putar kiri).
void loop() { digitalWrite(MotorKanan_Dir,LOW); digitalWrite(MotorKanan_Vel,HIGH); delay(5000); }
Gambar 3.48 Sketch program kendali mundur motor kanan.
Tiga baris sketch kendali maju atau mundur bisa disederhakan menjadi satu baris sketch saja yaitu dirubah kebentuk sketch void fungsi maju atau mundur.
116
void MAJU() { digitalWrite(MotorKanan_Dir,HIGH); digitalWrite(MotorKanan_Vel,HIGH); delay(5000); } void MUNDUR() { digitalWrite(MotorKanan_Dir,LOW); digitalWrite(MotorKanan_Vel,HIGH); delay(2000); }
Gambar 3.49 Sketch fungi void maju dan mundur motor kanan.
Kedua sketch fungsi maju dan mundur sudah bisa dipanggil dalam void loop ().
void loop() { MAJU(); MUNDUR(); }
Gambar 3.50 Sketch void loop maju dan mundur motor kanan.
Sketch void loop diatas mengendalikan motor kanan untuk berputar maju selama 5 detik lalu mundur selama 2 detik. Sketch fungsi maju dan mundur ini masih bentuk tetap dan tidak bisa dikendali kapan saatnya maju dan mundur secara fleksibel.
117
Gambar 3.51 Bagan alir fungsi maju dan mundur motor kanan.
Bagan alir fungsi motor kanan diatas dirancang untuk bisa dikendalikan arah putarnya dengan variabel TRUE untuk arah maju dan FALSE untuk arah mundur. Hal ini bisa dibuat dengan mengeluarkan variabel arah fungsi motor sehingga mudah dan ringkas dalam penulisan sketch.menjadi antarmuka suatu variabel yang bisa dikendali nilainya. Variabel nilai kecepatan sementara dianggap tetap. Perhatikan variabel-variabel pada sketch maju (HIGH) dan mundur (LOW).
118
void motorKANAN(boolean ARAH) { digitalWrite(MotorKanan_Vel,HIGH); if (ARAH)digitalWrite(MotorKanan_Dir,HIGH); else digitalWrite(MotorKanan_Dir,LOW); }
Gambar 3.52 Sketch program void motor kanan.
Void motor kanan ini sudah siap untuk dipakai dalam void yang lain dengan memberi nilai boolean true untuk maju atau false untuk mundur pada variabel “ARAH”. Baris pertama adalah sketch kecepatan disini tidak dikendali jadi tidak dikeluarkan variabelnya. Sketch delay juga dikeluarkan dari sketch fungsi untuk fleksibilitas. Sketch baris kedua dan ketiga adalah program kontrol IF…ELSE yang mengatur nilai true untuk arah maju dan nilai false untuk arah mundur. Baris kedua artinya jika (if) nilai boolean true (ARAH) maka pin nomer 4 untuk motor kanan (MotorKanan_Dir) keluar sinyal untuk berputar maju (HIGH), jika (else) nilai boolean false maka pin nomer 4 untuk motor yang sama berputar sebaliknya yaitu mundur (LOW). Berikutnya cara menulis nilai true/false pada variabel arah untuk void motor kanan.
void loop() { motorKANAN(true); delay(5000); motorKANAN(false); delay(7000); }
Gambar 3.53 Sketch void loop kendali arah motor kanan.
119
Sekarang sketch kendali arah untuk motor kanan lebih ringkas dan fleksibel. Sketch baris pertama adalah sketch void motorKANAN yang diberi nilai boolean true akan memberi perintah motor kanan arah maju. Sketch baris kedua adalah lama waktu 5 detik untuk motor berputar maju. Setelah 5 detik langsung motor berputar arah mundur karena baris sketch berikutnya memberi nilai false (mundur). Sketch keempat adalah lama waktu 7 detik untuk motor berputar mundur. Sejauh ini untuk program sketch fungsi kendali arah motor yang kanan telah selesai. Selanjutnya membuat program kendali arah untuk motor yang kiri. Langkah perancangan sama seperti motor kanan tetapi tinggal merubah nomer pin, deklarasi, dan variabel kanan dirubah kiri. Untuk mempercepat proses penulisan sketchnya tinggal menyalin dan merubah dari sketch motor kanan diatas dengan sedikit modifikasi seperti nomer pin, deklarasi, dan variabel menjadi kiri semua.
#define #define #define #define
MotorKanan_Dir 4 MotorKanan_Vel 5 MotorKiri_Dir 7 MotorKiri_Vel 6
void setup() { pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); } //fungsi arah putar untuk motor kanan
120
void motorKANAN(boolean ARAH) { digitalWrite(MotorKanan_Vel,HIGH); if (ARAH)digitalWrite(MotorKanan_Dir,HIGH); else digitalWrite(MotorKanan_Dir,LOW); } //fungsi arah putar untuk motor kiri void motorKIRI(boolean ARAH) { digitalWrite(MotorKiri_Vel,HIGH); if (ARAH)digitalWrite(MotorKiri_Dir,HIGH); else digitalWrite(MotorKiri_Dir,LOW); } void loop() { motorKANAN(true); delay(5000); motorKANAN(false); delay(7000); motorKIRI(true); delay(5000); motorKIRI(false); delay(7000); }
Gambar 3.54 Sketch kendali arah motor kanan (abu-abu) dan motor kiri (teks hitam).
Sketch kendali arah ini belum praktis jika akan mengendalikan robot untuk maju dan mundur secara fleksibel, karena untuk kendali arah maju harus menulis sketch kendali arah masing-masing motor. Hal ini bisa disederhanakan dengan menjadikan satu sketch fungsi arah motor kanan dengan kiri menjadi sketch fungsi arah maju, mundur, belok kanan, dan belok kiri. Berikut matriks logika hubungan perilaku masing-masing motor dengan gerakan yang berdampak pada robot.
121
Gambar 3.9 Tabel matriks arah putar kedua motor dengan gerakan robot
GERAKAN
MOTOR KANAN Putar Putar Kanan Kiri
MOTOR KIRI Putar Putar Kanan Kiri
MAJU
TRUE
false
TRUE
false
MUNDUR
false
TRUE
false
TRUE
BELOK KANAN
false
TRUE
TRUE
false
TRUE
false
false
TRUE
MOTOR
BELOK KIRI
Dari tabel matriks diatas sudah dapat dibuat sketch fungsi gerakan maju, mundur, belok kanan, dan belok kiri. Sketch fungsi tiap motor sudah ada dan dijadikan satu untuk membuat fungsi gerakan seperti tabel matriks tersebut.
void MAJU() { motorKANAN(true); motorKIRI(true); } void MUNDUR() { motorKANAN(false); motorKIRI(false); } void belok_KANAN() { motorKANAN(false); motorKIRI(true); } void belok_KIRI() { motorKANAN(true); motorKIRI(false); }
122
void loop() { MAJU(); delay(5000); MUNDUR(); delay(1000); belok_KANAN(); delay(7000); belok_KIRI(); delay(3000); }
Gambar 3.55 Sketch fungsi arah kedua motor dengan gerakan robot.
Keempat sketch kendali arah dasar ini sudah bisa untuk dipakai membuat program sketch navigasi melacak api tetapi kecepatan motor masing-masing fungsi gerakan masih kecepatan penuh (HIGH). Dalam kenyatannya dilapangan robot tidak perlu semua kecepatan penuh adakalanya kombinasi kecepatan rendah jika belok atau robot sudah berjarak 10 cm dari api. Hal ini dapat dipecahkan dengan mengeluarkan variabel kecepatan pada sketch kendali motor supaya bisa diberi nilai kecepatan secara fleksibel. Langkah memodifikasi sketch untuk variabel kecepatan ini sama seperti variabel arah sebelumnya yaitu memberi variabel kecepatan di antarmuka void fungsi kendali motor. Dalam hal ini void fungsi arah motor yang sudah ada tinggal dimodifikasi pada bagian kendali kecepatannya saja. Perlu diketahui bahwa pin untuk mengatur kecepatan dipilih yang sinyal output PWM yaitu pin nomer 5 untuk motor kanan dan pin nomer 6 untuk motor kiri. Bagian variabel kendali arah
123
(abu-abu) tidak perlu diperhatikan dan sekarang fokus pada variabel kecepatan (teks hitam).
//fungsi kecepatan & arah putar motor kanan void motorKANAN(int PWM, boolean ARAH) { analogWrite(MotorKanan_Vel,PWM); if (ARAH)digitalWrite(MotorKanan_Dir,HIGH); else digitalWrite(MotorKanan_Dir,LOW); } //fungsi kecepatan & arah putar motor kiri void motorKIRI(int PWM, boolean ARAH) { analogWrite(MotorKiri_Vel,PWM); if (ARAH)digitalWrite(MotorKiri_Dir,HIGH); else digitalWrite(MotorKiri_Dir,LOW); } //fungsi arah maju & kecepatan robot void MAJU(int PWM) { motorKANAN(PWM, true); motorKIRI(PWM, true); } //fungsi arah mundur & kecepatan robot void MUNDUR(int PWM) { motorKANAN(PWM, false); motorKIRI(PWM, false); } //fungsi belok kanan & kecepatan robot void belok_KANAN(int PWM) { motorKANAN(PWM, false); motorKIRI(PWM, true); } //fungsi belok kiri & kecepatan robot void belok_KIRI(int PWM) { motorKANAN(PWM, true);
124
motorKIRI(PWM, false); } void loop() { MAJU(50); delay(5000); MUNDUR(100); delay(1000); belok_KANAN(70); delay(7000); belok_KIRI(30); delay(3000); }
//maju kecepatan 50% //mundur kecepatan 100% //kekanan kecepatan 70% //kekiri kecepatan 30%
Gambar 3.56 Sketch fungsi kecepatan kedua motor dengan gerakan robot.
Dari sketch diatas sudah ada sedikit modifikasi yaitu ada variabel “PWM” yaitu untuk mengatur kecepatan kedua motor dengan memberi nilai integer 0-100. Pada bagian sketch kendali kecepatan di dalam void motor kanan dan kiri sebelumnya dirubah menjadi perintah analogWrite untuk memberi sinyal analog output (PWM) dari nilai 0-100. Sebelumnya variabel kecepatan ini menggunakan booelan yang hanya bisa LOW/HIGH yaitu kecepatannya tidak bisa dirubah-rubah secara halus dan hanya kecepatan 0 (LOW/berhenti) dan 100 (HIGH/penuh). Sekarang sketch empat navigasi dasar robot sudah bisa dikendalikan arah putar dan kecepatannya secara fleksibel.
3.4.2. Program pelacak api Program pelacak api adalah perangkat lunak yang secara otomatis melacak keberadaan api dan mendekatinya hingga pada jarak aman (tanpa
125
menabrak). Dalam perancangan program pelacak api ini dibagi tiga subproses yaitu melacak arah posisi api, menabrak halangan, dan bergerak mendekati api. Setiap sub-proses akan dibahas satu persatu supaya lebih sederhana dan mudah dipahami logikanya. Setelah ketiga program ini selesai tinggal dijadikan satu menjadi program pelacak api. Pertama merancang bagan alir melacak arah api. Bagan alir yang akan dibahas hanya mengambil dua arah sudut saja yaitu arah 0º dan 180º, hal ini untuk menghindari penjelasan yang diulang dan panjang. Sedangkan arah sudut yang lain seperti 45º, 68º, 90º, 112º, dan 135º pada prosesnya sama yang tinggal menyalin dan merubah variabel sudutnya.
Gambar 3.57 Bagan alir proses melacak arah api.
126
Sebelum masuk penulisan sketch, semua perangkat keras harus dideklarasi seperti sensor api dan servo motor. Sketch berikut berisi deklarasi yang sudah ada (abu-abu) dan deklarasi perangkat keras pelacak api (teks hitam) sebagai tambahan.
#include <Servo.h> #define MotorKanan_Dir 4 #define MotorKanan_Vel 5 #define MotorKiri_Dir 7 #define MotorKiri_Vel 6 Servo myservo; int val0 =0; int val180 =0; int valMAX;
void setup() { myservo.attach(9); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); }
Gambar 3.58 Sketch deklarasi servo motor dan sensor api.
Baris pertama sketch diatas adalah library servo motor. Libray ini dipasang agar servo motor dapat dikenali oleh mikrokontroler dan bisa digunakan dalam kendali sketch. Misalnya servo akan diperintah untuk putar sebesar 90⁰ maka tinggal menulis sketch myservo.write(90); selesai.
127
Gambar 3.59 Langkah memasukkan library servo motor.
Untuk memasukkan library servo motor dengan cara klik Sketch Import Libray… Servo pada menu bar seperti gambar diatas. Setelah mengklik library “Servo” maka otomatis pada layar sketch baris pertama akan muncul “#include <servo.h>”. Agar mudah ingat library servo diberi nama alias, disini memilih nama “myservo”. Selanjutnya menentukan nomer pin yang dipakai untuk mengendalikan servo motor. Servo ini dikendali oleh sinyal output PWM, sistem ini memilih pin nomer 9 (PWM~).
Penulisan
sketch
pemilihan
pin
untuk
servo
adalah
“myservo.attach (9);”. Sketch ini harus ditulis didalam {} void setup ().
128
Sekarang tinggal menulis sketch kendali servo sesuai arah sudut yang kita inginkan, berikut contohnya :
void loop() { myservo.write(0); delay(1000) myservo.write(90); delay(1000) }
//servo putar arah 0º //servo putar arah 90º
Gambar 3.60 Sketch kendali servo motor.
Selanjutnya deklarasi sensor api ini lebih sederhana karena sensor api hanya perubahan semikonduktor yang juga berdampak pada perubahan arus seperti prinsip transistor. Dalam perancangan ini hanya memakai satu sensor api jadi tidak perlu nama alias untuk nomer pin. Jenis sinyal dari sensor api ini adalah sinyal analog. Kanal pin analog input yang diambil adalah A0. Untuk mengambil nilai dari sensor api tinggal menulis analogRead (A0). Tetapi untuk menyimpan nilai hasil pembacaan sensor api diperlukan suatu register. Nilai hasil baca sensor api arah sudut 0º, 45º, 68º, 90º, 112º, 135º, dan 180º pasti berbeda-beda. Selain itu nilai dalam register-register ini nanti akan dipanggil ulang dan dibandingkan untuk mendapatkan nilai yang paling besar kemudian menentukan arah letak api. Metode perbandingan cukup sederhana yaitu membandingkan dua register dan yang terbesar disimpan di register MAX. Sehingga saat register
129
terakhir yang terbesar pasti menduduki register MAX Berikut contoh penulisan sketch register-register untuk nilai dari sensor api.
Servo myservo; int val0; int val45; int val68; int val90; int val112; int val135; int val180; int valMAX;
Gambar 3.61 Sketch deklarasi register nilai sensor api setiap sudut arah.
Register-register diatas menggunakan tipe data integer (int). Register “valMAX” untuk menyimpan nilai yang terbesar dari tujuh register. Sampai disini deklarasi antarmuka perangkat keras servo dan sensor api untuk sketch pelacak api sudah siap lengkap. Tahap berikutnya tinggal penulisan sketch program pelacak api. Berdasarkan pada bagan alir pelacak api diatas sudah menjadi void lacak. Pembahasan sketch hanya pada 2 arah sudut saja karena yang lain hanya pengulangan yang tinggal disalin dan diganti nilai arah sudutnya saja. Ba
void LACAK() { myservo.write(0); delay(1000); val0 = analogRead (A0);
130
myservo.write(180); delay(1000); val180 = analogRead (A0);
valMAX = max (val0, val180); if (valMAX==val0) { belok_KANAN(80); delay(1300); } else if (valMAX==val180) { belok_KIRI(80); delay(1300); } }
Gambar 3.62 Sketch void lacak api arah sudut 0º dan 180º.
Sketch lacak api diatas sama seperti bagan alir sebelumnya yang hanya 2 arah sudut saja. Untuk menambah arah sudut yang lain tinggal menyalin dan mengganti nilai sudut 45º, 68º, 90º, 112º, dan 135º. Untuk hasil sketch secara lengkap bisa dilihat di halaman lampiran program. Sketch lacak arah api ini sudah mengarahkan robot ke arah api. Selanjutnya tinggal memerintah robot bergerak maju untuk mendekati api. Tetapi selama bergerak maju terkadang badan robot bagian samping menabrak halangan. Untuk menghindari halangan ini diperlukan program menabrak sehingga robot tetap melanjutkan bergerak menuju api.
131
Perancangan program tabrak ini terdiri 2 proses navigasi dasar yaitu mundur lalu belok. Sama seperti logika kita setelah menabrak lalu mundur dan belok untuk menghindari halangan dan melanjutkan gerakan selanjutnya. Dalam logika tabrak ini penulis memakai fungsi interrupt request routine (IRQ). IRQ adalah subroutine yang dieksekusi oleh mikrokontroler bila ada interrupt pada pin IRQ. Pin IRQ arduino UNO ada 2 yaitu pada pin digital 2 dan 3. Berikut bagan alir sistem tabrak dengan pin IRQ 2 atau 3 (kanan atau kiri).
Gambar 3.63 Bagan alir sistem tabrak dengan fungsi interrupt IRQ.
132
Selanjutnya merubah bagan alir tabrak menjadi sketch void tabrak. Pertama deklarasi nomer pin-pin sensor tabrak kanan dan kiri (teks hitam).
#include <Servo.h> #define MotorKanan_Dir 4 #define MotorKanan_Vel 5 #define MotorKiri_Dir 7 #define MotorKiri_Vel 6 #define lsR 2 #define lsL 3 volatile byte state_R = HIGH; volatile byte state_L = HIGH; Servo myservo; int val0 =0; int val180 =0; int valMAX; void setup() { myservo.attach(9); pinMode(2, INPUT); pinMode(3, INPUT); attachInterrupt(0, TABRAK_R, LOW); attachInterrupt(1, TABRAK_L, LOW); digitalWrite(lsR, 0); digitalWrite(lsL, 0); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); }
Gambar 3.64 Sketch deklarasi pin sensor tabrak (teks hitam).
Sketch deklarasi sensor tabrak terdiri dari indentifikasi nama pin agar mudah diingat secara fungsi dan penyetelan mode pin kanal digital
133
menjadi input. Mikrokontroler membaca (input) sinyal digital dari sensor tabrak. Pin nomer 2 dipilih untuk sensor kanan dan diberi nama lsR (limit switch RIGHT) dan pin nomer 3 untuk sensor kiri yang diberi nama lsL (limit switch LEFT). Dalam fungsi intrupsi IRQ diperlukan memori internal (volatile) untuk menyimpan status awal dari register state_R dan state_L yaitu HIGH. Kemudian pada bagian setup () deklarasi fungsi intrupsi IRQ pin 2 (INT0) dan pin 3 (INT1) akan memanggil fungsi TABRAK_R dan TABRAK_L jika pin-pin tersebut kondisi 0 Vdc (LOW). Setelah deklrasi pin-pin sensor tabrak, kemudian menulis sketch program tabrak seperti bagan alir sistem tabrak diatas.
void TABRAK_R() { state_R = 0; } void TABRAK_L() { state_L = 0; }
void loop() { state_R=1; if (state_R == 0) { MUNDUR(100); delay(500); state_R=1; delay(500); belok_KIRI(100); delay(300); state_R=1; delay(100); }
134
state_L=1; if (state_L == 0) { MUNDUR(100); delay(500); state_L=1; delay(500); belok_KANAN(100); delay(300); state_L=1; delay(100); } }
Gambar 3.65 Sketch void tabrak kanan dan kiri.
Sketch void tabrak ini sudah siap dipakai dalam program pelacak api. Jika dalam pengujian nanti kurang optimal tinggal dirubah nilai kecepatan dan waktunya (nilai dalam kurung). Selanjutnya merancang sub-proses ketiga atau terakhir dari proses pelacak api yaitu perancangan program mendekati api. Sensor api hanya bisa membaca besar kecil api tetapi tidak bisa mendeteksi jarak titik api ke sensor api. Analisa kekurangan dan kelebihan sensor api ini akan dibahas pada bab IV pengujian dan analisis. Skenario program bergerak mendekati api adalah badan robot tidak boleh berhenti terlalu dekat dengan api yang akan berdampak merusak atau komponen robot terbakar. Bagan alir dasar dari sub-proses ini yaitu baca api, maju, dan berhenti.
135
Gambar 3.66 Bagan alir sistem mendekati api.
Dalam bagan alir diatas terdiri dari pembacaan api sebanyak tiga kali yaitu T1, T2, dan T3. Hal ini dilakukan karena perilaku api pada waktu yang tidak bisa diprediksi cenderung berubah-rubah kecerahannya. Perubahan ini terjadi akibat beberapa faktor yaitu perubahan cairan lilin pada benang, oksigen sekitar api, perubahan hembusan angin, dan ketepatan garis sumbu sensor dengan api. Untuk itu dilakukan teknik perancangan untuk memilih nilai hasil baca sensor api yang paling besar antara tiga nilai pada waktu berbeda. Dengan teknik ini robot akan berhenti pada jarak yang aman, sehingga komponen robot tidak terbakar. Dalam perancangan sketch mendekati api ini diperlukan tiga register baru yaitu T1, T2, dan T3. Untuk itu harus membuat tiga register tersebut sebelum masuk ke sketch programnya.
136
Servo myservo; . . sketch diloncati . int val180; int valMAX; int valT1; int valT2; int valT3; int valTMAX; . . sketch diloncati . void DEKATI() { myservo.write(80); valT1 = analogRead (A0); delay(1000); valT2 = analogRead (A0); delay(1000); valT3 = analogRead (A0); delay(1000); valTMAX = max (valT1, valT2); valTMAX = max (valTMAX, valT3);
if (valTMAX<=700) { MAJU(80); delay(1000); } else if (valTMAX<=985) { MAJU(80); delay(800); } }
Gambar 3.67 Sketch void menghampiri api.
137
Sketch menghampiri api ini sudah siap untuk program pelacakan api. Di dalam void loop () nanti sudah tinggal mengatur kapan diperlukan program void LACAK, void TABRAK, dan void DEKATI untuk dieksekusi. Sketch yang di dalam void loop () akan dibaca berulang-ulang, sehingga jika ada perubahana nilai pada variabel sketch maka seketika itu dieksekusi prosesnya.
3.4.3. Program kipas api Program kipas api adalah perangkat lunak yang secara otomatis memadamkan api. Dalam perancangan program kipas api ini akan menggunakan motor kipas angin sebagai alat pemadam api.
Gambar 3.68 Bagan alir sistem memadamkan api.
138
Konsep bagan alirnya sederhana yaitu menyalakan motor kipas angin selama waktu tertentu dan selama kipas angin menyala pada waktu tertentu badan robot mengarah kekiri dan kekanan untuk memperluas sudut jangkau hembusan angin. Sebelum masuk sketch program harus mendeklrasi nomer pin motor kipas angin. Untuk kanan digital output motor kipas dipilih pin nomer 8.
#include <Servo.h> #define MotorKanan_Dir 4 #define MotorKanan_Vel 5 #define MotorKiri_Dir 7 #define MotorKiri_Vel 6 #define lsR 2 #define lsL 3 #define Kipas 8 Servo myservo; int val0 =0; int val180 =0; int valMAX; void setup() { myservo.attach(9); pinMode(2, INPUT); pinMode(3, INPUT); . .sketch diloncati . pinMode(7, OUTPUT); pinMode(8, OUTPUT); }
Gambar 3.69 Sketch deklarasi pin motor kipas angin (teks hitam).
139
Selanjutnya membuat sketch program pemadam api berdasarkan bagan alir sebelumnya. void KIPAS() { digitalWrite(8,HIGH); delay(2000); belok_KANAN(80); delay(300); belok_KIRI(85); delay(300); belok_KANAN(80); delay(1000); digitalWrite(8,LOW); }
Gambar 3.70 Sketch void kipas untuk memadamkan api.
Sekarang sketch void KIPAS() ini sudah siap digunakan sebagai fungsi pemadam api. Sketch program diatas tidak mutlak dan akan dimodifikasi di bagian uji dan analisis.
3.4.4. Program utama (loop) Program utama adalah perangkat lunak robot yang sudah lengkap yang merupakan integrasi dari program fungsi navigasi, pelacakan, dan pemadaman api. Program utama ini seperti rohnya mahkluk hidup. Bila tanpa program utama maka robot hanya sekumpulan perangkat keras yang mati tak bergerak. Sebaliknya program akan memberi gerakan pada komponen-komponen robot seperti kelihatan hidup.
140
Konsep perancangan program utama ini meniru perilaku manusia dalam melacak api. Mata sebagai sensor api tetapi hanya mengenal api saja bukan mengenal halangan dan jaraknya seperti mata kita. Skenario dalam melacak api dibuat sederhana karena kemampuan komponen-komponen yang dimiliki robot masih terbatas. Hal ini untuk menghindari analisis yang tidak perlu akibat dari keterbatasan fungsi masing-masing komponen robot. Juga pada kondisi ruangan dibuat sederhana seperti permukaan landasan harus rata. Permukaan penghalang tembok juga dibuat serata mungkin agar penghalang tetap dalam jangkauan sensor tabrak yang terbatas. Ruangan harus dalam bentuk regional tertutup, jika terbuka akan membentuk kurva yang pada bagian ujung kurvanya berpotensi tidak bisa dideteksi karena diluar jangkauan sensor tabrak.
Gambar 3.71 Bentuk ruangan sederhana dengan penghalang regional tertutup dan terbuka.
Jenis permukaan landasan dan tembok harus warna gelap dan tidak memantulkan cahaya api. Kondisi cahaya ruangan harus konsisten dan dominasi cahaya paling terang adalah dari sumber api yang akan dilacak.
141
Jika hal-hal diatas dipenuhi maka proses pengujian dan analisis nanti tidak banyak kendala dan program utama berjalan sesuai harapan. Berdasarkan hal ini juga dapat dirancang skenario robot menjadi sederhana dan tidak terjebak oleh skenario rumit karena pada dasar ini robot prototipe yang kemampuan terbatas. Cakupan skenario hanya terbatas pada kemampuan komponen-komponen yang ada di robot. Seperti contoh kasus sensor tabrak robot ini hanya dua buah yang dipasang pada tiap sudut bagian depan robot. Dengan kondisi seperti itu sistem tabrakan robot sangat terbatas dengan kondisi ruangan jenis penghalang regional terbuka seperti gambar diatas. Pada ujung bagian tepi tembok atau sudut runcingnya akan menyangkut pada area diantara ban dan sensor. Hal ini terjadi karena di bagian area itu tidak ada sensor tabrak. Masih ada beberapa batasanbatasan pada kemampuan robot yang nanti akan dibahas detail di bab IV pengujian dan analisis. Konsep bagan alir utama robot diawali dengan mengeksekusi fungsi void TABRAK pada saat robot mulai dinyalakan “power ON” pada pertama kali. Jika tidak terjadi tabrakan pemindai program akan mengeksekusi void LACAK untuk melacak api dan menentukan arah robot ke arah api. Lalu pemindai program masuk pencabangan untuk memilih tindakan selanjutnya. Jika hasil nilai baca sensor api <500 maka mikrokontroler akan mengeksekusi void DEKATI. Tetapi bila nilai <100 maka mikrokontroler akan mengeksekusi robot untuk bergerak maju selama 1 detik dan kembali lagi ke void LACAK. Disini terjadi pengulangan eksekusi program LACAK-if..then-MAJU selama nilai baca
142
sensor api masih dibawah 100. Hal ini membuat robot akan terus maju selama 1.5 detik. Dan jika nilai pembacaan api <500 maka robot akan maju dengan waktu yang lebih pendek yaitu 1 detik. Gerakan maju selama 1 detik akan terus dieksekusi hingga nilai pembacaan api diatas 500. Setelah sensor api membaca pada nilai diatas 500 atau sekian centimeter dari api maka robot akan mengeksekusi void DEKATI.
Gambar 3.72 Bagan alir program utama (loop).
143
Setelah robot berada pada jarak aman lalu robot mengeksekusi void KIPAS untuk memadamkan api. Selanjutnya merubah bagan alir skenario ini menjadi sketch program utama .
void loop() { if (valMAX <100) { MAJU(150); delay(1500); LACAK(); } else if (valMAX <500) { MAJU(150); delay(1000); LACAK(); } else { DEKATI(); KIPAS(); delay(1000); LACAK(); } //program intrupsi dieksekusi jika menabrak state_R=1; if (state_R == 0) { MUNDUR(100); delay(1000); state_R=1; delay(500); belok_KIRI(100); delay(500); state_R=1; delay(100); }
144
state_L=1; if (state_L == 0) { MUNDUR(100); delay(1000); state_L=1; delay(500); belok_KANAN(100); delay(500); state_L=1; delay(100); } }
Gambar 3.73 Sketch program utama (loop).
Sampai disini perancangan program robot secara keseluruhan sudah selesai. Program tidak mutlak dan akan dimodifikasi sesuai kondisi pada pengujian nanti. Tahap selanjutnya adalah menguji dan menganilisis dari integrasi perancangan yang telah dibuat meliputi perancangan mekanik, elektrik, dan program. Pengujian dan analisis ini akan dibahas detail pada bab IV berikutnya.
145