Setelah kita belajar mengatur
intensitas cahaya LED dengan pushbutton, kali ini kita akan
mengunakan potensiometer. Kelebihan menggunakan potensiometer yaitu kita lebih
mudah sebab kita hanya butuh satu alat untuk membuat LED lebih redup atau lebih
terang.
Kenapa kita harus melalui
mikrokontroller? Kan bisa saja kita menghubungkan langsung ke LED untuk
mengatur arus yang masuk? Betul sekali.
Rangkaian Mengatur intensitas cahaya LED
dengan potensiometer
Jika kita langsung mengatur LED
dengan potensiometer, kita harus memiliki potensiometer yang pas untuk LED
tersebut. Jika hambatan potensiometer tidak sesuai, mungkin LED akan mati
sebelum potensiometer habis, atau LED sudah full nyalanya ketika potensiometer
baru kita naikkan setengah. Jadi, kita tidak bisa menggunakan satu putaran full
potensiometer untuk menaikkan atau menurunkan intensitas cahaya LED tersebut.
Butuh bukti?
Pada rangkaian menggunakan
potensiometer 50k ohm jenis trimmer. Anda juga bisa mencobanya dengan
menggunakan potensiometer putar. Yang digunakan di gambar adalah potensiometer
trimmer yang ukurannya lebih kecil dan bisa ditancapkan ke project board.
Gambar adalah contoh salah satu trimmer.
Gambar Potensiometer jenis trimmer
Berikut tahapan untuk membuat rangkaian tersebut:
1.
Sambungkan
kaki negatif LED ke GND dengan jumper
2. Kaki positif LED dihubungkan ke
salah satu ujung kaki (kaki yang bawah) potensiometer dengan jumper
3. Kaki tengah (kaki di sisi yang
sendirian) dihubungkan dengan ujung kaki yang lainnya (kaki yang atas) dengan
jumper
4.
Kaki yan
atas dihubungkan ke +5v dengan resistor.
Jika Anda memutar kekiri atau ke
kanan, maka LED akan menyala lebih terang, tapi LED tidak akan pernah padam.
Hal tersebut disebabkan karena arus yang masuk ke LED tidak memungkinkan untuk
membuat LED padam. Kenapa? Karena resistor yang dipilih tidak sesuai.
Solusinya, kita bisa menggukan teknik
PWM seperti yang kita bahas sebelumnya. Hanya saja, untuk mengatur PWM kita
menggunakan potensiometer, bukan pushbutton. Kebayang? ©
Rangkaian
Rangkaian Mengatur
Brightness LED dengan potensiometer sama dengan yang di atas..
Untuk membuat Rangkaian siapkan
LED, resistor, dan potensiometer. Anda juga bisa menggunakan trimmer.
1.
Kita akan mengontrol LED ke pin 10 pada board Arduino, pin tersebut support
PWM
2. Kedua
ujung kaki trimmer yang satu sisi (sisi kanan) masing- masing disambungkan ke
+5v dan GND. Jika Anda menggunakan potensiometer putar, yang disambungkan ke +
5v dan GND adalah pin yang paling pinggi.
3. Pin yang
satu (di sebelah kiri) disambungkan ke A0 pada board Arduino. Jika
Anda menggunakan potensiometer putar,yang disambungkan ke A0 adalah pin yang
tengah pada potensiometer.
Mungkin Anda akan bertanya, kenapa
disambungkan ke A0? Begini, pada Arduino terdapat 3 kelompok pin dengan fungsi yang
berbeda, yaitu:
·
Pin
digital (pin 0 - 13)
·
Pin
digital yang support PWM (ditandai dengan tilde “~”, yaitu pin 3, 5, 6, 9, 10,
11)
·
Pin
Analog (A0 - A5)
Digital artinya hanya terdiri dari
ON dan OFF, atau HIGH dan LOW. Digital dengan PWM artinya, frekuensi ON dan OFF
bisa diatur berdasarkan siklus tertentu dalam frekuensi 500 Hz dengan selang
antara 0 - 255. Hal ini sudah kita bahas sebelumnya, bukan?
Sedangkan pin Analog, berarti pin
tersebut bisa ditulis mempunyai tegangan antara 0 — 5 volt dengan step kenaikan
sebanyak 1024. Artinya angka 0 — 1023 akan dikonversi menjadi 0 — 5 volt pada
pin tersebut. 0 berarti 0 volt, 1023 berarti 5 volt. Kenapa maksimal 1024?
Sebenarnya selang antara 0 — 5 volt
bisa dicacah dengan jumlah tak terhingga. Akan tetapi, mikroposesor memiliki
keterbatasan dalam mencacah angka, sehingga batas yang bisa dicacah hanya
mencapai 1024 cacahan, yaitu dari 0 — 1023.
Itu sekilas tentang rangkaian yang
akan kita buat dan karakteristik pin Analog pada Arduino.
Program
Sketch
Mengatur kecerahan LED dengan potensiometer
// Sketch Mengatur kecerahan LED dengan potensiometer // pin A0 adalah pin Analog // pin 9 adalah pin digital support PWM const int pinPot = A0; const int pinLED = 9; void setup() { pinMode(pinPot, INPUT); pinMode(pinLED, OUTPUT); } int sensor = 0; int brightness = 0; void loop() { // baca nilai kaki A0 (sensor, potensiometer) sensor = analogRead(pinPot); // konversi nilai 0-1023 (Analog) menjadi 0-255 (PWM) brightness = map(sensor, 0, 1023, 0, 255); // tentukan brightness LED dengan PWM analogWrite(pinLED, brightness); }
Ketika program pada Sketch diupload, maka kita bisa mengatur brightness dan hidup- mati LED dengan
sempurna, berbeda dengan cara manual seperti Rangkaian. Pada Sketch,
ada dua bagian yang perlu diperhatikan:
1.
Pada
baris 7, pinPot = A0. A0 adalah variabel untuk pin Analog ke 0. Sebenarnya A0
sama dengan pin 14. Kita juga bisa menggunakan pin tersebut sebagai pin
digital. Tapi Anda tidak bisa menggunakan pin digital sebagai pin analog.
2.
Jadi,
gunakan pin A0 - A5 jika akan dihubungkan dengan sensor analog.
3.
Pada
baris 22, ada fungsi map(). Sebagaimana namanya,
fungsi map() digunakan untuk memetakan suatu nilai dari range
tertentu ke range yang lain. Berikut adalah parameter dalam fungsi map()
map(value,
from_mm, from_max, to_min, to_max);
Maka pada baris 22 berfungsi untuk mengubah
nilai sensor yang awalnya ada pada range 0-1024 menjadi nilai dengan
range 0-255. Jika sensor benilai 512 (anggap saja V dari 1024), maka nilai
tersebut akan dirubah menjadi 127 (anggap saja V dari 255).
Selanjutnya, mari kita coba untuk
mengatur durasi kedipan LED berdasarkan nilai pada potensiometer.
Jika ‘volume’ potensiometer rendah, durasi kedipan LED akan cepat.
Jika ‘volume potensiometer tinggi, maka durasi kedipan LED akan
lambat. Saya sebut ‘volume’ karena potensiometer identik dengan alat
untuk mengatur volume. ©
Sketch Kedipan LED dengan potensiometer
// Sketch Mengatur kedipan LED dengan potensiometer // pin A0 adalah pin Analog // pin 10 adalah pin digital support PWM const int pinPot = A0; const int pinLED = 10; void setup() { pinMode(pinPot, INPUT); pinMode(pinLED, OUTPUT); } int sensor = 0; void loop() { // baca nilai kaki A0 (sensor, potensiometer) sensor = analogRead(pinPot); // durasi kedipan sesuai nilai pada sensor 0-1023 digitalWrite(pinLED, HIGH); delay(sensor); digitalWrite(pinLED, LOW); delay(sensor); }
Kedipan LED pada Sketch di atas kurang responsive.
Artinya, ketika potensiometer dimaksimalkan, maka delaynya akan lama. Tapi
ketika potensiometer langsung diturunkan, paka kedipan LED tetap pada durasi
yang lama tersebut. Kenapa? Karena mikrokontroller akan menyelesaikan nilai
delay yang diberikan sebelumnya.
Setelah eksekusi semua delay dilakukan, baru
potensiometer akan berubah ke durasi delay yang baru. Itulah yang saya sebut
dengan kurang responsive. Harusnya, durasi kedipan LED akan segera berubah
ketika potensiometer dirubah.
Menghilangkan Delay
Sketch
Kedipan LED Responsive tanpa delay
// Sketch Mengatur kedipan Responsif LED dengan potensiometer // pin A0 adalah pin Analog // pin 9 adalah pin digital support PWM const int pinPot = A0; const int pinLED = 10; void setup() { pinMode(pinPot, INPUT); pinMode(pinLED, OUTPUT); } long lastTime = 0; int sensor = 0; int ledValue; void loop() { // baca nilai kaki A0 (sensor, potensiometer) sensor = analogRead(pinPot); // led akan hidup/mati dengan durasi = nilai sensor // jika nilai sensor 100 maka durasinya adalah 100ms if(millis() > lastTime + sensor){ if(ledValue == LOW){ ledValue = HIGH; }else{ ledValue = LOW; } // set lastTime dg nilai millis() yang baru lastTime = millis(); digitalWrite(pinLED, ledValue); } }
Program pada Sketch di atas mempunyai fungsi yang sama
dengan Sketch sebelumnya, bedanya, yang Sketch ini versi responsive. Jadi
ketika potensiometer diputar, maka durasi kedipan LED segera berubah. Cara
kerjanya seperti ini:
Ketika berbicara tentang delay, maka kita berbicara
tentang waktu. Pada Sketch ini, waktu delay bersifat dinamis karena
parameternya adalah waktu sekarang ( diambil dari millis() ). Sedangkan
jeda waktu untuk perubahan adalah waktu perubahan terakhir + nilai dari
potensiometer. Untuk lebih memahami yang saya maksudkan, perhatikan Gambar
berikut.
Gambar Siklus perubahan status LED dan potensiometer
Pada Gambar diatas keempat tahap
dari atas ke bawah tersebut adalah kondisi nyala atau tidaknya LED. Nilai lastTime dihitung
sejak terjadinya perubahan pada potensiometer atau habisnya
jeda berdasarkan nilai sensor yang ditentukan.
1.
Step
pertama kondisi LED adalah ON, lastTime didapat dari perubahan terakhir atau
pemanggilan terakhir millis(). Ketika nilai sensor (warna hijau)
sudah habis, maka LED akan menjadi OFF, millis() akan dipanggil dan akan
menjadi nilai lastTime pada step kedua.
2.
Step
kedua, kondisi LED OFF selama nilai sensor milisekon, setiap saat nilai
millis() akan diperiksa. Garis putus-putus menandakan waktu pemanggilan fungsi
millis() dalam pengkondisian if(millis() > lastTime + sensor) jika
nilai millis() sudah lebih besar daripada lastTime + sensor, maka waktu
OFF LED sudah habis dan digantikan dengan waktu ON LED.
3.
Step
ketiga menunjukkan bahwa nilai potensimeter dinaikkan sehingga durasi yang
dibutuhkan untuk menyalakan LED lebih lama. Garis-garis putus menunjukkan bahwa
proses pemanggilan millis() dalam IF masih separuh perjalanan. Tapi
ditengah perjalanan, nilai potensiometer dikecilkan.
4.
Setelah
potensiometer dikecilkan, maka durasi yang awalnya masih setengah perjalanan,
kini tinggal sedikit dan LED masih dalam keadaan ON.
Semoga ilustrasi diatas bisa menjelaskan bagaimana cara
kerja program pada Sketch 3.5.
Tapi sebentar, pada baris
15 lastTime bukan int (integer). Tipe
data lastTime adalah long (long integer). Apa bedanya
dengan integer tanpa longg?
Untuk menjelaskan itu, berikut ini
adalah tabel bilangan dan kapasitasnya:
Perhatikan
bahwa kapasitas long lebih besar daripada int. Tabel di
atas hanya berlaku untuk Arduino saja, jadi jika untuk komputer lainnya bisa
jadi akan berbeda tergantung arsitektur dan kemampuan komputer tersebut dalam
mencacah.
Tidak ada komentar:
Posting Komentar