Sebelumnya kita telah
belajar tentang bagaimana mengendalikan LED. Untuk mengendalikan LED kita
menjadi pin pada Arduino sebagai OUTPUT. Pada bagian ini kita akan membahas
tentang bagaimana menjadikan pin Arduino sebagai INPUT dan sebagai aplikasinya,
kita akan menggunakan
komponen pushbotton dan potensiometer sebagai input untuk
mengendalikan LED. Bagian ini akan menjadi dasar agar Anda memahami bagaimana
membuat Arduino bisa membaca sensor untuk mendeteksi kondisi lingkungan
sekitar.
Pertama kita akan
bermain dengan tombol pushbutton (tactile) atau tombol push on.
Ketika tombol ini ditekan, maka jalur akan tertutup (ON), ketika dilepas jalur
akan kembali terbuka (OFF). Tombol banyak digunakan untuk peralatan seperti
remote, keypad, keyboard, atau tombol untuk pengaturan TV, ld atau sejenisnya.
Gambar di atas merupakan bentuk fisik pushbutton dan salah satu simbol pushbotton jenis NO (Normally Open) dalam rangkaian elektronik. Berdasarkan simbol tersebut, Normally Open berarti kondisi normal (sebelum ditekan), maka terminal dalam kondisi tidak tersambung (open, terbuka). Tapi ketika ditekan, maka masing-masing terminal akan terhubung.
Selain jenis NO, ada
juga pushbutton jenis NC (Normally Close), artinya ketika
kondisi normal (sebelum ditekan), kaki terminal dalam keadaan terturup /
tersambung (Close), tapi ketika ditekan, kaki terminalnya terbuka
(tidak tersambung). Dalam ebook ini, kita akan menggunakan jenis pushbutton NO.
Percobaan Rangkaian Satu Tombol dan beberapa LED
Percobaan kali ini
adalah untuk mengendalikan hidup/matinya- nya LED dengan
tombol pushbutton. Jika tombol ditekan, LED akan menyala, jika
dilepas, LED kembali padam.
Untuk melakukan
percobaan ini, siapkan sebuah pushbutton, beberapa LED, dan beberapa
resistor. Siapkan juga beberapa kabel jumper untuk merangkai komponen-komponen
tersebut, Silakan buat rangkaian seperti rangkaian berikut.
Pushbutton dan 4 LED
1. Siapkan LED dan pushbutton pada project board. Buatlah rangkaian
seperti di atas.
2. Salah satu kaki pushbutton dihubungkan ke GDN pada board Arduino, sedangkan
kaki pasangannya disambungkan ke pin 2 pada board Arduino. Bagaimana cara
mengetahui pasangan kaki-kaki pada pushbutton? Anda bisa mengeceknya dengan AVO
meter.
3. Setting AVO meter untuk menghitung resistansi, kemudian cek masing-masing
pin pushbutton dengan probe. Jika tombol ditekan jarum AVO meter
bergerak menyimpang, berarti kaki-kaki tersebut sepasang.
Program
Mari kita coba dengan program berikut:
// Sketch Mengendalikan LED dengan pushbutton
// pin 2 sebagai input dan pin 13 sebagai output
const int pinButton = 2;
const int pinLED = 13;
void setup() {
pinMode(pinButton, INPUT);
pinMode(pinLED, OUTPUT);
// aktifkan pull-up resistor
digitalWrite(pinButton, HIGH);
}
void loop() {
if(digitalRead(pinButton) == LOW){
digitalWrite(pinLED, HIGH);
}else{
digitalWrite(pinLED, LOW);
}
}
Pertama kali
dijalankan, maka awalnya LED akan padam. ketika kita menekan
tombol pushbutton, maka LED akan menyala. LED akan kembali padam
ketika tekanan tombol dilepas. Pada Sketch di atas ada beberapa baris kode
baru:
pinMode(pinButton, INPUT);
pinMode(pinLED, OUTPUT);
// aktifkan pull-up resistor
digitalWrite(pinButton, HIGH);
Baris pertama berfungsi untuk mengeset pinButton sebagai INPUT. Jika sebuah pin diset sebagai INPUT, maka mikrokontroller akan mengambil data dari pin tersebut. Jika sebuah pin diset sebagai OUTPUT, maka mikrokontroller akan menuliskan data pada pin tersebut. dalam hal ini, mikrokontroller akan mengambil data yang dari pushbutton.
Perhatikan baris digitalWrite(pinButton, HIGH);. Nilai pinButton awalnya diset HIGH. Kenapa diset HIGH? Kenapa
bisa diset nilai pinnya menjadi HIGH, padahal pin tersebut tidak terhubung
dengan +5V?
Begini, pemilihan
settingan awal dengan HIGH atau LOW untuk pinButton tergantung pada
rangkaian yang akan digunakan. Rangkaian di atas
menghubungkan pinButton (pin 2) ke GND, artinya,
ketika pushbutton ditekan maka pinButton (pin 2) akan
menjadi 0 (LOW). Padahal defaultnya, setiap pin bernilai LOW. Jika pin awalnya
bernilai LOW, kemudian ditekan tetap bernilai LOW, lalu apa
gunanya pushbutton?
Padahal, fungsi utama
dari saklar (dalam hal ini adalah pushbutton) adalah mengubah nilai
yang awalnya LOW menjadi HIGH, atau sebaliknya. Nah, karena
ketika pushbutton ditekan akan bernilai LOW (ke GND), maka awalnya
harus kita set menjadi HIGH. Sehingga logika
untuk pushbutton tersebut adalah: ketika tidak ditekan HIGH, ketika
ditekan LOW.
Kondisi tersebut yang
akan digunakan untuk mendeteksi apakah pushbutton tersebut ditekan
atau tidak. Silakan perhatikan baris berikut..
if(digitalRead(pinButton) == LOW){
digitalWrite(pinLED, HIGH);
}else{
digitalWrite(pinLED, LOW);
Pada baris di atas,
fungsi digitalReadQ untuk membaca logika pada pinButton.
Jika pinButton ditekan (LOW), maka hidupkan LED dengan
perintah digitalWrite(pinLED,HIGH). Ketika pinButton bernilai
HIGH, matikan LED. Sederhana bukan? ©
Untuk pertanyaan yang
kedua, kenapa pin INPUT bisa diset HIGH?
Ketika kita menjadi
pin INPUT sebagai HIGH, maka secara internal Arduino akan menghubungkan pin
tersebut pada resistor pull- up bernilai 20k ohm. Apa
itu pull-up resistor? Jika ada pull-up, apakah juga
ada pull-down resistor?
Begini, dalam elektronika digital, jika sebuah pin diset sebagai INPUT, kemudian pin tersebut belum tersambung ke VCC atau GND, maka logika pada pin tersebut masih mengambang (floatingg). Oleh sebab itu, pin tersebut harus ditentukan apakah akan diberi resistor pull-up (sehingga bernilai HIGH) atau diberi pull-down (sehingga bernilai LOW).
Jika pin tersebut
diset HIGH, dalam internal mikrokontroller pin tersebut akan disambungkan ke
VCC dengan pengaman sebuah resistor yang diistilahkan sebagai
resistor pull-up. Begitu juga jika pin tersebut diset LOW, maka pin
tersebut akan dihubungkan ke GND dengan pengaman resistor kemudian diistilahkan
dengan resistor pulldown. Gambar diatas adalah rangkaian dasar pull-up
resistor untuk rangkain di atas tanpa LED.
Semoga penjelasan
tentang pull-up resistor bisa dipahami.
Mengontrol Tingkat Kecerahan LED
Sebelumnya kita sudah
membahas tentang cara menghidupkan dan mematikan LED dengan
sebuah pushbutton. Selanjutnya, kita akan menggunakan dua
buah pushbutton dengan ketentuan : pushbutton yang pertama
untuk menaikkan kecerahan LED hingga paling terang, sedangkan pushbutton yang
kedua untuk menurunkan kecerahan LED hingga LED padam.
Fungsi
kedua pushbutton ini mirip
dengan volume-up dan volume- down. Yang satu untuk
meningkatkan volume (kecerahan), sedangkan satunya lagi untuk menurunkan volume
(kecerahan). Yak, setidaknya Anda paham apa yang saya maksudkan.
Setidaknya ada dua
cara untuk menaikkan atau menurunkan tingkat kecerahan LED:
1. Mengubah arus yang masuk ke LED, cara ini bisa diaplikasikan dengan
mengubah nilai resistor
2. Menghidup-matikan LED dengan cepat atau lambat. Begini, ketika kita
menghiup-matikan LED dengan cepat, maka mata manusia tidak bisa mengetahuinya.
Yang ditangkap oleh mata adalah terang atau redupnya saja. Jika kita menghidup-
matikan led dengan cepat, maka LED tersebut akan terlihat terang, tapi kalau
kita menghidup matikan LED dengan lebih lambat, maka LED akan terlihat lebih
redup.
Dalam elektronika digital, konsep yang kedua dikenal dengan istilah
PWM (Pulse Width Modulation). Apa itu PWM?
Sebagian kaki / pin
Arduino support PWM, kaki yang support PWM ditandai dengan adanya tanda tilde
(~) di depan angka pinnya, seperti 3, 5, 6, dan seterusnya. Frekuensi yang
digunakan dalam Arduino untuk PWM adalah 500Hz (500 siklus dalam 1 detik).
Jadi, Arduino bisa menghidup-matikan LED sebanyak 500 kali dalam 1 detik.
Untuk menggunakan PWM,
kita bisa menggunakan fungsi analogWrite(). Nilai yang bisa
dimasukkan pada fungsi tersebut yaitu antara 0 hingga 255. Nilai 0 berarti
pulsa yang diberikan untuk setiap siklus selalu 0 volt, sedangkan nilai 255
berarti pulsa yang diberikan selalu bernilai 5 volt.
Jika kita memberikan
nilai 127 (kita anggap setengah dari 0 hingga 255, atau 50% dari 255), maka
setengah siklus akan bernilai 5 volt, dan setengah siklus lagi akan bernilai 0
volt. Sedangkan jika jika memberikan 25% dari 255 (1/4 * 255 atau 64), maka 1/4
siklus akan bernilai 5 volt, dan 3/4 sisanya akan bernilai 0 volt, dan ini akan
terjadi 500 kali dalam 1 detik. Untuk visualisasi siklus PWM, bisa Anda lihat
Gambar berikut.
Rangkaian
Buatlah rangkaian seperti gambar Rangkaian di atas Rencananya, pushbutton yang atas untuk menyalakan dan meningkatkan kecerahan LED, sedangkan pushbutton yang bawah untuk menurunkan tingkat kecerahan LED dan memadamkannya:
1. Siapkan dua buah pushbutton. Pushbutton yang pertama (atas)
disambunkan ke GND dan ke pin 2 pada board Arduino.
2. Lalu pushbutton yang kedua (bawah) disambungkan ke GND dan pin 3
pada board Arduino.
Program
// program menerangkan dan meredupkan LED
// pin 2 & 3 sebagai input digital
const int pinBt1 = 2;
const int pinBt2 = 3;
// Ingat, pin 10 support PWM
const int pinLED = 10;
void setup() {
pinMode(pinBt1, INPUT);
pinMode(pinBt2, INPUT);
pinMode(pinLED, OUTPUT);
digitalWrite(pinBt1, HIGH);
digitalWrite(pinBt2, HIGH);
}
int brightness = 0;
void loop() {
if(digitalRead(pinBt1) == LOW){
// jika pushbutton ditekan
// tambahkan nilai brightness
brightness++;
}else if(digitalRead(pinBt2) == LOW){
// jika pushbutton2 ditekan
// kurangi nilai brightness
brightness--;
}
// brightness dibatasi antara 0 - 255
// jika di bawah 0, maka ganti dengan 0
// jika di atas 255, maka ganti dengan
255
brightness = constrain(brightness, 0, 255);
// pinLED diberi nilai antara 0 - 255
analogWrite(pinLED, brightness);
// delay agar perubahannya bertahap
delay(20);
}
Pada baris di atas, kita menemukan satu fungsi baru,
yaitu constrain(). Fungsi constrain() digunakan untuk menjaga agar
nilai tetap pada range yang ditentukan. Pada kasus ini, range yang
ditentukan adalah antara 0 — 255. Misal nilai brightness lebih kecil
dari 0, maka akan dirubah menjadi 0, tapi jika nilai brightness lebih
besar dari 255, maka akan dirubah menjadi 255.
Untuk lebih memahami tentang
fungsi constrain(), silakan perhatikan isi dari
fungsi constrain() di bawah ini:
Tipe dari fungsi tersebut
adalah int (integer), artinya fungsi tersebut akan mengembalikan
nilai integer ketika dieksekusi disesuaikan dengan nilai
value (return value).
Jika diperhatikan fungsi loop ()
dan fungsi setup () bukanlah int, tapi void. Tipe
fungsi void berbeda dengan tipe int, fungsi void tidak
mengembalikan nilai apa pun, sehingga jika diperhatikan, tidak ada perintah return pada
fungsi dengan tipe void. Yap, demikian sekilas tentang tipe fungsi integer
dan void.
Selanjutnya, karena nilai brightness
selalu antara 0-255, maka ketika dituliskan ke pinLED juga akan selalu selang
antara 0-255.
brightness = constrain(brightness, 0, 255);
Fungsi analogWrite() digunakan
untuk memberikan data PWM atau data analog. analogWrite() bisa menuliskan
data dengan selang antara 0v hingga +5v pada pin INPUT. Berbeda
dengan digitalWrite()) yang hanya bisa menuliskan HIGH atau LOW, atau
+5v atau 0v saja.
delay(20) berfungsi
untuk mengatur durasi perubahan intensitas cahaya LED.
Jika delay(20) kita hilangkan, maka LED akan langsung hidup atau
langsung mati ketika tombol ditekan. Jika kecilkan nilainya, maka perubahan
intensitas akan lebih cepat, dan sebaliknya, jika kita besarkan nilainya, maka
perubahan intesitas akan lebih lama dengan catatan kita harus menahan ketika
menekan tombol pushbutton.
Lalu bagaimana jika
kita menekan kedua tombol pushbutton dengan bersamaan? Apa yang akan
terjadi dengan LED? Silakan cari jawaban dan penjelasannya.
Tidak ada komentar:
Posting Komentar