티스토리 뷰

    ​LED 중에는 3가지 색을 낼 수 있는 제품이 있습니다. 다리가 4개이기 때문에 '4 leg LED', '4 pin LED', 또는 낼 수 있는 색깔이 빨강(Red), 초록(Green), 파랑(Blue)이라 'RGB LED'라고도 부릅니다. 


<그림 1> RGB LED

RGB 가산 혼합

    RGB LED를 사용하면 3가지 색만 낼 수 있는 것이 아니라 색을 조합해서 거의 모든 색을 낼 수 있습니다. 2개 또는 3개의 색이 동시에 켜져 있지만 우리 눈은 한 가지 색으로 인지합니다. 만약 빨강과 초록이 켜져 있다면 노란색으로 보입니다. 물감은 여러 가지 색을 섞을수록 어두워지다 결국 검은색이 되지만, 이 LED 빛은 모을수록 밝아지며 3개를 모두 모으면 흰색이 됩니다. 물감처럼 섞을수록 어두워지는 것을 'RGB 감산 혼합', LED처럼 밝아지는 것을 'RGB 가산 혼합'이라고 합니다.

     RGB 가산 혼합(위키피디아)

<그림 2> RGB 가산 혼합


RGB LED (Common Cathode, Anode)



<그림 2> Common Cathode LED와 Common Anode LED

    

    RGB LED는 핀이 네 개 있습니다. 핀 길이가 조금씩 다른데 가장 긴 것이 Anode이거나 Cathode입니다. 이 핀은 다른 핀들이 공통으로 사용하기 때문에 Common(공통 단자)라고 부릅니다. Common Cathode 인지 Anode 인지에 따라 Common에 연결해야 될 입력이 달라집니다. 이 두 LED는 생긴 걸로 구분이 쉽지 않기 때문에 구매할 때 꼭 확인해야 합니다. 

    아래 회로는 가장 간단하게 연결한 예시입니다. 이 회로에서 RGB에 해당하는 각각 단자는 PWM 기능이 있는 디지털 9, 10, 11에 연결합니다. Common 단자는 연결 방법이 다릅니다. Common Cathode는 아두이노 GND에 연결합니다. Common Anode는 아두이노 Vcc에 연결합니다. Common Anode 회로에서 아두이노와 LED가 GND 없이 연결한 것이 익숙하지 않을 수도 있지만, Vcc에서 LED를 거쳐 디지털 핀으로 전류가 흘러 LED가 켜집니다.   


<그림 3> 3색 LED 연결 예시


PWM 제어

    PWM(Pulse Width Modulation)은 디지털 출력을 제어하기 위한 기술입니다. 이것으로 아두이노 디지털 출력 핀으로 LED를 켜고 끄는 동작 외에 밝기를 조절하는 아날로그적인 제어가 가능합니다. 디지털 출력 핀으로 출력 전압의 크기를 바꿀 수는 없습니다. 출력은 항상 5V입니다. 하지만 출력의 지속시간을 조절할 수 있습니다. PWM의 펄스는 1/500 초에 한 번씩 나옵니다. 아두이노의 'analogWrite' 명령어를 통해 이 펄스의 지속시간을 조절합니다. analogWrite(0)이면 지속시간이 0이니 펄스가 없습니다. analogWrite(255)이면 최댓값으로 끊기지 않고 지속되는 출력입니다. 그 중간 값을 입력하면 그 크기에 따라 지속시간이 결정됩니다.  
    만약 analogWrite(128)을 입력하면 50%의 시간 동안만 출력이 지속됩니다. LED는 0.001초 켜진 후 0.001초 동안 꺼지는 동작을 반복합니다. 이렇게 빨리 깜박이면 우리 눈은 그 깜박임을 인지하지 못합니다. 그저 빛이 어두워졌다고 인지합니다. 

<그림 4> analogWrite 명령과 PWM 출력

참고: Arduino 홈페이지 analogWrite 설명


RGB LED 작동


<그림 5> RGB LED 작동 모습


완성된 코드

Common Cathode

int RED = 11;
int GREEN = 10;
int BLUE = 9;
 
void setup()
{
  pinMode(RED, OUTPUT); 
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);  
}
 
void loop()
{
  analogWrite(RED, 255); // RED ON
  analogWrite(GREEN, 0);
  analogWrite(BLUE, 0);
  delay(1000);
  
  analogWrite(RED, 0);
  analogWrite(GREEN, 255); // GREEN ON
  analogWrite(BLUE, 0);  
  delay(1000);

  analogWrite(RED, 0);
  analogWrite(GREEN, 0);
  analogWrite(BLUE, 255);    // BLUE ON
  delay(1000);
}


Common Anode

int RED = 11;
int GREEN = 10;
int BLUE = 9;
 
void setup()
{
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);  
}
 
void loop()
{
  analogWrite(RED, 0);   // RED ON
  analogWrite(GREEN, 255);
  analogWrite(BLUE, 255);  
  delay(1000);

  analogWrite(RED, 255);
  analogWrite(GREEN, 0); // GREEN ON
  analogWrite(BLUE, 255);  
  delay(1000);

  analogWrite(RED, 255);
  analogWrite(GREEN, 255);
  analogWrite(BLUE, 0);   // BLUE ON
  delay(1000);
}


    Common Anode LED는 전류가 Vcc에서 LED를 거쳐 Digital Pin으로 흐릅니다. Digital 핀에서 신호가 나오면 전류가 흐르지 못해 LED가 켜지지 않습니다. 켜고자 하는 LED에 해당하는 핀의 출력을 없애면 그 LED가 켜집니다. 만약 밝기 80수준으로 LED를 켜고 싶으면 175(255-80=175)를 입력해야 합니다.  

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함