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

임베디드 보드

번호 제목 글쓴이 날짜 조회수
118 아두이노 ESP32 Analog Inputs (ADC) +4 icon 양재동메이커 02-12 17,117
117 아두이노 TIP : Serial의 Port가 Open 시점 확인 icon 양재동메이커 01-21 13,813
116 아두이노 ESP32 Boot Mode icon 양재동메이커 12-28 13,749
115 아두이노 아두이노 에러 리스트(Arduino Error list) icon 양재동메이커 11-24 18,860
114 아두이노 ESP32 main.cpp +1 icon 양재동메이커 11-19 14,045
113 아두이노 ESP32 EEPROM 와 IR Remote icon 양재동메이커 08-06 13,911
112 아두이노 Learn ESP32 icon 양재동메이커 06-25 13,532
111 라즈베리 파이 라즈베리 파이 (Raspberry Pi) 기초 icon 양재동메이커 06-19 15,085
110 라즈베리 파이 (동영상 강의) 라즈베리 파이 강좌 Link icon 양재동메이커 06-17 14,073
109 STM32 / MBED [MED] Switch debouncing icon HellMaker 12-30 16,183
108 기타 [타이젠] 아두이노의 16x2 LCD Display라이브러리 LiquidCrystal_I2C의 타이젠 포팅 icon 양재동메이커 09-15 15,916
107 기타 [타이젠] GPIO의 디지탈 출력과 입력 인터럽트의 C++ Class 제작 icon 양재동메이커 09-12 15,199
106 마이크로비트 서보 모터 icon HellMaker 09-03 14,966
105 마이크로비트 아날로그 온도센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 15,585
104 마이크로비트 터치센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 14,576
103 마이크로비트 디지털 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 13,794
102 마이크로비트 리니어 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 13,191
101 마이크로비트 불꽃 감지 센서 (마이크로 비트 센서 활용) icon HellMaker 08-26 13,598
100 마이크로비트 로터리 엔코더 (마이크로 비트 센서 활용) icon HellMaker 08-25 13,775
99 마이크로비트 2컬러 LED(3mm) (센서 활용) icon HellMaker 08-22 13,721