아두이노 pwm led 제어 - adu-ino pwm led jeeo

이번에도 일단 먼저 한번 만들어볼까요?

아두이노 pwm led 제어 - adu-ino pwm led jeeo

위 그림과 같이 회로를 구성해주시면 됩니다!

긴 다리가 9번핀으로 가야하고, 저항은 200-300 옴의 저항을 사용해주는 것이 좋습니다. 

자신의 저항이 몇 옴짜리 인지 모르겠다면, 

https://www.digikey.kr/ko/resources/conversion-calculators/conversion-calculator-resistor-color-code-4-band 사이트를 이용하시면 확인 하실 수 있습니다.

코드는 아래의 코드를 사용해주세요!

const int LED = 9;

int i = 0;

void setup()

{

  pinMode(LED,OUTPUT);

}

void loop()

{

  for(i=0; i<255; i++)

  {

    analogWrite(LED,i);

    delay(10);

  }

  for(i=255; i>0; i--)

  {

    analogWrite(LED,i);

    delay(10);

  }

 코드를 보드에 업로드 해주면 LED의 밝기가 밝아졌다 어두워졌다 하는 걸 확인하실수 있으실 겁니다.

 이번에도 역시 처음 보는 코드가 나와서 쪼금은 당황스러울지도 모르지만

이번에도 역시 코드를 한 줄씩 분석해볼까요?

const int LED = 9;

int i = 0;

void setup()

{

  pinMode(LED,OUTPUT);

}

void loop()

{

LED라는 창고에 9라는 값을 저장해준 뒤 창고의 문을 잠궈줍니다. i라는 창고에는 0이라는 값을 저장해줄거고요.

LED핀을 OUTPUT(출력)으로 설정해준 뒤 반복문을 시작해줍니다.

for(i=0; i<255; i++)

  {

 for문은 반복문입니다. for(A; B; C)라는 코드가 있다고 해봅시다. 여기서 A는 초기식, B는 조건식, C는 변화식이라고 합니다. 

초기식 : 반복문을 시작할 때의 초기 값을 정해주는 식입니다. 위 코드에서는 초기 값을 i를 0으로 설정한 것입니다. 

조건식 : 조건식이 참인 동안은 계속해서 for문 안의 코드를 반복해주고, 조건식이 거짓이 되면 for 문 안의 코드를 종료합니다. 위 코드에서는 i에 저장된 값이 255보다 작을 동안 계속 for문 안의 코드를 반복해준 뒤, 255보다 작지 않아지면 (같거나 커지면) 코드를 종료하도록 설정되어 있습니다. 

변화식 : 반복식이 한 번 실행될때마다, 수행되는 식입니다. 여기서는 i++를 실행한다고 되어 있는데, 'i++'는'i = i+1'을 간단하게 쓸 수 있도록 써놓은 식입니다. 

 즉 이 식이 처음 실행되면

1. i = 0 이므로 i<255가 참입니다. 따라서 반복문 안의 코드를 실행해 준 뒤, i 의 값을 1 늘립니다.

2. i = 1 이므로 i<255는 여전히 참입니다. 따라서 반복문 안의 코드를 실행해 준 뒤, i 의 값을 1 늘립니다.

3. i = 2 이므로 i<255는 이번에도 역시 참입니다. 따라서 반복문 안의 코드를 실행해 준 뒤, i의 값을 1 늘립니다.

...... 이렇게 255번을 반복해줍니다. ......

255. i = 254 이므로 i<255는 255번째로 참입니다. 따라서 반복문 안의 코드를 실행해 준 뒤 i의 값을 1 늘립니다.

256. i = 255 이므로 드디어 i<255는 거짓입니다. 따라서 반복문을 탈출합니다!

analogWrite(LED,i);

delay(10);

}

 analogWirte는 PWM이라는 기술을 이용해서, 아날로그 값을 내보내주는 코드입니다. PWM이란 펄스 폭 변조(Pulse Width Modulation)의 약자입니다. LED가 켜지고 꺼지고를 눈에서 깜빡거린다고 인식할 수 없을 정도로 빠르게 보내서 밝기를 조절하는 것입니다. analogWrite(A,B)를 써주면 A핀에 B라는 값만큼의 아날로그 값을 보내준다는 뜻으로, B의 자리에는 최대 255까지 넣어줄 수 있습니다.

 위 그림을 우리가 9번 핀에 LED를 켜고 끄기 위한 신호라고 생각해봅시다. 가장 위의 0%에서는 LED를 한번도 켜지 않고 계속 끄고 있습니다. 따라서, LED는 꺼져있죠. 두 번째 25%에서는 LED를 1번 켜고, 3번 끄는 것을 반복합니다. 우리의 눈에서는 이걸 LED가 25퍼센트의 밝기로 켜져 있는 것으로 인식하죠. 세 번째 50%에서는 LED를 1번 켜고, 1번 끄는 것을 반복합니다. 여기서 우리는 이걸 LED가 절반의 밝기로 켜져 있는 것으로 인식합니다. 마지막으로 100%에서는 LED가 계속 켜져 있죠. 이 때는 LED가 최대의 밝기로 켜지게 됩니다. 이 기술은 LED의 밝기 뿐 아니라, 모터의 속도 등 다양한 장치에 적용할 수 있습니다. 

 위 코드에서는 analogWrite(LED,i);를 사용하는데, 반복문이 처음 실행될때는 i의 값이 0이므로, LED가 꺼져있게 됩니다. 10밀리초(0.01초)간 대기한 후, 반복문이 두 번째 실행될 때는 i의 값이 1이므로, LED는 255분의 1의 밝기로 켜지게 됩니다. 이걸 계속 반복해서 반복문이 255번째 반복될때는 i의 값은 254가 되고, LED는 255분의 254의 밝기로 켜지게 됩니다. 역시 10밀리초간 대기한 후 반복문을 종료합니다. 

 for(i=255; i>0; i--)

  {

    analogWrite(LED,i);

    delay(10);

  }

 위의 for문을 반대로 써준 것입니다. 'i--'는 'i = i-1'을 줄여쓴 것입니다. i가 255부터 1씩 줄어들면서 led의 밝기가 1이 될 때까지 LED의 밝기를 조금씩 줄여줍니다. 

}

 반복문을 종료합니다.

PWM은 후에 색을 조절 할 수 있는 LED들을 컨트롤 할 때 반드시 사용하게 되는 기술입니다. 이번에는 코드를 직접 작성하시면서 복습하시는 것을 추천드립니다!

다음 강좌에서는 버튼을 눌러서 LED의 밝기를 조절할 수 있는 회로를 만들어보려고 합니다. 다들 새해 복 많이 받으시구, 다음 강좌에서 뵙겠습니다!

이전 강좌 보기

2018/12/24 - [강좌/아두이노 강좌] - 아두이노 기초강좌 01. 아두이노란?

2018/12/24 - [강좌/아두이노 강좌] - 아두이노 기초강좌 02. 아두이노 설치하기

2018/12/24 - [강좌/아두이노 강좌] - 아두이노 기초강좌 03. 전기 이해하기, 전압, 전류, 저항

2018/12/24 - [강좌/아두이노 강좌] - 아두이노 기초강좌 04. 무작정 LED 켜보기

2018/12/24 - [강좌/아두이노 강좌] - 아두이노 기초강좌 05. 무작정 LED 켜보기 코드 분석

2018/12/29 - [강좌/아두이노 강좌] - 아두이노 기초강좌 06. 브레드보드, 빵판에 대하여

2018/12/29 - [강좌/아두이노 강좌] - 아두이노 기초강좌 07. 무작정 푸시 버튼으로 LED 제어하기

2018/12/29 - [강좌/아두이노 강좌] - 아두이노 기초강좌 08. 무작정 푸시 버튼으로 LED 제어하기 분석

2018/12/29 - [강좌/아두이노 강좌] - 아두이노 기초강좌 09. 푸쉬버튼과 저항을 써야하는 이유

2018/12/31 - [강좌/아두이노 강좌] - 아두이노 기초강좌 10. 무작정 on/off LED 만들기와 분석