BAB II LANDASAN TEORI 2.1. MEKATRONIKA Gambar 2.1 Diagram euler pembentukan ilmu mekatronika. Istilah mekatronika muncul pada tahun 1969 di perusahaan Jepang Yaskawa Electric Cooperation. Mekatronika saat itu terdiri dari ilmu mekanika dan eletronika yang dikembangkan untuk aspek pada kecepatan, dan ketelitian pada produksi jam, alat optik, dan sebagainya. Sekarang mekatronika sudah menjadi disiplin ilmu baru yang menggabungkan tiga ilmu yaitu ilmu Mekanika, ilmu Elektronika dan Informatika. Mekatronika modern sudah mengembangkan empat ilmu rekayasa yaitu rekayasa Mekanika, Elektronika, Komputer, dan Kontrol. 10 Mekatronika mengnyinpergikan kesatuan sistem dari sensor-sensor, aktuator, pengkondisian sinyal, sumber tenaga, keputusan logika, dan kontrol algoritma dalam pengolahan yang komplek diatas sistem komputer perangkat keras dan perangkat lunak. Evolusi mekatronika akan terus dipengaruhi oleh tiga faktor revolusi utama yaitu revolusi industri, revolusi semikonduktor, dan revolusi informasi. Revolusi industri cenderung dalam suatu perancangan sistem produksi dan proses dengan aspek efisiensi tinggi terhadap konversi energi dengan hasil semaksimal mungkin. Rekayasa mekanik akan meminimalkan faktor kerugian konversi energi sehubungan dengan mekanika seperti toleransi, inersia, dan gesekan. Gambar 2.2 Varian mekanika dasar gir, rantai, dan tuas ungkit. Revolusi semikondutor sudah semakin canggih sejak ditemukan teknologi IC (integrated circuit) pada tahun 1949. 11 Gambar 2.3 Mikrokontroler ATMega328. Sekarang IC sudah memiliki kemampuan yang terus meningkat dari sisi kecepatan proses, ukuran semakin kecil, konsumsi daya semakin kecil, dan biaya produksi lebih ekonomis. Teknologi Very Large Scale Integration (VSLI) merubah IC menjadi generasi IC baru dan bermuculan istilah chip, mikroprosesor, mikrokomputer, dan mikrocontroler. Tiga gambar IC diatas sudah berteknologi VSLI dengan milyaran transistor tertanam dalam sebuah chip. Perangkat keras tersebut sudah bisa diprogram kembali sesuai keinginan pemakai melalui antarmuka berupa perangkat lunak. Rpevolusi informasi sangat berkaitan dengan IC itu sendiri. IC sebagai perangkat keras sedangkan informasi sebagai perangkat lunat. Keduanya tidak bisa dipisahkan karena perangkat lunat sendiri sebagai antar muka antara manusia dengan IC itu sendiri. Antar muka berfungsi untuk membangun, mengatur, dan mengontrol IC sesuai dengan keinginan. Mikrokontroler yang bisa diprogram kembali menawarkan kemampuan serba guna dan fleksibel untuk aplikasi yang butuh kecepatan waktu dan akurasi tinggi. 12 Gambar 2.4 Elemen-elemen kunci mekatronika. Gambar elemen-elemen mekatronika diatas menunjukkan bagaimana hubungan atau integrasi antar elemen sistem informasi, sistem mekanika, sistem elektrika, dan sistem komputer/elektronika menjadi disiplin ilmu baru yaitu mekatronika. Perangkat keras ditunjukkan dalam blok garis putus-putus dan sistem perangkat lunak terdiri dari simulasi dan pemodelan, kontrol automatis, dan optimasi. Mekatronika sangat berperan penting dalam kehidupan sehari-hari, mulai dari militer, kedokteran, pendidikan, transportasi, industri pembuatan produk masal, alat rumah tangga pintar, rumah automatis dan sebagainya. 2.2. ROBOTIKA Robotika merupakan bagian aplikasi dari ilmu mekatronika. Robotika lebih menitik beratkan aspek kecerdasan buatan pada elemen sistem informasi. Robotika memiliki kemampuan nalar lebih kompleks dibandingkan dengan program konvensional. Robotika mengumpulkan data informasi dengan proses heuristis atau menganalistis dengan perkiraan yang paling tepat dan mengecek ulang sebelum memberi 13 keputusan akhir. Sedangkan program konvensional berorientasi kepada algoritme. Robotika berhubungan dengan ilmu elektronika, rekayasa teknik, dan perangkat lunak. Kata robot dikenalkan oleh penulis cekoslovakia yaitu Karel Capek dalam proyek R.U.R (Rossum’s Universal Robots) pada tahun 1920. Sekarang robotika sudah lebih dari 60 cabang dan lebih dari 20 jenis robot yang memberi kontribusi di berbagai bidang seperti aerospace, biologi, ilmu komputer, rekayasa, fiksi, militer, psikologi, filosofi, dan fisika. Dari banyaknya tipe robot semua memiliki tiga persamaan dasar dari aspek konstruksi yaitu robot mempunyai sistem mekanis, kelistrikan, dan program komputer. Pertama, robot memiliki sistem mekanis yang fokus pada mekanis dalam memecahkan solusinya. Misalnya robot harus melintasi medan yang berlumpur, berbatu, licin, menanjak dan sebagainya maka aspek rekayasa mekanis penting sekali. Aspek mekanis biasanya berhubungan dengan aplikasi dunia nyata seperti angkat, bergerak, membawa, terbang, berenang, berlari, berjalan, dan sebagainya. Kedua, robot memiliki sistem kelistrikan hadir dalam bentuk sirkuit, pengawatan, sensor-sensor, baterai dan sebagainya. Seperti memecahkan solusi untuk melintasi medan berat diatas harus memiliki tenaga listrik untuk menggerakkan sistem mekanisnya. Tenaga listrik bisa dari sumber tenaga baterai. Meskipun bahan bakar adalah sumber tenaga dari mesin tetapi masih memerlukan arus listrik untuk memproses sistem mesinnya seperti pada mobil yang memiliki baterai. Kelistrikan digunakan kebanyakan 14 untuk kendali motor dalam pergerakan untuk kendali posisi, putaran dan sebagainya. Ketiga, robot mengandung kode-kode program komputer. Sebuah program menentukan kapan dan bagaimana melakukan sesuatu. Seperti robot dalam contoh diatas akan melintas di medan sulit tetapi aspek listrik dan mekanis saja tidak bisa menggerakan robot. Bahkan ada remote untuk menjalankan robot tidak akan berfungsi jika belum diprogram. Program adalah otak robot. Sebaik apapun konstruksi mekanis dan kelistrikan sistem robot jika program buruk maka kinerja robot ikut buruk. Ada 3 jenis program robotika yaitu RC (Remote Control), AI (Artificial Intelligence), dan hybird. Robot RC digerakan oleh perintah dari media remote control untuk melakukan sesuatu. Sumber kendali dilakukan oleh manusia melalui media remote control untuk memberi perintah-perintah kepada robot. Robot AI berdasarkan program kecerdasan buatan yang bisa berinteraksi sendiri terhadap lingkungan sekitarnya tanpa campur tangan manusia dalam memecahkan masalah. Robot hybird memiliki bentuk program gabungan dari program AI dan RC. Robot diciptakan untuk tujuan tertentu dengan mengadopsi tindakan manusia. Otak diperankan oleh mikrokontroler, energi tubuh diganti oleh baterai, otot-otot tubuh diganti oleh actuator, pancaindra diganti oleh sensor-sensor dan sebagainya. Kecerdasan buatan membuat perilaku robot menjadi cerdas dan bahkan bisa lebih baik dari manusia pada aspek-aspek tertentu. 15 Tabel 2.1 Perbedaan robot cerdas dengan manusia. Kecerdasan Buatan Manusia Bersifat permanen Lebih mudah diduplikasi dan disebarkan Lebih murah Konsisten Dapat didokumentasi Lebih cepat Bertindak lebih baik Cepat mengalami perubahan Proses transfer dari manusia satu ke lainnya butuh waktu lama Lebih mahal Sering berubah-ubah sifat Sulit direproduksi Lambat Kurang teliti Gambar 2.5 Robot bermain catur dengan manusia. Menurut John McCarthy, 1956, untuk mengetahui dan memodelkan proses-proses berpikir manusia agar dapat meniru perilaku manusia. Seperti manusia cerdas yang otaknya memiliki ilmu pengetahuan, pengalaman, daya nalar, moral yang baik dan sebagainya. Robot cerdas memiliki program seperti otak manusia cerdas. Program beperan penting 16 pada perilaku robot. Robot cerdas memiliki program kecerdasan buatan yang berbeda dengan program konvensional yang melakukan tugas tertentu. Tabel berikut menunjukkan perbedaan program kecerdasan buatan dengan program konvensional. Perbedaan yang mendasar dari kecerdasan buatan memiliki pengolahan secara simbolik, penyelidikan berdasarkan prosedur analitis yang diawali dari perkiraan yang tepat dan mengecek ulang sebelum memberi keputusan dan struktur sistem kontrol dengan sistem pengetahuannya terpisah. Sedangkan program konvensional menggunakan metode algoritme yang langkah-langkah terbatas. Tabel 2.2 Perbedaan program kercedasan buatan dengan konvensional. Dimensi Kecerdasan Buatan Program Konvensional Pengolahan Simbolik Algoritme Masukan Tidak harus lengkap Harus lengkap Penyelidikan Heuristis Algoritme Penjelasan Tersedia Tidak tersedia major Ketertarikan Pengetahuan Data dan informasi Struktur Terpisah antara kontrol Kontrol terintegrasi dan pengetahuan dengan data Keluaran Tidak harus lengkap Harus tepat Perawatan dan Mudah karena sistem Umumnya susah pembaruan modul-modul dilakukan perangkat keras Komputer Semua tipe Kemampuan Terbatas tetapi bisa Tidak ada berpikir ditingkatkan 17 Kecerdasan buatan lebih kompleks daripada konvensional, seperti manusia cerdas membutuhkan proses belajar dan memakan waktu lama untuk menjadi cerdas. Proses belajar ini bisa dikatakan pemrograman otak manusia untuk bisa menjadi cerdas. Tetapi kecerdasan buatan bisa diduplikasi dengan mudah sehingga setelah proses pemrograman yang kompleks dan memakan waktu lama dan selanjutnya akan mudah untuk diduplikasi. Kalaupun ada modifikasi, tidak perlu dari awal lagi tetapi cukup direvisi, ditambah, dan diperbaiki guna meningkatkan kinerja yang lebih baik. 2.3. ROBOT PEMADAM API Robot acuan untuk pengembangan robot pemadam api di dalam tugas akhir ini adalah robot pelacak api yang sudah ada sebelumnya. Gambar 2.6 Robot pelacak api. 18 Sistem kontruksi robot pelacak api seperti gambar diatas akan dikembangkan lagi menjadi robot pemadam api. Pada bagian papan dasar (badan) robot ini akan diganti yang lebih ringan tetapi tetap kuat. Kakikaki robot tetap memakai 3 roda. 1 roda roler bar untuk bagian depan dan 2 roda hidup. Pada bagian kaki roda hidup (dikople motor) robot ini masih tidak sebaris antara sumbu roda kanan dengan kiri sehingga dampaknya pada saat bergerak maju maka robot cenderung tidak lurus. Kontruksi sensor tabrak pada robot ini masih kurang kokoh sehingga sering bergeser. Dampak dari pergerseran sensor tabrak akan mempengaruhi sudut cakupan tabrak. Kontruksi dan mekanik pada bagian sensor api dan servo motor masih harus di tata ulang lagi karena pada bagian depan badan robot nanti akan diletakkan rangka untuk motor kipas sebagai pemadam api. Sistem kelistrikan robot ini nanti tidak banyak perubahan dari sisi tegangan dan pengkabelan tetapi perubahan yang signifikan pada kapasitas daya baterai dirubah ke daya yang lebih kecil yaitu baterai AA (nonrechargeable). Secara penyerapan daya dan beban total robot lebih kecil karena beban baterai AA lebih kecil dari baterai robot ini. Program pada robot ini masih perlu direvisi dan ditambah. Robot ini hanya melacak api saja dan tidak bisa memadamkan api jadi untuk mengembangkan menjadi robot pemadam api harus ditambah program pemadam api. Penambahan program fungsi pemadam api untuk melakukan kinerja proses pemadaman api dengan mekanik motor kipas angin. 19 2.4. MIKROKONTROLER Mikrokontroler (disingkat MCU atau µC) adalah sebuah komputer kecil yang dikemas dalam sebuah chip berisi inti prosesor, memori, dan perangkat input/output yang bisa diprogam. Mikrokontroler dibuat untuk aplikasi khusus atau disebut sistem benam (embedded). Contoh sistem benam adalah mesin ATM, Telpon genggam, kamera digital, mesin foto copy, mesin fax, remote control, kalkulator, mesin cuci, robot dll. Dalam dunia robot, mikrokontroler seperti fungsi otak dalam tubuh manusia, jadi robot tanpa mikrokontroler hanya seperangkat perangkat keras yang mati. Sebuah mikrokontroler umumnya terdiri dari fitur-fitur berikut: Central Processing Unit (CPU) rentang prosesor 8 bit hingga 64 bit. Memori volatile (RAM) untuk simpan data. ROM, EPROM, EEPROM, atau flash memory untuk program dan sistem operasi parameter penyimpanan. Diskrit input/output. Analog input/output. Serial input/output seperti serial port (UART). Antarmuka serial komunikasi untuk interkoneksi sistem. Timer, Counter, PWM, dan watchdog. Clock (oscilator atau resonator). Analog to Digital Converter (ADC) dan Digital to Analog Converter (DAC). Sirkuit pemrograman dan mendukung debug. 20 Gambar 2.7 Arsitektur umum mikrokontroler. CPU berperan sebagai otak mikrokontroler. CPU bertugas memproses data sesuai intruksi-intruksi program pemakai seperti algorime logika termasuk operasi aritmetika penambahan, pengurangan, perkalian, pembagian dan sebagainya. Memori (ROM) digunakan untuk menyimpan instruksi atau kode program. Jenis memori ini adalah non-volatile yang data akan tetap ada meskipun sumber daya hilang. EPROM (Erasable Programmable Read Only Memory) adalah jenis memori yang bisa dihapus dan diprogram kembali. Untuk menghapus isi data memori EPROM menggunakan sinar ultraviolet (UV). EPROM masih kategori mahal dalam proses program kembali memori. EEPROM (Electricaly Erasable Programmable Read Only Memory) adalah jenis memori yang dihapus secara elektrik. Kerugian EEPROM adalah membutuhkan waktu lama untuk memprogram kembali memori. FLASH adalah memori EEPROM tetapi lebih cepat dihapus. 21 Memori (RAM) digunakan hanya sepanjang eksekusi program. Jenis memori ini volatile yaitu isi data memori akan hilang jika sumber daya listrik hilang. Input/Output port digunakan untuk menerima data (input) dan mengirim data (output) ke peralatan luar seperti saklar, sensor, LED, motor dan sebagainya. I/O port dibagi dua tipe yaitu digital dan analog. Port digital digunakan untuk menerima dan mengirim data digital atau diskrit data yaitu 0 volt (OFF) atau 5 volt (ON). Port analog digunakan untuk menerima dan mengirim data analog yaitu rentan nilai tegangan dari 0 volt – 5 volt. Timer digunakan untuk ukuran waktu dalam intruksi program dan pengukur interval dalam pemakaian intruksi atau kode program seperti penggunaan intruksi time on delay, time off delay, counter dan sebagainya. ADC (Analog to Digital Converter) dan DAC (Digital to Analog Converter) digunakan untuk mengubah data analog menjadi data digital (basis bit) atau sebaliknya. Sensor analog seperti detektor lidah api (flame sensor) akan mengirim data analog 0 volt – 5 volt ke ADC kemudian dirubah menjadi data digital dengan rentan resolusi 10 bit atau 102 (1024) dengan kata lain nilai analog 0 volt – 5 volt sama dengan nilai resolusi 01023. Serial port digunakan untuk komunikasi data serial dengan sistem perangkat luar seperti modem, wifi, LAN, USB dan sebagainya. Yang paling utama adalah digunakan sebagai koneksi antarmuka pengguna 22 untuk mengisi program mikrokontroler itu sendiri. Komputer Desktop atau Laptop bisa dihubungkan dengan serial port ini untuk melakukan antarmuka pemrograman mikrokontroler. Beberapa pabrikan mikrokontroller sudah menawarkan kemudahan dalam antarmuka yang langsung dihubungkan ke komputer. Tetapi ada yang masih membutuhkan perangkat keras boatloader dan perangkat lunak untuk melakukan antarmuka dengan mikrokontroler. Perangkat lunak digunakan sebagai alat antarmuka dengan mikrokontroler. Dengan alat antarmuka ini dapat melakukan pemrograman sesuai keinginan pengguna. Pabrikan mikrokontroler umumnya sudah memberi gratis perangkat lunak antarmuka ini untuk alat pemrograman. Umumnya mikrokontroler sudah berbasis open source dengan menggunakan bahasa C dengan kata lain semakin memberi fitur untuk kemudahan kepada para penggunanya. Sekarang sudah lebih dari 30 pabrikan mikrokontroler untuk merebut pasar teknologi IC. Bahasa pemrograman berfungsi sebagai kode-kode intruksi atau perintah dari pengguna agar mikrokontroler bisa melakukan apa yang diinginkan. Dulu, pemrograman menggunakan bahasa assembly yang sulit dipahami, memakan waktu lama, dan membosankan. Tetapi sekarang bahasa pemrograman sudah mudah dipahami oleh manusia atau disebut bahasa tingkat tinggi. Bahasa tingkat tinggi yang populer untuk mikrokontroler adalah bahasa C. Banyak aplikasi yang berbasis dengan mikrokontroler. Mikrokontroler adalah komputer sangat kecil yang lengkap sehingga memberi kemudahan 23 untuk membangun sebuah aplikasi. Kelebihan utama sistem berbasis mikrokontroler adalah murah dan kemudahan perancangan prototipe. 2.5. ARDUINO UNO R3 Gambar 2.8 Single board Arduino UNO. Arduino adalah sebuah perangkat keras single board mikrokontroler open source dengan kata lain sistem bebas dimodifikasi. Sebuah single board komputer kecil dengan sistem minimum, berdiri sendiri, bisa komunikasi dengan perangkat lain, dan mudah diprogram. Standar Arduino sudah termasuk bootloader sehingga hanya dikoneksi dengan komputer lewat kabel USB langsung bisa diprogram dengan tool software kecil dan gratis. Secara keseluruhan, kelebihan Arduino dibandingkan dengan mikrokontroler yang lain adalah lebih murah, lebih mudah, lebih cepat, dan bebas dimodifikasi (open source). 24 Arduino telah mengeluarkan banyak model single board mikrokontroler. Tugas akhir ini menggunakan Arduino UNO R3 dengan mikrokontroler AVR ATMega328 buatan Atmel. ATMega328 sudah mengusung arsitektur RISC (Reduce Instruction Set Computer) yang lebih cepat dalam proses eksekusi instruksi-instruksi program dibandingkan dengan arsitektur CISC (Completed Instruction Set Computer). Gambar 2.9 Arsitektur mikrokontroler AVR ATMega328. Arsitektur memori mengadopsi arsitektur Harvard yang memisahkan memori kode program dengan memori data sehingga unjuk kerja parales 25 lebih optimal. Instruksi - instruksi dalam memori program dieksekusi dalam satu alir tunggal, dimana pada saat satu instruksi dikerjakan instruksi berikutnya sudah diambil dari memori program. Konsep inilah yang memungkinkan instruksi-instruksi dapat dieksekusi dalam setiap satu siklus clock. ATMega328 memiliki 32 x 8-bit register serba guna untuk mendukung operasi pada ALU (Arithmatic Logic unit) dalam satu siklus. 6 dari register serbaguna ini dapat digunakan sebagai 3 buah register pointer 16-bit pada mode pengalamatan tidak langsung untuk mengambil data pada ruang memori data. Ketiga register pointer 16-bit ini disebut dengan register X (gabungan R26 dan R27), register Y (gabungan R28 dan R29), dan register Z (gabungan R30 dan R31). Hampir semua instruksi AVR memiliki format 16-bit. Setiap alamat memori program terdiri dari instruksi 16-bit atau 32bit. Selain register serba guna di atas, juga terdapat register lain dengan teknik memory mapped I/O selebar 64 byte. Beberapa register ini digunakan untuk fungsi khusus antara lain sebagai register kendali Timer / Counter, Interupsi, ADC, USART, SPI, EEPROM, dan fungsi I/O lainnya. Register - register ini menempati memori pada alamat 0x20h – 0x5Fh. 2.5.1 Spesifikasi ATMega328: 130 macam instruksi yang hampir semuanya dieksekusi dalam satu siklus clock. 26 32 x 8-bit register serba guna. Kecepatan mencapai 16 MIPS dengan clock 16 MHz. 32 KB Flash memory dan pada arduino memiliki bootloader yang menggunakan 2 KB dari flash memori sebagai bootloader. Memiliki EEPROM (Electrically Erasable Programmable Read Only Memory) sebesar 1KB sebagai tempat penyimpanan data semi permanent karena EEPROM tetap dapat menyimpan data meskipun catu daya dimatikan. Memiliki SRAM (Static Random Access Memory) sebesar 2KB. Memiliki pin I/O digital sebanyak 14 pin 6 diantaranya PWM (Pulse Width Modulation) output. Master / Slave SPI Serial interface. Gambar 2.10 Pemetaan pin ATMega328. 27 Ringkasan spesifikasi single board Arduino UNO R3 sebagai berikut: Mikrokontroller : ATMega328 Kecepatan clock : 16 MHz Flash memory : 32 KB (0.5 KB alokasi bootloader) SRAM : 2 KB EEPROM : 1 KB Kanal digital input/output : 14 kanal (dipilih secara program) Kanal analog input : 6 kanal Kanal analog PWM : 6 kanal 8-bit (490Hz dan 980 Hz) Arus digital input/output : 40 mA per kanal Arus pin 3.3V DC : 50 mA per kanal Tegangan kerja : 5V DC Catu daya : 7-12V DC Mikrokontroler ATMega328 ditanam dalam single board Arduino UNO R3 sebagai pengendali utama sehingga spesifikasi utama dari ATMega328 tidak banyak berubah hanya penambahan fitur yaitu konektor serial, konektor catu daya, LED indikator, bootloader, dan tombol reset. Mikrokontroler ATMega328 sebagai otak single board Arduino UNO R3. Single board Arduino UNO R3 ini memberi kemudahan dalam rekayasa automatisasi berbasis ATMega328. Selain memiliki fitur - fitur ATMega328 diatas, single board ini sudah dilengkapi bootloader, 28 konektor USB, konektor power supply 5 volt, kepala ICSP, dan tombol reset. Gambar 2.11 Single board Arduino UNO R3. 1. Konektor USB tipe B. 2. Konektor DC power supply 5.5 x 2.1 mm 3. Mikrokontroler ATMega328 4. Chip komunikasi ATmega16U2 5. Kristal 16 MHz 6. Tombol reset 7. LED indikator power ON 8. LED indikator proses komunikasi TX/RX 9. LED indikator proses uploading program 10. Pin-pin catu daya 3.3 V, 5 V, Vin, dan grounding 11. Pin-ping Analog Input 12. Pin-pin komunikasi serial TX dan RX 29 13. Pin-pin Digital Inputs/Output. Simbol "~" depan nomor pin untuk PWM output. 14. Pin nilai rentang analog input AREF dan Ground. 15. ICSP untuk Atmega328 16. ICSP untuk antarmuka USB Konektor USB (1) Arduino UNO R3 berfungsi untuk koneksi serial komunikasi antarmuka ke perangkat luar. Hal ini bisa digunakan sebagai antarmuka ke komputer selama proses pemrograman. USB ini akan memberi catu daya 5 volt DC yang cukup untuk menghidupkan sistem single board Arduino dengan aplikasi output beban kecil. Berbeda dengan mikrokontroler lain yang masih membutuhkan bootloader supaya bisa melakukan pemrograman. Konektor USB ini juga bisa digunakan untuk fungsi komunikasi serial seperti modem, printer, dan sebagainya. 2.5.2. Catu daya Arduino UNO R3 menyediakan tiga sistem koneksi catu daya yang automatis memilih sendiri yaitu konektor USB (1), konektor DC power supply (2), dan pin-pin power Vin/3.3V/5V (10). Sistem akan memilih secara automatis dari tiga koneksi catu daya. Konektor USB bisa memberi tegangan standar 5V DC dari sumber daya perangkat luar seperti komputer. Catu daya dari USB cocok untuk aplikasi dengan beban kecil seperti LED, LCD dan sebagainya. Tetapi tidak untuk aplikasi dengan beban besar seperti motor, servo, stepper dan 30 sebagainya karena putaran motor terlalu pelan dengan arus terbatas dari catu daya USB. Gambar 2.12 Konektor DC sistem Arduino. Konektor DC power supply (2) adalah standar konektor DC 5.5 x 2.1 mm (female) yang langsung dihubungkan dengan konektor DC (male) dari baterai atau adaptor dengan rentang tegangan kerja 6-20 volt. Rekomendasi tegangan kerja ada di rentang 7-12 volt karena jika kurang dari 7 volt maka sistem tidak stabil dan lebih dari 12 volt maka regulator menjadi panas. Jika kondisi panas ini berlangsung lama akan menyebabkan kerusakan pada regulator itu sendiri dan komponen single board yang lain. Pin Vin adalah jenis pin pilihan dari konektor jenis jack power supply diatas. Arduino memberi dua pilihan jenis konektor untuk memberi kemudahan dalam koneksi catu daya dari luar. Rentang tegangan yang diperbolehkan sama yaitu 7-12 volt. Pin 3.3 V adalah tegangan yang didapat dari chip FTDI. Arus maksimum adalah 50 mA. 31 Pin 5 V adalah tegangan kerja untuk sistem Arduino termasuk mikrokontroler, sensor serta perangkat luar yang interkoneksi langsung dengan kanal-kanal input / output. Pin Grounding sebagai koneksi pentanahan atau kutub negatif (-) catu daya. 2.5.3. Kanal Input dan Output Arduino UNO R3 menyediakan 14 pin kanal digital I/O (13) yang masing-masing bisa dipakai untuk kanal input atau output. Pemilihan fungsi input atau output diatur (setup) atau dideklarasi dalam penulisan program yang nanti akan diulas pada bagian pemrograman. Struktur dalam bahasa C untuk mendeklarasi fungsi sebuh pin terdiri dari kode syntax, nomor pin, dan fungsi input/output. Semua kanal ini bekerja pada tegangan 5V DC dan maksimum arus 40 mA. Pin serial (12) adalah pin 0 (RX) dan pin 1 (TX). Digunakan untuk menerima (RX) dan mengirim (TX) TTL data serial. Pin ini terhubung dengan pin-pin chip ATMega16U2 yang berfungsi sebagai pemroses data serial komunikasi USB ke TTL. Pin INT0 & INT1 interupsi eksternal (13) adalah pin 2 dan pin 3. Pin ini dapat dikonfigurasikan untuk trigger sebuah interupsi low value, rising atau falling edge atau perubahan nilai. Pin PWM (13) adalah pin-pin ~3, ~5, ~6, ~9, ~10, dan ~11. Mendukung 8-bit output PWM. 32 Pin Serial Peripheral Interface (SPI) (13) adalah pin-pin 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Pin ini mendukung komunikasi SPI dengan menggunakan fungsi SPI library. Pin LED (13) adalah pin 13. Ada LED (9) terpasang pada board dibuat untuk indikator status pin 13. Ketika pin 13 bernilai HIGH, LED hidup, ketika pin LOW, LED mati. Pin analog input (11) adalah pin-pin A0, A1, A2, A3, A4, dan A5. Masing-masing kanal mempunyai resolusi 10 bit (1024). Rentang tegangan input yang diperbolehkan adalah 0 volt sampai 5 volt. Untuk rentang yang spesifik bisa menggunakan pin AREF (14) dengan menggunakan syntax fungsi analog reference. Pin AREF (14) adalah referensi tegangan pin analog input dengan menggunakan syntax fungsi analog reference. AREF (Analog Read Reference) akan diberlakukan sebagai tegangan referensi akurat. Pin TWI/I2C (11) adalah pin-pin A4 (SDA) dan A5 (SCL). Pin SDA (data line) dan SCL (clock line) berfungsi untuk komunikasi serial ke komponen TWI / I2C dengan didukung fungsi Wire library. Pin reset membiarkan tombol reset pada shield aktif. 2.5.4. Komunikasi serial Arduino UNO R3 memiliki beberapa varian untuk komunikasi serial dengan komputer, Arduino lain, mikrokontroler lain, dan sebagainya. ATMega328 sudah diintegrasi komunikasi serial UART TTL (5V) pada pin 0 (RX) dan pin 1 (TX). 33 Arduino sudah ditanam chip ATMega16U2 untuk proses komunikasi serial melalui konektor USB. Saat dikoneksi dengan komputer maka Arduino akan dikenal sebagai COM port virtual oleh sistem operasi Windows. 16U2 Firmware memakai standar drive COM yang sudah dibawa oleh OS Windows. Tetapi untuk file .inf masih diperlukan. Aplikasi arduino membawa sebuah monitor serial yang bisa memberi informasi secara tekstual proses komunikasi data yang dikirim dari dan diterima ke Arduino. LED indikator akan berkedip ketika data sedang dikirim melalui USB ke 16U2. Indikasi ini tidak berlaku untuk proses komunikasi serial melalui koneksi pin 0 dan 1. Perangkat lunak serial library mendukung komunikasi serial melalui koneksi pin digital untuk semua keluarga Arduino. ATMega328 mendukung komunikasi serial I2C/TWI dan SPI. 2.5.5. Shield Shield adalah papan sirkuit untuk menambah kemampuan Arduino. Shield mengadopsi sistem modular sehingga mudah dipasang dengan hanya menancapkan diatas arduino tanpa solder atau pengawatan tambahan. Shield berfungsi untuk menambah fitur baru pada single board Arduino UNO R3 yang tidak bisa disediakan oleh sistem minimum seperti GSM, GPS, LCD, TFT, WiFi, RFID, ethernet, drive motor, stepper, servo, proto, MP3, data logging, dll. 34 Gambar 2.13 Shield modular. Gambar 2.14 Varian shield motor drive dan WiFi. Shield ini tidak hanya dikeluarkan oleh Arduino sendiri tetapi bisa diproduksi oleh pihak ketiga. Inilah kelebihan sistem open source sehingga Arduino menjadi fleksibel dan power full. Setiap shield dilengkapi perangkat lunak library yang bisa didownload secara gratis di situs-situs yang mengeluarkan perangkat keras shield. 35 2.6. PERANGKAT-PERANGKAT INPUT / OUTPUT (TRANSDUCER) Perangkat-perangkat input atau sensor adalah perangkat keras yang merubah nilai perubahan fisik atau metafisik menjadi nilai elektris seperti saklar batas, sensor cahaya dan sebagainya. Nilai elektris dibagi menjadi dua kategori yaitu digital dan analog. Nilai elektris masukan dari sensorsensor ini dikenal dengan istilah sinyal digital input dan analog input. Sinyal digital (diskrit) hanya mengenal variabel nyala atau hidup (ON/OFF atau HIGH/LOW). Sinyal analog adalah perubahan variabel secara halus. Gambar 2.15 Sinyal digital. Gambar 2.16 Sinyal analog. 36 Sinyal digital input dapat dihasilkan dari saklar, tombol, fotoelektris, enkoder dan sebagainya. Sinyal analog input dapat dihasilkan dari potensiometer, fototransistor, termotransistor, kopling termik, termistor, pengukur regangan, dan sebagainya. Perangkat-perangkat output adalah perangkat keras yang merubah nilai elektris menjadi nilai perubahan fisik atau metafisik. Nilai elektris dibagi menjadi dua kategori yaitu digital dan analog. Nilai elektris keluaran ini dikenal dengan istilah sinyal digital output dan discrete. Sinyal digital (diskrit) hanya mengenal variabel nyala atau hidup (ON/OFF atau HIGH/LOW). Sinyal analog adalah perubahan variabel secara halus. Sinyal digital output dapat dikirim ke perangkat-perangkat output seperti LED, lampu, bel, relay, kontaktor, servo, motor dan sebagainya. Tugas akhir ini akan menggunakan perangkat-perangkat input/output sebagai berikut: 2.6.1. Shield Motor L293 Shield motor memiliki dua kanal output PWM untuk menggerakan dua motor DC. Shield motor menggunakan chip L293 yang memberi arus keluaran maksimal 1 ampere tiap kanal. Kendali kecepatan dikontrol oleh PWM output arduino. Fungsi enable/disable untuk mengaktifkan shield motor ini ditentukan oleh sinyal digital output dari arduino. Dua kendali motor ini masing-masing menggunakan PWM output pin 6 dan 9, dan digital output pin 7 dan 8. 37 Gambar 2.17 Shield motor L293. Shield motor disebut Roboduino Motor Shield yang dikeluarkan oleh DFrobot. Arduino sendiri juga mengeluarkan Arduino Motor Shield yang menggunakan chip L298 dan perbedaan alokasi pin-pin kendali motor PWM output dan digital. Jika shield motor dihubungkan dengan motor maka disarankan menggunakan sumber catu daya eksternal dari konektor DC dengan arus cukup besar. Karena sumber daya dari konektor USB tidak mampu menggerakkan putaran motor secara aktual. Shield motor L293 adalah sebuah drive motor DC yang dapat mengatur kecepatan dan arah putaran motor DC. Kecepatan motor diatur oleh PWM analog ouput Arduino UNO R3 melalui pin masukan L293 6 dan 9. Arah putaran motor dikontrol oleh L293 dengan mengadopsi prinsip kerja H-Bridge. Prinsip kerja H-Bridge adalah rangkaian yang terdiri dari 4 saklar dan 1 motor DC. Prinsip dasar pembalik putaran motor DC adalah merubah kutub-kutub polaritas tegangan masukan atau arah arus yang 38 menuju kumparan magnet motor. Pembalik arah arus DC dapat dilakukan dengan 4 saklar yang dirangkai membentuk seperti jembatan huruf H. Gambar 2.18 Prinsip kerja H-Bridge. Empat saklar rangkaian konvensional diatas telah diganti dengan TTL (Transitor-Transitor Logic) kemudian dikemas menjadi IC drive motor L293. Gambar dibawah menunjukkan pengawatan kaki-kaki IC L293 secara diagram. Grup motor 1 memakai kaki 1, 2, 3, 4, 5, 6, 7, dan 8. Grup motor 2 memakai kaki 9, 10, 11, 12, 13, 14, 15, dan 16. Gambar 2.19 Diagram pengawatan kaki-kaki IC L293. 39 Tabel 2.3 Alokasi pin shield motor L293. Pin Fungsi Digital 4 Kendali arah Motor 2 Digital 5 Kendali PWM Motor 2 Digital 6 Kendali PWM Motor 1 Digital 7 Kendali arah Motor 1 Kaki 1 untuk masukan sinyal PWM output pin 6 dari Arduino. Sinyal PWM ini juga sebagai pemicu enable TTL 1 dan TTL 2 agar bisa operasi. Sinyal PWM berfungsi sebagai pengendali kecepatan motor. Sebelumnya program sudah mendeklarasi untuk pin 6 sebagai kanal PWM output dan diberi variable nilai kecepatan. Sejauh ini sinyal PWM sudah masuk dan mengaktifkan (enable) TTL 1 dan TTL 2 tetapi motor M1 belum berputar karena sinyal DIR pada kaki 2 dan 7 belum masuk. Jika dalam program ditulis TRUE untuk kaki 2 dan secara automatis kaki 7 menjadi FALSE melalui gerbang NOT maka motor M1 berputar ke kanan. Sebaliknya jika program ditulis FALSE untuk kaki 2 dan automatis kaki 7 menjadi TRUE via gerbang NOT maka motor M1 berputar ke kiri. Shield motor juga ditanam IC 74CH00 kuartet gerbang NAND yang berfungsi untuk merubah logika sinyal digital output sebagai saklar arah putaran dari Arduino menjadi 2 sinyal berlawanan agar tidak banyak memakai kanal digital output dan mencegah variable yang sama dalam pengaktifan 2 TTL. 40 Gambar 2.20 Pengawatan internal IC 74CH00 kuartet gerbang NAND. Shield motor memiliki 4 LED yang 2 LED berwarna hijau dan merah untuk indikasi arah putar pada tiap motor. Jika motor berputar arah kanan maka lampu LED hijau menyala. Jika motor berputar ke kiri maka lampu LED merah menyala. Hal ini berlaku sama pada LED-LED motor M1 dan M2. Untuk lebih detail rangkaian pengawatan shield motor L392 ini bisa melihat sirkuit diagram di bagian lampiran. 2.6.2. Flame Sensor Flame sensor berfungsi untuk mendeteksi api atau sumber cahaya dengan panjang gelombang cahaya 760 nm ~ 1100 nm. Sensor api sangat penting pada robot pemadam kebakaran karena sensor api ini akan menjadi mata robot untuk melihat api besar maupun kecil dengan sudut pandang 60⁰. Sensor api bisa bekerja normal pada suhu -25 ⁰ celcius sampai 85 ⁰ celcius. 41 Flame sensor menggunakan phototransistor YG1006 berkecepatan tinggi dan sensitif tinggi. Jenis transistor NPN. Material dasar memakai silicon yang dikemas standar 5 mm menyerupai bentuk LED. Gambar 2.21 Flame sensor dan kabel sinyal analog. Prinsi kerja sensor api adalah sebuah transistor yang peka terhadap cahaya. Besar kecil cahaya akan mempengaruhi arus yang mengalir di kaki-kaki sensor api. Perubahan arus akan menjadi sinyal analog lalu dikirim ke kanal analog input (pin 0, 1, 2, 3, 4, 5). Transistor peka cahaya ini disebut phototransistor. Gambar 2.22 Simbol phototransistor. 42 Gambar diatas menunjukkan prinsip kerja sebuah phototransistor. Kaki basis terbuat dari material silicon yang peka terhadap gelombang cahaya infrared dari 760 nm ~1100 nm. Seperti transistor pada umumnya jika cahaya datang mengenai silicon (basis) maka terjadi perubahan nilai arus yang mengalir dari kolektor ke emitor. Cahaya terang menghasilkan arus besar sedangkan cahaya redup menghasilkan arus kecil. Sensor api ini dirancang untuk pemakaian dalam gedung yang tidak ada sinar matahari dan lampu halogen. Tutup pintu dan jendela supaya cahaya matahari tidak langsung mengenai sensor api. Lampu halogen diarahkan ke langit-langit atau dimatikan. Hal ini untuk mencegah sensor kebanjiran cahaya infrared dari cahaya matahari dan lampu halogen. Spesifikasi flame sensor buatan DFrobot : VCC : 3.3V ~ 5V Cakupan deteksi : 20 cm (4.8V) ~ 100 cm (1V) Cakupan bandwidth : 760 nm ~ 1100 nm Waktu respon : 15 µs Interface : Analog Pengawatan sensor api mudah sekali dan sudah disertakan kabel dalam paket pembelian. Warna kabel biru untuk dihubungkan dengan pin salah satu 0~5 dari kanal analog input. Kabel warna merah dihubungkan ke pin power 5V. Kabel warna hitam dihubungkan ke pin grounding GND. Spesifikasi dan sifat phototransistor YG1006 bisa dilihat di bagian lampiran. 43 Untuk membaca nilai dari sensor harus mendeklarasikan pin yang dipakai. Penulisan deklarasi adalah tipe data-nama register = analogRead (A0). Tipe data yang dipakai adalah integer (0-255). Nama register adalah nama identitas untuk register sensor. = analogRead (A0) adalah struktur perintah bahasa C untuk membaca nilai analog di pin A0 lalu simpan (=).Pembahasan lebih lanjut tentang penulisan bahasa C akan dibahas pada bagian pemrograman. 2.6.3. Micro Servo Micro servo berfungsi untuk memutar flame sensor sesuai dengan posisi sudut yang dinginkan. Micro servo yang dipilih adalah SG90 jenis mikro yang cukup untuk memutar flame sensor yang bebannya ringan. Servo SG90 bisa berputar 180⁰. Gambar 2.23 Micro servo. Servo SG90 termasuk jenis servo sederhana yang berguna untuk aplikasi ringan seperti prototipe robot, radio kontrol mobil, perahu, kapal dll. 44 Spesifikasi servo motor SG90 sebagai berikut: 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 Komponen utama motor servo terdiri dari drive gear, motor, potensiometer, dan control circuit. Gambar 2.24 Komponen-komponen motor servo. Drive gear berfungsi untuk mengurangi kecepatan motor. Aplikasi motor servo khusus untuk menentukan posisi sehingga kecepatan motor 45 dan berputar terus-menerus tidak perlu. Motor berfungsi sebagai penggerak sistem servo. Jenis motor DC yang sering dipakai untuk sistem motor servo karena mudah dikendalikan. Potensiometer sebagai sensor keluaran putaran drive gear. Perubahan resistansi sebagai konversi putaran menjadi sinyal feedback ke control circuit. Sirkuit kontrol sebagai pengendali motor untuk berputar pada posisi yang diinginkan. Prinsip kerja motor servo berbasis sistem kontrol close loop. Empat komponen utama yang dijelaskan masing-masing fungsinya diatas jika dirangkai maka membentuk sistem kontrol close loop seperti gambar dibawah. Sirkuit kontrol disimbolkan sebagai penguat deteksi eror AMP-A yang menerima 2 sinyal referensi yaitu REF-OUT dan REF-IN. Jika AMPA mendeteksi 2 sinyal dari REF-OUT dan REF-IN ada perbedaan maka AMP-A mengoperasikan motor. Gambar 2.25 Konfigurasi prinsip kerja motor servo. 46 Motor akan memutarkan gir-gir dan automatis potensiometer ikut berputar. Jika potensiometer berputar akan terjadi perubahan sinyal REFOUT karena perubahan resistansi. AMP-A kembali mendeteksi perubahan sinyal REF-OUT dibandingkan dengan sinyal REF-IN. Jika kedua sinyal ini dideteksi sama maka AMP-A memberhentikan motor. Dengan kondisi ini, AMP-A menunggu sinyal REF-IN selanjutnya. Jika sinyal REF-IN diberi sinyal dengan nilai yang berbeda maka AMP-A kembali mendeteksi 2 sinyal yang berdeda sehingga AMP-A mengoperasikan motor kembali sampai AMP-A kembali mendeteksi 2 sinyal menjadi sama. Sinyal REF-IN dihubungkan dengan pin kanal PWM output dari Arduino. Kanal PWM output akan membangkikan sinyal diskrit dengan variasi lebar pulsa (duty cycle) yang nanti dipakai sebagai sinyal referensi (REF-IN) oleh sirkuit kontrol untuk menentukan posisi sudut motor servo. Gambar 2.26 Variasi lebar pulsa (duty cycle) penentu sudut motor servo. 47 Sirkuit kontrol akan memeriksa sinyal diskrit REF-IN dari kanal PWM output lalu mengendalikan motor berdasarkan sinyal itu. Perhatikan gambar diatas, jika sinyal memiliki duty cycle selama 1,5 ms maka servo berputar ke posisi 90⁰. Jika waktu duty cycle selama 2 ms maka servo berputar ke posisi 180⁰. Jika waktu duty cycle selama 1 ms maka servo berputar ke posisi 0⁰. Pada contoh ini menjelaskan lebar pulsa antara 1 ms sampai 2 ms berbanding lurus dengan sudut antara 0⁰ sampai 180⁰. Sehingga untuk menentukan sudut yang lebih spesifik dengan cara menentukan lebar pulsa yang sesuai. Gambar 2.27 Lebar pulsa sinyal diskrit dan formula lebar pulsa. Arduino telah menyediakan servo library untuk kendali motor servo agar pengguna lebih mudah dalam menulis programnya. Jika akan menentukan sudut 90⁰ sudut yang diinginkan, maka pada penulisan 48 program menulis angka 90 pada kode syntax. Pembahasan syntax motor servo lebih detail akan dibahas pada bagian pemrograman. 2.6.4. Crash Sensor Crash sensor atau sensor tabrak digunakan untuk memberhentikan motor jika sensor menabrak penghalang seperti tembok dll. Sensor tabrak adalah sebuah tombol batas dengan kontak terbuka (OPEN). Prinsip kerja sensor tabrak seperti tombol pada umumnya dirangkai dengan tuas mekanis. Jika pada bagian tuas menyentuh benda maka secara otomatis tuas menekan tombol dan kontak berubah pada kondisi tertutup (CLOSE). Gambar 2.28 Konstruksi tombol batas atau sensor tabrak. Sensor tabrak diletakkan pada posisi yang berpotensi terjadi benturan pada badan robot disaat bergerak. Robot prototipe sederhana membutuhkan minimal 2 sensor tabrak yang diletakkan di posisi yang paling sering terjadi tabrakan. Robot pemadam kebakaran dalam tugas akhir ini mempunyai 2 sensor tabrak yang diletakkan pada bagian depan sudut kiri dan kanan. 49 Gambar 2.29 Sensor tabrak (crash sensor). Tiap sensor tabrak mengambil 1 kanal digital input. Kedua sensor tabrak tidak bisa dirangkai paralel menjadi satu kanal masukan karena tiap sensor tabrak mempunyai algoritme program yang berbeda. Jika sensor kiri menabrak benda maka algoritme program mengarahkan robot maju arah kanan, sebaliknya jika sensor kanan menabrak maka algoritme program mengarahkan robot maju ke arah kiri. Semakin banyak menggunakan sensor tabrak akan menambah kepekaan robot terhadap benturan pada sisi-sisi badan robot tetapi perlu diperhatikan juga alokasi pemakaian kanal digital input akan ikut bertambah. 2.6.5. Fan Motor Fan Motor atau motor kipas angin ini digunakan untuk memadamkan api. Motor kipas angin ini menggunakan motor DC dengan magnet permanen sehingga torsi yang dihasilkan motor relatif kecil. Magnet permanen juga tidak menimbulkan rugi-rugi panas. 50 Gambar 2.30 Konstruksi motor DC magnet permanen. Prinsip kerja motor DC adalah jika sepotong kawat dialiri arus listrik terletak di antara kutub magnet berlawanan, maka sepotong kawat tersebut akan bergerak. Hal ini disebabkan oleh adanya gaya Lorentz di antara kutub tersebut. Arah gerak kawat, arah arus, dan arah gaya ditentukan oleh kaidah tangan kiri. Jika jari jempol membentuk sudut 90º dengan empat jari yang lain maka arah tunjuk jempol adalah arah gerak kawat, arah empat jari adalah arah arus listrik, dan arah masuk ke telapak tangan adalah arah garis gaya. Arah medan magnet adalah dari kutub utara ke arah kutub selatan. Dengan fenomena kaidah arah tangan kiri ini bisa menghasilkan konversi daya listrik menjadi daya mekanik atau dikenal dengan motor DC. 51 Gambar 2.31 Prinsip kerja putaran motor DC. Gambar 2.32 Kipas angin (Fan). Kipas angin ini diletakkan pada bagian depan robot. Pengendalian kipas angin ini akan menyala jika badan robot sudah dekat dengan api dengan jarak tertentu yang aman. 52 2.7. PERANGKAT LUNAK PENGEMBANG (ARDUINO IDE) Arduino adalah platform komputer open-source berbasis pada single board mikrokontroler sederhana dan lingkungan pengembangan penulisan program untuk board mikrokontroler. Integrated Development Environment (IDE) adalah perangkat lunak sebagai alat atau fasilitas untuk mengembangkan dan membangun suatu program. Arduino IDE adalah open source dan dapat diunduh dengan gratis di situs Arduino. Saat menulis tugas akhir ini, IDE versi terakhir adalah versi 1.0.5 dan bisa dijalankan di OS Windows, Mac OS X, dan Linux. Gambar 2.33 Jendela Arduino IDE versi 1.0.5. 53 Arduino menawarkan banyak kelebihan dibandingkan sistem lain seperti banyak varian, murah, komplit, berjalan di 3 OS, mudah dalam pemrograman, fleksible, program mudah dikembangkan dalam lingkungan bahasa C dan perangkat keras yang mudah dikembangkan menjadi modul versi sendiri sesuai keinginan. Arduino IDE adalah lingkungan pengembangan yang terdiri dari editor teks untuk menulis kode program, area pesan, teks antarmuka, toolbar, dan menu. IDE mudah dikoneksi dengan board arduino melalui kabel USB yang banyak dipasaran dan langsung terdeteksi serial port COM pada OS. Kode-kode algoritme yang ditulis menggunakan teks editor arduino disebut sketches. Sketches mudah untuk edit copy, paste, searching, dan replacing. Bagian area paling bawah jendela IDE adalah area pesan unuk memberikan informasi tanggapan ketika saving, exporting, compiling, dan pesan eror. Bagian sudut bawah tangan kanan ditunjukkan informasi nama board arduino dengan serial port yang dipakai. Verify : untuk memeriksa syntax kode program dari eror. Upload : untuk kompilasi (compile) kode program dan dikirim ke board arduino. New : untuk membuat sketch baru. Open : untuk membuka daftar kumpulan sketch yang pernah dibuat sebelumnya pada sketchbook diinginkan. 54 atau membuka folder yang Save : untuk menyimpan sketch. Serial Monitor : untuk membuka jendela serial monitor. Menu bar terdiri dari File, Edit, Sketch, Tools,dan Help. Berikut beberapa menu yang sering dipakai: File : - Sketchbook : daftar kumpulan sketch yang pernah dibuat sebelumnya. - Examples : daftar kumpulan sketch dan library yang disediakan oleh arduino sebagai contoh dasar atau referensi untuk membuat struktur penulisan program (sketch). Edit : - Copy for Forum : untuk menyalin kode program berserta format struktur dan warna syntax untuk keperluan berbagi dan diskusi di forum. - Copy as HTML : untuk menyalin kode program sebagai HTML sesuai untuk embedding dalam web. Sketch : - Verify/Compile : untuk memeriksa kode syntax dari eror. - Show Sketch Folder : untuk membuka folder sketch yang sedang dipakai. - Add File : untuk menambah sketch dari sumber file luar. File sumber akan dibuka di tab baru. - Import Library : untuk menambah library pada sketch dengan memasukkan #include statement pada awal kode program. Versi dari 55 1.0.5 harus import library dari file .zip atau sumber lain. Library adalah program bawaan perangkat lunak agar bisa bekerja baik dengan arduino. Biasanya perangkat keras tambahan seperti shield motor menyediakan library dan dalam manual pemrograman sudah dijelaskan pemakaian library baik dari arduino, pihak ketiga, maupun membuat sendiri. Untuk lebih lanjut dalam membuat library sendiri, bisa mengunjungi http://arduino.cc/en/hacking/librarytutorial. Tools : - Auto Format : untuk menata struktur secara benar kode syntax seperti kurung buka/tutup, percabangan, dsb., sehingga mudah dan cepat dipahami oleh logika manusia. - Archive Sketch : untuk menyimpan arsip sketch dalam format .zip di folder sketch yang sama. - Board : untuk memilih board yang sedang digunakan sebagai informasi seperti CPU speed dan baud rate pada bootloader ketika proses compile dan upload sketch. - Serial Port : daftar serial port (real dan virtual) yang dipilih oleh OS komputer untuk board. Pada OS Windows biasanya COM1 / COM2 untuk serial board dan yang lebih tinggi untuk USB board. Untuk memastikan COM yang benar, periksalah serial port di windows device manager. Perintah upload akan berjalan normal jika serial port sudah dipilih dengan benar. - Programmer : untuk memilih perangkat keras pemrogram lain seperti AVR ISP, Paralel Programmer dsb., ketika memprogram chip dan 56 tidak menggunakan USB onboard arduino. Fasilitas ini digunakan ketika akan burn bootloader pada sebuah mikrokontroller baru. - Burn Bootloader : untuk memerintahkan proses burn bootloader pada mikrokontroler baru yang tidak membawa bootloader. Umumnya setiap membeli mikrokontroler / chip baru ATMega tidak dilengkapi bootloader. Serial Monitor adalah jendela monitor sebagai antarmuka manusia dengan mesin yang sangat penting untuk mengetahui suatu variabel yang sedang diproses oleh mikrokontroler. Misalnya ingin menampilkan data serial yang sedang dikirim dari board arduino melalui USB atau serial board. Untuk mengirim data ke board arduino, masukkan teks dan klik tombol “send” atau tekan enter keyboard. Untuk menggunakan serial monitor harus menyetel serial port COM yang benar dan menulis perintah “Serial.begin” dan baud rate yang sesuai. Gambar 2.34 Jendela serial monitor. 57 Serial monitor dalam tugas akhir ini akan digunakan untuk memonitor nilai hasil tanggapan dari sensor api. Dengan cara ini dapat memudahkan proses analisis dan modifikasi program deteksi sensor api terhadap sudut arah servo lebih lanjut pada nilainya yang bisa digunakan untuk menentukan arah robot menuju sumber api. 2.7.1 Pemrograman (sketch) Program arduino (sketch) ditulis dalam bahasa C/C++. Bahasa C paling populer sebagai bahasa pemrograman di dunia mikrokontroler. Standar bahasa C cukup menyulitkan bagi pemula tetapi tim arduino telah mengembangkan bersama library arduino yang menyediakan fungsi dan struktur syntax semudah yang diinginkan pengguna. Bahasa C adalah bahasa pemrograman struktur top-down, dengan kata lain kode-kode program akan dieksekusi dari atas hingga perintah pada baris kode bagian akhir. Program arduino C dapat dibagi 3 bagian utama yaitu struktur, nilai, dan fungsi. Struktur sebagai pemroses fungsi dan nilai. Fungsi sebagai identitas dan fungsi antarmuka dan I/O antara program dengan board. Nilai sebagai nilai operasi atau kontrol dalam struktur dan fungsi. Jika ditinjau dari cara menjalankan program, struktur utama dibagi 2 bagian yaitu; 58 void setup() { kode program dalam kurung disini akan dijalankan sekali setelah power ON atau tombol reset ditekan. } void loop() { kode program dalam kurung disini akan dijalankan berulang-ulang dan berhenti jika power OFF atau sesaat ketika tombol reset ditekan. } Setup() berisi kode program yang memiliki variabel tetap seperti menentukan pin digital sebagai input atau output, baud rate serial, dll. Loop() berisi kode program yang memiliki variabel berubah-ubah agar perubahan nilai langsung dijalankan ketika masuk waktu siklus loop. Contoh program dengan variabel berubah-ubah seperti membaca nilai pin digital / analog input, menulis nilai pin digital / analog output, dll. Tabel 2.4 Syntax program arduino C. STRUKTUR FUNGSI void setup() Digital I/O void loop() pinMode(pin, mode) Variable Declaration digitalWrite(pin, value) 59 int digitalRead(pin) Function Declaration void Analog I/O Control Structures int analogRead(pin) if analogWrite(pin, value) - PWM if...else for Advanced I/O switch case shiftOut(dataPin, clockPin, bitOrder, while value) do... while unsigned long pulseIn(pin, value) break continue Time return unsigned long millis() delay(ms) delayMicroseconds(us) Further Syntax ; (semicolon) {} (curly braces) Math // (single line comment) min(x, y) /* */ (multi-line comment) max(x, y) abs(x) Arithmetic Operators constrain(x, a, b) + (addition) map(value, - (subtraction) toLow, toHigh) * (multiplication) pow(base, exponent) / (division) sqrt(x) fromLow, % (modulo) Trigonometry Comparison Operators sin(rad) == (equal to) cos(rad) != (not equal to) tan(rad) < (less than) > (greater than) Random Numbers 60 fromHigh, <= (less than or equal to) randomSeed(seed) >= (greater than or equal to) long random(max) long random(min, max) Boolean Operators && (and) Serial Communication || (or) Serial.begin(speed) ! (not) int Serial.available() int Serial.read() Compound Operators Serial.flush() ++ (increment) Serial.print(data) -- (decrement) Serial.println(data) += (compound addition) -= (compound subtraction) *= (compound multiplication) /= (compound division) NILAI Constants HIGH | LOW INPUT | OUTPUT true | false integer constants floating point constants Data Types void keyword boolean char unsigned char 61 byte int unsigned int long unsigned long float double string array Variable Scope & Qualifiers static volatile const PROGMEM Utilities cast (cast operator) sizeof() (sizeof operator) Reference keywords ASCII chart Atmega168 pin mapping Bahasan teori pemrograman dalam tugas akhir hanya berkaitan dengan perangkat keras yang digunakan seperti saklar batas, sensor api, servo motor, dan shield drive motor. Untuk lebih detail tentang pemrograman diluar pembahasan teori tugas akhir ini disarankan 62 mempelajari referensi di situs http://arduino.cc/en/Reference atau sumber lain di internet dari komunitas pemakai arduino yang tersebar di seluruh dunia. Berdasarkan perangkat keras yang digunakan, bahasan teori program dibatasi pada struktur, nilai, dan fungsi yang berkaitan dengan serial monitor, digital input, digital output, analog input, library servo, arah putar motor, dan kecepatan motor. 2.7.1.1. void setup() Kata kunci setup akan menjalankan program yang didalam {} hanya sekali. Setup() berfungsi untuk menjalankan program-program yang mempunyai nilai variabel tetap seperti mengidentifikasi variabel, mode pin, start library, dll. Setup() harus diletakkan pada bagian atas atau sebelum loop() karena kalau setelah loop() maka setup() tidak pernah dijalankan. Contoh: void setup() { myservo.attach(9); Serial.begin(9600); pinMode(2,INPUT); pinMode(3,INPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); } Semua program dalam {} ini dijalankan sekali setelah power ON atau tombol reset ditekan. Gambar 2.35 Sketch void setup. 63 2.7.1.2. void loop() Kata kunci loop akan menjalankan program yang didalam {} berulang-ulang. Untuk itu perintah loop() diletakkan paling bawah karena bila ada program setelah void loop () {} maka program itu tidak pernah dijalankan. Karena sifatnya yang menjalankan program secara berulang-ulang maka perintah loop() digunakan untuk program yang mempunyai nilai variabel yang berubah-berubah sehingga perubahan nilai itu akan langsung dijalankan atau direspon oleh perintah yang lain. Contoh: void loop() { digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); delay(1000); } Program lampu kedipkedip pada pin 2 dengan perintah ON 1 detik dan OFF 1 detik dijalankan secara berulang-ulang oleh fungsi loop(). Gambar 2.36 Sketch void loop. 2.7.1.3. void Void digunakan hanya pada deklarasi fungsi seperti loop, setup, nama fungsi dll. Void + “fungsi” tidak mengembalikan suatu nilai keluaran yang didapat dari hasil proses fungsi tersebut. 64 Syntax : void “nama fungsi” (“data type”, “parameter untuk fungsi”); Contoh: void mundur(int pwm) { rightMotor(pwm, true); leftMotor(pwm, true); } void loop() { mundur(60); delay(1000); } fungsi mundur diawali kata kunci “void” yang tidak menghasilkan nilai keluaran. fungsi mundur akan dijalankan dan menghasilkan nilai keluaran jika diletakkan di dalam fungsi loop() dan diberi nilai (60). Gambar 2.37 Sketch fungsi void mundur. 2.7.1.4. #define #define digunakan untuk mendefinisi nilai konstanta dengan nama pendek yang mudah untuk diingat atau presentasi dari nilai konstanta tersebut. Syntax : #define “nama konstanta” “nilai” Contoh: #define #define #define #define rightMotor_Dir 4 rightMotor_Vel 5 leftMotor_Dir 7 leftMotor_Vel 6 rightMotor _Dir nama definisi pin 4, artinya pin 4 dipakai untuk menggerakkan arah putar motor bagian kiri. Gambar 2.38 Sketch mendefinisi nama suatu pin. 65 2.7.1.5. #include #include digunakan untuk memasukkan library kedalam program. Seperti library motor servo yang akan digunakan pada rangkaian robot, sebelum bisa dikendalikan oleh program nanti harus memasang library servo <Servo.h>. Contoh: library servo dimasukkan dalam program. #include <Servo.h> void setup() { Servo.attach(9); } library servo menentukan pin 9 PWM output untuk motor servo. void loop() { Servo.write(90); delay(1000); } library servo mengirim sinyal PWM output posisi 90 derajat ke motor servo. Gambar 2.39 Sketch memasukkan library motor servo. 2.7.1.6. Serial Serial digunakan untuk proses komunikasi antara Arduino dengan komputer atau perangkat lain melalui serial port USB, pin 0 (RX) dan pin 1 (TX). Kata kunci Serial disini akan difungsikan untuk mengambil data dari mikrokontroler lalu ditampilkan ke jendela serial monitor. 66 Contoh: void setup() { Serial.begin(9600); } Fungsi Serial dipasang dengan baud rate 9600. Sinyal analog input pin A0 mengirim nilai ke register sensorValue. void loop() { int sensorValue = analogRead(A0); Serial.println(sensorValue); } Serial menampilkan nilai sensorValue ke jendela serial monitor. Gambar 2.40 Sketch menampilkan dalam jendela serial monitor. 2.7.1.7. pinMode() Kata kunci pinMode() berfungsi untuk konfigurasi pin-pin digital I/O. Syntax : pinMode( “nomer pin”, “fungsi pin”); Contoh: void setup() { pinMode(2,INPUT); pinMode(3,INPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); } pinMode memasang Pin 2 sebagai digital INPUT, Pin 3 sebagai digital INPUT, Pin 4 sebagai digital OUTPUT, Pin 5 sebagai digital OUTPUT. Gambar 2.41 Sketch deklarasi suatu pin. 67 2.7.1.8. digitalWrite() Kata kunci digitalWrite() berfungsi memberi status HIGH atau LOW pada pin-pin digital output saja. Status HIGH adalah pin bersangkutan mengandung tegangan (5 V) dan status LOW adalah pin bersangkutan tidak bertegangan (0 V). Syntax : digitalWrite( “nomer pin”, “HIGH atau LOW”); Contoh: void loop() { digitalWrite(4,HIGH); digitalWrite(5,LOW); } digitalWrite memberi tegangan pada pin 4. digitalWrite tidak memberi tegangan pada pin 5. Gambar 2.42 Sketch memberi nilai pada suatu pin digital output. Sebelumnya pin 4 dan pin 5 sudah di pinMode() sebagai digital output didalam fungsi void setup(). DigitalWrite hanya untuk kanal digital output. 68 2.7.1.9. digitalRead() Kata kunci digitalRead() berfungsi mengambil atau membaca status pin-pin digital input saja. Setelah status pin dibaca nilainya kemudian disimpan dalam sebuah variabel. Syntax : “nama variabel” = digitalRead(“nomer pin”) Contoh: void loop() { nilai = digitalRead(2); digitalWrite(5,nilai); } digitalRead membaca status pada pin 2 digital input. Lalu disimpan dalam variabel “nilai”. digitalWrite memberi status variabel “nilai” pada pin 5. Gambar 2.43 Sketch mengambil nilai suatu pin digital input. Sebelumnya pin 2 sudah di pinMode() sebagai digital input didalam fungsi void setup(). DigitalRead hanya untuk kanal digital input. 2.7.1.10. analogWrite() Kata kunci analogWrite() berfungsi memberi nilai kontinu (gelombang PWM) pada pin-pin PWM output saja. AnalogWrite() bisa menyalakan LED secara bervariasi tingkat kecerahannya atau menggerakkan motor drive dengan bervariasi kecepatan. Pin bersangkutan akan membangkitkan gelombang segi empat secara 69 tetap sampai nilai baru berikutnya. Frekuensi PWM ouput adalah 490 Hz dan 980 Hz untuk pin 5 dan 6 saja. AnalogWrite() tidak perlu konfigurasi pinMode() pada setup(). AnalogWrite hanya berlaku untuk kanal PWM output saja. Syntax : analogWrite(“nomer pin”, “nilai 0-255”) Contoh: void loop() { analogWrite(9,128); analogWrite(9,255); } analogWrite memberi tegangan 50% pada pin 9. analogWrite memberi tegangan 100% atau HIGH pada pin 9. Gambar 2.44 Sketch memberi variabel pada suatu pin analog ouput. 2.7.1.11. analogRead() Kata kunci analogRead() berfungsi mengambil atau membaca nilai pin-pin analog input saja (A0, A1, A2, A3, A4, dan A5). Resolusi ADC adalah 10 bit. Tegangan input dari 0 V – 5 V akan dikonversi menjadi 10 bit atau 0 sampai 1023. Range resolusi bisa diganti menggunakan kata kunci analogReference(). Syntax : “nama variabel” = analogRead(“nomer pin”) 70 Contoh: void loop() { nilai = analogRead(A0); Serial.println(nilai); } analogRead membaca nilai pada pin A0 analog input. Lalu disimpan dalam variabel “nilai”. Serial mengirim nilai variabel “nilai” pada serial monitor. Gambar 2.45 Sketch mengambil variabel suatu pin analog input. 2.7.1.12. delay() Kata kunci delay() berfungsi memberi waktu tertentu kepada perintah sebelumnya sebelum masuk perintah berikutnya. Misalnya perintah LED hidup selama 1 detik kemudian LED mati selama 2 detik maka perintah delay() memberi jeda waktu selama 1 detik untuk perintah digitalWrite() nyala LED. Syntax : delay(“waktu dalam mili detik”) Contoh: void loop() { digitalWrite(4, HIGH); delay(1000); digitalWrite(4, LOW); delay(2000); } delay(1000) memberi waktu pada pin 4 bermuatan 5V selama 1 detik (1000 ms). delay(2000) memberi waktu pada pin 4 bermuatan 0V selama 2 detik (2000 ms). Gambar 2.46 Sketch memberi waktu delay. 71 Perhatikan pada program diatas adalah lampu kedip-kedip untuk 1 detik nyala dan 2 detik mati pada pin 4 digital output yang dijalankan berulang-ulang dalam fungsi loop(). 2.7.1.13. max( ) Kata kunci max() berfungsi menentukan nilai yang paling maksimum dari 2 nilai. Syntax : max(“nilai pertama”, “nilai kedua”) Contoh: void loop() { nilaiMax = max(nilA, nilB); } max() akan menentukan yang terbesar dari nilA atau nilB. Lalu nilai terbesar akan disimpan dalam register nilaiMax. Gambar 2.47 Sketch mencari nilai terbesar (max). 2.7.1.14. if…else Kata kunci if...else berfungsi memberi pilihan jika syarat tertentu dipenuhi. Jika syarat dipenuhi atau benar maka meng-eksekusi 72 program sebelum else, tetapi jika salah maka meng-eksekusi program setelah else. Syntax : if (“syarat A”) { “lakukan A jika syarat A dipenuhi” } else { “lakukan B jika syarat A tidak dipenuhi” } Contoh: void loop() if (A0 == 255) { digitalWrite(4, HIGH); } else { digitalWrite(4, LOW); } Jika pin analog input A0 nilainya = 255 maka pin 4 bermuatan 5V. Jika nilainya selain 255 maka pin 4 bermuatan 0V. Gambar 2.48 Sketch kontrol struktur if..else. Kata kunci if..else ini masuk dalam kategori kendali dan sering dipakai dalam pemrograman karena dalam proses eksekusi sering 73 menemukan logika memilih dan membandingkan nilai. Selain kata kunci if..else juga beberapa kata kunci kendali yang sering dipakai seperti while (…){….}, do(…) while{…}, for(..;..;…){…} dsb. 2.7.1.15. // Tanda // berfungsi untuk menulis komentar dalam satu baris. Apapun yang ditulis setelah tanda // tidak akan eksekusi atau di-compiling oleh program. Contoh: //fungsi untuk melacak api void lacak() { nilaiMax = max(nilA, nilB); //cari terbesar } Gambar 2.49 Sketch komentar satu baris. 2.7.1.16. /*…..*/ Tanda /**/ berfungsi untuk menulis komentar untuk banyak baris. Apapun yang ditulis dalam tanda /*….*/ tidak akan dieksekusi oleh CPU. Hal ini bisa difungsikan sebagai pembeku sebagian baris program daripada menghapusnya. Contoh: /* komentar baris pertama Komentar baris kedua Komentar baris ketiga Dan seterusnya */ 74 void lacak() { nilaiMax = max(nilA, nilB); //cari terbesar } /* dari baris ini kebawah tidak dieksekusi { if (digitalRead(lsL) ==HIGH) { . . sketch diloncati . } } Dari baris ini keatas tidak dieksekusi */ Void loop() Gambar 2.50 Sketch komentar multi baris. Bahasan sytax pemrograman diatas dibatasi pada perangkat keras yang digunakan dalam tugas akhir ini, seperti saklar batas, sensor api, servo motor, dan shield drive motor. Untuk lebih detail tentang syntax pemrograman dapat mempelajari referensi di situs http://arduino.cc/en/Reference atau sumber lain di internet dari komunitas pemakai arduino yang tersebar di seluruh dunia. Arduino adalah sigle board mikrokontroler open source yang populer sehingga referensi manual pemrograman dari berbagai sumber mudah didapat dan gratis. Bahkan banyak komunikasi praktisi arduino membuat fasilitas forum secara online untuk memecahkan permasalahan perangkat lunak maupun perangkat keras. 75