BAB II LANDASAN TEORI 2.1 Mesin Kasir Cash register adalah mesin kasir elektronik yang memiliki fiturfitur yang terbatas namun biasanya sudah mencukupi untuk jenis usahausaha tertentu. Jenis usaha seperti bakery, depot, atau toko retail dengan maksimum barang sekitar 1000 item masih dapat menggunakan mesin kasir jenis cash register ini. Pada umumnya mesin kasir betujuan untuk mengurangi tingkat kesalahan yang dilakukan SDM sehingga memperkecil potensi kerugian. Cash register juga menghindarkan kasir anda memberikan total kalkulasi belanja yang salah ke pelanggan, dan dapat memperkecil kecurangan yang dilakukan oleh kasir toko. 2.1.1 Sejarah Mesin Kasir Mesin Kasir ini asalnya ditemukan oleh Jamus Jacob Ritty yang merupakan pembuat dari mesin kasir itu sendiri. Penemuannya dimulai dari tahun 1879 paska perang sipil Amerika. James Ritty merupakan pemilik salon 5 http://digilib.mercubuana.ac.id/ 6 yang berada di Dayton, Ohio Amerika Serikat. Fungsi dari mesin kasir ini awalnya digunakan sebagai pencatat komponen pajak dalam sebuah penjualan, namun perkembangan teknologi membuat Mesin Kasir sekarang ini didukung dengan menggunakan beberapa perangkat seperti Timbangan Digital, Pembaca Kartu Kredit, Mesin EDC Electronic Data yang saat ini menjadi Trend yang berbasiskan Digital dan juga barcode Scanner Alat Pemindai barcode 2.1.2 Perkembangan Mesin Kasir Mesin Kasir yang pada asalnya hanya di gunakan oleh beberapa perusahaan ternama saja, kini sudah merebah ke berbagai Negara sehingga mesin kasir tersebut dapat di operasikan sesuai kegunaannya. 2.2 Mikrokontroler Mikrokontroler adalah sebuah sistem komputer fungsional dalam sebuah chip yang di dalamnya terkandung sebuah inti prosesor (CPU), memori ROM, RAM), dan perlengkapan input output (I/O). Dengan kata lain, mikrokontroler adalah suatu alat elektronika digital yang mempunyai input dan output serta kendali dengan program yang bisa ditulis dan dihapus dengan cara khusus, cara kerja mikrokontroler sebenarnya membaca dan menulis data. Mikrokontroler merupakan komputer didalam chip yang digunakan untuk mengontrol peralatan elektronik, yang menekankan efisiensi dan efektifitas biaya. Secara harfiahnya bisa disebut “pengendali kecil” dimana sebuah sistem elektronik yang sebelumnya banyak memerlukan komponen-komponen pendukung seperti IC TTL dan CMOS dapat direduksi/diperkecil dan akhirnya terpusat http://digilib.mercubuana.ac.id/ serta dikendalikan oleh 7 mikrokontroler ini. Mikrokontroler terdiri dari beberapa bagian seperti yang terlihat pada gambar di bawah ini: Gambar 2.1. Bagian Mikrokontroler Pada Gambar 2.1. di atas tampak suatu mikrokontroler standar yang tersusun atas komponen-komponen sebagai berikut : Central Processing Unit (CPU) CPU merupakan bagian utama dalam suatu mikrokontroler. CPU pada mikrokontroler ada yang berukuran 8 bit ada pula yang berukuran 16 bit. CPU ini akan membaca program yang tersimpan di dalam ROM dan melaksanakannya. Read Only Memory (ROM) ROM merupakan suatu memori (alat untuk mengingat) yang sifatnya hanya dibaca saja. Dengan demikian ROM tidak dapat ditulisi. Dalam dunia mikrokontroler ROM digunakan untuk menyimpan program bagi mikrokontroler tersebut. Program tersimpan dalm format biner (‘0’ atau ‘1’). Susunan bilangan biner tersebut bila telah terbaca oleh mikrokontroler akan memiliki arti tersendiri. Random Acces Memory (RAM) http://digilib.mercubuana.ac.id/ 8 Berbeda dengan ROM, RAM adalah jenis memori selain dapat dibaca juga dapat ditulis berulang kali. Tentunya dalam pemakaian mikrokontroler ada semacam data yang bisa berubah pada saat mikrokontroler tersebut bekerja. Perubahan data tersebut tentunya juga akan tersimpan ke dalam memori. Isi pada RAM akan hilang jika catu daya listrik hilang. Input / Output (I/O) Untuk berkomunikasi dengan dunia luar, maka mikrokontroler menggunakan terminal I/O (port I/O), yang digunakan untuk masukan atau keluaran. Komponen lainnya Beberapa mikrokontroler memiliki timer/counter, ADC (Analog to Digital Converter), dan komponen lainnya. Pemilihan komponen tambahan yang sesuai dengan tugas mikrokontroler akan sangat membantu perancangan sehingga dapat mempertahankan ukuran yang kecil. Apabila komponen komponen tersebut belum ada pada suatu mikrokontroler, umumnya komponen tersebut masih dapat ditambahkan pada sistem mikrokontroler melalui port-portnya. 2.2.1 Arduino Arduino merupakan rangkaian elektronik yang bersifat open source, serta memiliki perangkat keras dan lunak yang mudah untuk digunakan. Arduino dapat mengenali lingkungan sekitarnya melalui berbagai jenis sensor dan dapat mengendalikan lampu, motor, dan berbagai jenis aktuator lainnya. Arduino mempunyai banyak jenis, di antaranya http://digilib.mercubuana.ac.id/ 9 Arduino Uno, Arduino Mega 2560, Arduino Fio, dan lainnya. Dalam Tugas Akhir ini penulis menggunakan Arduino Mega 2560 R3. 2.2.2 Arduino Mega 2560 Arduino Mega 2560 adalah sebuah papan mikrokontroller yang berbasis ATmega2560. Arduino ini memiliki 54 pin input/output, dimana 15 pin dapat digunakan sebagai output PWM, 16 pin dapat digunakan sebagai analog input, 4 pin dapat digunakan untuk UART (port serial hardware), crystal osilator 16 MHz, koneksi USB, power jack, ICSP header, dan tombol reset. Arduino ini memiliki segala yang dibutuhkan untuk memprogram mikrokontroller seperti kabel USB dan catu daya melalui adaptor atau baterai. Arduino ini juga dapat mendukung pemakaian mikrokontroller yang dapat dikoneksikan dengan komputer menggunakan kabel USB atau listrik dengan adaptor dari AC ke DC atau baterai untuk memulai pemakaian. Arduino Mega 2560 kompatibel dengansebagian besar shield yang dirancang untuk Arduino Duemilanove, Decimila maupun UNO. Arduino Mega 2560 adalah versi terbaru yang menggantikan versi Arduino Mega. Arduino Mega 2560 berbeda dari papan sebelumnya, karena versi terbaru sudah tidak menggunakan chip driver FTDI USB-to-serial. Akan tetapi sudah menggunakan chip Atmega 16U2 (Atmega 8U2 pada papan Revisi 1 dan Revisi 2) yang diprogram sebagai konverter USB-to-serial. Arduino Mega 2560 Revisi 2 memiliki resistor penarik jalur HWB 8U2 ke Ground, sehingga lebih mudah untuk dimasukkan ke dalam mode DFU. Arduino Mega 2560 Revisi 3 memiliki fitur-fitur baru berikut: http://digilib.mercubuana.ac.id/ 10 1. Pin out : Ditambahkan pin SDA dan pin SCL yang dekat dengan pin AREF dan dua pin baru lainnya ditempatkan dekat dengan pin RESET, IOREF memungkinkan shield untuk beradaptasi dengan tegangan yang tersedia pada papan. Di masa depan, shield akan kompatibel baik dengan papan yang menggunakan AVR yang beroperasi dengan 5 Volt dan dengan Arduino Due yang beroperasi dengan tegangan 3.3 Volt. Dan ada dua pin yang tidak terhubung, yang disediakan untuk tujuan masa depan. 2. Sirkuit RESET. 3. Chip ATmega16U2 menggantikan chip Atmega 8U2. Gambar 2.2. Board Arduino Mega 2560 Tabel 2.1. Spesifikasi Arduino Mega 2560 Microcontroller Operating Voltage Input Voltage (recommended) Input Voltage (limit) Digital I/O Pins Analog Input Pins DC Current per I/O Pin DC Current for 3.3V Pin Flash Memory SRAM EEPROM ATmega2560 5V 7-12V 6-20V 54 (of which 15 provide PWM output) 16 20 Ma 50 mA 256 KB of which 8 KB used by bootloader 8 KB 4 KB http://digilib.mercubuana.ac.id/ 11 Clock Speed LED_BUILTIN Length Width Weight 16 MHz 13 101.52 mm 53.3 mm 37 g Gambar 2.3. Pemetaan Pin Arduino Mega 2560 Daya (Power) Arduino Mega dapat diaktifkan melalui koneksi USB atau dengan catu daya eksternal. Sumber daya dipilih secara otomatis. Sumber daya eksternal (non-USB) dapat berasal baik dari adaptor AC-DC atau baterai. Adaptor dapat dihubungkan dengan mencolokkan steker 2,1 mm yang http://digilib.mercubuana.ac.id/ 12 bagian tengahnya terminal positif ke ke jack sumber tegangan pada papan. Jika tegangan berasal dari baterai dapat langsung dihubungkan melalui header pin Gnd dan pin Vin dari konektor POWER. Papan Arduino ATmega 2560 dapat beroperasi dengan daya eksternal 6 sampai 20 Volt. Jika diberi tegangan kurang dari 7 Volt, maka, pin 5 Volt mungkin akan menghasilkan tegangan kurang dari 5 Volt dan ini akan membuat papan menjadi tidak stabil. Jika sumber tegangan menggunakan lebih dari 12 Volt, regulator tegangan akan mengalami panas berlebih dan bisa merusak papan. Rentang sumber tegangan yang dianjurkan adalah 7 sampai 12 Volt. Pin tegangan yang tersedia pada papan Arduino adalah sebagai berikut: a. Vin: Adalah input tegangan untuk papan Arduino ketika menggunakan sumber daya eksternal (sebagai ‘saingan’ tegangan 5 Volt dari koneksi USB atau sumber daya ter-regulator lainnya). Tegangan dapat diberikan melalui pin ini, atau jika akan memberikan tegangan untuk papan melalui jack power, kita bisa mengakses/mengambil tegangan melalui pin ini. b. 5V: Sebuah pin yang mengeluarkan tegangan ter-regulator 5 Volt, dari pin ini tegangan sudah diatur (ter-regulator) dari regulator yang tersedia (built-in) pada papan. Papan arduino juga dapat diaktifkan dengan sumber daya yang berasal dari jack power DC (7-12 Volt), konektor USB (5 Volt), atau pin Vin pada board (7-12 Volt). http://digilib.mercubuana.ac.id/ 13 Memberikan tegangan melalui pin 5V atau 3,3V secara langsung tanpa melewati regulator dapat merusak papan Arduino. c. 3V3: Sebuah pin yang menghasilkan tegangan 3,3 Volt. Tegangan ini dihasilkan oleh regulator yang terdapat pada papan. Arus maksimum yang dihasilkan adalah 50 mA. d. GND: Pin Ground. e. IOREF: Pin ini pada papan Arduino berfungsi untuk memberikan referensi tegangan yang beroperasi pada microcontroller. Sebuah perisai (shield) dikonfigurasi dengan benar untuk dapat membaca pin tegangan IOREF dan memilih sumber daya yang tepat atau mengaktifkan penerjemah tegangan (voltage translator) pada output untuk bekerja pada tegangan 5 Volt atau 3,3 Volt. Memori Arduino ATmega 2560 memiliki 256 KB flash memory untuk menyimpan kode (8 KB digunakan untuk bootloader), 8 KB SRAM dan 4 KB EEPROM. Input dan Output Masing-masing dari 54 digital pin pada Arduino Mega dapat digunakan sebagai input atau output, menggunakan fungsi pinMode() , digitalWrite() , dan digitalRead(). Arduino Mega beroperasi pada tegangan 5 volt. Setiap pin dapat memberikan atau menerima arus maksimum 40 mA dan memiliki resistor pull-up internal (yang terputus secara default) sebesar 20 – 50 kilo ohms. Selain itu, beberapa pin memiliki fungsi khusus sebagai berikut: http://digilib.mercubuana.ac.id/ 14 a. Serial yang digunakan untuk menerima (RX) dan mengirim (TX) data serial TTL. Tabel 2.2. Pin Serial RX dan TX Nomor Pin 2 3 12 13 45 46 63 64 Nama Pin PE0 (RXD0/PCINT8) PE1 (TXD0) PH0 (RXD2) PH1 (TXD2) PD2 (RXDI/INT2) PD3 (TXD1/INT3) PJ0 (RXD3/PCINT9) PJ1 (TXD3/PCINT10) Peta Nama Pin Digital pin 0 (RX0) Digital pin 1 (TX0) Digital pin 17 (RX2) Digital pin 16 (TX2) Digital pin 19 (RX1) Digital pin 18 (TX1) Digital pin 15 (RX3) Digital pin 14 (TX3) b. Eksternal Interupsi: Pin ini dapat dikonfigurasi untuk mentrigger sebuah interupsi pada nilai yang rendah, meningkat atau menurun, atau perubahan pada nilai. Tabel 2.3. Pin Eksternal Interupsi Nomor Pin 6 7 43 44 45 46 Nama Pin PE4 (OC3B/INT4) PE5 (OC3C/INT5) PD0 (SCL/INT0) PD1 (SDA/INT1) PD2 (RXDI/INT2) PD3 (TXD1/INT3) Peta Nama Pin Digital pin 2 (PWM) Digital pin 3 (PWM) Digital pin 21 (SCL) Digital pin 20 (SDA) Digital pin 19 (RX1) Digital pin 18 (TX1) c. PWM : 2 sampai 13 dan 44 sampai 46. Mencakup 8 bit PWM dengan fungsi analogWrite(). d. SPI : Pin ini mendukung komunikasi SPI menggunakan SPI library. Pin SPI juga terhubung dengan header ICSP, yang secara fisik kompatibel dengan Arduino Uno, Arduino Duemilanove dan Arduino Diecimila. http://digilib.mercubuana.ac.id/ 15 Tabel 2.4. Pin SPI Nomor Pin 19 20 21 22 Nama Pin PB0 (SS/PCINT0) PB1 (SCK/PCINT1) PB2 (MOSI/PCINT2) PB3 (MISO/PCINT3) Peta Nama Pin Digital pin 53 (SS) Digital pin 52 (SCK) Digital pin 51 (MOSI) Digital pin 50 (MISO) e. LED: Pin 13. Tersedia secara built-in LED pada papan Arduino yang terhubung ke pin digital 13. Ketika pin diset bernilai HIGH, maka LED menyala (ON), dan ketika pin diset bernilai LOW, maka LED padam (OFF). f. TWI: Pin 20 (SDA) dan pin 21 (SCL). Yang mendukung komunikasi TWI menggunakan Wire library. Pin ini tidak berada di lokasi yang sama dengan pin TWI pada Arduino Duemilanove atau Arduino Diecimila. Arduino Mega 2560 memiliki 16 pin sebagai analog input, yang masing-masing menyediakan resolusi 10 bit (yaitu 1024 nilai yang berbeda). Secara default pin ini dapat diukur/diatur dari Ground sampai dengan 5 Volt, hal ini juga memungkinkan untuk mengubah titik jangkauan tertinggi atau terendah menggunakan pin AREF dan fungsi Analog Reference(). Ada beberapa pin lainnya yang tersedia, antara lain: a. AREF : Referensi tegangan untuk input analog. Dan digunakan dengan Analog Reference(). http://digilib.mercubuana.ac.id/ 16 b. RESET: Jalur LOW ini digunakan untuk me-reset (menghidupkan ulang) microcontroller. Jalur ini biasanya digunakan untuk menambahkan tombol reset pada shield yang menghalangi papan utama Arduino. Komunikasi Arduino berkomunikasi Mega dengan 2560 memiliki komputer, dengan microcontroller lainnya. sejumlah dengan Arduino Mega fasilitas Arduino 2560 lain, untuk atau menyediakan 4 hardware komunikasi serial UART TTL (5 Volt). Sebuah chip ATmega 16U2 (ATmega 8U2 pada papan Revisi 1 dan Revisi 2) yang terdapat pada papan digunakan sebagai media komunikasi serial melalui USB dan muncul sebagai COM Port Virtual (pada Device komputer) untuk berkomunikasi dengan perangkat lunak (software) pada computer. Untuk sistem operasi Windows masih tetap memerlukan file inf, tetapi untuk sistem operasi OS X dan Linux akan mengenali papan sebagai port COM secara otomatis. Perangkat lunak Arduino termasuk didalamnya serial monitor memungkinkan data tekstual sederhana dikirim ke dan dari papan Arduino. LED RX dan TX yang ada pada papan akan berkedip ketika data sedang dikirim atau diterima melalui chip USB-to-serial yang terhubung melalui USB komputer (tetapi tidak untuk komunikasi serial seperti pada pin 0 dan 1). Sebuah Software Serial library memungkinkan untuk dapat melakukan komunikasi serial pada salah satu pin digital Arduino Mega 2560. ATmega 2560 juga mendukung komunikasi TWI dan SPI. http://digilib.mercubuana.ac.id/ 17 Perangkat lunak Arduino termasuk Wirelibrary digunakan untuk menyederhanakan penggunaan bus TWI. Untuk komunikasi SPI, menggunakan SPI library. Reset Otomatis Daripada menekan tombol reset sebelum upload, Arduino Mega 2560 didesain dengan cara yang memungkinkan untuk melakukan reset melalui perangkat lunak yang berjalan pada komputer yang terhubung. Salah satu jalur kontrol hardware (DTR) mengalir dari ATmega 8U2/16U2 dan terhubung ke jalur reset dari ATmega 2560 melalui kapasitor 100 nanofarad. Bila jalur ini di-set rendah/low, jalur reset drop cukup lama untuk me-reset chip. Perangkat lunak Arduino menggunakan kemampuan ini untuk meng-upload kode dengan hanya menekan tombol upload pada perangkat lunak Arduino. Hal ini berarti bahwa bootloader memiliki rentang waktu yang lebih pendek, seperti menurunkan DTR dapat berjalan beriringan dengan dimulainya upload. Pengaturan ini juga memiliki implikasi lain. Ketika Mega 2560 terhubung dengan komputer yang menggunakan sistem operasi Mac OS X atau Linux, papan Arduino akan di-reset setiap kali dihubungkan dengan software komputer (melalui USB). Dan setengah detik kemudian atau lebih, bootloader akan berjalan pada papan Mega 2560. Proses reset melalui program ini digunakan untuk mengabaikan data yang cacat (yaitu apapun selain meng-upload kode baru), ia akan memotong dan membuang beberapa byte pertama dari data yang dikirim ke papan setelah sambungan dibuka. Jika sebuah sketsa dijalankan pada papan untuk http://digilib.mercubuana.ac.id/ 18 menerima satu kali konfigurasi atau menerima data lain ketika pertama kali dijalankan, pastikan bahwa perangkat lunak diberikan waktu untuk berkomunikasi dengan menunggu satu detik setelah terkoneksi dan sebelum digunakan untuk mengirim data. Mega 2560 memiliki trek jalur yang dapat dipotong untuk menonaktifkan fungsi auto-reset. Pad di kedua sisi jalur dapat hubungkan dengan disolder untuk mengaktifkan kembali fungsi auto-reset. Pad berlabel “RESET-EN”. Hal ini juga dapat digunakan untuk menonaktifkan auto-reset dengan menghubungkan resistor 110 ohm dari 5V ke jalur reset. Perlindungan Beban Berlebih pada USB Arduino Mega 2560 memiliki polyfuse reset yang melindungi port USB komputer Anda dari hubungan singkat dan arus lebih. Meskipun pada dasarnya komputer telah memiliki perlindungan internal pada port USB mereka sendiri, fuse memberikan lapisan perlindungan tambahan. Jika arus lebih dari 500mA dihubunkan ke port USB,fuse secara otomatis akan memutuskan sambungan sampai hubungan singkat atau overload hilang. 2.2.3 Software IDE Arduino Integrated Development Environment (IDE) Arduino merupakan aplikasi yang mencakup editor, compiler, dan uploader dapat menggunakan semua seri modul keluarga Arduino seperti Arduino Duemilanove, Uno, Bluetooth, Mega. Kecuali ada beberapa tipe board produksi Arduino yang memakai microcontroller di luar seri AVR, seperti mikroprosesor ARM. Saat menulis kode program atau mengkompilasi modul hardware Arduino tidak http://digilib.mercubuana.ac.id/ 19 harus tersambung ke PC atau Notebook, walaupun saat proses unggahan ke board diperlukan modul hardware. IDE Arduino juga memiliki keterbatasan tidak mendukung fungsi debugging hardware maupun software. Proses kompliasi IDE Arduino diawali dengan proses pengecekan kesalahan sintaksis sketch, kemudian memanfaatkan pustaka Proscessing dan avr – gcc sketch dikompilasi menjadi berkas object, lalu berkas-berkas object digabungkan oleh pustaka Arduino menjadi berkas biner. Berkas biner ini diunggah ke chip microcontroller via kabel USB, serial port DB9, atau Serial Bluetooth. Compiler IDE Ardunino juga memanfaatkan pustaka open source AVRLibc sebagai standar de-facto pustaka referensi dan fungsi register microcontroller AVR. Pustaka AVRLibc ini sudah disertakan dalam satu paket program IDE Arduino. Meskipun demikian, kita tidak perlu mendefinisikan directive#include dari pustaka AVRLibc pada sketch karena otomatis compilerme-link pustaka AVRLibc tersebut. Ukuran berkas biner HEX hasil kompilasi akan semakin besar jika kode sketch semakin kompleks. Berkas biner memiliki ekstensi .hex berisi data instruksi program yang biasa dipahami oleh microcontroller target. Selainitu, port pararel juga bias dipakai untuk mengunggah bootloader ke microcontroller. Meskipun demikian, cara ini sudah jarang digunakan karena sekarang hampir tidak ada mainboard PC yang masih menyediakan port pararel, dan pada notebook juga sudah tidak menyertakan port pararel. http://digilib.mercubuana.ac.id/ 20 Gambar 2.4. Tampilan Sketch di Arduino IDE Pada Gambar 2.4 terlihat button (tombol) yang ada di IDE Arduino, button compile berfungsi untuk kompilasi sketch tanpa unggah ke board bisa dipakai untuk pengecekan kesalahan kode sintaks sketch. Button upload untuk mengunggah hasil kompilasi sketch ke board target. Pesan error akan terlihat jika board belum terpasang atau alamat port COM belum terkonfigurasi dengan benar. Berkas Pustaka yang tersimpan di dalam direktori yang sama sketchbook akan terlihat dalam Tab sketchbook. Berkas pustaka yang tersimpan di direktori/Arduino/libraries/tidakditampilkan pada tab sketch meskipun bisa diakses oleh sketch lain. 2.3 Bahasa Pemograman Arduino Berbasis Bahasa C Bahasa C adalah suatu bahasa pemrograman. Bahasa C termasuk sebagai bahasa pemrograman tingkat menengah, yang bisa dipelajari dengan http://digilib.mercubuana.ac.id/ 21 lebih mudah karena mudah dimengerti tetapi mempunyai kemampuan yang tinggi. Berikut merupakan keunggulan-keungulan Bahasa C: Bahasa C merupakan bahasa yang powerful dan fleksibel yang telah terbukti dapat menyelesaikan program-program besar seperti pembuatan sistem operasi, pengolah gambar (seperti pembuatan game) dan juga pembuatan kompilator bahasa pemrograman baru. Bahasa C merupakan bahasa yang portabel sehingga dapat dijalankan di beberapa sistem operasi yang berbeda. Sebagai contoh program yang kita tulis dalam sistem operasi windows dapat kita kompilasi didalam sistem operasi linux dengan sedikit ataupun tanpa perubahan sama sekali. Bahasa C merupakan bahasa yang sangat populer dan banyak digunakan oleh programmer berpengalaman sehingga kemungkinan besar library pemorograman telah banyak disediakan oleh pihak luar/lain dan dapat diperoleh dengan mudah. Bahasa C merupakan bahasa yang bersifat modular, yaitu tersusun atas rutin-rutin tertentu yang dinamakan dengan fungsi (function) dan fungsifungsi tersebut dapat digunakan kembali untuk pembuatan programprogram lainnya tanpa harus menulis ulang implementasinya. Bahasa C merupakan bahasa tingkat menengah (middle level language) sehingga mudah untuk melakukan interface (pembuatan program antar muka) ke perangkat keras. Bagian-bagian dalam Pemograman Bahasa C: Fungsi main http://digilib.mercubuana.ac.id/ 22 Merupakan fungsi yang menjadi inti dari program dan merupakan awal dan akhir eksekusi. Fungsi ini harus ada dalam setiap program. Tanda kurawal buka { merupakan tanda awal fungsi main dan tanda kurawal tutup } merupakan tanda berakhirnya fungsi main. Prepocessor directive/header file Preprocessor directive merupakan suatu pernyataan yang akan diikut sertakan dalam program, dimana pernyataan tersebut akan di-compile sebelum proses compilasi yang sebenarnya dilakukan. Deklarasi Deklarasi diperlukan bila kita akan menggunakan pengenal (identifier) dalam program. Identifier dapat berupa variable, konstanta dan fungsi. Konstanta Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses program berlangsung. Konstanta nilainya selalu tetap. Variable Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam proses program. Berbeda dengan konstanta yang nilainya selalu tetap, nilai dari suatu variable bisa diubahubah sesuai kebutuhan. Aturan Umum Penulisan Bahasa C: Membedakan penulisan huruf besar dan kecil. Untuk memberi komentar pada suatu statement (keadaan), dapat menggunakan /* di awal dan */ di akhir atau // dalam satu baris. Awal dan akhir subroutine atau fungsi harus diapit kurung kurawal ({ }). http://digilib.mercubuana.ac.id/ 23 Setiap statement harus diakhiri tanda titik koma, kecuali statement yang diawali oleh tanda kres “#”. Setiap variabel yang digunakan wajib dideklarasikan terlebih dahulu. Untuk bahasa C setiap melakukan proses input dan outpu data harus selalu menyertakan format datanya, sedangkan di C++ tidak. 2.4 Arduino Ethernet Shield Ethernet Shield menambah kemampuan papan arduino agar terhubung ke jaringan komputer. Ethernet shield berbasiskan chip ethernet Wiznet W5100. Ethernet library digunakan dalam menulis program agar papan arduino dapat terhubung ke jaringan dengan menggunakan arduino Ethernet shield. Pada ethernet shield terdapat sebuah slot micro-SD, yang dapat digunakan untuk menyimpan file yang dapat diakses melalui jaringan. Onboard micro-SD card reader diakses dengan menggunakan SD library. Arduino board berkomunikasi dengan W5100 dan SD card mengunakan bus SPI (Serial Peripheral Interface). Komunikasi ini diatur oleh library SPI.h dan Ethernet.h. Bus SPI menggunakan pin digital 11, 12 dan 13 pada Arduino Uno. Pin digital 10 digunakan untuk memilih W5100 dan pin digital 4 digunakan untuk memilih SD card. Pin-pin yang sudah disebutkan sebelumnya tidak dapat digunakan untuk input/output umum ketika kita menggunakan ethernet shield. Karena W5100 dan SD card berbagi bus SPI, hanya salah satu yang dapat aktif pada satu waktu. Jika kita menggunakan kedua perangkat dalam program kita, hal ini akan diatasi oleh library yang sesuai. Jika kita tidak http://digilib.mercubuana.ac.id/ 24 menggunakan 15 salah satu perangkat dalam program kita, kiranya kita perlu secara eksplisit mendeselect-nya. Untuk melakukan hal ini pada SD card, set pin 4 sebagai output dan menuliskan logika tinggi padanya, sedangkan untuk W5100 yang digunakan adalah pin 10. DFRduino Ethernet shield adalah sebuah clone dari arduino Ethernet shield yang dibuat oleh DFRobot. Gambar 2.5. DFRduino Ethernet Shield 2.5 LCD (Liquid Crystal Display) LCD (Liquid Crystal Display) adalah salah satu komponen elektronika yang berfungsi sebagai tampilan suatu data, baik karakter, huruf ataupun grafik. Dipasaran tampilan LCD sudah tersedia dalam bentuk modul yaitu tampilan LCD beserta rangkaian pendukungnya. LCD mempunyai pin data, kontrol catu daya, dan pengatur kontras tampilan. LCD juga merupakan perangkat display yang paling umum dipasangkan di Mikrokontroller, mengingat ukurannya yang kecil dan kemampuannya menampilkan karakter atau grafik yang lebih dibandingkan display seven-segmen. Pada pengembangan sistem embedded, LCD mutlak diperlukan sebagai sumber pemberi informasi utama, misalnya alat pengukur kadar gula darah, penampil waktu jam, penampil counter putaran motor http://digilib.mercubuana.ac.id/ 25 industri dan lain-lain. Berdasarkan jenis tampilan, LCD dapat dikelompokan menjadi beberapa jenis, yaitu: a. Segment LCD LCD ini berbentuk dari beberapa Sevent Segment Display atau Sixteen Segment Dispaly, namun ada juga yang mengabungkan keduanya. LCD ini sering dipakai untuk jam digital. b. Dot Matrix character LCD LCD ini terbentuk dari beberapa Dot Matrix Display berukuran 5x7 atau 5x9 yang membentuk sebuah matriks yang lebih besar dengan berbagai kombinasi jumlah baris dan kolom. Kombinasi ini yang menentukan karakter yang dapat ditampilkan LCD tersebut. Seperti 2 baris 20 karakter atau 4 baris 20 karakter. c. Graphic LCD LCD jenis ini masih berkembang saat ini. Resolasi LCD ini bervariasi, diantaranya128x64, 128x128. Sekarang ini Graphic LCD banyak dipakai pada Handycam, laptop, telpon seluler (cellphone), monitor komputer dan lain sebagainya. 2.5.1 Register pada LCD Register yang terdapat di LCD adalah sebagai berikut: a. IR (Intruction Register) Digunakan untuk menentukan fungsi yang harus dikerjakan oleh LCD serta pengalamatan DDRAM atau CGRAM. b. DR (Data Register) http://digilib.mercubuana.ac.id/ 26 Digunakan sebagai tempat data DDRAM atau CGRAM yang akan ditulis atau dibaca oleh komputer atau sistem minimum. Saat dibaca, DR menyimpan data DDRAM atau CGRAM, setelah itu data alamatnya secara otomatis masuk ke DR. Pada waktu menulis, cukup lakukan inisialisasi DDRAM atau CGRAM, kemudian untuk selanjutnya data dituliskan ke DDRAM atau CGRAM sejak awal alamat tersebut. c. BF (Busy Flag) Digunakan untuk LCD dalam keadaan siap atau sibuk. Apabila LCD sedang melakukan operasi internal, BF diset menjadi 1, sehingga tidak akan menerima perintahdari luar. Jadi, BF harus dicek apakah telah diriset menjadi 0 ketika akan menulis LCD (memberi data pada LCD). Cara untuk menulis LCD adalah dengan mengeset RS menjadi 0 dan mengeset R/W menjadi 1. d. AC (Address Counter) Digunakan untuk menunjukan alamat pada DDRAM atau CGRAM dibaca atau ditulis, maka AC secara otomatis menunjukan alamat berikutnya. Alamat yang disimpan AC dapat dibaca bersamaan dengan BF. e. DDRAM (Display Data Random Access Memory) http://digilib.mercubuana.ac.id/ 27 Digunakan sebagai tempat penyimpanan data sebesar 80 byte atau 80 karakter. AC menunjukan alamat karakter yang sedang ditampilkan. f. CGROM (Character Generator Read Only Memory) Pada LCD terdapat ROM untuk menyimpan karakter-karakter ASCII (American Standart Code for Interchage Intruction), sehingga cukup memasukan kode ASCII untuk menampilkanya. g. CGRAM (Character Generator Random Access Memory) Sebagai data storage untuk merancang karakter yang dikehendaki. Untuk CGRAM terdapat kode ASCII dari 00h sampai 0Fh, tetapi hanya 8 karakter yang disediakan. Alamat CGRAM hanya 6 bit, 3 bit untuk mengatur tinggi karakter dan 3 bit tinggi menjadi 3 bit rendah DDRAM yang menunjukan karakter, sedangkan 3 bit rendah sebagai posisi data CGRAM untuk membuat tampilan baris dalam dot matriks 5x7 karakter tersebut, dimulai dari atas. Sehingga karakter untuk kode ASCII 00h sama dengan 09h sampai 07h dengan 0Fh. Dengan demikian untuk perancangan 1 karakter memerlukan penulisan data ke CGRAM sampai 8 kali. h. Cursor and Blink Control circuit Merupakan rangkaian yang menghasilkan tampilan kursor dan kondisi blink (berkedap-kedip). http://digilib.mercubuana.ac.id/ 28 Gambar 2.6. LCD 2004A Tabel 2.5. Deskripsi pin pada LCD http://digilib.mercubuana.ac.id/ 29 Gambar 2.7. Detail Karakter LCD 20x4 2.6. Motor Servo Motor servo adalah sebuah perangkat atau aktuator putar (motor) yang dirancang dengan sistem kontrol umpan balik loop tertutup (servo), sehingga dapat diset-up atau diatur untuk menentukan dan memastikan posisi sudut dari poros output motor. Motor servo merupakan perangkat yang terdiri dari motor DC, serangkaian gear, rangkaian kontrol dan potensiometer. Serangkaian gear yang melekat pada poros motor DC akan memperlambat putaran poros dan meningkatkan torsi motor servo, sedangkan potensiometer dengan perubahan resistansinya saat motor berputar berfungsi sebagai penentu batas posisi putaran poros motor servo. Penggunaan sistem kontrol loop tertutup pada motor servo berguna untuk mengontrol gerakan dan posisi akhir dari poros motor servo. Penjelasan sederhananya begini, posisi poros output akan di sensor untuk mengetahui posisi poros sudah tepat seperti yang diinginkan atau belum, dan jika belum, maka kontrol input akan mengirim sinyal kendali untuk membuat posisi poros http://digilib.mercubuana.ac.id/ 30 tersebut tepat pada posisi yang diinginkan. Motor servo biasa digunakan dalam aplikasi-aplikasi di industri, selain itu juga digunakan dalam berbagai aplikasi lain seperti pada mobil mainan, radio kontrol, robot, pesawat, dan lain sebagainya. Ada dua jenis motor servo, yaitu motor servo AC dan DC. Motor servo AC lebih dapat menangani arus yang tinggi atau beban berat, sehingga sering diaplikasikan pada mesin-mesin industri. Sedangkan motor servo DC biasanya lebih cocok untuk digunakan pada aplikasi-aplikasi yang lebih kecil. Dan bila dibedakan menurut rotasinya, umumnya terdapat dua jenis motor servo yang dan terdapat di pasaran, yaitu motor servo rotation 180⁰ dan servo rotation continuous. a. Motor servo standard (servo rotation 180⁰) adalah jenis yang paling umum dari motor servo, dimana putaran poros outputnya terbatas hanya 90⁰ kearah kanan dan 90⁰ kearah kiri. Dengan kata lain total putarannya hanya setengah lingkaran atau 180⁰. b. Motor servo rotation continuous merupakan jenis motor servo yang sebenarnya sama dengan jenis servo standard, hanya saja perputaran porosnya tanpa batasan atau dengan kata lain dapat berputar terus, baik ke arah kanan maupun kiri. 2.6.1. Prinsip kerja motor servo Motor servo dikendalikan dengan memberikan sinyal modulasi lebar pulsa (Pulse Wide Modulation / PWM) melalui kabel kontrol. Lebar pulsa sinyal kontrol yang diberikan akan menentukan posisi sudut putaran dari poros motor servo. Sebagai contoh, lebar pulsa dengan waktu 1,5 ms http://digilib.mercubuana.ac.id/ 31 (mili detik) akan memutar poros motor servo ke posisi sudut 90⁰. Bila pulsa lebih pendek dari 1,5 ms maka akan berputar ke arah posisi 0⁰ atau ke kiri (berlawanan dengan arah jarum jam), sedangkan bila pulsa yang diberikan lebih lama dari 1,5 ms maka poros motor servo akan berputar ke arah posisi 180⁰ atau ke kanan (searah jarum jam). Lebih jelasnya perhatikan gambar dibawah ini. Gambar 2.8. Posisi motor servo terkrndali oleh variable lebar pulsa Ketika lebar pulsa kendali telah diberikan, maka poros motor servo akan bergerak atau berputar ke posisi yang telah diperintahkan, dan berhenti pada posisi tersebut dan akan tetap bertahan pada posisi tersebut. Jika ada kekuatan eksternal yang mencoba memutar atau mengubah posisi tersebut, maka motor servo akan mencoba menahan atau melawan dengan besarnya kekuatan torsi yang dimilikinya (rating torsi servo). Namun motor servo tidak akan mempertahankan posisinya untuk selamanya, sinyal lebar pulsa kendali harus diulang setiap 20 ms (mili detik) untuk menginstruksikan agar posisi poros motor servo tetap bertahan pada posisinya. http://digilib.mercubuana.ac.id/ 32 Gambar 2.9. Motor Servo S90 2.7. Web Server Secara garis besar, web server memiliki fungsi untuk menerima request dan merespon request dari client melalui browser pada jalur protocol komunikasi yang kemudian diteruskan kembali ke client berupa hasil yang ada berupa data-data seperti gambar, tulisan, video, atau dokumen. Sederhananya pengertian web server adalah sebuah perangkat lunak (server web) yang merespon permintaan dari client (menggunakan web browser) ke tempat data diletakkan/disimpan, yang kemudian dikirimkan melalui jalut http (Hypertext Transmit Protocol)/ https (Hypertext Transmit Protocol Secure) dan ditampilkan di halaman web browser yang digunakan oleh client. 2.7.1 Wamp Server Wamp Server adalah paket web server yang bekerja secara pada local host yang dibuat secara independen dan diinstal pada sistem operasi Windows. Wampserver digunakan untuk membuat web server lokal pada komputer guna memudahkan perancangan dan pembuatan web sebelum dipublikasikan ke internet atau jaringan lokal (LAN). http://digilib.mercubuana.ac.id/ 33 WAMP adalah singkatan dari dari Windows and the principal components of the package: Apache, MySQL and PHP (Perl or Python). Apache adalah Web server, MySQL adalah database, PHP adalah bahasa scripting yang dapat memanipulasi informasi yang dibuat di database dan menghasilkan halaman web dinamis konten setiap waktu diminta oleh browser. Program lain juga dapat dimasukkan dalam paket, seperti phpMyAdmin yang menyediakan antarmuka pengguna grafis untuk manajer database MySQL, atau bahasa scripting Python alternatif atau Perl. Gambar dibawah ini merupakan bagian-bagian dari Wamp Server: . Gambar 2.10. Bagian-bagian dari Wamp Server Localhost berfungsi untuk menampilkan localhost di browser. phpMyAdmin merupakan tempat untuk mengakses database. www directory merupakan tempat menyimpan file-file, seperti file HTML, gambar, video, dll. Apache, merupakan aplikasi web server. Tugas utama Apache adalah menghasilkan halaman web yang benar kepada user berdasarkan kode PHP yang dituliskan oleh pembuat halaman web. jika diperlukan juga berdasarkan kode PHP yang dituliskan,maka dapat saja suatu database http://digilib.mercubuana.ac.id/ 34 diakses terlebih dahulu (misalnya dalam MySQL) untuk mendukung halaman web yang dihasilkan. PHP, bahasa pemrograman web. Bahasa pemrograman PHP merupakan bahasa pemrograman untuk membuat web yang bersifat server-side scripting. PHP memungkinkan kita untuk membuat halaman web yang bersifat dinamis. Sistem manajemen basis data yang sering digunakan bersama PHP adalah MySQl. namun PHP juga mendukung sistem manajement database Oracle, Microsoft Access, Interbase, d-base, PostgreSQL, dan sebagainya. Kelebihan PHP dari bahasa pemrograman lain: Bahasa pemrograman PHP adalah sebuah bahasa script yang tidak melakukan sebuah kompilasi dalam penggunaanya. Web Server yang mendukung PHP dapat ditemukan dimana - mana dari mulai apache, IIS, Lighttpd, hingga Xitami dengan konfigurasi yang relatif mudah. Dalam sisi pengembangan lebih mudah, karena banyaknya milis milis dan developer yang siap membantu dalam pengembangan. Dalam sisi pemahamanan, PHP adalah bahasa scripting yang paling mudah karena memiliki referensi yang banyak. PHP adalah bahasa open source yang dapat digunakan di berbagai mesin (Linux, Unix, Macintosh, Windows) dan dapat dijalankan secara runtime melalui console serta juga dapat menjalankan perintahperintah system. http://digilib.mercubuana.ac.id/ 35 MySQL, merupakan aplikasi database server. Perkembangannya disebut SQL yang merupakan kepanjangan dari Structured Query Language. SQL merupakan bahasa terstruktur yang digunakan untuk mengolah database. MySQL dapat digunakan untuk membuat dan mengelola database beserta isinya. Kita dapat memanfaatkan MySQL untuk menambahkan, mengubah, dan menghapus data yang berada dalam database. MySQL memiliki beberapa keistimewaan, antara lain: Portabilitas. MySQL dapat berjalan stabil pada berbagai sistem operasi seperti Windows, Linux, FreeBSD, Mac Os X Server, Solaris, Amiga, dan masih banyak lagi. Open Source. MySQL didistribusikan secara open source, dibawah lisensi GPL sehingga dapat digunakan secara cuma-cuma. ‘Multiuser’. MySQL dapat digunakan oleh beberapa user dalam waktu yang bersamaan tanpa mengalami masalah atau konflik. ‘Performance tuning’. MySQL memiliki kecepatan yang menakjubkan dalam menangani query sederhana, dengan kata lain dapat memproses lebih banyak SQL per satuan waktu. Jenis Kolom. MySQL memiliki tipe kolom yang sangat kompleks, seperti signed / unsigned integer, float, double, char, text, date, timestamp, dan lain-lain. Perintah dan Fungsi. MySQL memiliki operator dan fungsi secara penuh yang mendukung perintah Select dan Where dalam perintah (query). http://digilib.mercubuana.ac.id/ 36 Keamanan. MySQL memiliki beberapa lapisan sekuritas seperti level subnetmask, nama host, dan izin akses user dengan sistem perizinan yang mendetail serta sandi terenkripsi. Skalabilitas dan Pembatasan. MySQL mampu menangani basis data dalam skala besar, dengan jumlah rekaman (records) lebih dari 50 juta dan 60 ribu tabel serta 5 milyar baris. Selain itu batas indeks yang dapat ditampung mencapai 32 indeks pada tiap tabelnya. Konektivitas. MySQL dapat melakukan koneksi dengan klien menggunakan protokol TCP/IP, Unix soket (UNIX), atau Named Pipes (NT). Lokalisasi. MySQL dapat mendeteksi pesan kesalahan pada klien dengan menggunakan lebih dari dua puluh bahasa. Meski pun demikian, bahasa Indonesia belum termasuk di dalamnya. Antar Muka. MySQL memiliki interface (antar muka) terhadap berbagai aplikasi dan bahasa pemrograman dengan menggunakan fungsi API (Application Programming Interface). Klien dan Peralatan. MySQL dilengkapi dengan berbagai peralatan (tool)yang dapat digunakan untuk administrasi basis data, dan pada setiap peralatan yang ada disertakan petunjuk online. Struktur tabel. MySQL memiliki struktur tabel yang lebih fleksibel dalam menangani ALTER TABLE, dibandingkan basis data lainnya semacam PostgreSQL ataupun Oracle. http://digilib.mercubuana.ac.id/