[아두이노] [강좌] 13. analogWrite() 실습 - LED 밝기 조절하기(Fade 예제)
analogWrite() 함수를 직접 사용해보자.
아두이노 홈페이지의 PWM 설명을 보면 사용 예로 LED의 밝기 조절을 들고 있다. digitalWrite() 예제에서 1초 간 LED를 켜고, 1초 간 LED를 껐던 것은 0.5Hz의 듀티비 50% PWM 신호를 만든 것이라고 지난 강좌에서 설명했었고.
이것처럼 LED에 LOW 신호와 HIGH 신호를 일정한 간격으로 출력하는 것을 PWM, PWM 신호를 출력하기 위한 함수가 analogWrite() 함수. analogWrite() 함수에는 핀 번호와 듀티비를 나타내는 0~255 사이의 값(실제 듀티비는 0~100이지만)이 매개 변수로 사용된다,고도 설명했었다.
그래서, analogWrite() 함수를 이용해서 127(듀티비 50%)의 값을 주면 LED는 약 2 milliseconds 주기(analogWrite() 함수에서 만드는 PWM 파형은 약 490Hz니까.)로 꺼졌다 켜졌다를 반복하며 빠르게 깜빡이게 된다.
이 때 LED의 깜빡임은 너무 빨라 눈에 보이지 않지만 대신 On/Off 되는 시간의 비율만큼 밝기가 달라 보이게 되기 때문에 PWM 출력으로LED의 밝기를 조절할 수 있게 되는 것이다.
만들어보자.
아래 그림과 같이 LED를 아두이노 보드와 연결한다.

LED의 -극은 아두이노 보드의 GND에, +극은 330옴짜리 저항에 연결한 후 아두이노 보드의 9번 핀에 연결했다. 내부에 저항이 연결된 13번 핀을 사용하는 것이 아니므로 저항은 필수!! 터진다니까.
13번 핀에 연결하면 저항을 따로 연결하지 않아도 되지만, 우노(Uno)의 경우 13번 핀은 PWM 핀이 아니기 때문에 9번으로 연결했다. 메가(Mega 2560/ADK) 보드에서 실습하는 경우 13번 핀에 저항 없이 연결해도 좋다.
그리고 예제를 열어보자. 스케치 툴의 "파일→예제→01.Basics→Fade” 예제.
Fade.ino |
int led = 9; // the pin that the LED is attached to int brightness = 0; // how bright the LED is int fadeAmount = 5; // how many points to fade the LED by
void setup() { pinMode(led, OUTPUT); }
void loop() { analogWrite(led, brightness); brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } delay(30); } |
말 안해도 핀 번호를 저장하는 'led' 변수 값은 알아서 본인의 핀 번호로 수정할 것이라 믿고.
setup() 함수에서 pinMode() 함수를 이용해 출력 모드로 설정해주고 있다. 사실 메가나 우노의 경우에는 analogWrite() 함수를 사용하는 순간 출력 모드로 자동 설정되지만, 듀에(Due) 등의 경우에는 입력 모드에서 PWM 출력이 안되는 경우가 있으므로 설정해주도록 하자.
우선 업로드해서 동작을 먼저 확인해볼까? 아래 영상처럼 LED가 점점 밝아졌다가 어두워졌다가를 반복하는 것을 확인할 수 있다.