본문 바로가기
코스웨어/16년 스마트컨트롤러

2016_0606_개인스터디일지_아두이노_포토레지스터를 이용한 RGB LED 색상 변화

by 알 수 없는 사용자 2016. 6. 6.
728x90
반응형

아두이노 프로젝트북 예제 4장 

Color Mixing Lamp 



목표 : 포토레지스터와 RGB LED를 통해서 PWM을 이해 


사용한 부품 : 아두이노 UNO , 포토레지스터, RGB LED , 10K 저항 3개, 220ohm 3개 




1. PWM 이란


Pulse width modulation은 펄스의 폭을 컨트롤하는 주기 제어방법 입니다


“On”되는 시간에 따라 그 주기가 달라집니다. 주기가 낮다면 그에 따라 전압이 약해집니다.


왜냐하면 전압이 꺼지는 시간이 대부분이기 때문입니다




PWM의 사용 용도 :


LED 흐리게 하기

아날로그 출력하기 출력하기

오디오 신호 만들기

모터 공급용 속도조절하기 속도조절하기



2. 포토레지스터(photoresistors)


 글자 그대로 저항을 의미합니다. 하지만 약간 특이한 특성을 갖는데 빛의 세기에 따라서 그 값이 변합니다





3. RGB LED


일반적인 LED와 달리 4개의 다리를 가지고 있으며 전력의 양에 따라 각각 RGB 각각의 색상 밝기가 달라지고 

가장긴다리가 - 극을 가집니다




회로도





코드 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
const int gLedPin = 9; //제어할 핀번호 부여
const int rLedPin = 11;
const int bLedPin = 10;
 
const int rSensorPin = A0; //아날로그 포토센서 핀번호
const int gSensorPin = A1;
const int bSensorPin = A2;
 
int rVal = 0; // 색상별 각각 초기값 0
int gVal = 0;
int bVal = 0;
 
int rSensorVal = 0; // 센서초기값 0
int gSensorVal = 0;
int bSensorVal = 0;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); //전송속도
  pinMode(gLedPin,OUTPUT); //해당핀번호에 출력
  pinMode(rLedPin,OUTPUT);
  pinMode(bLedPin,OUTPUT);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  rSensorVal = analogRead(rSensorPin); //각각 센서 연결된 핀의 값을 받아서 저장
  delay(5);
  gSensorVal = analogRead(gSensorPin);
  delay(5);
  bSensorVal = analogRead(bSensorPin);
  delay(5);
 
  Serial.print("Raw Sensor Values /t RED : "); //저장된값 콘솔 출력
  Serial.print(rSensorVal);
  Serial.print("/t GREEN : ");
  Serial.print(gSensorVal);
  Serial.print("/t BLUE : ");
  Serial.print(bSensorVal);
 
  rVal = rSensorVal / 4; //아날로그 신호값은 0~1023 이므로 0~255의 값을가지는
  gVal = gSensorVal / 4; //LED 값에 맞추기위해 4로 나눔
  bVal = bSensorVal / 4;
 
  Serial.print("Mapped Sensor Values \t RED : "); //각각 LED값 콘솔 출력
  Serial.print(rVal);
  Serial.print("/t GREEN : ");
  Serial.print(gVal);
  Serial.print("/t BLUE : ");
  Serial.print(bVal);
 
  analogWrite(rLedPin,rVal); //LED 출력단자에 해당 값을 넣음
  analogWrite(gLedPin,gVal);
  analogWrite(bLedPin,bVal);
}
cs



연결후 구동







소감 : 포토레지스터라는게 어떤용도로 쓰이며 전압차이를 직관적으로 알아볼수 있어서 흥미로웠습니다


응용해서 빛이 있으면 끄고 빛이 없으면 켜지는 LED같은거 만들어도 재미있을거 같습니다

728x90