프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

가변저항으로 RGB 색을 조절해보자

2015-12-22 22:55:42

RGB LED는

R : 적색, G : 녹색, B : 파란색으로 색을 조합해서 다양한 색을 낼수 있습니다.

일반 길게 생긴 LED타입과 SMD 타입으로 나뉘고 SMD에서도 컨트롤러가 있느냐 없느냐에 따라 또 달라집니다..

이번에 소개해드릴 방법은 컨트롤러가 없는 타입입니다.

 

회로도는 이렇습니다.

자꾸 간단한 아두이노의 연결모양만 보는것 보다 계속 회로도를 봐야 다른 무수한 회로들을 봐도 알아볼 수 있습니다.

브레드보드 연결 모양만 보면 그때뿐이거든요..

 

사용된 RGB LED는 GND 공통 타입입니다. GND 공통 타입이 있으면 VCC 공통 타입도 있겟지요

LED위에 저거는 트랜지스터라고 부릅니다. 정확하게는 PNP 트랜지스터입니다. 전류를 증폭하기 위한 용도이지요.

GND 공통 타입은 PNP 트랜지스터가 쓰여야 하고, VCC 공통타입은 NPN 트랜지스터를 사용하셔야 합니다.

PNP트랜지스터의 경우 아두이노쪽으로 연결된 부분을 베이스라고 부르는데 LOW 신호를 보내야 동작이 됩니다.

NPN은 반대로 HIGH 신호를 줘야지요.

색을 결정하기 위한 R,G,B용 가변저항도 달아 두었습니다.

// 디지탈 핀 선언
#define pin_R 3
#define pin_G 5
#define pin_B 6
//----------------
// 아날로그 핀 선언
#define pin_potentiometer_R A0
#define pin_potentiometer_G A1
#define pin_potentiometer_B A2
//---------------
#define DEBUG 1 // 디버그모드 설정

int pin_R_data, pin_G_data, pin_B_data;
int pin_R_analog_data, pin_G_analog_data, pin_B_analog_data;
int mapping_R_data, mapping_G_data, mapping_B_data;


void setup() {
  // put your setup code here, to run once:
#ifdef DEBUG
  Serial.begin(9600);
#endif
  pinMode(pin_potentiometer_R,INPUT);
  pinMode(pin_potentiometer_G,INPUT);
  pinMode(pin_potentiometer_B,INPUT);
  pinMode(pin_R,OUTPUT);
  pinMode(pin_G,OUTPUT);
  pinMode(pin_B,OUTPUT);
}
void loop() {
  // put your main code here, to run repeatedly:
  pin_R_analog_data = analogRead(pin_potentiometer_R);
  pin_G_analog_data = analogRead(pin_potentiometer_G);
  pin_B_analog_data = analogRead(pin_potentiometer_B);

  mapping_R_data = map(pin_R_analog_data, 0, 1023, 255, 0);
  mapping_G_data = map(pin_G_analog_data, 0, 1023, 255, 0);
  mapping_B_data = map(pin_B_analog_data, 0, 1023, 255, 0);

#if DEBUG
  Serial.print("read R data -> ");
  Serial.print(pin_R_analog_data);
  Serial.print("\t|\t");
  Serial.print("mapping R data -> ");
  Serial.print(mapping_R_data);
  Serial.print("\t||\t");
  Serial.print("read G data -> ");
  Serial.print(pin_G_analog_data);
  Serial.print("\t|\t");
  Serial.print("mapping G data -> ");
  Serial.print(mapping_G_data);
  Serial.print("\t||\t");
  Serial.print("read B data -> ");
  Serial.print(pin_B_analog_data);
  Serial.print("\t|\t");
  Serial.print("mapping B data -> ");
  Serial.println(mapping_B_data);
#endif  

    analogWrite(pin_R, mapping_R_data);
    analogWrite(pin_G, mapping_G_data);
    analogWrite(pin_B, mapping_B_data);

}

소스코드입니다. 변경됨을 알아보기 쉽게 시리얼 포트로 가변저항값을 읽어오고 map 함수를 통해 변환된 숫자를 확인하는것까지 표현이 됩니다.

감사합니다.

 

배진호

RGB, 가변저항