지난 포스트 PWM으로 RGB LED 다양한 색깔 표현에서 PWM 방식으로 RGB LED의 밝기를 조절해서 다양한 색깔의 빛을 표현하는 방법을 알아보았다. 이번 포스트에서는 가변저항을 이용하여 같은 일을 아날로그 방식으로 처리하는 방법을 알아보자.


  우선 가변저항이 무엇일까? 말그대로 변화가 가능한 저항, 즉 저항의 값이 하나로 고정된 것이 아니라 변할 수 있는 저항을 말한다. 다양한 가변저항이 있는데 기본적인 성질과 원리는 거의 비슷하다. 아래와 같이 생긴 가변저항을 로터리식 가변저항이라 부르는데 스피커의 볼륨조절기를 생각하면 된다. 그 원리는 아래 사진의 우측하단에 표시된 바와 같이 1과 3에 전체 저항이 연결되어 있고, 스위퍼(sweeper)라고 불리는 2번이 옮겨다니면서 저항 값이 변하게 되는 것이다. 즉 노브를 돌리면 1번과 2번사이의 저항, 2번과 3번사이의 저항의 값이 변화하게 되는 것이다. 참고로 1번과 2번 사이의 저항값이 최저일때, 2번과 3번사이의 저항값은 최고이고, 1번과 2번 사이의 저항값이 커지면 2번과 3번 사이의 저항값이 작아진다.


  이제 아래와 같이 회로를 구성한다. 스위치는 필자의 가변저항이 스위치 기능이 되는 것이 아니라 저렇게 따로 연결 했으나 없어도 불을 끄지 못하는 점 외에는 큰 상관 없다. 가변저항의 2번을 GND와 연결하고 1번이나 3번을 LED의 R, G, B 다리에 연결한다. 1번을 연결하느냐 3번을 연결하느냐에 따라 오른쪽으로 노브를 돌렸을 때 LED의 밝기가 밝아지느냐 어두워지느냐가 달라진다. 그리고 LED의 커먼 애노드(+)에 5V 전압을 연결하면 된다.


  이제 스위치로 LED를 켜고 노브를 돌리면 아래 동영상에서 처럼 LED의 밝기가 변화하는 것을 확인 할 수 있다.


블로그 이미지

작은 조약돌

공돌이 형과 글쟁이 동생 쌍둥이 형제의 낙서장

,

  지난 포스트 LED로 간단한 신호등 만들기에서 빨간색, 노란색, 초록색 세개의 LED를 사용해서 신호등을 만드는 법을 알아보았다. 이번 포스트에서는 RGB LED 하나로 신호등을 만드는 법을 알아보자.


  아래 사진에 보이는 LED가 RGB LED 혹은 3색 LED이다. 일반적인 LED와 달리 RGB LED는 다리 네개가 각각 아래 사진에서 처럼 빨간색 녹색 파란색 그리고 커먼 애노드(+) 로 구성된다. 커먼 애노드 RGB LED는 아래 사진에서 처럼 가장 긴 다리에 5V 전압을 넣고 Red에 Low 접압을 넣으면 빨간색 불이 들어오고 High 전압을 넣으면 빨간불이 꺼지고 G와 B에 대해서도 같은 방식으로 작동한다. 커먼 캐소드(-) RGB LED도 있는데 커먼 애노드(+) RGB LED와 달리 캐소드 다리에 0V를 넣고, R, G, B 다리에 High 전압을 넣어주면 각각 빨간, 녹색, 파란불이 들어온다.

RGB LED


  신호등을 만들기에는 빨간, 초록, 파란 불이 충분하지 않다. 노란색 불이 필요하다. 노란색 불을 켜기위해서 빛을 혼합해야 한다. 위 사진의 왼쪽 상단에 빛의 삼원색 혼합 다이어그램이 있는데 이를 참조하면, 빨간색 빛과 초록색 빛을 섞으면 노란색이 된다. 즉, 빨간색과 초록색 불을 동시에 켜면 노란색 불을 얻을 수 있는 것이다. 


  신호등을 만들기 위해서 아래와 같이 RGB LED를 연결하면 된다. 필자는 G04, G17, G18에 차례대로 R, G, B를 연결했다. 신호등을 만들기 위해서는 파란 빛이 필요하지 않으므로 B를 연결할 필요는 없다.

RGB LED

#include <stdio.h>
#include <wiringPi.h>

int main (void)
{
  int i = 0;
  printf("Traffic Light");

  if (wiringPiSetup () == -1)
    return 1 ;

  pinMode (7, OUTPUT) ;
  pinMode (0, OUTPUT) ;

  for(;;){
    for (i = 0; i < 3; i++){
      switch(i) {
      case 0:
        digitalWrite(7, 0);
        digitalWrite(0, 1);
        delay(3000);
        break;
      case 1:
        digitalWrite(0, 0);
        delay(800);
        break;
      case 2:
        digitalWrite(7, 1);
        delay(3000);
        break;
      }
    }
  }
  
  return 0 ;
}

  위 코드는 지난 포스트의 LED 신호등 코드를 조금 수정 한 것이다. 수정된 부분을 보면 19번째 줄에서 이전 프로그램에는 7번 핀에 1을 출력해서 빨간 불을 켰었는데 여기서는 0을 출력해서 빨간 불을 켠다. 위에서 설명했듯, 필자의 RGB LED가 커먼 애노드 이기 때문이다. 20번째 줄은 반대로 0번 핀에 1을 출력해서 초록색 불을 끈다. 24번째 줄은 빨간 불이 켜진 상태에서 초록색 불을 켜서 노란색 불이 켜지게 된다. 마지막으로 28번째 줄은 빨간색 불을 꺼서 초록색 불만 켜지게 만든다. 이 코드를 실행하면 아래 동영상 같이 하나의 LED로 신호등을 볼 수 있다.



블로그 이미지

작은 조약돌

공돌이 형과 글쟁이 동생 쌍둥이 형제의 낙서장

,