아두이노에서 PWM 제어와 NPN 트랜지스터를 이용한 LED 밝기 및 모터 속도 조절.

 3V 를 소비하는 LED 가 있다고 가정해 보자. 이 LED 의 밝기를 제어하기 위하여 전압을 변경할 수 있지만, 좀 더 간단한 방법으로 아두이노의 PWM 제어 기능을 이용하여 밝기를 조절할 수 있다. 만약 LED 에 전류를 1초간 공급했다가 다시 1초동안 끊고 또 다시 1초간 공급하는 과정을 반복한다면 우리 눈에는 LED 가 깜빡거리는 것으로 보인다. 하지만,  0.1 초 간격으로 신호를 끊고 다시 연결하고를 반복한다면 우리눈에는 LED 밝기가 원래 밝기에 비해 좀 어둡게 출력되는 것으로 보일 것이다. 이런 신호 폭을 조절하여 LED 의 밝기를 제어할 수 있다.

 PWM 제어에 대한 자세한 설명 :

  http://www.hanbit.co.kr/network/view.html?bi_id=1087

  아두이노 우노에서는 3,5,6,9,10,11 포트에서 이 PWM 제어를 사용할 수 있으며,  포트 번호 옆에 물결 (~) 모양이 인쇄되어 있어  PWM 사용 가능한 포트임을 알려주고 있다. 이 포트를 이용하여 PWM 제어를 사용하기 위해서는 analogWrite(핀번호, 0~255 값) 함수를  사용해야 한다.

  우선 PWM 으로 높은 전압이나 전류 제어를 위하여 NPN 트랜지스터가 필요하다.  

  (이 소자를 이용한다면  아두이노의 신호로 5v를 초과하는 높은 전압을 제어할 수 있다. )

  사실 LED 같은 경우에는 NPN 트랜지스터가 없어도 충분히 쓸 수 있지만 모터는 반드시 사용해야 한다.  아두이노의 디지털 신호의 전류는  고작 40mA 밖에 내지 못 하기 때문이다.


  디지털 회로에서 NPN 트랜지스터의 역할은 아래 그림과 같이 전류가 흐를 수 있도록 스위칭을 해준다.

  (반대로 PNP 트랜지스터는 전류가 흐르고 있을 때, Base 에 신호가 들어가면 스위치가 떨어진다.)

   

     

만약 위 그림에서 아두이노의 디지털 포트에 연결된 Base 에 전류가 흐르게 되면 스위치는 닫히게 된다. 

 (Collector 와 Base 와 Emitter 의 위치는 각 소자의 데이터 시트를 참고.) 여기서 주의할 점은 아두이노의 디지털 포트와 Base 사이에 저항을 달아야 한다는 것이다. 


  아래 회로에서는 2N2222 를 사용하였다, 또 전압이나 전류의 특성에 따라서 TIP120 과 같은 다른 소자를 사용할 수 있다.



   위 그림에 있는 아두이노는 USB연결등 몇 가지를 제외하면 아두이노 uno 와 스펙이 거의 같은 아두이노 나노의 호환 보드이다.


아두이노  VCC 5v ——–—-————–—- LED +

아두이노   GND ——————-—-—-—– 2N2222  pin 3. (emitter) 

아두이노  6 번 포트 —— 2.2KOhm ——— 2N2222  pin1   (base) 

LED- ———————- 680Ohm———– 2N2222 pin 2 (collector)


     680Ohm 은 LED 특성에 맞춰서 사용한 것이다.

 


Code:

#define CTR_PIN 6 void setup(){ pinMode(CTR_PIN, OUTPUT); } void loop(){ for(int i = 0; i<180; i++){

// 점차 밝아졌다 낮아졌다를 반복하도록 한다. int val = (int)map((int)((sin(DEG_TO_RAD * i) * 1000.0f)), 0, 1000,0,255);

analogWrite(CTR_PIN, val); delay(5); } }

 이 코드에서는 PWM 의 제어 범위인 0~255 를 사용하지 않고, 0~128을 사용하였다. 128이상부터 255까지는 값이 차이가 무의미할 정도로 밝기가 비슷하므로 최대 값으로 128으로 주게 되었다.

결과: