[아두이노 초급] 8. RGB LED(삼색 LED)

이전 포스트들에선 LED를 사용하는 방법에 대해 이야기를 해보았다.

이번에는 거기서 한 단계 더 나아가 보자.

만약 내가 어떤 프로젝트를 한다고 하면 보통 LED를 상태를 표시하는 장치로 많이 사용할 것이다.

정상이면 초록색, 오류가 생겨 멈출 때는 빨간색 LED를 켜는 방식으로 말이다.

그래서 보통 장치를 만들면 이런식으로 각 색상에 맞는 LED를 준비해야한다.

하지만 필요한 색상이 지금처럼 빨간색, 초록색과 같이 2종류가 아니라 3종류, 5종류라면 어떨까.

내가 필요한 색상만큼 LED의 수가 늘어나야 할 것이고 이런 LED를 부착하기 위해 장치는 커져야 할 것이다.

이런 고민을 거쳐 탄생한 것이 이번에 다루게 되는 RGB LED 즉, 삼색 LED다.

이 LED는 하나의 LED로 R(Red), G(Green), B(Blue) 세가지 색상을 표현할 수 있다.

그럼 왜 이 세가지 색일까.

아마 미술이나 과학 쪽에 관심을 가졌던 사람들이라면 R, G, B 이 세가지 색상을 듣자마자 떠오르는 것이 하나 있을 것이다.

그것은 빛의 삼원색이다.

그림에 보이는 것처럼 R, G, B 세가지 색상을 합치면 모든 색상을 다 표현할 수 있기 때문에 빛의 삼원색이라고 하는 것이다.

우리가 사용할 RGB LED도 마찬가지다.

그럼 RGB LED는 어떻게 생겼을까.

우리가 아는 LED는 밑의 그림과 같이 생겼다.

긴다리를 애노드(Anode), 짧은 다리를 캐소드(Cathode)라고 부르고 각각 +극과 -극에 해당한다는 말도 했었다.

잘 기억나지 않으면 이전 포스트를 다시 보고오자.
( https://polnalab.com/arduino/basic/396/ )

아무튼 LED는 애노드와 캐소드라는 단자가 있고 이 단자를 연결해서 빛을 내는 전자소자다.

그럼 RGB LED는 어떻게 되어 있을까.

RGB LED는 간단하게 말해 위의 그림의 LED 3개가 하나로 합쳐져 있는 LED다.

만약 실물이 있다면 나중에 동작할 때 LED가 켜지는 위치를 잘보자.

각 색상 별로 LED가 켜지는 위치가 미묘하게 다른 것을 볼 수 있다.

다시 본론으로 돌아와서 RGB LED는 3개의 LED가 하나로 합쳐진 LED다.

그럼 이렇게 생각할 수 있다.

위의 그림과 같이 각각의 LED들은 애노드 캐소드 단자가 있는데 이 LED들이 하나로 합쳐지면 애노드 3개, 캐소드 3개가 되서 총 6개의 다리가 되어야 하는 것 아닌가 라는 것이다.

물론 그렇게 될 수도 있을 것이다.

하지만 우리보다 앞서 LED를 연구하신 분들은 거기서 한 발을 더 나가서 RGB LED를 개발했다.

어떻게 했냐면 바로 LED의 애노드 또는 캐소드를 하나로 묶어서 사용한 것이다.

그림에서 볼수 있듯이 애노드 또는 캐소드를 묶어서 각 LED에서 공통으로 사용할 수 있게 했는데, 이런 방식으로 인해 이렇게 묶여 있는 곳을 공통(Common) 단자라고 부른다.

만약 애노드를 공통 단자로 사용하고 있다면 공통 양극 타입이라고 부르고 영어로는 Common Anode, 줄여서 CA 타입이라고 부른다.

캐소드를 공통 단자로 사용하면 공통 음극 타입이라고 하고 영어로 Common Cathode, 줄여서 CC 타입이라고 부른다.

이렇게 RGB LED는 4개의 다리로 구성되어 있고 실물은 위의 그림과 같이 생겼다.

이때 각 다리의 역할은 별도로 표시가 되어 있진 않은데 기본적으론 가장 긴 다리가 공통 단자이고 그 옆에 혼자있는 다리가 R, 반대쪽 다리가 G, 가장 짧은 다리가 B에 해당한다.

공통 단자는 실물만 봐서는 보통 알 수 없고 구입할 때 잘 확인을 해야 한다.

자, 그럼 이번에는 동작을 해봐야 하는데 앞서 설명한 CC, CA 타입에 따라 동작 방법이 조금 다르다.

우리가 알다시피 LED라고 하는 소자는 애노드에 +극, 캐소드에 -극을 연결해야지 동작을 하는 친구다.

그렇기 때문에 CC, CA 타입은 서로 동작이 반대다.

두 타입을 만약 사용한다면 위의 그림과 같이 연결하게 될 것이다.

CC 타입은 공통 단자가 캐소드니 공통단자를 GND에 연결하고 각 애노드를 아두이노 보드의 데이터 핀에 연결하면 되는 것이다.

이렇게 하면 각 데이터 핀에서 digitalWrite로 5V를 출력하면 LED가 켜지게 되는 것이다.

이건 우리가 앞서 했던 LED를 동작시키는 방법과 동일하다.

그럼 CA 타입을 보자.

CA 타입은 공통극이 애노드이기 때문에 애노드는 +극 즉, 아두이노 보드의 5V에 연결했다.

이 상태로 연결한다면 코딩을 어떻게 해야 할까.

이런 동작을 알려면 전압과 전류에 대한 지식이 있어야 한다.

간단히 요약해서 설명하면 전압은 두 지점의 전기 에너지의 차이이고 전류는 전기 에너지의 차이가 있는 곳을 연결 했을 때 흐르는 전하의 양을 전류라고 한다.

그리고 이 전류의 흐름으로 전자 장비들이 동작하는 것이다.

이때 두 지점 사이의 전기 에너지의 차이가 있어야 동작을 한다고 했는데 그건 저 CA 타입에서도 마찬가지다.

공통 단자에는 5V가 연결되어 있고 각 캐소드를 데이터 핀에 연결했는데 이때 데이터 핀에서 digtitalWrite로 5V를 출력하게 되면 LED의 애노드도 5V, 캐소드도 5V가 걸린 상황이 된다.

이렇게 되면 두 지점 사이의 전기 에너지의 차이가 없기 때문에 전류가 흐르지 않는다.

LED가 동작하지 않는다는 말이다.

반대로 digitalWrite로 0V를 출력하면 어떻게 될까.

애노드는 5V 캐소드는 0V가 되니깐 두 지점 사이의 차이가 5V가 되면서 LED에 5V 전압이 걸리고 전류도 흐르면서 LED가 켜지게 된다.

만약 애노드에 5V 캐소드에 3V를 연결한다면 두 지점 사이의 전기 에너지 차이는 2V로 LED에 2V가 걸리게 되고 전류도 흐르게 된다.

그리고 LED가 2V에도 동작을 하는 LED라면 당연히 켜지게 되는 것이다.

이런 것처럼 CC 타입과 CA 타입은 동작하는 방식이 서로 반대로 동작하게 된다.

그럼 여기서 한 발 더 나아가 보자.

CC 타입과 CA 타입 이렇게 두 타입의 동작 방식을 설명했는데 여기서 사용하는 전문 용어가 있다.

CC 타입처럼 데이터 핀에서 전류를 공급하는 것을 소스 전류(Source Current)라고 하고, CA 타입과 같이 데이터 핀이 전류를 흡수하는 것을 싱크 전류(Sink Current)라고 부르는 것이다.

그러면 또 이렇게 생각할 수 있다.

지금 CA 타입을 보면 데이터 핀으로 전류가 흘러들어온다.

그런데 우린 digitalWrite로 전압을 출력하기 위해 pinMode로 해당 데이터 핀을 출력 설정으로 놓게 된다.

이럼 뭔가 이상하지 않을까.

결론부터 말하자면 이상하진 않다.

사실 digitalWrite를 깊게 설명하면 MOSFET과 같은 내부 구조로 설명해야 한다.

하지만 그럼 설명이 너무 복잡해지고 초급 단계에서 할 내용은 아니기 때문에 지금은 간단하게 digitalWrite로 HIGH를 설정하면 해당 데이터 핀은 내부적으로 5V와 연결되서 전압과 전류를 출력(Source)하게 되고 LOW를 설정하게 되면 내부적으로 GND와 연결되면서 0V가 되고 전류를 받아(Sink)들일 수 있게 된다고 알고 있자.

자, 이렇게 각 타입에 따른 동작 방법도 알았고 이제 본격적으로 RGB LED를 켜보자.

이 포스트에서는 RGB LED를 CC 타입으로 사용했다.

그림에서 보이는 것처럼 공통 단자는 GND로 연결했고 각 애노드들은 저항을 거쳐 아두이노 보드의 데이터 핀으로 연결했다.

RGB LED도 다른 LED와 동일하게 안에 3개의 LED가 들어있는 것으로 동작 전압이 이전 포스트에서 봤던 것과 거의 비슷하다.
(실제론 각 LED가 필요한 전압이 조금씩 다르기 때문에 정밀하게 보겠다면 RGB LED의 데이터시트를 찾아봐야 한다.)

그래서 저항(220Ω)을 통해 전압을 낮춰서 동작하게 하였다.

이번에는 코드를 보자.

코드 1 RGB LED
void setup() {
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop() {
  digitalWrite(9, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  delay(1000);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  delay(1000);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  delay(1000);
}

코드 1을 업로드하면 빨간색, 초록색, 파란색 LED가 1초마다 번갈아가면서 켜진다.

코드는 앞선 포스트에서 계속 해왔던 함수들이 사용되었고, LED를 켜는 편리상 3개의 LED를 한 세트로 동작하도록 코드를 작성했다.
( https://polnalab.com/arduino/basic/384/ )

하나의 LED가 켜지면 나머지 두개의 LED가 꺼지는 방식이다.

그럼 색상을 합치는 것은 어떻게 하면 될까.

방법은 단순하다.

그냥 합치고 싶은 색상의 LED를 같이 켜면 되는 것이다.

코드 2 RGB LED
void setup() {
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop() {
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
}

코드 2를 업로드하면 빨간색 LED와 초록색 LED가 동시에 켜지면서 색상이 노란색으로 켜지는 것을 볼 수 있다.

마찬가지로 다른 색상들을 합치면 다양한 빛을 볼 수 있다.

이번에는 코드에 대한 것은 아니고 선 연결 방법에 대해 이야기를 하려고 한다.

앞서 우리가 저항을 이야기하는 포스트에서 LED의 저항을 애노드, 캐소드 어느 방향에 연결하면 좋냐에 대해 이야기한 적이 있다.
( https://polnalab.com/arduino/basic/426/ )

이때 결론으로 어느 방향이든 상관없다고 했었다.

그럼 그게 RGB LED에도 해당될까.

만약 그렇다면 저항 3개를 1개로 줄일 수 있을지도 모른다.

위의 그림과 같이 연결하면 공통 단자에 하나의 저항만 사용되고 있고 각 색상 단자는 바로 아두이노 보드의 데이터 핀으로 연결되어 있다.

이렇게 하고 코드 1을 동작시켜보면 동작은 차이가 없다.

코드 2를 동작시켜도 차이가 크지 않다고 느낄 수 있다.

하지만, 사실 명확한 차이가 있다.

그 차이는 바로 전류에 있다.

만약 코드 1과 같이 한 번에 색상을 하나씩만 동작한다면 사실 문제가 없다.

문제는 한 번에 여러 색상을 켤 때 발생한다.

빨간색과 초록색을 동시에 켠다고 생각해보자.

각각 색상 단자에 저항이 연결되어 있다면 각 LED는 자신의 저항을 사용하게 된다.

따라서 한 개의 색상을 켤 때와 동일한 전류가 각 LED에 흐르게 된다.

그런데 공통 단자에 하나의 저항만 연결했다면 상황이 달라진다.

만약 코드 2와 같이 빨간색과 초록색 LED를 동시에 켠다고 해보자.

하나의 저항을 두 데이터 핀이 공통으로 사용하다보니 이 저항에 흐르는 전류를 두 LED가 나누어 사용하게 된다.

그 결과 LED의 밝기에 차이가 생긴다.

그리고 3개의 색상을 모두 켜면 전류는 또 확 줄어든다.

정리하자면 공통 단자에 저항 하나만 연결하면 켜지는 LED의 수에 따라 각 LED에 흐르는 전류에 변화가 생긴다.

이로인해 LED의 밝기와 색상이 일정하지 않는 상황이 발생한다.

밑의 그림은 시뮬레이션을 통해 하나의 저항을 사용했을 때와 세개의 저항을 사용했을 때 멀티미터로 흐르는 전류를 측정한 모습이다.

그림에서 볼 수 있듯이 R G B 색상을 모두 켰을 때 흐르는 전류가 달라진다.

시뮬레이션에선 하나의 저항을 사용했을 때 전류가 균등하게 분배된 것처럼 나오지만 실제 RGB LED는 앞에서 이야기한 것과 같이 각 색상에서 필요한 전압이 다르기 때문에 균등하게 분배되진 않는다.

아무튼 급하면 이렇게 사용할 순 있지만 안정적인 동작을 위해선 각 색상 단자에 저항을 모두 연결하는게 좋다.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
error: Content is protected !!