아두이노프로세싱 프로그래밍

초보자를 위한 아두이노 LED Fading 코딩 예제 및 아두이노 NodeMCU와 비교

coding art 2017. 3. 17. 16:11
728x90


 LED 조명이란 단순히 digitalWrite() 명령에 의해 HIGH 또는 LOW 즉 on OFF하는 단순 부품으로 볼 수도 있으나 analogWrite() 명령에 의해 원하는 밝기로 조절도 가능하다는 점을 지적한다. 즉 이러한 특성을 사용하게 되면 LED의  밝기를 부드럽게 조절 할 수 가 있다. 즉 서서히 밝아지다가 정점에 도달하면 거꾸로 서서히 어두워지는 분위기 조명이 가능하다는 것이다.


아두이노 파일 탭의 예제에서 01.Basics의 Fade 예제 코드를 시험해 보자. Fade 예제는 디지털 핀 9번을 사용하도록 코딩되어 있다. 필요하다면 디지털 핀 변경이 가능하며 아두이노 우노 핀 배치도에서 물결(∼)표시가 되어 있는 3,5,6,9,10,11 번을 대상으로 변경이 가능하다. 여기서는 5번 핀을 대상으로 하였다.


아두이노 우노 보드에서의 배선은 빨간색 LED 하나와 전류 제한용 300옴 저항(띠 컬러로는 주황 검정 갈색) 하나가 필요하다. 아울러 아두이노와 호환인 NodeMCU 에서의 결과 비교를 위한 배선은 동일하나 전류 제한 용 저항 값을 10옴으로 선정하였다.


아날로그적으로 밝기를 조절하기 위한 analogWrite(핀 번호, 0∼255)명령에 주목해 보자. 발기를 0∼255 까지에 이르도록 256단계 조절이 가능하다.

0∼255까지의 밝기 변환 숫자는 PWM(Pulse Width Modulation) 이라는 개념을 사용한다.


출력 파형을 스코프로 관찰해 보면 그림에서처럼 일정 한 비율을 가지고 on OFF 가 반복되는데 on과 OFF를 합친 시간을 100% 기준으로 삼을

때 on 되는 시간의 비율 퍼센트를 듀티(Duty)로 칭한다. 즉 analogWrite()의 최대 값 255이라 함은 PWM이므로 듀티 100% 즉 OFF  시간이 거의 영인 경우라 할 것이다.


PWM은 단순히 전압이나 전류가 아니라 오히려 파워에 가깝다. 기계적인 파워라 함은 P = 힘⚫속도 로 계산하지만 전기에서 출력 즉 파워는 P = 전압⚫전류 로 정의 된다. 밝기 조절도 파워로 보는 것이 나을 듯하다.


아두이노 우노의 PWM 디지털 핀 전압은 5V를 기준으로 하며 반면에 아두이노 NodeMCU에서는 3.3V를 기준으로 하고 있어 2 종류의 보드 조건을 아주 동일하게 맞추기는 어렵고 시각적으로 Fading 효과를 비슷하게 가져가는 것으로 하였다.

다음의 프로그램은 블로그 처음에서 언급했듯이 예제 프로그램에서 불러들여 핀 번호만 수정하여 사용하면 될 것이다.

/

* Fade */
int led = 5;           // LED 배선 핀 설정
int brightness = 0;    // LED 밝기 변수
int fadeAmount = 5;    // LED fading  변수 5씩 조절

void setup() {
  pinMode(led, OUTPUT); // 디지털 핀 5번을 출력 모드로 설정
}

void loop() {
  analogWrite(led, brightness);
  brightness = brightness + fadeAmount; 매번 밝기를 5씩 증가

  // reverse the direction of the fading at the ends of the fade:
  if (brightness <= 0 || brightness >= 255) { //밝기가 0 이하거나 255 이상이면
    fadeAmount = -fadeAmount; //Fading을 감소시킨다
  }
   delay(30);// 흐힛해 지는 효과 연출을 위해 0.03초 부여
}//프로그램 끝


아두이노 NodeMCU 보드에도 위의 그림처럼 배선을 한 후 동일한 프로그램을 다른 이름으로 저장하여 컴파일하고 업 로딩하여 실행 시킨다. 툴 탭에서 보드 명 지정과 포트 번호 지정에 유의하도록 한다.

동영상을 통해 Fading 효과를 비교해 보도록 하자.
아울러 아두이노 우노와 NodeMCU 가 서로 다른 PWM에서 사용하는 전압이 서로 다르므로 LED 및 전류제한 저항에 걸리는 전압 역시 큰 차이가 난다.


아두이노 우노의 analogWrite() 명령에 따른 PWM 전압은 LED 2.0V 전류제한 저항 1.3V 수준으로 약 4mA의 전류가 흐른다. 반면에 아두이노 NodeMCU에서는 LED 1.05V 전류제한 저항 0.06V 수준으로 약 6mA의 전류가 흐른다. 물론 NodeMCU에서 전류 값이 다소 크지만 LED 에서의 파워를 계산해 본다면 우노가 약 8mW이고 NodeMCU가 6.3mW가 되어 NodeMCU의 LED 파워가 좀 약한 것을 알 수 있다. 이는 시각적으로도 느낄 수 있다.


다음 블로그에서 아두이노 NodeMCU 배선을 그대로 사용하면서 LED를 원격에서 on OFF할 수 있는 사물인터넷 프로그램과 접목할 예정이다.