[Arduino] 7.가변 저항




전구 밝기 조절



전구의 밝기를 조절하려면 아날로그 신호로 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);
  }
}







가변저항을 이용하여 밝기조절



가변저항은 저항의 값을 변경해 출력 전압을 조절하는 부품입니다!


image




가변저항을 이용해서 LED의 밝기를 조절해보겠습니다!


image




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을 사용한 것을 볼 수 있습니다!


실행해보죠!