가변 저항에 관해서 알아보자. 가변 저항 내부는 저항물질이 도포되어 있는 원형 띠 위로 손잡이를 돌리면 접점이 움직이는 구조이다. 즉 가변 저항 양단에 전압이 가해지고 손잡이를 돌리면 GND와 회전 접점 사이의 전압이 변동된다. 사진에 사용된 가변 저항은 10 KΩ 범위를 가진다, 하지만 그 범위는 1KΩ 또는 100KΩ 이라도 아무런 상관이 없다.
아두이노 코드에서 아날로그 채널 A0에서 가변저항의 변동되는 아날로그 전압 값을 analogRead() 명령을 사용하여 읽을 수 있다. 가변 저항에 가해진 최대 전압이 5.0V 라 해도 아두이노가 읽어 들이는 값은 10 비트 해상도의 0∼1023 범위의 정수 값이 된다. 이러한 과정을 전문 용어로 digitization 이라고 한다. 0∼1023 범위의 해상도라고 하면 사람의 감각으로는 부드러운 아날로그적인 변화로 느낄 수도 있다.
한편 LED를 켜기 위해서는 digital Write() 명령과 analogWrite() 명령이 있다. LED 의 밝기를 조절하려면 당연히 analogWrite() 명령을 사용하여야 하며 아두이노 우노의 핀 다이아그램을 참조하여 물결 표시(∼)가 있는 즉 PWM이 가능한 핀 즉 3,5,6,9,10,11 중에 배선해야 한다. 여기서는 3번 핀으로 하기로 한다.
analogWrite() 명령의 조절 범위는 0∼255 이다. 따라서 가변저항에서 읽어 들인 0∼1023 범위의 값을 0∼255 범위로 매치시키려면 4로 나누어 주면 충분하다. 아울러 밝기를 지속시킬 수 있도록 시간지연 delay(50)을 주도록 한다.
LED 밝기를 조절함과 동시에 brightness 결과를 시리얼모니터에 출력해보자. Serial.print(...) 명령을 사용함에 있어서 “...“은 실수이거나 문자열이어야 하지만 정수를 출력하기 위해서는 Serial.print((int)...)로 코딩하면 해결이 된다. Serial.println() 명령을 사용하면 한 줄에 해당하는 줄바꿈이 일어난다.
일차적으로 읽어 븍인 brightness 의 값이 0∼255 사이인지 시리얼 모니터에서 확인하기 위하여 delay(500) 정도로 느리게 한다음 확인한다. 확인이 되면 다시 delay(50)으로 돌려놓는다. delay(500) 의 경우 실제 LED 밝기가 불연속적으로 ON 된다.
시리얼 모니터를 끄고 시리얼플로터를 ON 한 후 가변저항을 돌려서 아래에서처럼 brightness 값을 출력해보자.
동영상을 통해 가변저항 손잡이를 돌려 밝기를 조절해 보자.
이와 같은 내용을 전제로 아래와 같이 코딩을 해보자.
//VR-abalog_LED_ON_01
int ledPin = 3;
int brightness = 0;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
analogWrite(ledPin, brightness);
}
void loop() {
brightness = analogRead(A0)/4;
analogWrite(ledPin, brightness);
delay(50); //시리얼 모니터 0-255 범위 확인시 500으로 변경
Serial.println((int)brightness);
}//끝