아두이노 PWM

* PWM(Pulse Width Modulation) 

1. 아날로그 신호를 디지털 형태로 나타낸 것
2. 디지털 신호네 대해 주파수를 설정하면 pulse width가 아날로그 신호의 진폭에 따라 변함

Duty ratio(듀티비) : 한 주기에 대해 펄스가 On상태인 시간
Duty Cycle(듀티 사이클) : 한 주기에서 신호가 켜져 있는 비율을 백분율로 나타낸 수치

* 아두이노에서 모든 핀에서 사용할 수는 없고 ~표시가 있는 핀에서 사용가능합니다.(3,5,6,9,10,11)

간단하게 PWM을 이용하여 LED를 on/off를 동작해보겠습니다.


int ledpin = 3;

void setup(){
}

void loop(){
  analogWrite(ledpin,255);
  delay(1000);
  analogWrite(ledpin,0);
  delay(1000);
}

가변저항을 이용하면 가변저항에 따라 밝기를 조절에 따라 동작하도록 해보겠습니다.

첫번째 방법은 map() 함수를 이용한 방법입니다.
아래를 예로 들면, value라는 변수값이 0~1023의 값을 0~255의 범위로 매핑하는 함수이다.
 

int ledpin = 3;

void setup(){
}

void loop(){
  int value = analogRead(A0);
  int bright = map(value,0,1023,0,3);
  analogWrite(ledpin,bright);
  delay(100);
}

밝기가 어두우면 bright값이 analogWrite에 사용하기 전에 bright *= 64처럼 수를 곱해주면 됩니다.

간단하게 하시려면 아래처럼 value의 값을 나눈 값을 사용하시면 됩니다.

int ledpin = 3;

void setup(){
}

void loop(){
  int value = analogRead(A0);
  int bright = value/4;
  analogWrite(ledpin,bright);
  delay(100);
}

여기에 for문을 이용하여 자연스럽게 밝아지면서 꺼지는 동작을 할 수 있습니다.
회로 구성은 가변저항을 빼고 LED만 연결된 상태에서 하시면 됩니다.

int ledpin = 3;

void setup(){
}

void loop(){
  int bright = 0;
  
  for(bright = 0; bright < 255; bright++){
    analogWrite(ledpin,bright);
    delay(5);
  }
  
  for(bright = 255; bright >= 0; bright--){
    analogWrite(ledpin,bright);
    delay(5);
  }
}







댓글

이 블로그의 인기 게시물

파이썬을 이용한 image to pdf 변환 프로그램

젯슨 나노 - GPIO