[아두이노] [강좌] 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
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
72 아두이노 ESP32 Analog Inputs (ADC) +4 icon 양재동메이커 02-12 23,699
71 아두이노 TIP : Serial의 Port가 Open 시점 확인 icon 양재동메이커 01-21 20,253
70 아두이노 ESP32 Boot Mode icon 양재동메이커 12-28 20,377
69 아두이노 아두이노 에러 리스트(Arduino Error list) icon 양재동메이커 11-24 25,947
68 아두이노 ESP32 main.cpp +1 icon 양재동메이커 11-19 20,381
67 아두이노 ESP32 EEPROM 와 IR Remote icon 양재동메이커 08-06 20,607
66 아두이노 Learn ESP32 icon 양재동메이커 06-25 20,418
65 아두이노 C 언어 비교문에서 == 사용 방법 icon 양재동메이커 04-12 20,846
64 아두이노 [아두이노 실습] 푸쉬버튼 long press, short press 판단하기 icon 양재동메이커 03-27 21,256
63 아두이노 [아두이노 실습] Push button 스위치로 FND 카운트 증가/감소 icon 양재동메이커 03-27 25,808
62 아두이노 Blynk를 사용해 아두이노에서 IoT 맛보기 icon 양재동메이커 03-27 22,544
61 아두이노 아두이노에서 u8glib로 0.96" OLED 사용하기 icon 양재동메이커 03-27 22,273
60 아두이노 아두이노에서 여러개의 스위치를 1개의 analog input핀으로 검사하기 icon 양재동메이커 03-27 20,978
59 아두이노 아두이노에서 RTOS 사용하기 (FreeRTOS in Arduino) icon 양재동메이커 03-27 25,100
58 아두이노 아두이노에서의 delay() 함수 icon 양재동메이커 03-27 19,607
57 아두이노 아두이노의 pinMode()에서 INPUT과 INPUT_PULLUP의 차이 icon 양재동메이커 03-27 21,936
56 아두이노 아두이노등의 임베디드 시스템의 변수 값 오버플로우 문제 icon 양재동메이커 03-27 19,488
55 아두이노 아두이노에서 외부 라이브러리 설치하기 (Install library in arduino) icon 양재동메이커 03-27 21,404
54 아두이노 WS2812 color LED 사용하기 icon 양재동메이커 03-27 19,900
53 아두이노 WS2812와 APA102의 차이 비교 (Comparison between WS2812 and APA102) icon 양재동메이커 03-27 23,045