개발하는 기획자

반응형

1. 준비물


 1) 아두이노 UNO * 1개

 2) 빵판(브레드보드) * 1개

 3) 연결 케이ㅂ....ㅡㄹ....

 

쓰다보니 깨닫게 된 사실인데, 준비물은 지난 포스팅과 동일합니다.

 

 

2. 펄스 폭 변조 (PWM, Pulse Width Modulation)


LED는 단순 On/Off와 같이 불을 켜고 끄는 제어가 간단하게 가능하다. 추가적으로 LED에 들어가는 전압을 조절해서 원하는 LED의 밝기로 켜고 끄는 제어 역시 가능하다.

 

그렇다면 여기서 드는 의문이 '아두이노 우노 R3 보드의 출력핀은 디지털 신호를 출력하는 핀인데 어떻게 일정하게 출력되는 전압(아두이노 우노에서 디지털 핀의 출력 전압은 5V이다.)을 감소시켜 조절 가능하게 만들 수 있을까?' 이다.

 

그 물음에 대한 답은 펄스 폭 변조(PWM, Pulse Width Modulation) 기능이다.

PWM 기능은 간단히 설명하면, 디지털 신호를 마치 아날로그 신호처럼 보이도록 만드는 기능이다.(말하자면 유사 아날로그 신호 발생기? 짝퉁 아날로그 신호 발생기?) 

 

[아날로그 & 디지털 신호]

 

 

먼저 아날로그와 디지털 신호는 다음과 같이 아날로그 신호는 '자연상태의 신호로 시간의 흐름에 따라 연속적으로 변하는 신호'이며, 디지털 신호는 '이산적인 값을 가지는 신호'를 의미한다. 신호 파형은 그림처럼 아날로그 신호는 예측하기 힘든 자연의 상태의 모습을 보이는 반면, 디지털 신호는 이상적인 신호 값을 확인할 수 있다.

 

아두이노에서는 기본적으로 디지털 신호를 출력하고 있고, PWM은 이른 이산적인 디지털 신호의 주기. 즉, 핀의 출력신호가 ON 상태와 OFF 상태의 시간을 조절해 짧은 시간 주기 내에서 아날로그 신호처럼 전압값을 감소하거나 최대치까지 증가시킬 수 있는 기능이다.

 

 

이미지 출처 : 위키백과

 

다음 이미지에서 D 는 듀티비를 의미하는데 펄스에서 On Duty Rate. 즉, 한 주기 내에서 어느정도 High Level을 유지하는 지에 대한 비율로 사용되는 값을 나타낸다.

 

간단히 예를 들어보면, 듀티비가 50%라고 하면 출력전압이 High Level 상태와 Low Level 상태가 반반을 가지는 펄스파가 생성된다. 그렇게 되는 경우 5V인 출력 전압이 절반인 2.5V로 측정이 된다. 

 

 

3. 아두이노 LED 밝기 제어


간단한 코드를 통해 위에서 설명한 PWM 기능이 아두이노에서 정상적으로 동작하는지, 실제 PWM 기능을 통해 LED의 밝기 제어가 되는지 확인해 보자.

 

먼저 이전 LED 제어 포스팅과 동일하게 연결을 한 상태에서 LED로 출력되는 핀을 12번에서 11번으로 바꾸도록 한다.

그런 뒤에 다음 예제 코드를 작성해서 보드에 업로드를 한다.

[예제 코드] 

int led_pin=11;

void setup() {
  // put your setup code here, to run once:
  pinMode(led_pin, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  for(int i = 0; i<255; i++) {
    analogWrite(led_pin, i);
    delay(20);
  }
}

간단히 코드에 대한 설명을 하면,

먼저 LED와 연결된 핀을 선언하기 위해 led_pin 변수에 11을 할당한 뒤,

pinMode 함수를 이용해 Setup에서 11번 핀의 모드를 출력 상태로 변경해준다.

그리고 for 반복문을 이용해 0.02초마다 아날로그 출력의 값을 1씩 올려줘 밝기를 점점 밝게 제어하는 코드를 작성한다.

 

 

프로그램 코드를 아두이노 우노 보드로 업로드하게되면 다음 영상과 같이 밝기가 밝아지는 동작을 확인할 수 있다.

 

위에서 단순 ON/OFF 제어를 할때에 연결한 보드에서 왜 12번 핀에서 11번 핀으로 변경해서 PWM 기능을 동작했는지에 대한 의문이 드는 부분이 생길 수 있다. 

아두이노 우노 보드에서는 PWM 출력을 사용할 수 있는 출력핀이 정해져 있다. 보드를 살펴보면 ~모양이 숫자 앞에 적혀 있는  핀들을 확인할 수 있는데, 숫자 앞에 이런 ~ 무늬가 있는 핀만 사용할 수 있다.

아두이노 우노에서는 총 6개의 PWM 핀이 있다. (3, 5, 6, 9, 10, 11 핀만 사용 가능)

 

 

 

그렇다면 PWM 기능이 없는 출력 핀을 사용해서 코드를 동작 시키게 된다면 어떻게 될지도 확인해보도록 합시다.

 

[예제 코드]

int led_pin=12;

void setup() {
  // put your setup code here, to run once:
  pinMode(led_pin, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  for(int i = 0; i<255; i++) {
    analogWrite(led_pin, i);
    delay(20);
  }
}

위 예제 코드에서 핀 번호만 수정하고 보드에서 LED에 연결된 11번 핀을 12번으로 변경해서 동작을 시켜보면 다음과 같이 동작을 합니다.

 

PWM 기능이 없는 핀은 같은 코드를 동작하더라도 단순 ON/OFF 로 LED의 불이 켜졌다 꺼졌다만을 반복하게 되고 밝기 조절은 되지 않는 동작 모습을 확인할 수 있습니다.

 

 

이렇듯 간단하게 출력 전압을 제어 가능하며, LED의 밝기 제어 및 동일한 방법으로 DC 모터 등을 제어에도 사용되는 PWM 기능을 확인했습니다. 감사합니다.

반응형

이 글을 공유합시다

facebook twitter googleplus kakaostory naver
-->