본문 바로가기
공부하는/GPT, 코딩

3색 LED를 켜보자(2) - 무지개 색상, void 함수 선언

by 공부하는이땡땡 2020. 3. 21.
반응형

3색 LED를 연결을 해보았으니

이제 3색 LED로 다양한 색 연출을 

시도해보고자 한다. 

 

RGB는 빛의 3원색이기 때문에

이들의 조합으로 다양한 색상 구현이 

가능하다. 

 

미적 감각이 제로(?)이기 때문에

누구나 잘 알고 있는 색상 혼합의 

'빨주노초파남보'의 무지개를 3색 LED로 표현해보고자 한다. 

 

[오늘의 회로도]

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

 

3색 LED를 켜보자(1) - 캐소드와 애노드, INPUT_PULLUP

[3색 LED란?] 쉽게 이야기 해서 RGB 3색의 칩이 함께 들어 있는 LED를 말한다. 빛의 3원색이라고 해서 RGB를 조합하면 백색이 된다는 아무리 머리로 이해하려고 노력해보아도 되지 않는 빛의 3원색을 떠올리며 이..

studylee00.tistory.com

 

[원하는 색상의 불빛 켜기]

일단 원하는 색상을 알기 위해서 색상 코드표를 참조해야 한다. 

색상 코드표는 인터넷 어디에서나 쉽게 찾을 수 있다. 

 

여기서 RGB 값을 밝기로 아두이노에 넣어볼까 한다. 

 

※ 색상코드값으로 RGB 값 계산하기

 

혹시라도 관심있는 분야라면 색상코드를 들어봤을 것이다. 

위의 사진에서도 #F361DC라고 되어 있는 부분을 찾을 수 있을 것이다. 

여기서 F3이 R의 값, 61이 G의 값, DC가 B의 값이 된다. 

이 숫자는 16진법으로 계산해보면 F3243, 6197, DC220의 값이 되는 것이다. 

계산원리가 궁금하다면 접은 글을 확인해보자. 

더보기

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를 켜보자! (디지털핀, 아날로그핀)

 

아두이노로 LED를 켜보자! (디지털핀, 아날로그핀)

오늘의 회로도는 LED를 켜는 가장 기본이 되는 명령어에 대해서 알아볼까 한다. [LED를 켜기 위한 사전 지식] 우선 아두이노의 기본적인 정보부터 탐색해볼까 한다. POWER: 전원과 관련된 부분이다. 3.3V, 5V가..

studylee00.tistory.com

 

 

명령어는 쉽게 아날로그라이트 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 모듈로 실험하였다)

딜레이 꺼짐을 줬떠니 깜박임이 눈 아프다 ㅋㅋㅋㅋㅋ

 

빛의 밝기로 색을 표현한 거라 

숫자가 낮은 수의 경우 빛이 약해 보인다. 

파란색과 남색은 도저히 구분이 안돼서 하늘색 비스무리하게 ㅋㅋㅋ

 

주황색과 노란색은 구분이 안된다. 

 

뭐 다채로운 색변화를 줬으니 그걸로 만족! 

반응형

댓글