Wednesday, May 10, 2017

Mengontrol Tingkat Kecerahan LED

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  volumedown. 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 menghidup-matikan LED dengan cepat, maka mata manusia tidak bisa mengetahuinya. Yang ditangkap oleh mata adalah terang  atau  redupnya  saja.  Jika  kita  menghidupmatikan  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.
Siklus Pulsa PWM
Siklus Pulsa PWM
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 3.3.

Rangkaian 

Pengaturan Intensitas Cahaya LED
Pengaturan Intensitas Cahaya LED
Buatlah  rangkaian  seperti  gambar  Rangkaian  3.2.  Rencananya, pushbutton  yang  atas  untuk menyalakan  dan  meningkatkan  kecerahan LED,  sedangkan  pushbutton  yang  bawah  untuk menurunkan  tingkat kecerahan LED dan memadamkannya:

1.  Seperti  biasa,  siapkan  sebuah  LED  dan  resistornya. Sambungkan kaki positif LED ke pin 8 Arduino.
2.  Kemudian kaki negatif LED disambungkan ke resistor menuju GND.
3.  Siapkan dua buah  pushbutton. Pushbutton yang pertama (atas) disambunkan ke GND dan ke pin 2 pada board Arduino.
4.  Lalu  pushbutton  yang  kedua  (bawah)  disambungkan  ke  GND dan pin 3 pada board Arduino.

Program

Sketch Mengatur intensitas cahaya LED

// Free Ebook Arduino
// www.elangsakti.com
// coder elangsakti
// pin 2 & 3 sebagai input digital
const int pinBt1 = 2;
const int pinBt2 = 3;
// Ingat, pin 9 support PWM
const int pinLED = 9;
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);
}

Ada  3  bagian  pada  Sketch  3.2  yang  perlu  dijelaskan  lebih  detail, yaitu pada baris 36, 39, dan 41.

// 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);

Pada baris 36, 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:

int constrain(int value, int min, int max){
if(value > max){
value = max;
}
if(value < min){
value = min;
}
return value;
}

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 (perhatikan baris 39).

// pinLED diberi nilai antara 0 - 255
analogWrite(pinLED, brightness);

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 agar perubahannya bertahap
delay(20);

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.



0 comments:

Post a Comment

Silakan dikomentari

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Hot Sonakshi Sinha, Car Price in India