Belajar dasar pemrograman mikro kontroller berbasis Arduino
Pemrograman board-board berbasis Arduino dilakukan melalui software Arduino IDE. Perangkat lunak Arduino IDE dapat didownload gratis di arduino.cc dan tersedia untuk Windows, Mac OSX, dan Linux. Jika anda baru pertama kali menggunakan Arduino, silahkan download terlebih dahulu software Arduino IDE tersebut.
Dasar pemrograman berbasis Arduino
Board yang paling mudah dan sederhana untuk digunakan pertama kali adalah board Uno R3. Pada board Uno, pemrograman dapat segera dilakukan hanya dengan menghubungkan board Uno dengan kabel USB ke komputer anda. Dari port USB itu juga board memperoleh voltage 5V yang bisa digunakan untuk tugas yang diprogramkan, sehingga tidak diperlukan sumber tegangan external lainnya.
Pada board Uno telah disediakan banyak konektor pin I/O yang bisa anda gunakan sebagai percobaan pertama kali. Pin-pin I/O tersebut juga sangat mudah digunakan, karena sudah siap pakai, tanpa harus melakukan penyolderan anda bisa mencolokan kabel atau kaki komponen langsung kedalam konektor pin yang tersedia. Untuk pembelajaran paling dasar saat ini, pin yang akan digunakan adalah pin digital I/O no. 13 dan menggunakan 1 buah led sebagai indikator.
Lampu led terdiri dari 2 kaki, anoda dan katoda. Kaki yang lebih panjang adalah Anoda (+) dan yang lebih pendek adalah Katoda (-). Hubungkan kaki anoda (+) ke pin I/O no. 13 dan kaki katoda (-) ke pin GND atau ground. Jangan khawatir jika pemasangan led sampai terbalik, karena led adalah golongan dioda dan pemasangan kutub yang salah tidak akan mengakibatkan kerusakan.
Untuk melindungi led, anda dapat menambahkan resistor atau tahanan 220 ~ 330 ohm. Namun jika resistor kebetulan tidak tersedia disekitar anda, pemasangan led tanpa resistor juga tidak akan mengakibatkan kerusakan yang fatal. Resistor hanya untuk melindungi led (spesifikasi voltage led sekitar 3V sementara tegangan dari pin 13 sebesar 5V). Kalaupun terjadi kerusakan, hanya led yang akan rusak, namun hal ini pun jarang terjadi pada percobaan led di development board.
Dengan menyambungkan kaki anoda (+) led ke pin 13 dan kaki katoda (-) ke GND maka akan tercipta sebuah sirkuit sederhana. Jika pada pin 13 diberi tegangan 5V, maka led akan menyala. Sebaliknya, jika tegangan pada pin 13 diputuskan, maka led akan mati. Jika pin 13 dalam posisi ON maka led akan menyala. Jika pin 13 posisi OFF maka led akan mati. Inilah logic yang digunakan dalam pemrograman mikro kontroller. Pemrograman mikro kontroller berbasis Arduino pada dasarnya adalah permainan ON dan OFF dari pin-pin I/O, namun bahasa yang digunakan adalah HIGH dan LOW. HIGH adalah ketika sebuah pin dialiri tegangan (5V untuk Arduino Uno), dan OFF ketika sebuah pin bertegangan 0V.
Konsep berikutnya yang harus diingat mengenai pin I/O di board berbasis Arduino adalah bahwa pin-pin I/O memiliki kemampuan sebagai OUTPUT atau sebagai INPUT. Ketika sebuah pin di set sebagai OUTPUT, seperti pada rangkaian led diatas, pin akan MEMBERIKAN tegangan. Ketika sebuah pin di set sebagai INPUT (misal ketika disambungkan terhadap sensor), pin akan MEMBACA nilai tegangan yang ada di pin tersebut.
Rangkaian led sederhana diatas biasa disebut dengan rangkaian BLINK pada tutorial-tutorial belajar Arduino. Disebut blink karena pada rangkaian tersebut chip mikrokontroler ATmega328 di development board akan diprogram untuk melakukan tugas untuk menyalakan led secara berkedip. Hal ini dilakukan dengan memberi nilai HIGH dan LOW secara bergantian terhadap pin 13 secara terus menerus dengan selang waktu kedip yang ditentukan.
Pemrograman led berkedip (Blink)
Setelah led dipasang dan Software Arduino IDE selesai diinstall, hubungkan board ke komputer anda dan buka software Arduino IDE. Pada software ini lah anda dapat menulis program, atau biasa di sebut Sketch. Untuk belajar pertama kali, bukalah program blink yang telah tersedia di bagian Example.
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. Most Arduinos have an on-board LED you can control. On the Uno and Leonardo, it is attached to digital pin 13. If you're unsure what pin the on-board LED is connected to on your Arduino model, check the documentation at http://arduino.cc This example code is in the public domain. modified 8 May 2014 by Scott Fitzgerald */ // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin 13 as an output. pinMode(13, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(13, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
Perhatikan program Blink tersebut. Program tersebut secara umum terdiri dari 3 bagian. Bagian atas adalah comment atau komentar, yang diawali dengan karakter /* hingga diakhiri dengan karakter */. Baris-baris diantara /* dan */ tidak akan dieksekusi, sehingga anda bebas menuliskan apa saja disitu sebagai komentar atau pengingat. Komentar juga bisa disisipkan pada baris dengan karakter //. Setiap kode yang diawali dengan // adalah komentar yang juga tidak akan dieksekusi.
Bagian kedua adalah bagian yang diawali dengan void setup() { dan diakhiri dengan kurung kurawal penutup }. Ini adalah bagian yang akan dieksekusi sekali saja. Kode yang ditulis di bagian ini akan dilaksanakan pada saat Arduino board menyala pertama kali, dan tidak akan diulang hingga terjadi reboot. Ketika terjadi reboot, program akan dieksekusi dari baris pertama lagi, termasuk bagian void setup(){…..}
Seperti yang telah anda ketahui, bahwa setiap program akan selalu dieksekusi baris per baris berurutan dari atas ke bawah, kecuali pada perintah tertentu. Inilah yang terjadi pada bagian ketiga, setiap baris kode yang ada diantara void loop(){ hingga kurung kurawal penutupnya } akan dieksekusi berulang atau looping. Pada program blink ini tidak ada kode perintah untuk keluar dari loop sehingga baris-baris perintah akan selamanya dieksekusi hingga board Arduino dimatikan atau reboot.
Tiga bagian utama inilah yang selalu ada dalam setiap program yang menggunakan platform Arduino. Sebenarnya bagian komentar bukan wajib untuk ada (walaupun akan sangat membantu anda sendiri), namun bagian void setup() dan void loop() harus selalu ada. Jadi ketika anda akan mulai menulis program Arduino milik anda sendiri, mulailah menulis ketiga bagian tersebut, walaupun belum ada baris perintah di dalam void setup() maupun void loop(), namun setidaknya anda telah memulai membuat kerangka program yang benar.
Sekarang perhatikan isi dari void setup(). Isi bagian tersebut hanya 1 baris perintah yang akan dieksekusi, yaitu pinMode(13, OUTPUT), sementara sisanya adalah komentar. Perintah pinMode() adalah kode untuk memerintah fungsi dari sebuah pin, apakah INPUT atau OUTPUT, apakah akan membaca tegangan (INPUT) atau memberikan tegangan (OUTPUT). Syntax nya adalah pinMode(
Pada rangkaian led yang digunakan, kaki anoda (+) led terhubung ke pin 13, dan akan gunakan untuk memberikan tegangan bukan untuk membaca tegangan, dengan demikian perintah yang digunakan adalah pinMode(13 , OUTPUT); Chip mikrokontroler ATmega328 akan menagkap perintah ini dan akan memperlakukan pin 13 sebagai output.
Setelah melakukan eksekusi perintah di bagian void setup(), perintah yang akan dieksekusi selanjutnya adalah di bagian void loop(). Pada contoh program blink tersebut, terdapat 4 baris perintah. Ke-4 baris tersebut, karena berada di dalam bagian void loop(), akan diulang terus menerus berurutan. Jadi akan di eksekusi digitalWrite(13, HIGH); lalu delay(1000); lalu digitalWrite(13, LOW); lalu delay(1000); lalu kembali lagi ke atas digitalWrite(13, HIGH); lalu delay(1000); dan demikian seterusnya hingga chip dimatikan atau reboot.
Perintah digitalWrite() adalah kode untuk memberi nilai pada sebuah pin. Jika nilainya adalah HIGH, maka pada pin tersebut akan dialiri tegangan 5V. Jika nilainya LOW, maka pada pin tersebut akan memiliki tegangan 0V. Syntax nya adalah digitalWrite(
Perintah selanjutnya adalah delay(1000); Dengan perintah ini mikrokontroler akan melakukan counter dari 0 ke 1000 yang setiap hitungan nya menyita waktu 1 milidetik. Dengan demikian nilai 1000 akan memakan waktu 1000 milidetik atau 1 detik. Perintah delay(1000); mengakibatkan baris perintah seperti terhenti selama 1 detik sebelum akhirnya melakukan eksekusi selanjutnya. Perintah sebelumnya yaitu digitalWrite(13, HIGH) yang memberikan 5V ke pin 13 tidak akan berubah hingga 1000 milidetik berikutnya dan led tetap menyala selama 1000 milidetik atau 1 detik.
Baris perintah berikutnya adalah digitalWrite(13, LOW). Kode ini untuk memberikan tegangan 0V atau mati ke pin 13. Karena tegangan di pin 13 adalah 0V maka led pun akan mati. Berapa lama matinya? Ditentukan oleh baris perintah selanjutnya yaitu delay(1000) yang melakukan penundaan kembali selama 1 detiik, sebelum akhirnya akan melanjutkan ke baris berikutnya yaitu kembali ke atas loop : melaksanakan kembali digitalWrite(13, HIGH) dan seterusnya.
Hasil dari program ini adalah led yang menyala 1 detik, mati 1 detik, nyala kembali 1 detik, mati kembali 1 detik dan seterusnya dilakukan berulang.
Cara upload program ke board mikrokontroler berbasis Arduino
Bagaimana cara memasukkan atau upload program yang telah ditulis ke mikrokontoler berbasis Arduino? Cukup dengan klik File - Upload atau klik icon upload. Program akan dikonversi menjadi bahasa yang dimengerti oleh mikrokontroler selama beberapa detik lalu disimpan ke chip mikrokontroler. Selama proses transfer data led TX dan RX akan tampak berkedip yang menandakan proses transfer data sedang berlangsung.
Setelah proses uplod berhasil dilakukan, led akan tampak berkedip. Anda akan melihat bahwa selain led yang terhubung ke pin 13 yang berkedip, juga sebuah led lain yang ada di board akan turut berkedip. Itu adalah led yang secara default ada di development board dan terhubung ke pin 13.
Program akan selalu dilaksanakan oleh mikrokontroler, walaupun Software Arduino IDE tidak dijalankan. Program ini juga akan tetap dilaksanakan selama Arduino diberi tenaga (baik via USB maupun baterai atau AC adaptor), walaupun anda menyalakan lagi board tersebut esok hari, hingga program di timpa dengan program lain.