Kali ini, saya ingin mencoba bagaimana mengimplementasikan LED RGB pada Arduino. LED RGB adalah 1 LED yang memiliki 3 warna, yaitu merah (Red), hijau (Green) dan biru (Blue). Perlu dijelaskan sedikit bahwa ketiga warna tersebut adalah warna sekunder yang diurai dari warna primer putih. LED ini memiliki 4 kaki, yaitu R, G, B dan COM. Berdasarkan polaritas yang diberikan pada kaki COM, maka LED RGB dibedakan menjadi 2, yaitu Common Anode dan Common Cathode.

LED ini bisa menghasilkan jutaan kombinasi warna dari 3 warna sekunder. Kombinasi jutaan warna dapat dihasilkan dari mengatur intensitas cahaya masing-masing ketiga warna. Sebagai contoh, jika ingin menghasilkan warna kuning, maka yang dinyalakan adalah warna merah dan hijau, lampu birunya dipadamkan. Untuk menghasilkan warna yang lebih banyak, masing-masing nyala ketiga LED diatur intensitas cahayanya dengan cara mengatur besarnya tegangan listrik yang diberikan.

Penggunaan LED RGB sangat banyak, beberapa diantaranya adalah sebagai lampu hias dan layar papan iklan. Anda mungkin pernah melihat layar papan iklan raksasa yang dipajang di jalan raya. Layar papan iklan tersebut menggunakan LED RGB. Tapi pada project kali ini, kita hanya mengeksplorasi 1 LED saja dan implementasi yang akan kita lakukan adalah lampu hias. Walaupun sebenarnya telah ada LED warni-warni yang dijual di pasaran dan LED itu bisa kedap-kedip. Bedanya LED itu cuma punya 2 kaki. Tinggal berikan power, maka langsung kedap-kedip berwarna-warni. Tapi lampu itu tidak bisa diprogram, di dalamnya sudah ada chip yang membuatnya bisa kedap-kedip berwarna-warna. Mungkin project kali ini, saya membuat LED RGB berperan sebagai lampu hias.

Image

Gambar 1. Bentuk fisik LED RGB.

Bahan yang dibutuhkan :

  1. Arduino UNO R3
  2. LED RGB common cathode
  3. Resistor 330 Ohm
  4. Jumper secukupnya

Image

Gambar 2. Skema rangkaian.

Image

Gambar 3. Rangkaian LED RGB pada breadboard.

Sebelum membuat lampu hias, sebaiknya menguasai bagaimana cara mengoperasikan LED RGB. Langkah awal yang dilakukan adalah bagaimana memunculkan warna sekunder, kemudian bagaimana memunculkan campuran warna sekunder seperti kuning, cyan dan magenta, dan yang paling penting bagaimana meredupkan nyala masing-masing warna.

Yang menjadi pokok permasalahan adalah bagaimana membuat nyala warna redup. Tentunya dengan cara menurunkan tegangan listrik yang diberikan. Tegangan listrik yang beragam ini disebut sinyal analog. Pin digital hanya menghasilkan output biner, yaitu menyala dan padam. Jadi tidak ada diantara kedua itu. Sedangkan pin analog hanya bisa sebagai input, tidak bisa sebagai output.

Solusinya adalah menggunakan PWM (Pulse Wide Modulation). Diantara pin digital pada Arduino, ada beberapa yang bisa berperan sebagai PWM. Pin yang dapat berperan sebagai PWM memiliki tanda "~" pada samping angkanya. Pin digital yang bisa berperan sebagai PWM, diantaranya: 3, 5, 6, 9, 10, dan 11. Pada project ini, saya menggunakan pin 9, 10 dan 11.

int pinR = 9;
int pinG = 10;
int pinB = 11;

void setup() {
// put your setup code here, to run once:
pinMode(pinR, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(pinB, OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
// Merah
setColor(255, 0, 0);
delay(100);

// Hijau
setColor(0, 255, 0);
delay(100);

// Biru
setColor(0, 0, 255);
delay(100);

// Kuning
setColor(255, 255, 0);
delay(100);

// Cyan
setColor(0, 255, 255);
delay(100);

// Magenta
setColor(255, 0, 255);
delay(100);

// Kombinasi warna lain
setColor(100, 45, 87);
delay(100);
setColor(67, 200, 187);
delay(100);
setColor(56, 89, 167);
delay(100);
}

void setColor(int rVal, int gVal, int bVal)
{
analogWrite(pinR, rVal);
analogWrite(pinG, gVal);
analogWrite(pinB, bVal);
}

Fungsi setColor() ini dapat digunakan untuk menampilkan berjuta warna. Jika diimplementasikan pada layar papan iklan, 1 LED RGB mewakili 1 piksel. Jadi bayangkan berapa banyak LED RGB yang digunakan untuk membuat layar papan iklan. Tergantung dari resolusi yang ingin dibuat. Misalnya ingin membuat layar papan iklan dengan resolusi 100 x 100 piksel, maka banyaknya LED RGB yang digunakan adalah 10,000 LED RGB. Membuat layar dengan menggunakan LED RGB, kekurangannya adalah nilai dpi-nya rendah. dpi (dot per inch) adalah jumlah piksel per inchi, dikarenakan ukurannya yang besar membuat kerapatan jaraknya berkurang. Akan sempurna jika dilihat dari jarak yang jauh.

Mari kembali ke pembahasan project. Fungsi setColor() ini membutuhkan 3 parameter, yaitu nilai R untuk intensitas warna merah, nilai G untuk intensitas warna hijau dan nilai B untuk intensitas warna Biru. Di dalam fungsi setColor() terdapat fungsi analogWrite(). Fungsi ini digunakan untuk menuliskan nilai output ke pin PWM. Jadi, jika digunakan pada pin digital yang bukan PWM, maka fungsi ini tidak berfungsi, tetap saja outputnya biner ke pin yang bukan PWM. Parameter pertama yang dimasukkan adalah nomor pin PWM dan parameter kedua adalah nilai intensitas. Nilai intensitas yang dapat digunakan yaitu 0 sampai 255.

Jika program sudah di-upload ke Arduino, maka akan tampak LED akan menyala dengan warna yang sudah diperintahkan secara bergantian. Jika sudah sudah seperti itu dan pengoperasian LED RGB sudah dipahami, maka selanjutnya anda mengkreasikan sendiri nyala lampu hias anda. Sebagai contohnya seperti pada kode yang ada di bawah ini.

int pinR = 9;
int pinG = 10;
int pinB = 11;

int r = 0;
int g = 0;
int b = 0;

int animNumber = 0;

void setup() {
// put your setup code here, to run once:
pinMode(pinR, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(pinB, OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
if (animNumber == 0) {
r++;
if (r > 255) {
r = 0;
animNumber++;
}
delay(5);
} else if (animNumber == 1) {
g++;
if (g > 255) {
g = 0;
animNumber++;
}
delay(5);
} else if (animNumber == 2) {
b++;
if (b > 255) {
b = 0;
animNumber++;
}
delay(5);
} else if (animNumber == 3) {
for(int i = 0; i < 5; i++) {
setColor(255, 0, 0);
delay(100);
setColor(0, 255, 0);
delay(100);
setColor(0, 0, 255);
delay(100);
}
animNumber++;
}
if (animNumber > 3) {
animNumber = 0;
}
setColor(r, g, b);
}

void setColor(int rVal, int gVal, int bVal)
{
analogWrite(pinR, rVal);
analogWrite(pinG, gVal);
analogWrite(pinB, bVal);
}

Pada kode di atas, saya membuat nyala lampunya sebagai berikut :

  1. LED menyala merah, dari sangat redup hingga menjadi terang.
  2. LED menyala hijau, dari sangat redup hingga menjadi terang.
  3. LED menyala biru, dari sangat redup hingga menjadi terang.
  4. LED menyala merah, hijau dan biru kedap-kedip dengan cepat.
  5. Kembali ke kondisi nomor 1.

Pada lab mini ini cuma tersedia 1 LED RGB. Lampu hias dengan lebih dari 1 LED RGB juga bisa dilakukan sebanarnya. Tapi mungkin suatu saat pada project selanjutnya saya mencobanya. Demikianlah isi tulisan kali ini, semoga bermanfaat. Saya ucapkan terimakasih kepada pembaca. Tetap ikuti terus update tulisannya ya.