오늘은 가변저항 부품을 이용해서 3색 LED의 색상을 마음대로 조절하는 실험을 하겠습니다. 오늘의 주제는 가변저항입니다. 지금까지 실험에서는 고정저항으로 LED에 연결하여 불을 켜거나 다른 부품의 전류를 조절하기 위해서 써왔습니다. 이제는 고정저항 대신에 가변저항을 써서 유동적으로 제어할 수 있는 방법을 배워보도록 하겠습니다.
모양은 대충 이렇게 Termial1,2와 Wiper로 핀이 구성되어 있습니다. 실험에서는 Terminal2(5V), Terminal1(Gnd), Wiper(저항값추출)로 구성합니다. 가정에 보시면 형광등에 돌려서 밝기 조절하는 스위치를 보시거나 있으신분들 아마 있을거에요. 바로 그게 가변저항스위치 입니다. 가정 형관등 보시면 돌려서 저항이 작으면 전류가 통과하는 양이 많아 형광등이 밝아지고 저항이 크면 전류가 통과하는 양이 적어져서 형광등이 어두어집니다. 대충 가변저항 부품에 대해서 이해가 되시죠. 참고로 여기서 Terminal1과 Terminal2의 Vcc와 Gnd 연결 순서는 고정된 것이 아닙니다. 반대로 연결하더라도 작동은 됩니다. 자신이 연결했을때 Wiper의 값이 큰값이면은 반대로 연결하게 되면 Wiper의 값은 작은값으로 바뀌에 됩니다. Terminal1,2의 선을 어떻게 연결하느냐에 따라서 Wiper의 나오는 전류값은 서로 반대값이라고 생각하시면 됩니다. 쉽게 말해서 자신이 연결한 선에서 돌리면 0~1023으로 순차적으로 출력된다면 반대로 연결하여 돌리면 1023~0으로 순차적으로 출력됩니다. 참쉽죠.
가변저항 부품을 보시면 Wiper에서 나오는 선이 아날로그 A0, A1, A2에 입력으로 들어옵니다. Wiper은 가변저항 부품에 흐를 전류의 값을 출력합니다. Terminal1은 Gnd, Terminal2은 5V에 연결합니다. 그러면 가변저항기에 전류가 공급되고 조절기로 돌리면 저항값이 변화되고 Wiper로 그 변화된 전류가 출력됩니다. 그 출력값이 A0, A1, A2에 아날로그 값으로 읽게 되고 그 값은 다시 3색 LED의 아날로그 신호값으로 출력되여 색이 결정됩니다. 하지만 아두이노는 아날로그 출력이 없으며 아날로그 출력과 비슷한 형태로 출력되는 PWM 출력으로 대신하는데 그냥 단순하게 PWM디지털핀으로 아날로그 신호를 내보낸다고 생각 하시면 돼요.
(1) 가변저항기 읽기
color_value[0] = analogRead(A0)/4; //(0~1023 => 1024/4=256)
color_value[1] = analogRead(A1)/4;
color_value[2] = analogRead(A2)/4;
analogRead()함수로 각 Wiper핀에서 발생된 가변저항값을 읽게 됩니다. 0~1023 사의 값을 가져오는데 3색 LED의 입력값은 0~255사이이기 때문에 나누기 4를 해줘야 되겠죠. 왜 나루기를 했는지는 아시겠죠.
clor_value[0]=map(analogRead(A0),0,1023,0,255)
원래는 이렇게 코딩해야합니다. map()함수로 효율적으로 코딩해야 합니다. 하지만 대충 어떤 값이 들어가는지 직관적으로 이해 시키기 위해서 map()함수를 생략했네요.
(2) 색 결정
우선 3색 LED에서 따로 Color()함수를 직접 만들었습니다. 이렇게 만들어 놓으면 3색 LED 부품을 사용하면 이 함수만 복사해오면 번거로운 코딩을 할 필요 없겠죠. 3색핀에 값이 결정되면 그 값을 color(Red, Green, Blue) 값을 넣으면 3색 LED에 색이 출력됩니다.
void Color(int red, int green, int blue)
{
analogWrite(rpin, red);
analogWrite(gpin, green);
analogWrite(bpin, blue);
}
int rpin = 11;
int bpin = 10;
int gpin = 9;
int color_value[3];
void setup()
{
pinMode(rpin, OUTPUT);
pinMode(gpin, OUTPUT);
pinMode(bpin, OUTPUT);
}
void loop()
{
color_value[0] = analogRead(A0)/4; //(0~1023 => 1024/4=256)
color_value[1] = analogRead(A1)/4;
color_value[2] = analogRead(A2)/4;
Color(color_value[0],color_value[1],color_value[2]);
}
void Color(int red, int green, int blue)
{
analogWrite(rpin, red);
analogWrite(gpin, green);
analogWrite(bpin, blue);
}
그냥 가변저항 예제로 LED 1개, 가변저항 1개를 이용해서 밝기를 조절하는 실험을 해도 되는데 좀 더 복습하면서 3색 LED의 색을 만들어내는게 시각적으로 보기도 좋고 실험이 재밌을 것 같아서 선택했습니다.
가변저항을 이용해서 조절하니깐 시각적으로 3색 LED의 색의 변화를 체험하셨을 거라 생각합니다. 3색 LED의 색의 변화를 통해서 뭔가 재밌는 소재가 없나 한번 떠올려 보세요. 예전에 어떤분의 블로그 글을 본적 있는데 3색 LED를 이용한 실험이였습니다. 참 참신하더군요. 비닐인가 솜인가 구름의 형태로 만들어서 그 안에 3색 LED를 넣고 wifi쉴드를 이용해서 날씨 정보를 읽어오게 했는데 그 정보를 이용해서 현재의 날씨 상태를 3색 LED의 색으로 나타냈는데 참 재밌어 보이더군요.
한번 이런건 어떨까요. 토양습도센서를 아두이노에 연결해서 식물이 물이 부족할경우 그걸 시각적으로 3색 LED로 식물의 감정을 표현한다면 괜찮겠지요.
이야기가 삼천포로 빠졌지만 가변저항을 조절할 수 있다면 과연 일상에서 어떤것들이 있는지 찾아보고 또 어디에다 이 부품을 사용하면 재미 있을지 한번 상상의 나래를 펼쳐보세요.