[아두이노] [강좌] 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를 아두이노 보드와 연결한다. 


b517d62c5e27112080dcc934e1ecece2.png
 


LED의 -극은 아두이노 보드의 GND에, +극은 330옴짜리 저항에 연결한 후 아두이노 보드의 9번 핀에 연결했다. 내부에 저항이 연결된 13번 핀을 사용하는 것이 아니므로 저항은 필수!! 터진다니까. 


13번 핀에 연결하면 저항을 따로 연결하지 않아도 되지만, 우노(Uno)의 경우 13번 핀은 PWM 핀이 아니기 때문에 9번으로 연결했다. 메가(Mega 2560/ADK) 보드에서 실습하는 경우 13번 핀에 저항 없이 연결해도 좋다. 



그리고 예제를 열어보자. 스케치 툴의 "파일예제01.BasicsFade” 예제.



 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가 점점 밝아졌다가 어두워졌다가를 반복하는 것을 확인할 수 있다.


0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
38 아두이노 [강좌] 30. I2C 통신 (2) - Wire 함수 알아보기 icon 양재동메이커 03-20 23,757
37 아두이노 [강좌] 29. I2C 통신 (1) - I2C 통신이란 무엇인가 icon 양재동메이커 03-20 28,181
36 아두이노 [강좌] 28. 시간 관련 함수 (3) - MsTimer2 라이브러리 icon 양재동메이커 03-20 19,957
35 아두이노 [강좌] 27. 시간 관련 함수 (2) - BlinkWithoutDelay 예제 icon 양재동메이커 03-20 14,255
34 아두이노 [강좌] 26. 시간 관련 함수 (1) - delay() / millis() icon 양재동메이커 03-20 19,829
33 아두이노 [강좌] 25. tone()/noTone() 함수 (2) - 부저 실습 icon 양재동메이커 03-20 14,411
32 아두이노 [강좌] 24. tone()/noTone() 함수 (1) - 함수 설명 icon 양재동메이커 03-20 15,970
31 아두이노 [강좌] 23. Interrupt(인터럽트) (3) - 인터럽트 함수 알아보기 icon 양재동메이커 03-20 14,920
30 아두이노 [아두이노 강좌] 22. Interrupt(인터럽트) (2) - 스위치로 LED 켜고 끄기 예제 icon 양재동메이커 03-20 22,333
29 아두이노 [강좌] 21. Interrupt(인터럽트) (1) - 인터럽트란 무엇인가 icon 양재동메이커 03-16 14,591
28 아두이노 [아두이노 강좌] 20. String (3) - 유용한 함수들 icon 양재동메이커 03-16 22,403
27 아두이노 [강좌] 19. String (2) - String() 생성자와 + 연산 icon 양재동메이커 03-16 12,688
26 아두이노 [강좌] 18. String (1) - 문자형(char) 배열과 String icon 양재동메이커 03-16 22,445
25 아두이노 [강좌] 17. Serial 통신(3) - 유용한 기능들 icon 양재동메이커 03-15 16,700
24 아두이노 [강좌] 16. Serial 통신(2) - 시리얼 통신 함수 알아보기 icon 양재동메이커 03-15 21,014
23 아두이노 [강좌] 15. Serial 통신(1) - 시리얼 통신이란 무엇인가 icon 양재동메이커 03-15 19,285
22 아두이노 [강좌] 14. analogRead()/analogWrite() 실습 - 조도 센서 + LED icon 양재동메이커 03-15 12,660
21 아두이노 [강좌] 13. analogWrite() 실습 - LED 밝기 조절하기(Fade 예제) icon 양재동메이커 03-15 12,986
20 아두이노 [강좌] 12. 아날로그 기능(2) - analogWrite() 함수 icon 양재동메이커 03-14 14,505
19 아두이노 [강좌] 11. analogRead() 함수 실습 - 습도 센서 icon 양재동메이커 03-14 12,606