Arduino RGB Full Color LED BasicArduino RGB Full Color LED Basic

Arduino Uno RGB LED Basic

이번 포스트에서는

RGB LED 기초 사용법에 대해 설명

합니다. RGB LED로 여러가지 색을 표현하기 위해 사용되는 PWM 출력 방법에 대한 기초 적인 내용은 하단의 관련 포스트를 참고해주세요.

RGB LED Module

RGB LED는 빛의 3원색인 Red, Green, Blue 세가지 색의 LED를 하나의 패키지로 만들어 놓은 LED 입니다. 본 포스트에서 사용하는 RGB LED 모듈은 아래와 같이 4핀으로, 각각 Red, Green, Blue LED의 애노드와 공통 캐소드인 - 핀으로 구성됩니다. RGB 각각의 LED에는 전류 제한용 150Ω 이 직렬로 연결되어 있어, 별도의 전류 제한 저항 없이 아두이노 포트에 직접 연결하여 사용 가능합니다. 

빛의 3원색과 RGB LED 모듈빛의 3원색과 RGB LED 모듈

RGB LED는 Red, Green, Blue LED 각각의 밝기를 조정하여 다양한 색을 표시 할 수 있습니다. 아두이노에서는 PWM(Analog Output)으로 R,G,B의 밝기를 0~255 로 조정할 수 있습니다. 아두이노에서 PWM 출력하는 기초적인 방법은 하단의 관련 포스트를 참조해주세요.

RGB Color Table

RGB Color TableRGB Color Table


하드웨어 연결

회로도 및 연결

아두이노 우노로 RGB LED를 테스트하기 위해 아래와 같이 회로를 구성하였습니다. RGB Module의 R,G,B 단자는 PWM 출력이 가능한 11번, 10번, 9번 포트로 각각 연결하였습니다.

Arduino Uno와 RGB LED Module 연결 회로도 및 연결 예시Arduino Uno와 RGB LED Module 연결 회로도 및 연결 예시


예제1 : RGB LED On/Off 제어

예제1은 RGB LED를 ON/OFF 방식으로 제어하는 예제입니다. RGB 3개의 핀(3 Bit)으로 8가지 색 표현이 가능합니다. 

코드

아래의 예제 코드는 1000ms 간격으로 RED -> GREEN -> BLUE -> YELLOW -> CYAN 색을 순회하는 코드입니다. 

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
31
32
33
34
35
36
37
#define RED 11 // RGB LED Module의 RED 핀
#define GREEN 10 // RGB LED Module의 GREEN 핀
#define BLUE 9 // RGB LED Module의 BLUE 핀
 
void setup(){
    pinMode(RED, OUTPUT);
    pinMode(GREEN, OUTPUT);
    pinMode(BLUE, OUTPUT);
}
 
void loop(){
    // RED
    digitalWrite(RED, HIGH);
    digitalWrite(GREEN, LOW);
    digitalWrite(BLUE, LOW);
    delay(1000);
    // GREEN
    digitalWrite(RED, LOW);
    digitalWrite(GREEN, HIGH);
    digitalWrite(BLUE, LOW);
    delay(1000);
    // BLUE
    digitalWrite(RED, LOW);
    digitalWrite(GREEN, LOW);
    digitalWrite(BLUE, HIGH);
    delay(1000);
    // YELLOW
    digitalWrite(RED, HIGH);
    digitalWrite(GREEN, HIGH);
    digitalWrite(BLUE, LOW);
    delay(1000);
    // CYAN
    digitalWrite(RED, LOW);
    digitalWrite(GREEN, HIGH);
    digitalWrite(BLUE, HIGH);
    delay(1000);
}
cs

실행 결과

위 코드를 실행하면 1초 간격으로 LED 색상이 변하는 것을 확인 할 수 있습니다. 


예제2 : RGB LED On/Off 제어

예제2는 RGB LED를 PWM으로 제어하는 예제입니다. RGB LED를 8 Bit PWM 출력으로 제어하는 경우 표현 가능한 색은 255(RED) x 255(GREEN) x 255(BLUE)으로 대략 16.8백만 가지의 컬러 표현이 가능합니다.

코드

아래의 코드는 analogWrite()함수를 사용하여 RGB LED를 제어하는 코드입니다. 1000ms 간격으로 빨->주->노->초->파->남->보 색을 RGB LED에 표시합니다. 

Orange와 Yellow의 주석에 있는 RGB값은 쉽게 구글에서 구할 수 있는 색 좌표 값이고, 실제 코드에 적용한 RGB 값은 육안으로 실제로 Orange, Yellow 컬러가 비슷하게 나오는 값으로 튜닝한 값입니다. 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#define RED 11 // RGB LED Module의 RED 핀
#define GREEN 10 // RGB LED Module의 GREEN 핀
#define BLUE 9 // RGB LED Module의 BLUE 핀
 
void setup(){
    pinMode(RED, OUTPUT);
    pinMode(GREEN, OUTPUT);
    pinMode(BLUE, OUTPUT);
}
 
void loop(){
    // Red (255,0,0)
    analogWrite(RED, 255);
    analogWrite(GREEN, 0);
    analogWrite(BLUE, 0);
    delay(1000);
    // Orange (255,127,0)
    analogWrite(RED, 255);
    analogWrite(GREEN, 20);
    analogWrite(BLUE, 0);
    delay(1000);
    // Yellow (255,255,0)
    analogWrite(RED, 255);
    analogWrite(GREEN, 80);
    analogWrite(BLUE, 0);
    delay(1000);
    // Green (0,255,0)
    analogWrite(RED, 0);
    analogWrite(GREEN, 255);
    analogWrite(BLUE, 0);
    delay(1000);
    // Blue (0,0,255)
    analogWrite(RED, 0);
    analogWrite(GREEN, 0);
    analogWrite(BLUE, 255);
    delay(1000);
    // Indigo (0,5,70)
    analogWrite(RED, 0);
    analogWrite(GREEN, 5);
    analogWrite(BLUE, 70);
    delay(1000);
    // Purple (100,0,255)
    analogWrite(RED, 100);
    analogWrite(GREEN, 0);
    analogWrite(BLUE, 255);
    delay(1000);
}
cs

실행 결과

아래 영상은 위 코드의 실행 결과입니다. 구형 휴대폰으로 촬영하여 실제로 보는 것보다 색감이 잘 잡히지 않음을 고려해주세요.


마무리

이번 포스트에서는

RGB LED를 사용하는 기초적인 방법으로 LED를 ON/OFF하는 방식과 PWM을 사용하는 방식의 코드를 소개

하였습니다. 아두이노 아날로그 출력 PWM 사용에 대한 기초적인 내용은 하단의 관련 포스트를 참고해주세요.

끝까지 읽어 주셔서 감사합니다.😄


관련포스트

2020/07/11 - [Embedded/Arduino] - 아두이노 강좌 #13 아날로그 출력 PWM 와 analogWrite()



댓글
댓글쓰기 폼