BLINK – Memahami konsep dasar I/O Arduino

Setelah mengenal board Uno, mengetahui cara mengupload sketch ke board, dan mengenal anatomi breadboard, marilah kita mulai belajar konsep-konsep dasar Arduino melalui eksperimen langsung. Pada tutorial pertama ini kita akan belajar mengenai konsep I/O atau Input Output pada micro controller, yang pada kali ini kita akan menggunakan mikro kontroller berbasis Arduino yaitu board UNO R3

Komponen yang akan kita gunakan dalam tutorial kali ini adalah breaboard, beberapa kabel jumper, 1 buah led, 1 buah resistor 220 ohm, dan tentunya board Uno. Semua komponen ada di kit Essentials.

Pasanglah led, dan resistor serta kabel-kabel jumper seperti pada gambar diatas. Dari pin 5V arduino ke power rail warna merah di breadboard. Pin GND ke power rail warna biru. Bagian kutub led negatif (yang berkaki lebih pendek) dihubungkan ke power rail warna biru dengan kabel jumper. Bagian kutub positif led (yang berkaki lebih panjang) dihubungkan ke resistor via breadboard. Ujung resistor lain dihubungkan ke pin 13 dari board Uno.

Komponen led adalah komponen yang akan cukup sering anda gunakan dalam percobaan-percobaan dan latihan Arduino karena sifat nya yang sederhana. Jika kaki anoda (positif led) dari led dihubungkan ke kutub positif sumber tegangan, dan kaki katoda (negatif led) dihubungkan ke kutub negatif sumber tegangan, maka led akan menyala seperti lampu pada umum nya.

Berapa tegangan yang bisa di terima sebuah led? Led ukuran 5mm seperti yang ada pada kit akan menyala jika dialiri tegangan antara 3V hingga 5V. Tegangan 5V pada board Arduino akan bisa menyalakan led (anda bisa mencobanya dengan langsung menghubungkan kaki panjang led ke pin 5V dan kaki pendek nya ke pin GND), namun agar arus yang mengalir ke led tidak sampai merusak led, maka kita akan menggunakan resistor 220 ohm untuk membatasi nya.

Jadi, jika kita mengaliri kaki positif led dengan tegangan, dan kaki negatif terhubung ke GND, led akan menyala. Sifat led ini yang akan sering kita gunakan untuk memeriksa apakah pada sebuah pin I/O terdapat tegangan (posisi HIGH) atau sedang terhubung ke GND (posisi LOW)

Kembali ke diagram rangkaian diatas, jika anda memperhatikan peta anatomi breadboard sebelum nya, rangkaian ini sebenarnya sederhana, dimana kaki + led dihubungkan ke pin 13 melalui sebuah resistor, dan kaki – led dihubungkan ke GND. Resistor 220 ohm digunakan disini hanya untuk melindungi agar led tidak kelebihan arus. Pin 5V sebenarnya tidak terpakai pada rangkaian breadboard ini, namun hal ini dilakukan agar anda memiliki kebiasaan yang baik, dimana selalu akan menghubungkan 5V dan GND ke breadboard, dan nanti akan mengambil 5V atau GND dari breadboard

Dengan demikian, jika terdapat tegangan pada pin 13 (posisi HIGH), led akan menyala. Jika pin 13 tidak memiliki tegangan (posisi LOW), maka led akan mati, karena tidak ada arus yang mengalir.


Mari kita coba program nya. Bukalah file tutorial ESSENTIALS_led_1.ino yang bisa di download disini, dan upload sketch tersebut ke board UNO. Anda akan melihat bahwa led merah akan berkedip, nyala dan mati dengan selang waktu 1 detik.

Mari kita perhatikan isi sketch nya :

/*
   TUTORIAL LED BERKEDIP 1 PADA ARDUINO
   ecadio.com
   D13 -> Led Merah

*/

#define pinLed 13 //led merah pada D13

void setup() {
  pinMode(pinLed, OUTPUT); //set menjadi output
}

void loop() {
  digitalWrite(pinLed, HIGH); //menyalakan led (memberi tegangan 5V)
  delay(1000); //jeda waktu 1 detik, akan tetap menyala selama 1 detik
  digitalWrite(pinLed, LOW); //mematikan led (memberi tegangan 0V)
  delay(1000); //jeda waktu 1 detik, akan tetap mati selama 1 detik
}

Pada sketch tersebut, dapat dilihat ada 4 bagian besar. Bagian awal adalah bagian comment, yang diawali dengan /* dan diakhiri dengan */

Setiap bagian baris program yang di apit oleh /* dan */ tidak akan di eksekusi, sehingga bisa kita gunakan untuk menulis komentar atau catatan untuk program tersebut

/*
   TUTORIAL LED BERKEDIP 1 PADA ARDUINO
   ecadio.com
   D13 -> Led Merah

*/

Bagian kedua adalah area sebelum void setup(). Di area ini biasa digunakan untuk menyimpan parameter atau variabel yang di definisikan di muka. Misal dalam contoh diatas

#define pinLed 13 //led merah pada D13

kita mendefinisikan kata pinLed adalah 13, sehingga setiap kata pinLed yang ada dalam program akan diartikan sebagai 13. Kalimat setelah tanda // juga adalah comment, yang tidak akan dieksekusi.

Bagian selanjutnya adalah bagian setup(). Bagian ini adalah bagian yang wajib dalam setiap program/sketch Arduino. Ada 2 bagian wajib, bagian setup() dan bagian loop(). Kedua bagian tersebut harus ada, walaupun misalnya tidak diisi apapun.

Bagian setup() adalah bagian yang akan di eksekusi sekali saja setiap kali board Arduino di nyalakan. Bagian loop() adalah bagian yang akan selalu eksekusi ber ulang-ulang setelah bagian setup() selesai dikerjakan.

void setup() {
  pinMode(pinLed, OUTPUT); //set menjadi output
}

Dalam bagian setup() tersebut, hanya terdapat 1 perintah yaitu pinMode. Perintah pinMode adalah perintah untuk memberitahukan mikrokontroller bahwa pin I/O yang bersangkutan akan diperlakukan sebagai input atau sebagai output. Pada contoh diatas kita akan membuat pin 13 (dimana kutub positif led merah terhubung ke pin digital 13 via resistor dan kutub negatif ke ground) menjadi output, karena kita akan memberikan tegangan ke pin tersebut, bukan menangkap nilai tegangan, sehingga perintah nya adalah pinMode(13, OUTPUT);

Syntax perintah pinMode adalah :

pinMode(pin,value)

dimana pin adalah nomer pin yang akan digunakan, nilai adalah INPUT atau OUTPUT

Karena kita telah mendefinisikan kata pinLed adalah 13, sehingga kita bisa juga menulis menjadi

pinMode(pinLed, OUTPUT); //set menjadi output

Mengapa menggunakan #define ? Hal ini biasa digunakan dalam pemrograman untuk mempermudah penulisan, dan terutama untuk mempermudah dalam trial and error dan debugging. Perhatikan program diatas, jika semua kata pinLed diganti dengan 13, maka program akan tetap berjalan dengan benar. Namun jika anda akan mengganti pin, misalnya akan menyalakan led kuning yang terhubung ke pin 7, akan lebih mudah mengganti 1 baris saja yaitu #define pinLed 7 daripada mengganti baris berisi angka 13 menjadi 7

Bagian selanjutnya adalah bagian loop(). Bagian ini akan selalu dieksekusi ber ulang-ulang dari atas kebawah dan keatas lagi, seterus nya hingga terjadi reset atau restart. Mari kita bahas isi dari bagian loop().

Baris pertama dalam bagian loop adalah

digitalWrite(pinLed, HIGH); //menyalakan led (memberi tegangan 5V)

Baris tersebut berisi perintah digitalWrite(), yang syntax nya adalah :

digitalWrite(pin, value)

dimana pin adalah nomer pin yang akan digunakan, dan value adalah HIGH atau LOW Ketika kita memberikan nilai HIGH, maka pada pin tersebut akan mengalir tegangan 5V. Ketika kita beri nilai LOW, maka pada pin tersebut akan memiliki teganan 0V, atau terhubung dengan GND (ground).

Perintah digitalWrite(pinLed, HIGH); berarti memerintahkan untuk mengalirkan 5V ke pinLed atau pin digital 13 dalam hal ini (karena pinLed adalah sama dengan 13 yang kita definisikan sebelumnya). Karena pin 13 terhubung ke kutub positif led merah dan kutub negatifnya terhubung ke GND, maka led merah akan menyala. Sampai baris ini kita baru sampai ke memerintahkan led merah di pin 13 menyala, dan led akan menyala.

Baris berikutnya adalah delay(1000);.

delay(1000); //jeda waktu 1 detik, akan tetap menyala selama 1 detik

Pada baris ini mikrokontroller akan menunggu selama 1000 mili detik atau 1 detik, sehingga perintah sebelum nya yaitu yang menyalakan led merah akan tampak tetap menyala selama 1 detik, karena mikrokontroller sedang ‘sibuk’ mengerjakan perintah delay(1000); sebelum mengerjakan baris berikut nya. Setelah 1000 milli seconds berakhir maka perintah selanjutnya akan dieksekusi.

Perintah selanjutkan adalah mirip dengan perintah baris sebelum nya yang menyalakan led merah, namun kali ini memerintahkan untuk mematikan dengan mengirim 0V ke pin 4

digitalWrite(pinLed, LOW); //mematikan led (memberi tegangan 0V)

Nilai LOW memerintahkan untuk memberikan tegangan 0V atau sama dengan pin tersebut terhubung ke GND. Seperti yang telah disebutkan sebelum nya, kutub positif led merah terhubung ke pin 13 dan kutub negatif nya ke GND. Ketika pin 4 terhubung ke GND juga maka kedua kutub led merah terhubung ke GND sehingga led merah tidak akan menyala.

Perintah selanjutnya yang akan di jalankan adalah

delay(1000); //jeda waktu 1 detik, akan tetap mati selama 1 detik

Seperti delay(1000); sebelumnya, di baris ini pun mikrokontroller akan ‘sibuk’ menunggu hingga 1 detik. Pada titik ini, led sedang dalam kondisi tidak menyala, sehingga akan tampak led tidak menyala selama 1 detik.

Baris tersebut adalah baris terakhir dari bagian loop(), dan karena bagian loop() akan selalu diulang, maka perintah yang akan dilaksanakan adalah perintah awal loop() lagi yaitu perintah menyalakan led. Demikian seterusnya akan dijalankan terus menerus, sehingga yang tampak oleh mata kita adalah led merah berkedip dengan selang waktu nyala dan mati 1 detik.

Silahkan ber eksperimen dengan mencoba nilai-nilai delay yang berbeda. Cobalah 500, 150, 2000 atau kreasi anda dan lihat bagaimana perubahan nya. Anda pun dapat mencoba mengganti pinLed selain 13 (tentunya dengan menyesuaikan rangkaian pada breadboard)

Rangkaian led tersebut adalah rangkaian Active High, dimana led akan menyala ketika diberi nilai HIGH pada pin yang berkaitan (pin 13 pada contoh diatas). Alternatif lain adalah rangkaian Active Low, dimana led akan menyala ketika diberi nilai LOW pada pin yang bersangkutan.

Untuk mencoba rangkaian led Active Low, rangkaian nya mirip dengan rangkaian sebelum nya, namun kali ini kaki negatif led yang dihubungkan ke pin 13, sedangkan kaki positif terhubung ke 5V melalui resistor 220 ohm

Dengan demikian, ketika terdapat nilai LOW pada pin 13, led akan menyala karena kaki negatif led yang terhubung ke pin 13 sedangkan kaki positif telah terhubung ke 5V melalui resistor.

Diagram rangkaian untuk led aktive low bisa diikuti seperti gambar berikut :

Untuk sketch nya, silahkan gunakan ESSENTIALS_Led_1a.ino yang bisa di download di link ini


/*
   TUTORIAL LED BERKEDIP PADA ARDUINO
   Active Low Circuit
   ecadio.com
   D13 -> Led Merah

*/

#define pinLed 13 //led merah pada D13

void setup() {
  pinMode(pinLed, OUTPUT); //set menjadi output
}

void loop() {
  digitalWrite(pinLed, HIGH); //mematikan led 
  delay(1000); //jeda waktu 1 detik, akan tetap mati selama 1 detik
  digitalWrite(pinLed, LOW); //menyalakan led (konek ke gnd)
  delay(100); //jeda waktu 100 mili detik, akan tetap menyala selama 100 mili detik
}

Hasilnya, led akan menyala berkedip seperti percobaan sebelum nya. Pada sketch ini, led di program untuk menyala lebih sebentar dari mati nya, menyala hanya 100 mili detik dan mati selama 1 detik, yang menampilkan efek kedipan cepat

Perhatikan pada led standar yang menempel pada board arduino Uno, led tersebut juga ikut berkedip karena secara internal, led tersebut terhubung ke pin 13, namun led pada board berkedip kebalikan dari kedipan led pada breadboard karena perbedaan rangkaian. Rangkaian pada breadboard menggunakan active low, sedangkan pada led built ini menggunakan active high.

Featured Products

Board UNO R3 Arduino Compatible SMD Version

Board UNO R3 Arduino Compatible SMD Version

Board UNO versi SMD ini adalah development board hasil penggabungan board Pro Mini dengan Modul USB ..

Rp. 115.000,-

Breadboard 400 Titik

Breadboard 400 Titik

Breadboard atau papan project merupakan komponen yang cukup penting untuk membantu anda membuat prot..

Rp. 35.000,-

Breadboard 830 Ttik

Breadboard 830 Ttik

Breadboard atau papan project adalah komponen yang sangat penting untuk membantu anda membuat protot..

Rp. 45.000,-

Kabel Jumper Breadboard

Kabel Jumper Breadboard

Kabel jumper breadboard ini sangat dibutuhkan untuk anda yang sedang menyusun sebuah sirkuit menggun..

Rp. 55.000,-

Led Standar 5mm

Led Standar 5mm

LED adalah komponen standar yang akan sangat diperlukan untuk anda yang sedang belajar mikro kontrol..

Rp. 350,-

Board Nano 3.0 ATmega328 (Arduino Compatible)

Board Nano 3.0 ATmega328 (Arduino Compatible)

Development board Nano ini adalah salah satu versi dari development board Arduino Compatible yang me..

Rp. 130.000,-

Board UNO ATmega328 Robotdyn (Arduino Compatible)

Board UNO ATmega328 Robotdyn (Arduino Compatible)

Board UNO buatan Robotdyn ini adalah development board ATmega328 versi SMD  yang dibentuk denga..

Rp. 125.000,-

Board UNO R3 ATmega328 DIP (Arduino Compatible)

Board UNO R3 ATmega328 DIP (Arduino Compatible)

Board UNO R3 adalah papan pengembang (Development Board) untuk rangkaian mikrokontroler berbasis pla..

Rp. 145.000,-