아두이노 RGB LED 컬러 믹서: 입문자 친화적 DIY 프로젝트
필요한 부품 및 소모품
| 부품 |
수량 |
비고 |
| 아두이노 우노 (Arduino UNO) |
1 |
|
| RGB LED (4핀 공통 캐소드) |
1 |
공통 그라운드 타입이면 모두 호환 |
| 로터리 포텐셔미터 (가변저항) |
3 |
R, G, B 각 채널 밝기 조절용 |
| 택트 스위치 12mm (푸시버튼) |
1 |
전원 온/오프 토글용 |
| 저항 10kΩ |
1 |
버튼 풀업 저항용 |
| 저항 220Ω |
3 |
LED 각 채널 전류 제한용 (필수!) |
| 브레드보드 |
1 |
|
| 점퍼 와이어 |
다수 |
|
사용 소프트웨어
프로젝트 설명
대상: 인터랙티브 가젯을 만들어보고 싶은 아두이노 입문자. 아티스트, 웹 개발자, 조명 제어 엔지니어 등 RGB 색상 값을 다루는 누구에게나 유용합니다.
기능: 3개의 포텐셔미터로 RGB LED의 빨강, 초록, 파랑 채널 밝기를 개별 조절하여 원하는 색상 생성. 푸시버튼으로 전체 온/오프 토글.
회로 구성 (회로도 참조)
- RGB LED: PWM 핀 9(파랑), 10(초록), 11(빨강) 연결
- 푸시버튼: 디지털 핀 7 연결, 10kΩ 풀업 저항으로 그라운드에 연결
- 포텐셔미터 3개: 아날로그 핀 A0(빨강), A1(초록), A2(파랑) 연결
- 중요: LED 각 채널과 PWM 핀 사이에 220Ω 저항 필수 (과전류 방지)
풀업 저항 원리: 아두이노 플레이그라운드 참고
작동 방법
- 회로 조립 후 스케치 업로드
- 시리얼 모니터 열기 (9600 baud)
- 버튼 누르기 전엔 LED 꺼짐
- 버튼 누르면 LED 점등, 포텐셔미터로 색상 조절 시작
- 시리얼 모니터에
RGB(R,G,B) 형식으로 현재 값 실시간 출력 → 맘에 드는 색상 값 기록 가능
팁: 물감 혼합과 달리 빛의 삼원색은 모두 최댓값일 때 흰색. 한 채널을 끄고 두 채널만 조절하면 보색 계열 색상 생성 가능.
확장 아이디어
좋아하는 색상의 RGB 값을 하드코딩하고, 추가 버튼으로 원터치 색상 변경 기능 구현 가능. 직접 시도해보세요!
소스 코드
int blue = 9;
int green = 10;
int red = 11;
int redPot = A0;
int greenPot = A1;
int bluePot = A2;
int greenVal = 0, blueVal = 0, redVal = 0;
const int BUTTON = 7;
int state = 0;
int val = 0, old_val = 0;
void setup() {
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(red, OUTPUT);
pinMode(BUTTON, INPUT);
Serial.begin(9600);
}
void loop() {
val = digitalRead(BUTTON);
if ((val == HIGH) && (old_val == LOW)) {
state = 1 - state; // 토글
delay(10); // 디바운싱
}
old_val = val;
greenVal = analogRead(greenPot);
blueVal = analogRead(bluePot);
redVal = analogRead(redPot);
if (state == 1) {
analogWrite(green, greenVal / 4);
analogWrite(blue, blueVal / 4);
analogWrite(red, redVal / 4);
Serial.print("RGB(");
Serial.print(redVal/4);
Serial.print(",");
Serial.print(greenVal/4);
Serial.print(",");
Serial.print(blueVal/4);
Serial.println(")");
delay(50);
} else {
analogWrite(green, 0);
analogWrite(blue, 0);
analogWrite(red, 0);
delay(50);
}
}
핵심 포인트: 아날로그 입력 0~1023 → PWM 출력 0~255이므로 4로 나누어 매핑. 버튼 토글 로직은 이전 상태 비교로 디바운싱 처리.