아두이노 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); } }
댓글
댓글 쓰기