아두이노 LED 밝기 제어하기, 디지털 신호 아날로그 신호로 , PWM 개념
이번엔 아두이노 LED 밝기를 제어해보겠습니다.
전류를 넣어 주고 다시 순환하여 빠져나갈 수 있게 GND(그라운드) 을 연결 해주고 220옴 저항을 달아주었습니다.
왜 220옴 저항을 달아야 하는지는 지난 포스팅을 참고 부탁드립니다.
아두이노 for 문을 이용한 LED 제어하기 , 풀다운 스위치로 LED 제어하기(교재 예시 그림 오류 있음,
예제 출처: 한번에 이해되는 아두이노 LED 3개를 하나씩 시간차를 두고 깜박이게 하기 ( 켜짐과 꺼짐, 딜레이에 반복문을 주어 코드 응용하였습니다. ) 아두이노 LED 깜박이기 아두이노
bong9c.tistory.com
int led1= 5;
int led2 = 11;
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop()
{
analogWrite(led1, 50);
analogWrite(led2, 255);
}
여기서 analogWrite() 는 전류를 흘려주는 출발점입니다.
출력모드 pinMode(led1, OUTPUT)을 설정해주고 아두이노의 5번 핀과 11번에 전류를 넣어줍니다. analogWrite() 함수로 전류의 세기를 제어할 수 있습니다.
이전 포스팅에서는 digitalWrite() 로 디지털 신호로 LED 를 제어했습니다.
켜고 끄기만 조정을 할 수 있고 빛의 세기는 조절 할 수 없었습니다.
제가 지금 하고 있는건 analogWrite()는 PWM 를 이용한 것입니다.
제가 핀을 5번과 11번에 연결 하였고 해당 핀은 analogWrite() 로 사용 가능합니다.
PWM 이란 Pulse Width Modulation 펄스 폭 변조라는 뜻으로 디지털 신호를 가지고 아날로그 신호처럼 흉내내는 기술입니다.
( PWM이 가능한 핀 (Uno 기준):
3, 5, 6, 9, 10, 11번)
아날로그 값은 0부터 255까지 지정할 수 있습니다.
저는 led1 는 아날로그 값 50까지, led2 는 255까지 지정해두어 밝기 세기의 변화를 주었습니다.
아두이노는 5V 와 0V 처럼 딱 두 가지 값만 줄 수 있습니다. 밝기를 조절하려면 5V와 0V 사이의 값도 필요합니다.
그렇기 때문에 아두이노는 신호를 매우 빨리 켜고 끄는 것으로 밝기를 조절하는 겁니다.
아두이노는 PWM 을 출력 할 때 보통 490Hz로 신호를 켜고 끄는데 1초에 약 490번 켜고 끄고를 반복한다는 뜻입니다.
만약 analogWrite(led1, 50)이라면 50 ÷ 255 ≈ 0.196 해서 19.6% 의 밝기면 켜져 있으라 명령한 것이 됩니다.
490번 중 19.6% → 약 96번 켜져 있음
나머지 394번은 꺼져 있음. 그렇기 때문에 사람 눈에는 어두워 보이는 것입니다.
아래 코드는 서서히 밝아졌다 서서히 꺼지는 반복문을 이용한 코드입니다.
int led1 = 5;
int led2 = 11;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop() {
for (int i = 0; i <= 255; i++) {
analogWrite(led1, i);
analogWrite(led2, i);
delay(10);
}
for (int i = 255; i >= 0; i--) {
analogWrite(led1, i);
analogWrite(led2, i);
delay(10);
}
}
오늘은 아두이노의 PWM 의 개념과 디지털 신호를 아날로그 신호로 보이게끔 하는 방법을 공부해보았습니다.
디지털 신호를 이용하는 대표적인전 ON/OFF 전원 스위치 , 아날로그 신호를 이용하는 대표적인건 밝기가 조절되는 무드등 같은 것들이겠지요.
요즘 공부하는 진도가 많이 느린 것 같습니다. 하지만 조급해 하지 않도록 매일 다짐합니다. 저는 조급하면 빨리 질리고 포기하게 되는 타입이니까요. 뭐든 포기하고 멈추지만 않으면 된다는 것입니다.
감사합니다. ❤️