안녕하세요. 오늘은 지난 시간에 배운 PWM을 활용해서 LED의 밝기를 조절하는 것을 해볼까 합니다.
1. PWM을 사용할 수 있는 핀
아두이노 보드의 모든 핀이 PWM을 지원하고 있는 것은 아닙니다. 어떤 보드이냐에 따라 PWM을 사용할 수 있는 핀이 달라지게 되는데요, 저는 제가 사용하고 있는 UNO 보드를 기준으로 설명 드리겠습니다.
[그림 1 : UNO 보드 PWM 표시]
아두이노 UNO보드의 경우 그림 1과 같이 디지털 핀 부분을 살펴보면 DIGITAL(PWM~)이라고 되어 있습니다.
여기에 배치되어 있는 핀들은 모두 디지털 핀들인데, 특히 ~(물결) 표시가 되어 있는 핀은 PWM핀이라는 의미입니다.
3, 5, 6, 9, 10, 11번 핀의 숫자 왼쪽을 보면 ~(물결) 표시가 되어 있는 것을 알 수 있습니다. 따라서 이 핀들이 PWM을 사용할 수 있는 핀입니다.
2. analogWrite()함수
위에서 우리가 사용하게 될 PWM 핀들이 모두 디지털 핀임을 알게 되었습니다. 그런데 우리는 digitalWrite()가 아닌 analogWrite()를 사용해야 한다는 점에 유의해 주세요.
digitalWrite()는 HIGH 또는 LOW의 값만 넣어 줄 수 있는 함수이고, analogWrite()는 0~255까지의 값을 넣어 줄 수 있는 함수입니다.(그리고 PWM 핀에서만 사용할 수 있는 함수임에 꼭 유의해주세요!)
analogWrite()를 호출해주면, 해당 핀은 정해진 duty cycle의 square wave1를 계속해서 출력하게 됩니다.
3. 회로
[그림 2 : LED Fade 회로]
그림 2와 같이 회로를 구성합니다.
LED와 220옴 저항을 직렬로 연결하고 LED의 긴쪽(anode)을 디지털 3번 핀에 연결합니다. LED의 짧은 쪽(cathode)는 그라운드(GND) 핀에 연결합니다.
4. 코드
const int LED_PIN = 3; int brightness = 0; int fadeAmount = 5; void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { analogWrite(LED_PIN, brightness); brightness += fadeAmount; if(brightness <= 0 || brightness >= 255) { fadeAmount = -fadeAmount; } delay(30); }
- 1번 줄 : 3번 PWM핀을 사용합니다.
- 6~8번 줄 : 3번 핀을 출력모드로 설정합니다.
- 11번 줄 : 3번 핀에 brightness 값을 아날로그 출력으로 보냅니다.
- 13번 줄 : brightness에 fadeAmount 값을 더해줍니다.
- 15~17번 줄 : brightness값이 경계값(0또는 255)에 도달한 경우에 fadeAmount 값의 부호를 바꿔줘서 반대로 동작하게 해줍니다. 예를들어 점점 밝아지고 있는 상황에서는 fadeAmount값이 5일 것이고, brightness가 255에 도달하게 되면 경계값이므로 fadeAmount는 -5로 변하게 됩니다. 그 후로는 brightness값이 점점 줄어들면서 LED가 점점 어두워지고 brightness값이 0이 되면 다시 fadeAmount가 5가 되면서 점점 밝아지는 로직으로 변하게 됩니다. 이러한 동작을 무한 반복하게 됩니다.
- 19번 줄 : 30ms 동안 대기합니다. (현재 LED의 밝기를 30ms 동안 유지하는 것입니다.)
5. 결과
[그림 3 : LED fade 결과]
-
square wave를 업계에서 한글로 어떻게 번역해서 쓰고 있는지를 잘 모르겠네요. 어쨌든 0또는 1의 두가지 값만을 갖는 각진 형태의 파형을 말합니다.↩
'아두이노' 카테고리의 다른 글
[아두이노] 소리 센서 사용하기 (0) | 2016.11.02 |
---|---|
[아두이노] 시리얼 모니터와 가변저항 (0) | 2016.10.30 |
[아두이노] PWM에 대해 알아 봅시다. (0) | 2016.10.03 |
[아두이노] LED 깜빡이기 (0) | 2016.09.28 |
[아두이노] 3색 LED 모듈 (0) | 2016.09.25 |