728x90

아두이노에서 Arduino LED 켜기(저항,LED,digital출력)에서 보면 디지털 출력에서는 HIGH와 LOW 두상태 밖에 없다.

쉽게 말해서 가장 쎈 밝기와 꺼진 상태 두개 밖에 없는 것이다.

만약 연속된 값을 출력하고 싶다면 아날로그출력을 해야한다는 것이다.

애석하게도 아두이노 우노의 경우 아날로그 출력이 없다. 이때를 위해서 PWM이라는 것이있다.

PWM은 Pulse Width Modulation의 약자로 디지털 출력을 신호를 끊어서 마치 디지털 출력을 아날로그출력처럼 보이는 기법이다.

예를 들어 5V가 최고 밝기일때 5V에 도달하지말자 꺼버리고 하자말자 꺼버리고를 주기를 주면 마치 4V처럼 보이는 방식을 쓰는 것이다.

모든 핀에서 지원을 해주는건 아니고 아두이노를 잘 확인해 봐야 한다.



아두이노의 우노를 보면 물결표시가 있는것이 PWM이다.

PWM을 쓰고싶다면 이 핀에 꽂아야된다.



아두이노 듀에의 경우 2번핀 부터 13번핀까지가 PWM이다. 여기에 꽂아주면된다.



회로도는 저번과 비슷한데 1번에서 5번으로만 옮겨주면된다.

PWM출력 코드는 아래와 같다.


const int pinLED = 5;

void setup() {
Serial.begin(9600);
pinMode(pinLED,OUTPUT);

}

void loop() {
analogWrite(pinLED,0);
delay(300);
analogWrite(pinLED,64);
delay(300);
analogWrite(pinLED,128);
delay(300);
analogWrite(pinLED,255);
delay(300);
}

아날로그 출력은 일반적으로 0에서 255까지 출력할 수 있다.

여기서 숫자가 커질수록 출력하는 전압이 높아지게 된다.

위의 예제는 꺼졌다가 서서히 밝아지는 예제이다. 시간간격은 0.3초이다.

보다시피 시간간격으로 밝기가 지속적으로 변환화는 것을 확인할 수 있다.


위의 예제를 응용해서 불빛이 무드등처럼 켜졌다 꺼졌다 하는 예제를 만들 수도 있다.


const int pinLED = 5;

void setup() {
Serial.begin(9600);
pinMode(pinLED,OUTPUT);

}

void loop() {
for(int i=0;i<256;i++){
analogWrite(pinLED,i);
delay(5);
}
for(int i=255;i>=0;i--){
analogWrite(pinLED,i);
delay(5);
}
}

위의 코드는 5밀리세컨드 간격으로 불이 서서히 밝아지고

최고 점에 도달하면 5밀리세컨드간격으로 서서히 꺼져서 0까지 내려간다.



무드등 처럼 서서히 켜졌다가 서서히 꺼지는 것을 볼 수있다.


+ Recent posts