1 BAB I PENDAHULUAN 1.1 Latar Belakang Perkembangan teknologi disemua bidang dari waktu kewaktu saat ini terus berkembang semakin canggih dan semakin membuat kemudahankemudahan dalam membantu segala aktivitas kehidupan manusia. Hal ini tidak terlepas dari perusahaan-perusahaan yang menciptakan dan memberikan keleluasaan bagi para pengembang ponsel (vendor) untuk terus bebas bereksperiment dalam membuat dan mengolah aplikasi-aplikasi secara terbuka (open source), salah satunya adalah sistem operasi mobile Android (OS Android). Android menyediakan platform terbuka bagi para pengembang untuk menciptakan aplikasi yang dapat dijalankan diberbagai macam piranti mobile seperti Smartphone, Tablet dan lain-lain. Sifat ini dengan cepat menumbuhkan komunitas pengembang program aplikasi untuk Android. Dengan jumlahnya yang semakin meningkat dan penggunaannya yang luas, gadget tersebut bisa menjadi sebuah bahan ajar (tools education) bagi para kreativator IT baik itu pelajar, mahasiswa, guru, dosen atau siapapun itu yang akan membawa dan memotivasi menuju gerbang pendidikan teknologi. Salah satu cabang ilmu yang dapat menggunakan teknologi android adalah dibidang elektro. Teknologi komunikasi dengan android bisa 1 2 digunakan dengan perangkat mikrokontroler sebagai salah satu sistem kendali. Hal ini menjadikan ide perancangan dan pembuatan suatu kendali rangkaian elektronika seperti halnya pengendalian led dan motor servo dengan smartphone android melalui komunikasi bluetooth. Perangkat ini dapat mengendalikan switching on/off led atau putar motor servo dari jarak jauh tanpa kabel (wireless). Ide yang sebagaimana telah digambarkan di paragraf atas, menjadikan suatu pemikiran dibuatnya Tugas akhir ini. 1.2 Rumusan Masalah Akan dirancang perangkat keras (hardware) rangkaian led dan motor servo dengan Board Arduino UNO sebagai sistem minimum, dibuat juga program untuk mikrokontroler Arduino sebagai pengolah perintah dari input output serta juga akan dibuat perangkat lunak (software) aplikasi yang berbasis Android dimana fungsi utamanya adalah sebagai tombol/switch pengendali on/off led dan putar motor servo menggunakan komunikasi Bluetooth melalui smartphone Android. 1.3 Tujuan Tujuan dari perancangan dan pembuatan alat pada Tugas Akhir ini adalah untuk membuat suatu teknologi kendali alat melalui komunikasi nirkabel Bluetooth menggunakan aplikasi kendali pada smartphone yang berbasis Operating System Mobile Android. 3 1.4 Batasan Masalah Mengingat luasnya ruang lingkup permasalahan, maka dalam Tugas Akhir ini dilakukan beberapa pembatasan, sebagai berikut. 1. Perangkat keras dirancang menggunakan modul Arduino UNO, rangkaian led dan motor servo. 2. Program mikrokontroler Arduino dibuat dengan bahasa pemrograman C Arduino dan aplikasi Android dibuat dengan software tool visual App Inventor. 3. Komunikasi antara perangkat keras dan smartphone Android menggunakan modul Bluetooth serial. 4. Aplikasi kendali android hanya mengirim (transitter) data dan alat hanya sebagai penerima (receiver) data dari aplikasi kendali android. 1.5 Hasil Akhir Hasil akhir dari tugas akhir ini adalah berupa : 1.6 1. Rangkaian perangkat keras (hardware). 2. Pemrograman mikrokontroler Arduino. 3. Aplikasi kendali Android (application control). 4. Laporan. Manfaat dan Kontribusi Sebagaimana telah dikemukakan di atas, perancangan alat kendali yang akan dibuat dalam Tugas Akhir ini baru sebatas mengendalikan led dan 4 motor servo. Manfaat utama yang diharapkan dari perancangan alat dan aplikasi ini adalah merupakan suatu langkah awal pembelajaran dari teknologi kendali berbasis android khususnya untuk dapat diterapkan pada ilmu robotika dan ilmu kendali instrumen elektronika lainnya di jurusan Teknik Elektro Universitas Muhammadiyah Yogyakarta. 1.7 Sistematika Penulisan Sistematika penulisan laporan ini adalah sebagai berikut. BAB I PENDAHULUAN. Memuat penjelasan mengenai latar belakang masalah, rumusan masalah, batasan masalah, hasil akhir, manfaat yang diperoleh, dan sistematika penulisan laporan. BAB II LANDASAN TEORI. Berisi tinjauan pustaka berupa paparan mengenai hal-hal mendasar yang berkaitan dengan Arduino dan Android. BAB III METODE PERANCANGAN. Berisi paparan mengenai perancangan rangkaian alat, pemrograman mikrokontroler dan pembuatan aplikasi kendalinya di Android. BAB IV HASIL DAN ANALISA. Berisi pembahasan mengenai hasil dari implementasi dan analisa alat dan program aplikasi yang telah dibuat. BAB V PENUTUP. Berisi kesimpulan dan saran. 5 BAB II LANDASAN TEORI 2.1 Tinjauan Pustaka Berbagai penelitian sejenis yang dilakukan oleh peneliti terdahulu, hasil penelitian yang dikemukakan menunjukkan berbagai cara untuk mengendalikan komponen elektonik menggunakan media wireless dan aplikasi kendali berbasis Android. Berikut karya sejenis yang berkaitan dengan pembuatan tugas akhir ini : 1. Sistem simulasi kendali wireless lampu dan pagar dengan media Bluetooth oleh Ramdhany Dwi Nugroho (2008) merancang sistem kendali untuk penelitian maupun untuk diterapkan pada penggunaan di kehidupan sehari-hari. Sesuai konsepnya, sistem ini dibuat untuk memanfaatkan perangkat yang portable seperti handphone sebagai antarmuka pengguna untuk mengendalikan lampu dan pagar secara wireless dengan media Bluetooth. 2. Prototype sistem otomasi pengendalian dan penggawasan rumah via Android berbasis web service oleh Purnomo Putro Subiyanto (2012) otomasi rumah dapat dijadikan alternatif yang terdiri dari control, monitoring dan otomatisasi beberapa perangkat atau peralatan rumah yang saling berinteraksi dan dapat diakses melalui web service dengan menggunakan smartphone. Pada sistem kontrol, Android dapat 5 6 memberikan perintah langsung untuk mengatur barang elektronik didalam rumah. 3. Perancangan dan implementasi sistem kendali home appliance dengan memanfaatkan teknologi Bluetooth oleh Leni Oktaviani (2007) Ini didesign dan realisasi menggunakan teknologi Bluetooth sebagai switch, akan diterapkan untuk kendali perangkat elektronik rumah. Semua perangkat elektronik di rumah dapat dikontrol menggunakan handphone dengan bluetooth dan PC server. 4. Rancang bangun aplikasi berpindah pengendali robot berbasis Android menggunakan koneksi Bluetooth oleh Fitranda Arys Pradana (2011) merancang pengendalian robot NXT menggunakan komunikasi Bluetooth pada operating system canggih Android yang mendukung kerja sensor accelerometer sebagai pengganti tombol kendali. 5. Android controlled wireless lamp oleh BitArtist.org (2010) yang menyajikan kendali on/off lampu menggunakan konektivitas Bluetooth dan Android phone. 6. Using the Android Platform to control Robots oleh Stephan G¨obel, Ruben Jubeh, Simon-Lennert Raesch and Albert Z¨undorf menjelaskan Ponsel platform Android oleh Google menjadi lebih dan lebih populer di kalangan pengembang perangkat lunak, karena kemampuan yang powerfull dan arsitektur terbuka. Merupakan platform besar untuk sistem kontrol robot, karena menyediakan banyak sumber daya dan sudah mengintegrasikan banyak sensor. 7 Jika pada penelitian sebelumnya melakukan penelitian dan perancangan aplikasi kendali untuk mengendalikan robot, perangkat elektronika atau alat listrik menggunakan komunikasi Bluetooth dan sistem kontrol dengan PC atau aplikasi Android yang dirancang dengan pemrograman java dan pemrograman mikrokontroler untuk jenis yang berbeda, maka disini penulis memfokuskan pada penelitian dan perancangan aplikasi Android dan pemrograman Arduino untuk mengendalikan komponen elektronika yaitu Led dan motor servo dengan media komunikasi Bluetooth. 2.2 Dasar Teori 2.2.1 Sistem Operasi Android Android adalah sistem operasi yang berbasis Linux untuk telepon seluler seperti telepon pintar (smartphone) dan komputer tablet. Android menyediakan platform terbuka bagi para pengembang untuk menciptakan aplikasi mereka sendiri untuk digunakan oleh bermacam peranti bergerak. Awalnya, Google Inc. membeli Android Inc., pendatang baru yang membuat peranti lunak untuk ponsel. Kemudian untuk mengembangkan Android, dibentuklah Open Handset Alliance, konsorsium dari 34 perusahaan peranti keras, peranti lunak, dan telekomunikasi, termasuk Google, HTC, Intel, Motorola, Qualcomm, T-Mobile, dan Nvidia. Di dunia ini terdapat dua jenis distributor sistem operasi Android. Pertama yang mendapat dukungan penuh dari Google atau Google Mail 8 Services (GMS) dan kedua adalah yang benar–benar bebas distribusinya tanpa dukungan langsung Google atau dikenal sebagai Open Handset Distribution (OHD). Versi sistem operasi android didasarkan pada nama-nama kue dan makan penutup (dessert) secara urutan abjad, dimana semakin tinggi versinya maka fasilitas/fitur yang ditawarkan akan semakin lengkap. Versi android itu dimulai dari : - Android versi 1.1 - Android versi 1.5 (Cupcake) - Android versi 1.6 (Donut) - Android versi 2.0/2.1 (Éclair) - Android versi 2.2 (Froyo : Frozen Yoghurt) - Android versi 2.3 (Gingerbread) - Android versi 3.0/3.1 (Honeycomb) - Android versi 4.0 (ICS : Ice Cream Sandwich) - Android versi 4.1 (Jelly Bean) a. Arsitektur Sistem Operasi Android Sistem operasi Android memiliki 4 lapisan (layer) yang merupakan komponen sistem Android. Gambar berikut merupakan lapisan arsitektur sistem operasi Android: 9 Gambar 2.1 Arsitektur Android (Sumber: http://commons.wikimedia.org/wiki/File:Android-SystemArchitecture.svg) Google mengibaratkan Android sebagai sebuah tumpukan software. Setiap lapisan dari tumpukan ini menghimpun beberapa program yang mendukung fungsi-fungsi spesifik dari sistem operasi. Berikut ini susunan dari lapisan-lapisan tersebut jika di lihat dari lapisan dasar hingga lapisan teratas. b. Linux Kernel Tumpukan paling bawah pada arsitektur Android ini adalah kernel. Google menggunakan kernel Linux versi 2.6 untuk membangun sistem Android yang mencakup memory management, security setting, power management, dan beberapa driver hardware. Kernel berperan sebaagai abstraction layer antara hardware dan keseluruhan software. Sebagai 10 contoh, HTC GI dilengkapi dengan kamera. Kernel Android terdapat driver kamera yang memungkinkan pengguna mengirimkan perintah kepada hardware kamera. Android dibangun di atas kernel Linux 2.6. Namun secara keseluruhan android bukanlah linux, karena dalam android tidak terdapat paket standar yang dimiliki oleh linux lainnya. Linux merupakan sistem operasi terbuka yang handal dalam manajemen memori dan proses. Oleh karenanya pada android hanya terdapat beberapa servis yang diperlukan seperti keamanan, manajemen memori, manajemen proses, jaringan dan driver. Kernel linux menyediakan driver layar, kamera, keypad, WiFi, Flash Memory, audio, dan IPC (Interprocess Communication) untuk mengatur aplikasi dan lubang keamanan. c. Android Run Time Lapisan setelah Kernel Linux adalah Android Runtime. Android Runtime ini berisi Core Libraries dan Dalvik Virtual Machine. Core Libraries mencakup serangkaian inti library Java, artinya Android menyertakan satu set library-library dasar yang menyediakan sebagian besar fungsi-fungsi yang ada pada library-library dasar bahasa pemrograman Java. Dalvik adalah virtual mesin (Vitual Machine) pada sistem operasi Google Android. Ini adalah perangkat lunak yang menjalankan aplikasi pada perangkat Android. Dalvik VM ini di optimalkan untuk telepon seluler. 11 Setiap aplikasi yang berjalan pada Android berjalan pada prosesnya sendiri, dengan instance dari Dalvik Virtual Machine. Dalvik telah dibuat sehingga sebuah piranti yang memakainya dapat menjalankan multi Virtual Machine dengan efisien. Dalvik VM dapat mengeksekusi file dengan format Dalvik Executable (.dex) yang telah dioptimasi untuk menggunakan minimal memory footprint. Virtual Machine ini registerbased, dan menjalankan class-class yang dicompile menggunakan compiler Java yang kemudian ditransformasi menjadi format .dex menggunakan “dx” tool yang telah disertakan. Dalvik Virtual Machine (VM) menggunakan kernel Linux untuk menjalankan fungsi-fungsi seperti threading dan low-level memory management. d. Libraries Bertempat di level yang sama dengan Android Runtime adalah Libraries. Android menyertakan satu set library-library dalam bahasa C/C++ yang digunakan oleh berbagai komponen yang ada pada sistem Android. Kemampuan ini dapat diakses oleh programer melewati Android application framework. Sebagai contoh Android mendukung pemutaran format audio, video, dan gambar. Berikut ini beberapa core library tersebut : System C library, diturunkan dari implementasi standard C system library (libc) milik BSD, dioptimasi untuk piranti embedded berbasis Linux. 12 Media Libraries, berdasarkan PacketVideo’s OpenCORE; librarylibrary ini mendukung playback dan recording dari berbadai format audio and video populer, meliputi MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG. Surface Manager, mengatur akses pada display dan lapisan composites 2D and 3D graphic dari berbagai aplikasi. LibWebCore, web browser engine modern yang mensupport Android browser maupun embeddable web view. SGL, the underlying 2D graphics engine. 3D libraries, implementasi berdasarkan OpenGL ES 1.0 APIs; library ini menggunakan hardware 3D acceleration dan highly optimized 3D software rasterizer. FreeType, bitmap dan vector font rendering. SQLite, relational database engine yang powerful dan ringan tersedia untuk semua aplikasi. Librari-librari tersebut bukanlah aplikasi yang berjalan sendiri, namun hanya dapat digunakan oleh program yang berada di level atasnya. Sejak versi Android 1.5, pengembang dapat membuat dan menggunakan pustaka sendiri menggunakan Native Development Toolkit (NDK). e. Applications Framework Lapisan selanjutnya adalah application framework, yang mencakup program untuk mengatur fungsi-fungsi dasar smartphone. Application 13 Framework merupakan serangkaian tool dasar seperti alokasi resource smartphone, aplikasi telepon, pergantian antar – proses atau program, dan pelacakan lokasi fisik telepon. Para pengembang aplikasi memiliki aplikasi penuh kepada tool-tool dasar tersebut, dan memanfaatkannya untuk menciptakan aplikasi yang lebih kompleks. Programmer mendapatkan akses penuh untuk memanfaatkan APIAPI (Android Protocol Interface) yang juga digunakan core applications. Arsitektur aplikasi didesain untuk menyederhanakan pemakaian kembali komponen-komponen, setiap aplikasi dapat menunjukkan kemampuannya dan aplikasi lain dapat memakai kemampuan tersebut. Mekanisme yang sama memungkinkan pengguna mengganti komponenkomponen yang dikehendaki. Di dalam semua aplikasi terdapat servis dan sistem yang meliputi : Satu set Views yang dapat digunakan untuk membangun aplikasi meliputi lists, grids, text boxes, buttons, dan embeddable web browser. Content Providers yang memungkinkan aplikasi untuk mengakses data dari aplikasi lain (misalnya Contacts), atau untuk membagi data yang dimilikinya. Resource Manager, menyediakan akses ke non-code resources misalnya localized strings, graphics, dan layout files. Notification Manager yang memungkinkan semua aplikasi untuk menampilkan custom alerts pada status bar. 14 Activity Manager yang memanage life cycle of dari aplikasi dan menyediakan common navigation backstack. f. Applications Di lapisan teratas bercokol aplikasi itu sendiri. Di lapisan inilah anda menemukan fungsi-fungsi dasar smartphone seperti menelepon dan mengirim pesan singkat, menjalankan web browser, mengakses daftar kontak, dan lain-lain. Bagi rata-rata pengguna, lapisan inilah yang paling sering mereka akses. Mereka mengakses fungsi-fungsi dasar tersebut melalui user interface. 2.2.2 Android App Inventor App Inventor adalah sebuah tool untuk membuat aplikasi android yang berbasis visual block programming menggunakan webbased Graphical User Interface (GUI) builder . App Inventor disediakan oleh Google dan sekarang dikelola oleh Massachusetts Institute of Technology (MIT). MIT Media Lab merilis Android App Inventor untuk membangun aplikasi Android tanpa coding, karena tools ini berbasis visual block programming yang open source. Membuat suatu aplikasi android dengan App Inventor tidak perlu menjadi seorang pengembang profesional (professional developer),hal ini dapat dirancang dengan semudah mungkin bagi siapapun baik programmer maupun non-programmer, karena secara visual dapat langsung merancang 15 aplikasi menggunakan blok-blok program yang sudah memiliki program dan fungsi-fungsi tertentu yang berbentuk potongan-potongan puzzel. App Inventor menggunakan Kawa Language Framework dan Kawa’s dialek yang di develop oleh Per Bothner dan didistribusikan sebagai bagian dari GNU Operating System oleh Free Software Foundation sebagai Compiler yang mentranslate visual block programming untuk diimplementasikan pada platform android. Kawa adalah sebuah framework yang ditulis di Java untuk menerapkan bahasa tingkat tinggi dan dinamis, kompilasi mereka ke dalam bytecode Java. Framework visual programming ini terkait dengan bahasa pemrograman Scracth dari MIT, yang secara spesifik merupakan implementasi dari Open Block yang didistribusikan oleh MIT (Scheller Teacher Education Program) yang diambil dari riset yang dilakukan oleh Ricarose Roque. Source dari aplikasi App Inventor dapat didownload berupa file arsip Zip yang terdiri dari 3 folder yaitu Folder assets berisi file gambar atau sound, Folder src berisi file source screen1 dimana file dengan ekstensi .scm berisi JSON source yang merupakan informasi dari tampilan layout aplikasi dan file dengan ekstensi .blk berisi XML source merupakan skema yang dihasilkan dari Block Editor. Folder youngandroidproject merupakan file properties. Android App Inventor dijalankan pada browser yang terkoneksi dengan jaringan internet di http://beta.appinventor.mit.edu/. Dalam membangun (developing) suatu aplikasi android bagian yang diperlukan 16 diantaranya App Inventor Designer, App Inventor Block Editor dan Android Emulator atau Android Phone. Gambar 2.2 Simulasi perancangan aplikasi android (Sumber: http://beta.appinventor.mit.edu) App Inventor Designer digunakan untuk melakukan desain atau mengatur tata letak komponen dari tampilan aplikasi yang ingin dibuat, App Inventor Block Editor digunakan untuk melakukan pemrograman terhadap komponen-komponen sesuai fungsi masing-masing yang diinginkan sedangkan Android Emulator atau Android Phone digunakan untuk melakukan simulasi terhadap aplikasi yang telah dibuat bisa menggunakan emulator atau bisa langsung menggunakan Android phone. Hasil dari perancangan aplikasi kemudian dapat didownload setelah di compile menjadi file aplikasi Android Package yang berekstensi .apk. 17 Persiapan untuk menggunakan App Inventor antara lain : 1. Memiliki account email Gmail, http://www.gmail.com 2. Download dan Instal Java terbaru dari http://www.java.com 3. Buka Browser dan masuk ke http://beta.appinventor.mit.edu/ 4. Download dan Instal appinventor_setup_installer_v_1_2.exe 5. Instal driver dan Setting smartphone android apabila ada. Setup handset android dilakukan apabila ingin langsung mencoba hasil develop ke handset android. Tahapan yang dilakukan diantaranya hubungkan kabel data USB dari handset android ke komputer dan pastikan jika memiliki memory SD Card telah terpasang, kemudian lakukan setting pada handset android dengan cara masuk ke home screen – pilih setting – Applications – ceklist Unknow sources. Kemudian pilih Development – ceklist USB debugging dan Stay awake. Pada lingkungan kerja App Inventor terdapat bagian yang harus diketahui yang terdiri dari : a. Komponen Desainer (Componen Designer) yang berjalan pada browser, digunakan untuk memilih komponen dan mengatur properties. Komponen desainer terdiri dari : Viewer : untuk menempatkan komponen dan mengaturnya sesuai tampilan yang diinginkan. Pallete : merupakan list dari komponen yang bisa dipakai. Component list : merupakan tempat list komponen dari project yang kita pakai. 18 Media : mengambil media audio dan gambar untuk project. Properties : untuk mengatur properties dari masing-masing komponen. b. Blok Editor (Block Editor) akan berjalan diluar browser, dimana digunakan untuk membuat dan mengatur behavior dari komponen yang dipilih pada komponen desaier. c. Emulator, digunakan untuk menjalankan dan melihat aplikasi yang telah dibuat. Ketiga lingkungan kerja diatas, layout masing-masing akan tampil secara terpisah dan bisa dilihat secara bersamaan. 2.2.3 Modul Arduino Arduino merupakan board mikrokontroler berbasis mikrokontroler lengkap dengan software IDE Arduino yang open source yang relatif mudah dan cepat dipelajari. Dalam Arduino terdapat sebuah komponen utama yaitu sebuah chip mikrokontroler dengan jenis AVR dari perusahaan Atmel dan di dalam board arduino sudah terdapat bootloader USB sehingga tidak perlu lagi membuat chip programmer dengan LPT-port, USB-ASP atau RS232 untuk mendownload program, cukup dengan bawan USB dari board arduino tersebut. Arduino Uno adalah salah satu board mikrokontroler Arduino berbasis ATmega328, memiliki 14 pin input output digital dimana 6 pin tersebut dapat digunakan sebagai output PWM, terdapat juga 6 pin input analog, 16 19 MHz osilator kristal, koneksi USB, jack power, ICSP header, dan tombol reset. Untuk mendukung mikrokontroler agar dapat digunakan, cukup hanya menghubungkan Board Arduino Uno ke komputer dengan menggunakan kabel USB atau listrik dengan AC yang-ke adaptor-DC atau baterai untuk menjalankannya. Arduino Uno berbeda dengan semua board sebelumnya dalam hal koneksi USB-to-serial yaitu menggunakan fitur Atmega8U2 yang diprogram sebagai konverter USB-to-serial berbeda dengan board sebelumnya yang menggunakan chip FTDI driver USB-to-serial. Berikut adalah beberapa kelebihan dari Arduino : Hardware dan Software-nya Open Source Dari sini kita bisa membuat tiruan board yang kompatibel dengan board Arduino tanpa harus membeli board asli buatan Italia dan kita juga tidak akan dianggap membajak selama kita tidak menggunakan trade mark “Arduino”. Fasilitas chip yang cukup lengkap Arduino menggunakan chip AVR ATmega 168/328 yang memiliki fasilitas PWM, komunikasi serial, ADC, timer, interupt, SPI dan I2C. Dengan fasilitas chip yang demikian, Arduino bisa digabungkan dengan modul atau alat lain walaupun protokol yang digunakan berbeda-beda. Proses Upload tidak memerlukan chip programmer Chip pada Arduino sudah dilengkapi dengan bootloader yang akan menangani proses upload dari komputer. Dengan begitu kita tidak 20 memerlukan chip programmer kecuali untuk menanamkan bootloader pada chip yang masih blank. Bootloader adalah sekumpulan perintah (program) untuk melakukan inisialisasi berbagai fasilitas dalam mikrokontroler yang akan digunakan dan menyampaikannya ke peta pengalamatan pada mikrokontroler. Biasanya bootloader berukuran kecil yang pertama kali dieksekusi saat mikrokontroler dinyalakan atau direset yang akan memanggil program utama, yaitu program yang kita upload kedalam mikrokontroler. Ukuran board kecil Ukuran board Arduino yang kecil ini mudah di bawah kemana-mana atau dimasukan ke dalam saku atau tas yang kecil. Koneksi menggunakan Port USB Ini akan memudahkan kita jika menghubungkan Arduino ke PC atau laptop yang tidak memiliki port serial/paralel. Bahasa pemrograman yang mudah Bahasa pemrograman Arduino adalah bahasa C yang sudah dipermudah menggunakan fungsi-fungsi yang sederhana sehingga dapat dipelajari dengan mudah. Library gratis Library-library ini dapat di download gratis di website Arduino. Pengembangan aplikasi lebih mudah Pengembangan aplikasi ini menjadi lebih mudah karena didukung oleh bahasa yang mudah dipelajari serta adanya library dasar yang lengkap. 21 Tersedianya modul tambahan (shield) Memiliki modul siap pakai (shield) yang bisa ditancapkan pada board Arduino. Misalnya shield GPS, Ethernet, SD Card, dll. Komunitas open source yang saling mendukung Pengembangan hardware dan software Arduino didukung oleh komunitas pencinta elektronika dan pemrograman di seluruh dunia. Gambar 2.3 Board Arduino UNO (Sumber: http://www.adafruit.com/blog/2012/05/25/handy-arduinor3-pinout-diagram/) a. Spesifikasi Arduino UNO Arduino UNO merupakan board penerus Arduino Duemilanove. Memiliki spesifikasi antara lain : Mikrokontroler : ATMEGA328P Tegangan Operasi : 5V Tegangan Input (recommended) : 7 - 12 V Tegangan Input (limit) : 6-20 V Pin digital I/O : 14 (6 diantaranya pin PWM) 22 Pin Analog input : 6 Arus DC per pin I/O : 40 mA Arus DC untuk pin 3.3 V : 150 mA Flash Memory : 32 KB dengan 0.5KB digunakan untuk bootloader SRAM : 2 KB EEPROM : 1 KB Kecepatan Pewaktuan : 16 Mhz Gambar 2.4 ATmega328-Arduino Pin Mapping (Sumber: http://arduino.cc/) b. Daya Modul Arduino Arduino Uno dapat diaktifkan melalui koneksi USB atau dengan catu daya eksternal (non-USB) yaitu catu daya yang dapat berasal dari sumber tegangan DC adaptor atau baterai. Adaptor ini dapat dihubungkan dengan menancapkan plug jack konektor power pada modul arduino. Kisaran kebutuhan daya yang disarankan untuk board Uno adalah 7 volt – 12 volt, jika diberi daya kurang dari 7 volt kemungkinan pin 5 v 23 Uno dapat beroperasi tetapi tidak stabil, kemudian jika diberi daya lebih dari 12V, regulator tegangan bisa panas dan dapat merusak board Uno. Berikut penjelasan pin sumber tegangan modul Arduino adalah: VIN. Tegangan masukan kepada board Arduino ketika itu menggunakan sumber daya eksternal (sebagai pengganti dari 5 volt koneksi USB atau sumber daya lainnya). 5V. Catu daya digunakan untuk daya mikrokontroler dan komponen lainnya. 3v3. Sebuah pasokan 3,3 volt dihasilkan oleh regulator on-board. GND. Ground pin. c. Memori Arduino UNO rev.3 terpasang IC mikrokontroler ATmega328 yang memiliki memori 32 KB (dengan 0,5 KB digunakan untuk bootloader), 2 KB dari SRAM dan 1 KB EEPROM (yang dapat dibaca dan ditulis dengan EEPROM liberary). d. Input dan Output Masing-masing dari 14 pin digital di Uno dapat digunakan sebagai input atau output, dengan menggunakan fungsi pinMode ( ), digitalWrite ( ), dan digitalRead ( ), beroperasi dengan daya 5 volt. Setiap pin dapat memberikan atau menerima maksimum 40 mA dan memiliki internal pull-up resistor (secara default terputus) dari 20-50 kOhms. Selain itu, beberapa pin memiliki fungsi khusus: 24 Serial: 0 (RX) dan 1 (TX). Digunakan untuk menerima (RX) dan mengirimkan (TX) TTL data serial. Pin ini dihubungkan ke pin yang berkaitan dengan chip Serial ATmega8U2 USB-to-TTL. Eksternal menyela: 2 dan 3. Pin ini dapat dikonfigurasi untuk memicu interrupt pada nilai yang rendah, dengan batasan tepi naik atau turun, atau perubahan nilai. PWM: 3, 5, 6, 9, 10, dan 11. Menyediakan output PWM 8-bit dengan fungsi analogWrite (). SPI: 10 (SS), 11 (Mosi), 12 (MISO), 13 (SCK). Pin ini mendukung komunikasi SPI menggunakan SPI library. LED: 13. Ada built-in LED terhubung ke pin digital 13. Ketika pin bernilai nilai HIGH, LED on, ketika pin bernilai LOW, LED off. Uno memiliki 6 masukan analog, berlabel A0 sampai dengan A5, yang masing-masing menyediakan 10 bit dengan resolusi (yaitu 1024 nilai yang berbeda). Selain itu, beberapa pin memiliki fungsi khusus: I2C: A4 (SDA) dan A5 (SCL). Dukungan I2C (TWI) komunikasi menggunakan perpustakaan Wire. Aref. Tegangan referensi (0 sampai 5V saja) untuk input analog. Digunakan dengan fungsi analogReference (). Reset. Bawa baris ini LOW untuk me-reset mikrokontroler. e. Komunikasi Arduino Uno memiliki sejumlah fasilitas untuk berkomunikasi dengan komputer, Arduino lain, atau mikrokontroler lainnya. 25 ATmega328 menyediakan UART TTL (5V) untuk komunikasi serial, yang tersedia di pin digital 0 (RX) dan 1 (TX). Sebuah ATmega8U2 sebagai saluran komunikasi serial melalui USB dan sebagai port virtual com untuk perangkat lunak pada komputer. Firmware ’8 U2 menggunakan driver USB standar COM, dan tidak ada driver eksternal yang diperlukan namun, pada Windows diperlukan, sebuah file inf. Perangkat lunak Arduino terdapat monitor serial yang memungkinkan digunakan memonitor data tekstual sederhana yang akan dikirim ke atau dari board Arduino. LED RX dan TX di modul Arduino akan berkedip ketika data sedang dikirim melalui chip USB-to-serial dengan koneksi USB ke komputer (tetapi tidak untuk komunikasi serial pada pin 0 dan 1). Sebuah SoftwareSerial library memungkinkan untuk berkomunikasi secara serial pada salah satu pin digital pada board Arduino Uno. ATmega328 juga mendukung I2C (TWI) dan komunikasi SPI. Perangkat lunak Arduino termasuk wire library untuk menyederhanakan penggunaan bus I2C, untuk komunikasi SPI, menggunakan perpustakaan SPI. f. Bahasa Pemrograman Arduino dan Software IDE Arduino Pemrograman Arduino mempunyai bahasa pemrograman sendiri yaitu bahasa pemrograman C/C++ yang telah disederhanakan, sehingga pemula pun bisa mempelajarinya dengan cukup mudah. Untuk membuat program Arduino dan mengupload ke dalam board Arduino, 26 membutuhkan software Enviroment) yang Arduino dapat IDE (Integrated didownload secara Development gratis di http://arduino.cc/en/Main/Software. 2.2.4 Bluetooth Bluetooth adalah spesifikasi industri untuk jaringan kawasan pribadi (personal area networks atau PAN) tanpa kabel. Bluetooth menghubungkan dan dapat dipakai untuk melakukan tukar menukar informasi diantara peralatan-peralatan. Spesifiksi dari peralatan Bluetooth ini dikembangkan dan didistribusikan oleh kelompok Bluetooth Special Interest Group. Bluetooth beroperasi dalam pita frekuensi 2,4 Ghz dengan menggunakan sebuah frequency hopping traceiver yang mampu menyediakan layanan komunikasi data dan suara secara real time antara host-host bluetooth dengan jarak terbatas. Kelemahan teknologi ini adalah jangkauannya yang pendek dan kemampuan transfer data yang rendah. Range yang dapat dijangkau oleh Bluetooth adalah 10 meter atau 30 feet. Sistem Bluetooth juga menyediakan layanan komunikasi point to point maupun komunikasi point to multipoint. Produk bluetooth dapat berupa PC card atau USB adapter yang dimasukkan ke dalam perangkat. Sedangkan perangkat yang dapat dikombinasikan dengan Bluetooth diantaranya: handphone, kamera, personal computer (PC), printer, headset, Personal Digital Assistant (PDA), dan lainnya. Aplikasi-aplikasi yang dapat disediakan oleh layanan bluetooth ini antara lain : PC to PC file transfer, 27 PC to PC file synch (notebook to desktop), PC to mobile phone, PC to PDA, wireless headset, LAN connection via ethernet access point dan sebagainya. Salah satu perangkat bluetooth eksternal yang dirancang untuk keperluan transfer data dan kendali dengan mikrokontroler ialah modul bluetooth serial. Jenis modul bluetooth JY-MCU yang memiliki 4 pin yaitu: - Pin VCC sebagai tegangan sumber modul Bluetooth +5Vdc. - Pin GND sebagai ground modul Bluetooth. - Pin TXD sebagai Transmit data yang dihubungkan ke pin RX Arduino. - Pin RXD sebagai Receive data yang dihubungkan ke pin TX Arduino. Gambar 2.5 Module Bluetooth JY-MCU Wireless Serial Port Secara default konfigurasi modul Bluetooth JY-MCU ini memiliki nama “Linvor” dengan kode pairing “1234” dan baudrate 9600bps. Berikut spesifikasi Modul Bluetooth serial, yaitu: - Bluetooth protocal : Bluetooth Specification v2.0+EDR - Frequency : 2.4GHz ISM band - Modulation : GFSK(Gaussian Frequency Shift Keying) - Emission power : <=4dBm, Class 2 - Sensitivity : <=-84dBm at 0.1% BER - Speed: Asynchronous: 2.1Mbps (Max) / 160kbps, Synchronous: 1Mbps/1Mbps - Security : Authentication and encryption 28 - Profiles : Bluetooth serial port CSR - chip : Bluetooth v2.0 - Wave band : 2.4GHz-2.8GHz, ISM Band - Protocol : Bluetooth V2.0 - Power Class : (+6dbm) - Reception sensitivity: -85dBm - Voltage : 5 (3.6V-6V) - Current : Paring - 35mA, Connected - 8mA - Temperature : -40~ +105 Degrees Celsius - User defined Baud rate : 4800, 9600, 19200, 38400, 57600, 115200, 230400,460800,921600 ,1382400. - Dimension : 26.9mm*13mm*2.2mm Komunikasi menggunakan Bluetooth memiliki kelebihan dan kekurangan, berikut penjelasan yang diantaranya. Kelebihan yang dimiliki oleh sistem Bluetooth adalah: - Bluetooth dapat menembus dinding, kotak, dan berbagai rintangan lain walaupun jarak transmisinya hanya sekitar 30 kaki atau 10 meter. - Bluetooth tidak memerlukan kabel ataupun kawat. - Bluetooth dapat mensinkronisasi basis data dari telepon genggam ke komputer. - Dapat digunakan sebagai perantara modem. 29 Kekurangan dari sistem Bluetooth adalah: - Sistem ini menggunakan frekuensi yang sama dengan gelombang LAN standar. - Apabila dalam suatu ruangan terlalu banyak koneksi Bluetooth yang digunakan, akan menyulitkan pengguna untuk menemukan penerima yang diharapkan. - Banyak mekanisme keamanan Bluetooth yang harus diperhatikan untuk mencegah kegagalan pengiriman atau penerimaan informasi. - Di Indonesia, sudah banyak beredar virus-virus yang disebarkan melalui bluetooth dari handphone. 2.2.5 Komunikasi Serial USART Komunikasi serial ialah suatu sistem pengiriman dan penerimaan data secara serial (data dikirim satu persatu secara berurutan), sehingga komunikasi serial jauh lebih lambat dari pada komunikasi paralel. Agar dapat melakukan hubungan antara perangkat satu dengan perangkat lainnya maka dapat menggunakan mode komunikasi antar perangkat yang salah satunya adalah dengan menggunakan mode komunikasi serial USART (Universal Synchronous and Asynchronous serial Receiver and Transmitter). USART adalah piranti komunikasi serial yang kefleksibelan yang tinggi dan mempunyai fitur sebagai berikut: mempunyai 30 - Operasi Full Duplex - Mode Asinkron dan sinkron - Baudrate generator resolusi tinggi - Mode komunikasi multiprocessor - Mode komunikasi asinkron kecepatan ganda. Laju transfer data pada komunikasi serial dinyatakan dalam bps (bit per second) atau dikenal dengan istilah baud rate. Agar komunikasi serial dapat berjalan dengan baik maka harus dipastikan kecepatan transfer data dari kedua perangkat yang dihubungkan memiliki baud rate yang sama. Baud rate yang standar digunakan antara lain 2400, 4800, 9600, 19200 dan lain-lain. Pada komunikasi serial Arduino dengan modul bluetooth digunakan mode komunikasi serial USART. Proses inisialisasi komunikasi USART ada beberapa bagian yang harus dilakukan yaitu: 1. Menghitung nilai Baud Rate yang akan digunakan. 2. Mengaktifkan jalur komunikasi Receiver (RX) dan Trasmitter (TX). 3. Melakukan setting format frame data. Dalam proses inisialisasi komunikasi serial USART ada beberapa register yang perlu ditentukan nilainya, yaitu: 1. UBRR (USART Baud Rate Register) UBRR merupakan register 16 bit yang digunakan untuk menentukan kecepatan transmisi data yang digunakan pada saat komunikasi. UBRR 31 terbagi menjadi UBRR0L bit 0 – bit 7 untuk menyimpan nilai low dan UBRR0H bit 8 – bit 15 untuk menyimpan nilai high dari baud rate. Gambar 2.6 USART Baud Rate Register (UBRR) (Sumber: Datasheet Atmega328) Nilai UBRR dihitung dengan Asynchronous Normal Mode, jika nilai frekuensi kristal (Fosc) 16MHz dan Baud rate 9600bps, maka: 𝑈𝐵𝑅𝑅 = 𝑈𝐵𝑅𝑅 = 𝐹𝑜𝑠𝑐 16×𝐵𝑎𝑢𝑑 𝑟𝑎𝑡𝑒 16.000.000 16×9600 − 1 ................................................ (2-1) − 1 = 103,17 ≈ 103 ≈ 67ℎ𝑒𝑥 2. UCSR0A (USART Control and Status Register A) UCSR0A merupakan register 8 bit yang digunakan untuk mengendalikan mode komunikasi USART dan untuk membaca status yang sedang terjadi pada USART. Gambar 2.7 USART Control and Status Register A (UCSRA) (Sumber: Datasheet Atmega328) 3. UCSR0B (USART Control and Status Register B) UCSR0B merupakan register 8 bit yang digunakan untuk mengatur aktivasi penerimaan (receiver) dan pengiriman (transmitter) pada USART. 32 Gambar 2.8 USART Control and Status Register B (UCSRB) (Sumber: Datasheet Atmega328) Pada bagian ini yang akan diaktifkan hanya receiver, sehingga untuk mengaktifkan jalur komunikasi data receiver (penerima) maka flag pada RXEN diset 1. 4. UCSR0C (USART Control and Status Register C) UCSR0C merupakan register 8 bit yang digunakan untuk menentukan format frame data USART. Pada intinya komunikasi standar memiliki format frame yaitu 8 bit data, 1 stop bit, no parity, Asinkron. Gambar 2.9 USART Control and Status Register C (UCSRC) (Sumber: Datasheet Atmega328) Untuk mendapatkan format frame yang sesuai, maka flag pada register UCSR0C diset dengan: - Flag UMSEL01 dan UMSEL00 diset 0 untuk mode Asinkron. - Flag UPM01 dan UPM00 diset 0 untuk no parity (disabled). - Flag USBS0 diset 0 untuk 1 stop bit. - Flag UCSZ01 dan UCSZ00 diset 1 untuk ukuran karakter 8 bit. 5. UDR (USART Data Register) Register UDR digunakan untuk menyimpan data yang akan dikirim maupun data yang diterima. Register UDR memiliki 2 alamat I/O yang 33 sama yaitu RXB sebagai buffer untuk menyimpan data yang akan diterima dan TXB sebagai buffer untuk menyimpan data yang akan dikirim. Gambar 2.10 USART Data Register (UDR) (Sumber: Datasheet Atmega328) 6. Proses penerimaan data (Receive data) Proses penerimaan data serial deilakukan dengan mengecek nilai bit RXC0 (USART Receive Complete) pada register UCSR0A. RXC0 akan bernilai 1 ketika ada data masuk yang belum dibaca dalam buffer penerima, dan akan bernilai 0 jika tidak ada data dalam buffer penerima. while(!(UCSR0A & (1<<RXC0))); c=UDR0; UCSR0A=(1<<RXC0); 2.2.6 Sistem Bilangan Sistem Digital adalah suatu sistem yang berfungsi untuk mengukur suatu nilai atau besaran yang bersifat tetap atau tidak teratur dalam bentuk diskrit berupa digit digit atau angka angka. Pada komponen-komponen komputer digital yang merupakan sistem digital bersifat saklar (switch), sistem bilangan yang paling sesuai untuk komputer digital adalah sistem bilangan biner (binary). 34 Keserdehanaan pengubahan bilangan biner ke bilangan oktal atau heksadesimal dan sebaliknya, membuat bilangan oktal dan heksadesimal juga banyak dipakai dalam dunia komputer, terutama dalam hubungan pengkodean. Konversi bilangan adalah mengubah suatu sistem bilangan menjadi sistem bilangan lain. Sistem bilangan ada 4 jenis, yaitu: - Bilangan biner, adalah bilangan basis 2 yaitu 0 dan 1. - Bilangan oktal, adalah bilangan basis 8 yaitu 0,1,2,3,4,5,6,7. - Bilangan desimal, adalah bilangan basis 10 yaitu 0,1,2,3,4,5,6,7,8,9. - Bilangan heksadesimal, adalah bilangan basis 16 yaitu 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F (A=10, B=11, C=12, D=13, E=14, F=15). Berikut beberapa cara konversi sistem bilangan, disini hanya akan dibahas sistem konversi bilangan biner, desimal dan hexadesimal. Konversi bilangan desimal ke biner dan dari biner ke desimal. Untuk konversi bilangan desimal menjadi bilangan biner, maka bilangan desimal dibagi dengan 2 hingga nilai desimal memperoleh nilai terkecil 1 atau 0. Setiap nilai yang habis dibagi dengan 2 maka itu akan menjadi nilai biner 0 dan jika menyisakan 1 maka itu akan menjadi nilai biner 1. Hasil atau nilai sisa dari pembagian dibaca dari bawah (MSD) ke atas (LSD) dan ditulis dari kiri ke kanan. 35 - Contoh bilangan desimal 576, maka bilangan biner-nya adalah: 2 2 2 2 2 2 2 2 2 567 288 144 72 36 18 9 4 2 1 sisa 0 0 0 0 0 1 0 0 Maka, 576 desimal = 10 0100 0000 biner. Untuk konversi bilangan biner ke bilangan desimal, maka setiap bit dikalikan dengan 2n, dimana n adalah posisi bit. Posisi bit paling kiri adalah dengan pangkat paling besar (MSD) dan posisi bit paling kanan adalah dengan pangkat paling kecil (LSD), kemudian hasilnya dijumlahkan. - Contoh konversi bilangan biner 11 1100 1001, maka bilangan desimal-nya adalah: 11 1100 1001 = (1×29)+ (1×28)+ (1×27)+ (1×26)+ (0×25)+ (0×24)+ (1×23)+ (0×22)+ (0×21)+ (1×20) = 512+256+128+64+0+0+8+0+0+1 = 969 desimal Maka, 11 1100 1001 biner = 969 desimal Konversi nilai heksadesimal ke biner dan dari biner ke heksadesimal. Untuk konversi bilangan heksadesimal menjadi bilangan biner dengan cara menuliskan setiap digit heksadesimal menjadi 4 bit. 36 - Contoh konversi bilangan heksadesimal 26 dan 8A7, maka bilangan biner-nya adalah : 26 hexa = 0010 0110 biner 2 = 0010 6 = 0110 8A7 hexa = 1000 1010 0111 biner 8 = 1000 A = 1010 7 = 0111 - Contoh konversi bilangan biner 0001 0011 dan 1100 1000 0111 1111, maka bilangan heksadesimal-nya adalah: 0001 0011 biner = 13 hexa 0001 = 1 0011 = 3 1100 1000 0111 1111 biner = C87F hexa 1100 = C 1000 = 8 0111 = 7 1111 = F Konversi bilangan desimal ke heksadesimal dan dari heksadesimal ke desimal. Untuk konversi bilangan desimal menjadi bilangan heksadesimal yaitu dengan cara membagi bilangan desimal dengan 16. 37 - Contoh konversi bilangan desimal 876, maka bilangan heksadesimalnya adalah: 16 876 16 54 3 sisa 12 atau C 6 Maka, 876 desimal = 36C hexa . Untuk konversi dari bilangan heksadesimal menjadi bilangan desimal yaitu dengan cara mengalikan setiap bit bilangan heksa dengan 16n, dimana n adalah posisi bit. Posis bit paling kiri adalah dengan pangkat paling besar (MSD) dan posisi bit paling kanan adalah dengan pangkat paling kecil (LSD), kemudian hasilnya dijumlahkan. - Contoh konversi bilangan heksadesimal 2B8, pada bilangan heksadesimal B adalah angka 11, sehingga bilangan desimal-nya adalah: 2B8 hexa = (2×162)+(B×161)+(8×160) = (2×162)+(11×161)+(8×160) = 512+176+8 = 696 desimal Maka, 2B8 heksadesimal = 696 desimal. Kode Standar Amerika untuk Pertukaran Informasi atau ASCII (American Standard Code for Information Interchange) merupakan suatu standar internasional dalam kode huruf dan simbol seperti Hex dan Unicode tetapi ASCII lebih bersifat universal. Ia selalu digunakan oleh komputer dan alat komunikasi lain untuk menunjukkan teks. Kode ASCII sebenarnya 38 memiliki komposisi bilangan biner sebanyak 7 bit. Namun, ASCII disimpan sebagai sandi 8 bit dengan menambakan satu angka 0 sebagai bit significant paling tinggi. Bit tambahan ini sering digunakan untuk uji prioritas. Karakter control pada ASCII dibedakan menjadi 5 kelompok sesuai dengan penggunaan yaitu berturut-turut meliputi logical communication, Device control, Information separator, Code extention, dan physical communication. Code ASCII ini banyak dijumpai pada papan ketik (keyboard) computer atau instrument-instrument digital. Jumlah kode ASCII adalah 255 kode. Kode ASCII 0..127 merupakan kode ASCII untuk manipulasi teks, sedangkan kode ASCII 128..255 merupakan kode ASCII untuk manipulasi grafik. Sistem komputer hanya mengerti bilangan biner saja, dalam program yang pada dasarnya sebuah penerapan komputer, memakai karakter-karakter yang terdapat dalam ASCII. Karakter ASCII sebenarnya dilambangkan sebagai tipe data character/ huruf dalam bahasa pemrograman. Sebut saja tipe char pada pemrograman C, sebenarnya juga karakter itu adalah angka. Pada komunikasi serial, data yang dikirim berupa data karakter yang dikirim dari aplikasi kendali pada smartphone android ke sistem alat melalui komunikasi serial bluetooth. Misal untuk menghidupkan led, maka tombol (button) ON pada aplikasi jika diklik akan mengirimkan data berupa karakter ‘a’ ke sistem alat melalui jaringan bluetooth. Data yang diterima berupa karakter ‘a’ pada dasarnya dikirim dalam bentuk kode biner, berdasarkan tabel ASCII karakter ‘a’ memiliki kode biner 01100001. 39 Tabel 2.1 ASCII (American Standard Code for Information Interchange) Sumber: http://www.commfront.com/ascii-chart-table.htm 2.2.7 Motor Servo Motor servo termasuk salah satu jenis – jenis dari motor DC. Servo adalah motor pengendali sempurna yang dapat diperintahkan untuk berotasi pada posisi tertentu. Jenis motor servo ada 2 yaitu jenis motor servo Continuous dan motor servo Standart. Kedua motor servo ini tidak jauh berbeda hanya saja pada putarannya. Berikut ini adalah penjelasan kedua jenis motor servo : 40 Motor Servo Standart. Motor servo jenis ini hanya mampu bergerak dua arah (CW dan CCW) dengan defleksi masing-masing sudut mencapai 90° sehingga total defleksi sudut dari kanan – tengah – kiri adalah 180°. Motor Servo Continuous. Motor servo jenis ini mampu bergerak dua arah (CW dan CCW) tanpa batasan defleksi sudut putar (dapat berputar secara kontinyu). Servo di dalamnya terdapat gearbox yang berguna untuk membuat gerakan yang lebih bertenaga dan rangkaian elektronik untuk memudahkan. Motor servo memiliki tiga kabel terhubung, 2 untuk power supply dengan besar tegangan berkisar 5 sampai 7 volt. Kabel ketiga merupakan kabel pengendali yang dapat langsung dihubungkan ke microcontroller. Posisi perputaran motor dapat dikendalikan dengan menggunakan gelombang pulsa yang dikirimkam ke motor servo. Untuk mengontrol pergerakan motor digunakan metoda PWM (Pulsa Width Modulation). PWM adalah merupakan suatu metoda untuk mengatur pergerakan motor dengan cara mengatur prosentase lebar pulsa high terhadap perioda dari suatu sinyal persegi dalam bentuk tegangan periodik yang diberikan ke motor. Motor servo akan dapat menerima pulsa setiap 20 ms. Panjang dari pulsa akan berpengaruh terhadap perputaran dari motor, sebagai contoh jika panjang pulsa 1,5 ms akan membuat motor berputar sebanyak 90 derajat, jika lebar pulsa lebih besar dari 1.5 ms motor akan berputar mendekati 180 41 derajat sedangkan jika lebih kecil dari 1,5 ms maka motor akan berputar mendekati 0 derajat. <--pulsa high 1,5--> <-----pulsa low 18,5------> <---------panjang pulsa PWM 20ms----------> Gambar 2.11 Panjang pulsa PWM servo (periode) Gambar 2.12 Lebar pulsa mempengaruhi posisi motor servo (Sumber: http://robomark.wordpress.com/tag/robotics-servo-dspic/) Gambar 2.13 Towerpro SG90 Mini Servo (Sumber: http://www.targethobby.com/towerpro-mini-9g-servo-p4161613.html) 42 Berikut spesifikasi Mini Servo TowerPro SG90: - Dimensi: 22 X 11,5 X 22mm - Kecepatan Operasi (4.8V tidak ada beban): 0.12sec/60 derajat - Stall Torque (4.8V): 17.5oz/in (1 kg / cm) - Range Suhu: -30 sampai +60 ˚C - Derajat Lebar Band CDead: 7µsec - Tegangan Operasi: 3,0 - 7,2 Volt - Motor tanpa inti (coreless). - Semua Gears Nylon 2.2.8 Timer/Counter PWM Timer/Counter merupakan peripheral yang sangat serbaguna, dapat digunakan untuk mengatur waktu, PWM, frekuensi, kecepatan atau menyediakan sinyal output. Mikrokontroler memiliki 3 Timer/Counter yaitu Timer0 (8-bit), Timer1 (16-bit) dan Timer2 (8-bit). Pada bahasan ini akan digunakan Timer1 untuk mengendalikan PWM sebagai kendali gerak motor servo. Timer1 memiliki sebuah register 16-bit penangkap input dan dua buah register pembanding output. Register penangkap input ICR1 (input capture register 1) merupakan register 16-bit yang digunakan untuk mengukur ketebalan detak pulsa (pulse width) atau waktu penangkapan (capturing time). Regiater pembanding output OCR1 (Output Compare Register 1) merupakan register 16-bit yang digunakan untuk menghasilkan frekuensi 43 atau detak dari timer/counter ke sebuah pin output di mikrokontroler. OCR digunakan untuk mengendalikan gerak motor servo. Gambar 2.14 Input capture register 1 (ICR1) (Sumber: Datasheet Atmega328) Gambar 2.15 Output capture register 1 (OCR1) (Sumber: Datasheet Atmega328) Untuk membangkitkan sinyal PWM, register yang digunakan untuk mengendalikan pada Timer1 yaitu Timer/Counter Control Register TCCR1A dan TCCR1B. Gambar 2.16 Timer/Counter Control Register (TCCR) (Sumber: Datasheet Atmega328) 44 Tabel 2.2 Deskripsi bit Compare Output Mode (COM) Sumber: Datasheet Atmega328 Tabel 2.3 Deskripsi bit Clock select bit (CS) Sumber: Datasheet Atmega328 45 Tabel 2.4 Deskripsi bit Waveform Generation Mode (WGM) Sumber: Datasheet Atmega328 Dari inisialisasi register diatas diterangkan set bit: - COM menggunakan mode non-inverting. - WGM menggunakan Timer/Counter mode operasi PWM Phase and Frequency Correct ICR1. - CS menggunakan prescale 8. Berikut inisialisasi register TCCR1A dan TCCR1B: TCCR1A =(1<<COM1A1)|(0<<COM1A0)|(0<<COM1B1)|(0<<COM1B0) |(0<<WGM11)|(0<<WGM10); TCCR1B = (0<<ICNC1)|(0<<ICES1)|(1<<WGM13)|(0<<WGM12) |(0<<CS12)|(1<<CS11)|(0<<CS10); 46 2.2.9 Led (Light Emitting Diode) LED (Light Emitting Diode) adalah suatu diode semikonduktor yang memancarkan cahaya monokromatik yang tidak koheren ketika diberi tegangan maju. Gejala ini termasuk bentuk elektroluminesensi. Warna yang dihasilkan bergantung pada bahan semikonduktor yang dipakai, dan bisa juga ultraviolet dekat atau inframerah dekat. Gambar 2.17 Konfigurasi Led (Sumber: http://www.societyofrobots.com/electronics_led_tutorial.shtml) Sebuah diode normal, biasanya terbuat dari silikon atau germanium. Karakteristik chip LED pada umumnya adalah sama dengan karakteristik diode yang hanya memerlukan tegangan tertentu untuk dapat beroperasi. Namun bila diberikan tegangan yang terlalu besar, LED akan rusak walaupun tegangan yang diberikan adalah tegangan maju. Led membutuhkan arus listrik untuk menyala yang mengalir dari anoda ke katoda. Led memiliki karakteristik berbeda-beda menurut warna yang dihasilkan. Semakin besar arus yang mengalir pada led maka semakin terang cahaya led yang dihasilkan, namun perlu diperhatikan bahwa besarnya arus yang diperbolehkan antara 10mA – 20mA dan pada tegangan 1,6V – 3,5V tergantung dari warna yang dihasilkan. Apabila arus yang mengalir lebih dari 20mA maka led akan putus/mati. Untuk menjaga agar led tidak mati, perlu digunakan resistor sebagai penghambat arus. 47 Tegangan kerja pada sebuah led berdasarkan warna yang dihasilkan adalah sebagai berikut: Tabel 2.5 Tegangan Kerja Led Led Tegangan Led (Vled) Arus Led (I) Infra Merah 1,7 volt 50mA Merah Standar 1,7 volt 10mA Merah Super Bright 2,2 volt 20mA Orange Standar 2,1 volt 10mA Kuning Standar 2,1volt 10mA Hijau Standar 2,2 volt 10mA High Intensity White (Biru) 3,0 – 3,5 volt 20mA High Intensity White (putih) 3,0 – 3,6 volt 20mA Ultraviolet 3,5 volt - Sumber: https://play.google.com/store/apps/electrodroid Mengacu pada data tabel led diatas maka nilai resistor untuk led dapat dihitung dengan menggunakan persamaan: 𝑅= 𝑉𝑠𝑢𝑚𝑏𝑒𝑟 −𝑉𝑙𝑒𝑑 𝐼 ..................................................................... (2-2) dimana, Vsumber merupakan tegangan sumber, Vled merupakan tegangan kerja led dan I adalah arus led. Dengan demikian arus total yang mengalir dan daya yang dibutuhkan resistor dapat diperoleh dengan persamaan: Arus total: 𝐼= 𝑉𝑠𝑢𝑚𝑏𝑒𝑟 −𝑉𝑙𝑒𝑑 𝑅 .................................................................... (2-3) Daya resistor: 𝑃 = 𝐼 2 × 𝑅 ................................................................................ (2-4) 48 2.2.10 LDR (Light Dependent Resistor) LDR singkatan dari Light Dependent Resistor adalah resistor yang nilai resistansinya berubah-ubah karena adanya intensitas cahaya yang diserap. LDR juga merupakan resistor yang mempunyai koefisien temperature negatif, dimana resistansinya dipengaruhi oleh intrensitas cahaya. LDR dibentuk dari cadium Sulfied (CDS) yang mana CDS dihasilkan dari serbuk keramik. Secara umum, CDS disebut juga peralatan photo conductive, selama konduktivitas atau resistansi dari CDS bervariasi terhadap intensitas cahaya. Jika intensitas cahaya yang diterima tinggi maka nilai hambatan akan kecil yang mengakibatkan tengangan yang keluar akan tinggi begitu juga sebaliknya disinilah mekanisme proses perubahan cahaya menjadi listrik terjadi. Gambar 2.18 LDR, Karakteristik LDR dan Simbol LDR (Sumber: http://mekatronikasekayu.blogspot.com) 2.2.11 Input Output Pin Sebelum menggunakan pin-pin pada mikrokontroler, perlu dilakukan di-set agar pin-pin tersebut menjadi input atau output. Pada Arduino yang menggunakan mikrokontroler ATmega328 beberapa pin digunakan sebagai 49 pin output untuk led dan input untuk ldr. Ldr hanya digunakan sebagai input pembaca ON/OFF dari led yang dikendalikan, sehingga hanya sebagai saklar (1 atau 0) untuk menyalakan indikator led. Berikut konfigurasi pinpin yang digunakan: Tabel 2.6 Pin output led dan input ldr dengan Arduino Komponen Pin Arduino Pin Atmega328 Input/Output Led1 Digital 7 PORTD.7 Output Led2 Digital 8 PORTB.0 Output Indikator Led1 Digital 4 PORTD.6 Output Indikator Led2 Digital 12 PORTB.4 Output LDR 1 Analog 0 PORTC.0 Input LDR 2 Analog 1 PORTC.1 Input - Set register pin output untuk led: // set PortB.0 dan PortB.4 sebagai output DDRB = 0b00010001; // 0x11 PORTB = 0b00000000; // 0x00 // set PortD.7 dan PortD.6 sebagai output DDRD = 0b11000000; // 0xC0 PORTD = 0b00000000; // 0x00 50 2.2.12 Analog to Digial Converter (ADC) ADC adalah salah satu fitur pada mikrokontroler yang dapat digunakan untuk menerima masukan tegangan analog. Penggunaan sensor menghasilkan berupa sinyal analog dan mikrokontroler pada dasarnya tidak mengerti sinyal analog, mikrokontroler hanya mengerti binary 1 dan 0. TTL adalah kamus yang menterjemahkan level tegangan ke dalam kode biner. Pada AVR mikrokontroler besarnya resolusi ADC adalah 10-bit, namun bisa juga menggunakan resolusi 8-bit. Resolusi 10 bit artinya kita dapat membaca input tegangan analog dari 0 – Vref dengan nilai desimal dari 0 – 1023. Vref sendiri nilainya sebesar 0 – 5 volt, dan masukan Vref dapat dipilih dari eksternal (pin aref) 5V atau internal. Pada Arduino UNO memiliki 6 pin ADC (A0~A5) dengan resolusi 10bit. Ada 4 register yang digunakan ADC yaitu: ADMUX (ADC Multiplexer Selection Register) Register ini berperan sebagai menentukan tegangan referansi dari ADC dan menentukan format hasil konversi dan menentukan channel ADC yang digunakan (pin Analog yang digunakan). Gambar 2.19 Register ADMUX (Sumber: Datasheet Atmega328) - Bit 7:6 (REFS1:0), digunakan untuk menentukan tegangan refeensi ADC. 51 Tabel 2.7 Memilih tegangan referensi ADC REFS1 REFS0 Tegangan Referensi 0 0 Tegangan diterapkan pada pin AREF 0 1 Tegangan referensi default (5V pada Arduino UNO) 1 0 Tidak digunakan 1 1 Tegangan referensi internal (1,1 V pada Arduino UNO) - Bit 5 (ADLAR), digunakan untuk menentukan format data hasil konversi ADC. Set 1 jika resolusi 8-bit dan set 0 jika resolusi 10-bit. Hasil diset 0 oleh software arduino. - Bit 3:0 (MUX3:0), digunakan untuk menetukan channel ADC (pin analog). Tabel 2.8 Menentukan pin Analog MUX3 MUX2 MUX1 MUX0 Analog Pin 0 0 0 0 0 0 0 0 1 1 0 0 1 0 2 0 0 1 1 3 0 1 0 0 4 0 1 0 1 5 ADCSRA (ADC Control and Status Register A) ADCSRA adalah register untuk mengendalikan konversi ADC. Gambar 2.20 Register ADCSRA (Sumber: Datasheet Atmega328) 52 - Bit 7 (ADEN – ADC Enable), digunakan untuk mengaktifkan (enable) ADC. Jika di-set 1 enable ADC dan jika di-set 0 disable ADC. - Bit 6 (ADSC – ADC Start Conversion), digunakan untuk memulai (start) pembacaan ADC. - Bit 5 (ADATE – ADC Auto Trigger Enable), mengendalikan trigger otomatis pada konversi ADC. - Bit 4:3 (ADIF – ADC Interrup Flag dan ADIE – ADC Interrupt Enable), digunakan mengaktifkan interupsi ADC. - Bit 2:0 (ADPS – ADC Prescaler Select), bit untuk menentukan faktor divisi antara sistem frekuensi clock dan input clock ADC. Tabel 2.9 ADC Prescaler Select ADPS2 ADPS1 ADPS0 Divisi Faktor 0 0 0 2 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128 ADCH dan ADCL (ADC data register) Ketika konversi telah komplit, maka hasil ditempatkan pada dua register ini. Bit ADLAR dari register ADMUX mengontrol bagaimana hasilnya disimpan. Pada Arduino mengatur ADLAR ke 0, pertama 2 bit hasil 53 konversi disimpan dalam ADCH dan sisanya 8 bit disimpan dalam ADCL tersebut. Gambar 2.21 Register ADC data register (Sumber: Datasheet Atmega328) Berikut setting konfigurasi register ADC, yaitu: - Register ADMUX Tabel 2.10 Set register ADMUX 7 6 5 4 3 2 1 0 REFS1 0 REFS0 1 ADLAR 0 0 MUX3 0 MUX2 0 MUX1 0 MUX0 0 bit flag 0x40 Bit 7:6 (REFS1:0) diset “01”, menentukan tegangan referensi AVCC 5 Volt. Bit 3:0 (MUX3:0) diset “0000”, menentukan channel (pin analog) 0. ADMUX=0x40; - Register ADCSRA Tabel 2.11 Set register ADCSRA 7 6 5 4 3 2 1 0 ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 1 0 0 0 0 1 1 1 Bit 7 (ADEN) diset “1”, untuk mengaktifkan (enabled) ADC. Bit 4 (ADIF) diset “1” tunggu hingga konversi kompilt. while ((ADCSRA & (1<<ADIF))==0); ADCSRA|=(1<<ADIF); Bit 2:0 (ADPS2:0) diset “111” prescaler 128 ADCSRA=0x87; bit flag 0x87 54 Berikut konfigurasi dan inisialisasi ADC untuk analog input (LDR). Membaca hasil konversi ADC #define ADC_VREF_TYPE 0x40 // Menentukan tegangan referensi pada register ADMUX unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | ADC_VREF_TYPE; delay_us(10); // Delay diperlukan untuk stabilisasi tegangan input ADC ADCSRA|=(1<<ADSC); // Mulai pembacaan ADC // Tunggu hingga ADC komplit while ((ADCSRA & (1<<ADIF))==0); ADCSRA|=(1<<ADIF); return ADCW; // untuk mengambil nilai ADC gunakan ADCW(10-bit) dan ADCH(8-bit) } Inisialisasi ADC ADMUX=ADC_VREF_TYPE; ADCSRA=0x87; // Mengaktifkan ADC dan clock frekuensi 125 KHz