<목표>
- analogWrite() 함수를 이용하여 전압 출력을 pwm 신호로 출력할 수 있다.
<준비물>
- 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led
LED 사용하는데에는 저항이 필수적으로 필요하지만, 간단히 테스트를 위해서 이번에는 LED(백색)을 이용한다.
적색과 노란색, 녹색의 LED를 사용하시려면 저항이 필요합니다. 110옴 저항 사용 권장.
<회로도>
LED의 긴다리(+극)를 9번핀에 연결한다.
<코드>
int led = 9; // the PWM pin the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by
// the setup routine runs once when you press reset:
void setup() {
// declare pin 9 to be an output:
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// set the brightness of pin 9:
analogWrite(led, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
코드는 아두이노 - 파일 - 예제 - 01.Basics - Fade 의 예제 파일과 동일 합니다.
예제파일을 쓰셔도 되고, 위의 코드를 복사하여 붙여넣으셔도 됩니다.
<실행 결과>
led의 밝기를 아두이노로 제어할 수 있음을 확인할 수 있었다.
아두이노의 디지털 핀은 출력이 0 V 아니면 5 V 밖에 낼 수 없는데, 위와같이 밝기를 조절할 수 있는 이유는 PWM 신호 때문이다.
PWM 제어는 "펄스 폭 변조" 라고 부르며, 아래 링크에서 자세하게 확인 할 수 있다.
https://ko.wikipedia.org/wiki/%ED%8E%84%EC%8A%A4_%ED%8F%AD_%EB%B3%80%EC%A1%B0
간단하게 설명하자면, 0V의 신호와 5V의 신호를 1초 동안 얼마나 유지하고 반복하느냐의 차이로 0~5 범위의 전압을 출력할 수 있다.
아두이노 코드 중 새로운 함수를 소개하고 넘어가보자.
analogWrite( pin_number , value ) : pin_number 에 해당하는 단자에 value (0~255)에 해당하는 PWM 신호를 출력한다.
원래는 duty 비로 제어를 해야하지만, 아두이노에서는 0~255의 값으로 제어가 가능하다.
쉽게 생각하자면,
값이 0 일 때에는 duty 비가 0으로 0V 출력이 된다.
값이 127 일 때에는 duty 비가 50% 로 2.5V 출력이 된다.
값이 255 일 때에는 duty 비가 100% 로 5V 출력이 된다.
이 때, 중요한 것은 아두이노의 모든 디지털 핀에서 PWM 제어가 가능한 것이 아니라,
사용할 수 있는 핀이 지정되어 있다는 것이다.
쉽게 알아볼 수 있는 방법을 핀번호 옆에 ~ 의 물결표시가 있는 핀에서만 PWM 제어를 사용할 수 있다.
위의 내용을 바탕으로 코드의 내용을 살펴보면
전역변수(글로벌 변수) 선언에서
led 핀을 9번으로 설정한다.
brightness 라는 변수에 초기값 0으로 설정한다.
fadeAmount 라는 변수에 밝기 변화값으로 5로 설정한다.
setup 에서
led핀에 해당하는 9번핀을 출력으로 설정한다.
loop 에서
analogWrite()함수를 통해서 9번핀에 PWM신호를 주며, 그 값으로 밝기 변수인 brightness를 사용한다.
밝기 변수 brightness를 원래 값에다 fadeAmount값인 5만큼 증가 시켜 저장한다.
만약 밝기가 0이하 이거나, 255이상이면 fadeAmount 의 값의 부호를 바꿔준다.
(PWM 신호가 한계치인 0과 255를 넘어가면 반대로 밝기 조절을 해주기 위함)
led가 밝기를 유지하는 시간을 30ms 로 한다.
PWM 제어가 안되는 디지털 핀에서는 사용자가 코드를 작성하면 비슷하게 구현할 수 있다.
PWM 제어는 led 밝기보다도 모터 제어에서 많이 사용한다.
이를 이용하면 3.3V 출력도 만들어 낼 수 있다.
※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!
'코딩 > 아두이노' 카테고리의 다른 글
[아두이노 강좌] 예제로 배우는 아두이노 #7 DigitalInputPullup, 아두이노 내장 pullup 저항 이용하기 (2) | 2020.03.27 |
---|---|
[아두이노 강좌] 예제로 배우는 아두이노 #6 , 스위치 버튼으로 led 제어하기 (0) | 2020.03.25 |
[아두이노 강좌] 예제로 배우는 아두이노 #4 ReadAnalogVoltage, 아두이노로 전압측정하기 (2) | 2020.03.25 |
[아두이노 강좌] 예제로 배우는 아두이노 #3 analogRead()사용법 (0) | 2020.03.25 |
[아두이노 강좌] 예제로 배우는 아두이노 #2 digitalRead() 사용법, 버튼 상태 읽기 (0) | 2020.03.25 |
댓글