안녕하세요.
지난 포스트에 이어, 오늘은 3색 LED 모듈을 사용하는 방법을 알아볼까 합니다.

1. 3색 LED 모듈

3색 LED 모듈은 R, G, B 3개의 핀으로 입력을 받아서 해당 색상을 LED로 출력해주는 모듈입니다.

그림 1 : 3색 LED 모듈
[그림 1 : 3색 LED 모듈]

그림 1을 보시면 알겠지만, 이 모듈에는 총 4개의 핀이 있습니다.
각각 R, G, B, - 라고 쓰여져 있습니다.
R은 빨간색을 출력하기 위한 핀이고, G는 녹색을 출력하기 위한 핀, B는 파란색을 출력하기 위한 핀, 마지막으로 -는 그라운드1에 연결하기 위한 핀입니다.

2. 3색 LED 모듈을 아두이노 보드에 연결

그림 2처럼 아두이노 보드와 3색 LED 모듈을 연결합니다. 빵판을 통해서 연결하셔도 되지만, 워낙 간단한 연결이라서 점퍼 케이블로 빵판을 거치지 않고 직접 연결했습니다.

그림 2 : 3색 LED 모듈과 아두이노 보드의 연결
[그림 2 : 3색 LED 모듈과 아두이노 보드의 연결]

3색 LED 모듈의 각 핀과 아두이노 보드의 각 핀 연결은 표1에 다시 정리를 해 두었으니 참고 바랍니다.

3색 LED 모듈 핀 아두이노 보드 핀
- GND
R 디지털 2번
G 디지털 3번
B 디지털 4번

[표1 : 3색 LED 모듈과 아두이노 보드의 핀 연결]

그림 3은 fritzing을 이용해서 회로 연결을 다이어그램으로 표현한 모습입니다.
3색 LED 모듈은 제품마다 핀의 위치가 다를 수 있습니다. 실제로 제가 가지고 있는 모듈은 왼쪽부터 R, G, B, -의 순서지만, 그림 3의 모듈은 왼쪽부터 B, -, G, R의 순서입니다. 따라서 여러분이 가지고 있는 모듈에 맞게 연결을 하시면 됩니다.

그림 3 - 3색 LED 모듈 연결 다이어그램
그림 3 - 3색 LED 모듈 연결 다이어그램

3. 스케치 작성

회로 연결은 여기까지 보고, 코드를 작성해 보겠습니다.

const int LED_R = 2;    // 디지털 2번 핀 = Red
const int LED_G = 3;    // 디지털 3번 핀 = Green
const int LED_B = 4;    // 디지털 4번 핀 = Blue

void setup() {
  pinMode(LED_R, OUTPUT);
  pinMode(LED_G, OUTPUT);
  pinMode(LED_B, OUTPUT);
}

void loop() {
  turnOnAndOff(LED_R, 500, 500);
  turnOnAndOff(LED_G, 500, 500);
  turnOnAndOff(LED_B, 500, 500);
}

void turnOnAndOff(int pin, unsigned long onDuration, unsigned long offDuration) {
  digitalWrite(pin, HIGH);
  delay(onDuration);

  digitalWrite(pin, LOW);
  delay(offDuration);
}
  • 1~3 줄 - 아두이노 보드에 연결한 핀을 상수로 정의합니다. 이렇게 상수로 정의를 하면 코드를 읽기가 더 편해집니다.
  • 5 줄 - setup() 함수에서 단 한번 수행할 작업들을 정의합니다.
  • 6~8 줄 - pinMode() 함수를 이용해서 각 핀을 출력 모드로 설정해줍니다. pinMode()는 앞으로 많이 보게될 함수이므로 확실히 이해하고 넘어가는 것이 좋겠습니다. 이 함수에는 총 2개의 매개변수를 받는데, 첫번째 매개변수는 핀 번호이고 두번째 매개변수는 해당 핀을 어떤 모드로 사용할 것인지를 나타냅니다. 여기에서는 2번 핀(LED_R), 3번 핀(LED_G), 4번 핀(LED_B)을 모두 출력모드(OUTPUT)로 설정하고 있습니다. OUTPUT이라는 상수는 아두이노에서 미리 정의하고 있는 상수입니다.
  • 11 줄 - loop() 함수에서 무한 반복할 코드를 정의합니다.
  • 12~14 줄 - 제가 정의한 함수는 turnOnAndOff()를 LED_R, LED_G, LED_B 각각의 핀에 대해서 한번씩 호출해줍니다.
  • 18 줄 - digitalWrite() 함수를 이용해서 매개변수로 들어온 pin에 디지털 신호를 보냅니다. 이 함수는 두개의 매개변수를 받는데, 첫번째가 핀 번호, 두번째가 디지털 신호 값입니다. 핀 번호를 말 그대로 아두이노 보드에 연결한 핀의 번호를 넣으면 되고, 디지털 신호 값은 아두이노에서 미리 정의하고 있는 HIGH 또는 LOW를 사용하면 됩니다. 디지털 신호이기 때문에 HIGH가 1을 의미하고(5v 회로에서는 5v가 들어가고, 3.3v 회로에서는 3.3v가 들어갑니다), LOW는 0을 의미합니다.
  • 19 줄 - delay() 함수를 이용해서 다음에 나오는 코드를 지연시킵니다. 이 함수는 미리 세컨드(ms) 단위의 값을 받아서 해당 ms만큼 딜레이시킵니다.
  • 17~23 줄 - 첫번째 매개변수인 pin을 두번째 매개변수인 onDuration만큼 켠 후, 세번째 매개변수인 offDuration만큼 끄는 함수를 정의했습니다.
  • 최종적으로 이 스케치에서 하는 일을 정리해보면, 아두이노 보드의 2, 3, 4번 핀을 출력 모드로 설정한 후 2번, 3번, 4번 핀을 차례대로 500ms 동안 켰다가 500ms 동안 끄는 작업을 무한 반복하게 됩니다.

이렇게 3색 LED 모듈 실습을 해보았는데요, 저는 코드에서 한번에 하나의 색상만 켰지만, 실제로는 동시에 2개 이상의 색상을 켤 수도 있습니다. 이런 실험들은 직접해보시는게 모듈을 이해하는데 더 많은 도움이 될 것 입니다. 오늘 포스트는 이것으로 정리하겠습니다.


  1. 그라운드 - 그라운드는 전위차를 발생시키기 위한 기준 전압이 되는 핀 입니다. 물을 흘려보내기 위해서는 높은 곳에서 낮은 곳으로 흘려야 하듯이, 전류는 흘려보내기 위해서는 전위차를 발생시켜야하는데 이를 위해 필요한 개념이죠. 회로에 따라 GND라 표기하는 곳도 있고 -로 표기하는 곳도 있습니다.

+ Recent posts