반응형

 

 



다섯번째 튜토리얼은 PWM을 이용하여 LED를 좀 다른 방식으로 켜봅니다.

참조한 원본 글은

http://arduino.cc/en/Tutorial/Fade 입니다.


디지털 핀에서 출력은 0V와 5V만 있기 때문에  LED를 연결해서 깜빡이게 만들더라도 켜지고 꺼지기를 반복하기만 합니다.

하지만 여기에서는 크리스마스 트리에 있는 전구처럼 천천히 밝아졌다가 다시 천천히 어두워지는 효과를 만들기 위해서 AnalogWrite함수를 이용합니다. 


AnalogWrite의 인자로 주어지는 값이 255에 가까워지면 파형이 5V를 지속적으로 유지함으로 인해 계속 LED가 켜져있는 효과를 보여주게 됩니다. 반대로 0에 가까워지게 되면 5V를 유지하는 시간이 그만큼 짧아지기 때문에 LED가 꺼져있는 것 처럼 보입니다. 


pulse-width modulation (PWM)를 사용하면 아날로그 신호와 유사한 신호를 디지털 신호로부터 만들어 낼 수 있습니다. 아두이노 보드 상에 ~표시가 있는 핀들이 PWM 핀들입니다.


듀티 사이클은 사각파가  HIGH일 때와   LOW상태 일 때의  시간 퍼센트입니다.

analogWrite() 함수를 이용하면  사각파의 듀티사이클을 설정할 수 있습니다. 인자로 0을 넘겨주면 사각파의 듀티사이클은 0 퍼센트가 된다. 항상 LOW상태이고 255를 넘겨주면 사각파는 듀티사이클 100퍼센트가 된다. 항상 HIGH 상태입니다.. 127을 넘겨주면 사각파의 듀티사이클은 50퍼센트가 됩니다. 일정 시간의 절반은 HIGH상태이고 나머지 절반은 LOW상태가 됩니다. 이 경우  절반의 밝기로 보이게 됩니다. 사람의 눈이 포착하기에는 너무 빠르게 밝기가 변하기 때문에 그렇게 보이는 것입니다.  마치 2.5V의 전압을 준것처럼 보이게 됩니다.


실제로 전압을 0,5V가 아닌 그 사이 값으로 변경해준게 아닌데 LED가 그런 약한 밝기로 보이는 것은 듀티사이클을 내렸기 때문이다. 그로인해 HIGH를 유지하는 시간이 짧아졌기 때문입니다.


이미지 출처 : http://arduino.cc/en/Tutorial/PWM



이미지 출처 : http://www.avrfreaks.net/forum/tut-c-newbies-guide-avr-pwm-incomplete?page=all



회로는 LED의 긴다리를 220옴 저항을 걸쳐 아두이노의 디지털핀 9번에 연결합니다.그리고 LED의 짧은 다리는 그라운드에 연결합니다.



 


analogWrite 함수는 0~255 사이의 값을 인자로 받을 수 있는데 .. 

LED가 연결된 핀에 0에 가까운 값을 줄수록 LED는 어두워지고  

반대로 255에 가까운 값을 주게되면 LED는 밝아집니다.


아래 프로그램은 LED가 점점 밝아졌다가.. 점점 어두워지는 것을 반복하게 됩니다.

  1. void setup() {  
  2.   pinMode( 9, OUTPUT );  
  3. }  
  4.   
  5. void loop() {  
  6.   for ( int i=0; i<255; i++ ){  
  7.     analogWrite( 9, i );  
  8.     delay(5);  
  9.   }  
  10.   
  11.   for ( int i=255; i>=0; i-- ){  
  12.     analogWrite( 9, i );  
  13.     delay(5);  
  14.   }  
  15.   
  16. }  


문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts