3색 LED를 연결을 해보았으니
이제 3색 LED로 다양한 색 연출을
시도해보고자 한다.
RGB는 빛의 3원색이기 때문에
이들의 조합으로 다양한 색상 구현이
가능하다.
미적 감각이 제로(?)이기 때문에
누구나 잘 알고 있는 색상 혼합의
'빨주노초파남보'의 무지개를 3색 LED로 표현해보고자 한다.
[오늘의 회로도]
3색 LED를 통해 명령어만
가지고 놀거기 때문에 오늘의 회로도는
매우 간단하다.
3색 LED의
(-)를 저항 110옴을 연결하여 GND와 연결
R을 11번
G를 9번
B를 10번으로 연결하였다.
※ 시뮬레이터의 3색 LED가 R (-) B G 순서라 이렇게 표현한 것이고,
어차피 핀 번호 선언할 때 바꾸어 주면 된다.
☆☆☆ 3색 LED에 관해 궁금하다면 이전 포스트를 확인하자
2020/03/20 - [공부하는 이땡땡/아두이노를 작동해보자] - 3색 LED를 켜보자(1) - 캐소드와 애노드, INPUT_PULLUP
[원하는 색상의 불빛 켜기]
일단 원하는 색상을 알기 위해서 색상 코드표를 참조해야 한다.
색상 코드표는 인터넷 어디에서나 쉽게 찾을 수 있다.
여기서 RGB 값을 밝기로 아두이노에 넣어볼까 한다.
※ 색상코드값으로 RGB 값 계산하기
혹시라도 관심있는 분야라면 색상코드를 들어봤을 것이다.
위의 사진에서도 #F361DC라고 되어 있는 부분을 찾을 수 있을 것이다.
여기서 F3이 R의 값, 61이 G의 값, DC가 B의 값이 된다.
이 숫자는 16진법으로 계산해보면 F3→243, 61→97, DC→220의 값이 되는 것이다.
계산원리가 궁금하다면 접은 글을 확인해보자.
16진법 간단 계산하기
우리가 쓰는 십진법은 0부터 9까지 열 개의 숫자를 쓴다.
그리고 한자리가 올라갈 때마다 10을 곱해서 자릿수를 나타낸다.
123의 경우 = 3 + 2 * 10 + 1 *100
컴퓨터는 2진법을 사용하고, 발달됨에 따라 2의 4제곱인 16진수를 코드화 하여 이해한다고 생각하자 ㅋㅋ
(잘 모른다 ㅋㅋ)
그러려면 한 자리에 표현되는 숫자가 총 16개가 필요하므로 다음과 같이 정의한다.
0부터 9는 동일
10 → A
11 → B
12 → C
13 → D
14 → E
15 → F
그리고 한 자리가 올라갈 때마다 16을 곱해줘서 자릿수를 표현하면 된다.
F3 은
첫 자리(우리가 생각하는 일의 자리)가 3이고
두 번째 자리가 F이므로
F3 = F * 16 + 3 → 15 * 16 + 3 = 243
DC 역시 계산해보면
DC = D * 16 + C → 13 * 16 + 12 = 220 이 된다.
https://en.wikipedia.org/wiki/Web_colors
여기서도 대표적인 색상을 나타내 두었다.
색상 표에서 원하는 색을 확인하였다면
아날로그 라이트 명령어를 통해 불빛을 조절하면 된다.
오늘 쓰일 명령어는 analogWrite. 아래 포스팅을 참조하자 ㅎ
2020/03/08 - [공부하는 이땡땡/아두이노를 작동해보자] - 아두이노로 LED를 켜보자! (디지털핀, 아날로그핀)
명령어는 쉽게 아날로그라이트 3번으로 퉁치면 된다.
analogWrite(11, 243); // 11번이 빨강, 243의 밝기
analogWrite(9, 97); // 9가 초록, 97의 밝기
analogWrite(10, 220); // 10이 파랑, 220의 밝기
그리고 사이사이 딜레이를 두어 빛이 켜지는 시간을 조정하고
이 명령어를 7번 반복하면 되겠다.
[오늘의 무지개 색상 코드 - 초보자용]
int T = 1000; // LED가 켜지는 시간
int R = 11; // 빨강 핀 번호
int G = 9; // 초록 핀 번호
int B = 10; // 파랑 핀 번호
void setup() {
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
}
void loop() {
analogWrite(R, 255); // 1번 빨강 시작, 7번 반복!!!!
analogWrite(G, 0);
analogWrite(B, 0);
delay(T);
analogWrite(R, 255); // 2번 주황
analogWrite(G, 140);
analogWrite(B, 0);
delay(T);
analogWrite(R, 255); // 3번 노랑
analogWrite(G, 255);
analogWrite(B, 0);
delay(T);
analogWrite(R, 0); // 4번 초록
analogWrite(G, 205);
analogWrite(B, 0);
delay(T);
analogWrite(R, 0); // 5번 파랑(약간 하늘빛)
analogWrite(G, 191);
analogWrite(B, 255);
delay(T);
analogWrite(R, 0); // 6번 남색
analogWrite(G, 0);
analogWrite(B, 139);
delay(T);
analogWrite(R, 75); // 7번 보라(핑크같은)
analogWrite(G, 0);
analogWrite(B, 130);
delay(T);
}
[오늘의 창의력 문제]
색상표에서 색상을 골라 나만의 조명 효과를 만들어보자!
[나만의 함수 만들기]
여기서 끝? 이라고 하기에는 뭔가 아쉽다.
그러던 중 재미난 것을 발견하였다.
바로 나만의 함수 만들기!
지금 같이 단순한 명령을 아두이노가 반복해야 한다면
이 명령 자체를 하나의 함수로 선언해서 반복시키면 어떨까?
지금 필요한 건 3색의 변화이고, 3색을 입력함으로써
바로 불빛을 결정할 수 있는 Light 함수를 만들어보겠다.
Light(r색상, g색상, B색상)의 코드표
int T = 1000;
int R = 11;
int G = 9;
int B = 10;
void setup() {
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
}
void loop() {
Light(255,0,0);
Light(255,140,0);
Light(255,255,0);
Light(0,205,0);
Light(0,191,255);
Light(0,0,139);
Light(75,0,130);
}
// 보이드 루프 이후에 void 선언을 통해 Light 함수를 정의한다.
void Light(int a, int b, int c){ // Light 함수에는 3가지 변수가 필요하다. R색상, G색상, B색상
analogWrite(R, a);
analogWrite(G, b);
analogWrite(B, c);
delay(T);
analogWrite(R, 0); // 이왕 만든 김에 꺼진 다음 켜지도록 0으로 만들고, 0.1초의 딜레이를 주었다.
analogWrite(G, 0);
analogWrite(B, 0);
delay(100);
}
반복되는 명령어 같은 경우 새로운 함수를 정의해서 해줄 수 있다는 것을 오늘 배웠다 ㅋㅋ
물론 결과는 앞과 동일하게 무지개 색상이 될 것이다.
실물로 테스트
(저항이 박혀있는 3색 RED 모듈로 실험하였다)
빛의 밝기로 색을 표현한 거라
숫자가 낮은 수의 경우 빛이 약해 보인다.
파란색과 남색은 도저히 구분이 안돼서 하늘색 비스무리하게 ㅋㅋㅋ
주황색과 노란색은 구분이 안된다.
뭐 다채로운 색변화를 줬으니 그걸로 만족!
'공부하는 > GPT, 코딩' 카테고리의 다른 글
LED 테스트 by USB 전압 조절 + 브레드보드 전압공급장치 (3) | 2020.04.18 |
---|---|
3색 LED를 켜보자(3) - random 명령어, switch (78) | 2020.03.29 |
3색 LED를 켜보자(1) - 캐소드와 애노드, INPUT_PULLUP (144) | 2020.03.20 |
택트 스위치로 LED를 켜보자(2) - 신호를 입력받아 LED 제어 (151) | 2020.03.09 |
택트 스위치로 LED를 켜보자(1) - 택트스위치의 구조 (1645) | 2020.03.09 |
댓글