[Arduino] 7.가변 저항
in Arduino
전구 밝기 조절
전구의 밝기를 조절하려면 아날로그 신호로 LED를 켜야합니다~!
밝기로는 0~255 사이의 값을 가질 수 있습니다.
int ledPin = 3;
int btn = 4;
int value = 0;
int oldVal = 0;
int state = 0;
unsigned long startTime = 0; //버튼을 누르기 시작한시간
int brightness = 0;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(btn, INPUT);
}
void loop() {
value = digitalRead(btn);
Serial.println(value);
if(value == HIGH && oldVal == LOW){
state = !state;
startTime = millis();
delay(10);
}
if(value == HIGH && (millis()-startTime) > 500){ //누르고 있는 시간이 0.5초 넘으면
brightness++;
delay(10);
if(brightness > 255){ //밝기가 255 넘으면 다시 0으로 돌림
brightness = 0;
}
}
oldVal = value;
if(state == 1){
analogWrite(ledPin ,brightness);
}else{
analogWrite(ledPin, 0);
}
}
가변저항을 이용하여 밝기조절
가변저항은 저항의 값을 변경해 출력 전압을 조절하는 부품입니다!
가변저항을 이용해서 LED의 밝기를 조절해보겠습니다!
int pm = A1; //가변저항
int led = 11;
void setup() {
pinMode(pm, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop() {
int pmVal = analogRead(pm);
int brightness = pmVal/4;
Serial.println(brightness);
analogWrite(led, brightness);
}
가변 저항의 값은 0~1023이고 밝기는 0~255이기 때문에 가변저항의 값을 4로 나누어주었습니다.
여기에 서보모터도 추가해볼까요??
#include <Servo.h>
Servo myServo;
int pm = A1; //가변저항
int led = 11;
int servo = 9;
void setup() {
pinMode(pm, INPUT);
pinMode(led, OUTPUT);
myServo.attach(servo);
}
void loop() {
int pmVal = analogRead(pm);
//int brightness = pmVal/4;
int brightness = map(pmVal, 0, 1023, 0 ,255);
int angle = map(pmVal, 0 , 1023, 0 , 179);
Serial.println(brightness);
analogWrite(led, brightness);
myServo.write(angle);
}
위의 코드를 보면 가변저항의 값 0~1023을 밝기 0~255, 각도 0~179 범위에 맞게 변경하기 위해 내장 라이브러리인 map을 사용한 것을 볼 수 있습니다!
실행해보죠!