아두이노 RGB 컬러 믹서 제작 – 단계별 튜토리얼
부품 및 소모품
| 아두이노 우노 (Arduino UNO) |
×1 |
| 로터리 포텐셔미터 (일반) |
×1 |
| 브레드보드 (일반) |
×1 |
| RGB LED |
×1 |
| 저항 330Ω |
×1 |
| UTSOURCE 전자 부품 |
×1 |
앱 및 온라인 서비스
프로젝트 소개
아두이노 컬러 믹서
이 튜토리얼은 아두이노와 전자 기초 지식이 조금 있으면 쉽게 따라할 수 있습니다. 아두이노가 익숙하지 않다면 튜토리얼 중간에 가이드 링크를 포함했습니다.
이 튜토리얼에서는 포텐셔미터를 돌리는 것만으로 표현 가능한 모든 색상을 생성합니다. 또한 RGB 컬러 모델을 이해하고 오늘날 디스플레이가 어떻게 작동하는지 배울 수 있습니다.
아두이노 아날로그 입/출력(I/O)을 사용하여 아날로그 전압을 읽고 쓰는 방법도 익힙니다.
이것은 제 첫 회로 시험작입니다(꽤 오래전, 포텐셔미터 값을 올릴 때 작은 문제가 있었지만 나중에 해결했습니다.)
1-1 부품 목록
- 아두이노 보드 (아두이노 우노 사용)
- 브레드보드
- 수-수 점퍼 와이어 (약 15개)
- 포텐셔미터 3개 (5KΩ 사용)
- 330Ω 저항 3개 (주황-주황-갈색)
- RGB LED (RGB 모듈도 가능)
- 아두이노 IDE가 설치된 PC
시작해볼까요!
컬러 믹서의 원리는 아두이노가 아날로그 입력 핀의 포텐셔미터 입력 전압에 비례하는 전압을 RGB LED 핀에 출력하는 것입니다.
1-2 포텐셔미터 연결
포텐셔미터는 전압 분배 회로로, Vout이 아두이노 핀이 됩니다.
간단히 말해, 로터를 돌리면 조절 가능한 양의 전압이 아두이노 아날로그 입력 핀(Vout)으로 전달됩니다.
이미지처럼 포텐셔미터를 연결하세요. 양쪽 단자를 5V나 GND 중 어디에 연결해도 상관없지만, 가장 중요한 연결은 중간 단자로 아날로그 입력 핀에 연결해야 합니다.
5V와 GND는 아두이노 핀에서 가져옵니다.
빨간색 대신 주황색을 5V용으로 사용하여 전원선과 신호선을 쉽게 구분했습니다.
색상별로 3개 포텐셔미터 모두 동일하게 연결합니다.
연결을 깔끔하게 유지하기 위해 빨강 포텐셔미터를 A0, 초록을 A1, 파랑을 A2에 연결했습니다.
1-3 RGB LED 연결
RGB LED는 일반 LED(다이오드)와 같은 원리지만, 3개의 LED가 나란히 있어 망막에 빛이 도달하면 단일 결합 색상으로 인식됩니다.
각 PWM 출력당 256단계, R/G/B 3핀이므로 총 256 × 256 × 256 = 16,777,216가지 색상(약 1,700만)을 표현할 수 있습니다.
RGB LED는 일반 LED 연결 방식과 동일하게 3번 반복하면 됩니다.
330Ω 저항을 꼭 연결하세요! 제가 이 실수로 빨간색 LED를 태워먹었습니다. 전기는 LED를 태우는 데 전혀 힘을 쓰지 않으니 주의하세요.
이제 완성된 회로입니다. 코드는 정말 단순하고 직관적입니다.
코딩하기
아두이노 코드는 다음 작업을 순차적으로 수행합니다.
Setup에서
- 아날로그 입력 핀 3개를 INPUT 모드로 설정
- PWM(아날로그 출력) 핀 3개를 OUTPUT 모드로 설정
Loop에서
analogRead 함수로 포텐셔미터 값 읽기
map 함수로 아날로그 핀 값(0~1023)을 PWM 값(0~255)으로 매핑
analogWrite 함수로 PWM 값을 아날로그 출력 핀에 쓰기
코드는 아래에 있습니다.
제 최종 결과물입니다. 빨간색 LED가 타버려서 첫 번째 포텐셔미터에 연결된 빨간색은 작동하지 않습니다.
이제 1,700만 색상을 내는 궁극의 컬러 제너레이터가 완성되었습니다! 축하합니다!
좋아하시면 공유와 추천 부탁드립니다 :) 전자 부품은 utsource.net에서 구매 가능합니다.
1Sheeld를 이용한 2륜 구동 로봇 제작 튜토리얼도 확인해보세요.
코드
아두이노
/* 포텐셔미터로 RGB LED 제어
Name: RGBLedPot.ino
Created: 17/2/16 9:47:03 AM
Author: Ahmed Hamdy
GNUPL 3.0+ */
// 설정 함수는 리셋 또는 전원 투입 시 한 번 실행
int inRGB[] = { A0, A1, A2 }; // 포텐셔미터 값을 읽을 아날로그 입력 핀
int outRGB[] = { 9, 10, 11 }; // RGB LED 각 색상 밝기 제어용 PWM 출력 핀
int tempValue = 0; // 임시 변수
const int inMinVal = 0, inMaxVal = 1023; // 포텐셔미터 읽기 값의 최소/최대 범위
void setup() {
// 3개 색상(빨강, 초록, 파랑) 핀 순회
for (int i = 0; i < 3; i++) {
pinMode(inRGB[i], INPUT); // 포텐셔미터 값 읽기용 핀 설정
pinMode(outRGB[i], OUTPUT); // RGB LED 출력용 핀 설정
}
}
// 루프 함수는 전원 차단 또는 리셋까지 반복 실행
void loop() {
// 각 색상별 반복
for (int i = 0; i < 3; i++) {
tempValue = analogRead(inRGB[i]); // 포텐셔미터 읽기
// 포텐셔미터 읽기 값(0~1023)을 유효한 PWM 값(0~255)으로 스케일 다운
tempValue = map(tempValue, inMinVal, inMaxVal, 0, 255);
// 핀에 출력 쓰기
analogWrite(outRGB[i], tempValue);
}
}
회로도
