본문 바로가기

아두이노

아두이노프로그램 PWM이해하기

반응형

아두이노프로그램 포스팅을 시작합니다

아두이노프로그램에서 LED 밝기를 컨트롤 하려면 1.5V, 1.8V, 2.3V, 4.5V 같은 아날로그 전압이 필요합니다. 하지만 앞에서 배운 것처럼 아두이노 우노에는 디지털 값을 보내는 핀은 있지만 아날로그 핀은 없습니다. 아두이노뿐만 아니라 여러 종류의 전자 보드에는 대부분 아날로그 값을 보내는 핀이 없습니다. 아날로그 값은 받을 수는 있지만 보낼 수는 없는 것입니다. 

 

다른 방법이 없을까요? 그 방법이 바로 PWM입니다. 디지털 핀을 5V로 90%, 0V로 10%의 시간으로 켜면 5×0.9+0×0.1=4.5V가 된다. 즉 디지털 핀으로 4.5V전압을 만든 것이죠. 이와 같은 방법으로 0부터 5V 사이 어떤 값의 전압도 만들어 낼 수 있습니다. 이번 아두이노프로그램 포스팅에서는 PWM핀 사용방법을 알아보겠습니다. 

 

PWM은 펄스폭 변조(Pulse Width Modulation: PWM)라고 합니다. 디지털 핀을 PWM 핀으로 사용하기 위하여 비트라는 디지털 세계의 최소 기본단위를 잘 알아야 합니다. 비트는 0 아니면 1 둘 중 하나의 숫자만 들어갈 수 있는 박스와 같습니다.

 

  • 비트가 1개면 1비트라고 부릅니다. 들어갈 수 있는 숫자는 0 아니면 1 즉 2종류를 나타낼 수 있습니다. 
  • 비트가 2개면 들어갈 수 있는 숫자는 0 0, 0 1, 1 0, 1 1로, 총 4종류를 나타낼 수 있습니다.
  • 4비트에 들어갈 수 있는 숫자는 총 16가지입니다.
  • 8비트인 경우 나타낼 수 있는 수는 256가지입니다.

아두이노프로그램 비트

 

여기에서 2, 4, 16, 256이라고 하는 숫자는 우리에게 익숙한 10진수입니다. 우리가 사용하는 숫자를 셀 때 1부터 시작하여 2, 3, .. 256 이런 식으로 셉니다. 그러나 컴퓨터는 0부터는 숫자를 셉니다. 따라서 8비트로 나타낼 수 있는 수는 0부터 255입니다.

 

모든 디지털 핀을 PWM 방식으로 사용할 수 있는 것은 아닙니다. 디지털 번호 앞에 ~ 표시가 있는 핀들이 있습니다. 우노 보드인 경우 3, 5, 6, 9, 10, 11이 PWM 핀입니다.

 

아두이노 우노의 PWM 핀은 8비트입니다. PWM 핀으로 나타낼 수 있는 최대 숫자는 255이고 전압으로 환산하면 5V입니다. 물론 최소 숫자는 0이고 전압으로는 0V입니다. 디지털 핀을 아날로그 출력 핀으로 사용하려면 analogWrite(아날로그쓰기) 명령을 사용하면 됩니다.


analogWrite(핀 번호, 숫자 값)에서 핀 번호는 아날로그 출력 전압을 내보낼 PWM 핀의 번호이고, 숫자 값은 출력할 전압값에 맞는 8비트 숫자값입니다.

 

디지털 값 출력 : digitalWrite(핀 번호, HIGH/LOW)
아날로그 값 출력 : analogWrite(핀 번호, 0~255)

 

5V를 출력하려면 숫자 값에 255를 쓰면 됩니다. 4V를 출력하려면 255×4/5로 204를 쓰면 됩니다. 같은 방법으로 3V는 255×3/5=153입니다.

아두이노프로그램 PWM 이해하기

 

9번 핀에 LED를 연결하여 빛 밝기를 조절해보겠습니다. LED +극은 9번 핀에 _극은 저항에 연결하고, 저항의 다른 끝은 GND에 연결합니다.

[그림 3-18] D9 밝기 조절 LED

 

[그림 3-19] LED 밝기 조절 스케치

 

[그림 3-19]에 있는 스케치를 살펴보겠습니다. 셋업에서 9번 핀을 출력으로 정했습니다. 여기서 for문을 잘 알아야 합니다. for문은 명령어를 여러 번 할 수 있는 반복문입니다. for문은 for( 시작값 ; 조건 ; 증가량)으로 이루어져 있다.

 

for문 : for( 시작값 ; 조건 ; 증가량)

 

시작값은 반복을 시작하는 숫자 값으로 0, 1, 5, 100 … 어떤 값이어도 상관없습니다. 값이 조건에 맞는지 확인하고, 조건에 맞다면 중괄호({})안에 있는 명령어를 실행합니다. 그리고 증가량만큼 값응ㄹ 바꿉니다.

 

증가량은 반복할 때마다 커지는 숫자 값입니다. 사용한 스케치를 보면 쉽게 이해할 수 있습니다. 루프(loop)에서 for ( int j = 0 ; j < = 255 ; j = j + 1 )을 사용하였습니다.


시작값은 0이고 j라는 이름으로 부분 반복하는데 조건은 j 값이 255 될 때까지입니다. 반복할 때마다 증가하는 j의 값은 1입니다. j = j+1 하면 값이 1씩 증가합니다.


j가 255보다 크다면 더 이상 반복문을 실행하지 않습니다. 그러면 다음 반복문을 실행합니다. 이때 시작값은 k입니다. k이 커질수록 255-k값은 점점 작아집니다. 그러면 LED가 어두워집니다.


k가 255보다 크면 다시 j로 와서 다시 밝아지기를 반복하는 프로그램인 것이죠.

 

스케치가 업로드 되면 LED가 차츰 밝아지고 최고로 밝은 빛이 되면, 차츰 어두워지고 다시 밝아지고 하는 것을 반복합니다.

 

예제에서는 단순하게 1씩 증가하는 스케치인데 제곱근 또는 로그 함수형태로 밝기를 조절하면 숨 쉬는 듯한 빛 형태도 표현할 수 있습니다.

 

이번 아두이노프로그램 포스팅에서 PWM 사용방법을 배웠습니다. 우리가 나중에 스케치로 자동차를 만드는데 모터의 속도를 PWM 핀으로 조절합니다. PWM 핀을 잘 쓸 수 있어야 자동차가를 잘 움직일 수 있습니다. 이번 포스팅에서 배운 내용을 잘 기억하길 바랍니다.

 

아두이노프로그램 포스팅과 함께 보면 좋을 내용을 소개하겠습니다. 스크래치로 아두이노 코딩을 할 수 있는데 스크래치로 PWM 핀을 사용하는 방법을 아래 포스팅에서 소개했습니다. 스크래치로 아두이노 코딩을 하는데 관심있는 분은 아래 글을 보면 좋을 것 같습니다.

 

스크래치 PWM 방식 

 

스크래치 아두이노 PWM

PWM 이해하기 아두이노 내친구전압의 세기로 엘이디(LED) 밝기를 바꿀 수 있습니다. 따라서 엘이디(LED)의 밝기를 바꾸려면 1.5볼트, 1.8볼트, 2.3볼트 같은 아날로그 전압이 필요합니다. 아날로그는 연속된 값을..

www.itple.co.kr

 

좋아요와 댓글은 큰 힘이 됩니다

반응형