가변저항이란?

'저항값을 바꿀 수 있는 저항기' 를 말합니다.



요렇게 생긴거를 의미합니다.

- 스피커 볼륨

- 전등 밝기 

등에 많이 사용됩니다.


사용법은

이런식으로 양끝에 5V 와 접지를 이어주고 

가운대는 아날로그 입력을 꼳아줍니다. 

가변저항을 조절하여 출력되는 값을 A0으로 보내주어 값을 가져오는 방식입니다.


우선 가변저항 없이 기본소스를 입력하여 어떠한 변화가 오는지 알아봅시다.

// 샘플 소스 1
// LED 밝기 조절하기 ( 가변저항 X )
int led = 9
int brightness = 0;    
int fadeAmount = 5;    
void setup()  { 
  pinMode(led, OUTPUT);
} 

void loop()  { 
  analogWrite(led, brightness);    
  brightness = brightness + fadeAmount;
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     
  delay(30);                            
}


이런식으로 소스를 구현하고 led핀을 9번으로 넣어줍니다. 출력을 아날로그를 출력하며 0~255까지 5씩 밝기를 조절해줍니다.


밝았다가 어두워졌다가 하는 모습을 볼 수 있습니다.




그럼 가변저항을 이용한 소스를 보도록 하겠습니다.

우선 회로를 보시면


아까 위의 그림처럼 가변저항을 설정해 줍니다.

그리고 3 5 6 9 10 11 에 각각 LED를 연결해 저항 접지까지 연결해줍니다.

잘모르시는분은 1일차를 참고해주세요 

// 샘플소스 2 
// 가변저항을 이용하여 LED를 제어 1

int sensorPin = A0;    // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor
int brightness = 0;    
int brightness1 = 50;    
int brightness2 = 100;    
int brightness3 = 150;    
int brightness4 = 200;    
int brightness5 = 250;    
// 각각의 밝기 초기값을 설정
int fadeAmount = 5;    
int fadeAmount1 = 5;  
int fadeAmount2 = 5;  
int fadeAmount3 = 5;  
int fadeAmount4 = 5;  
int fadeAmount5 = 5;  
//가변값을 각각설정

void setup()  { 
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  //아날로그 출력핀을 설정
} 

void loop()  { 
  sensorValue = analogRead(sensorPin);    
  analogWrite(3, brightness); 
  analogWrite(5, brightness1); 
  analogWrite(6, brightness2); 
  analogWrite(9, brightness3); 
  analogWrite(10, brightness4); 
  analogWrite(11, brightness5); 

  brightness = brightness + fadeAmount;
  brightness1 = brightness1 + fadeAmount1;
  brightness2 = brightness2 + fadeAmount2;
  brightness3 = brightness3 + fadeAmount3;
  brightness4 = brightness4 + fadeAmount4;
  brightness5 = brightness5 + fadeAmount5;
  
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     
  if (brightness1 == 0 || brightness1 == 255) {
    fadeAmount1 = -fadeAmount1 ; 
  }
  if (brightness2 == 0 || brightness2 == 255) {
    fadeAmount2 = -fadeAmount2 ; 
  }
  if (brightness3 == 0 || brightness3 == 255) {
    fadeAmount3 = -fadeAmount3 ; 
  }
  if (brightness4 == 0 || brightness4 == 255) {
    fadeAmount4 = -fadeAmount4 ; 
  }
  if (brightness5 == 0 || brightness5 == 255) {
    fadeAmount5 = -fadeAmount5 ; 
  }
  delay(sensorValue);        
  //딜레이시간을 수신받는 가변저항을 이용하여 설정 
}

이런식으로 설정해줍니다.


포트를 A0-6 을 설정하지않고 디지털 포트를 설정한 이유는

A0-6은 아날로그 수신이 가능한포트이며

디지털포트중 ~ 물결표시가 적힌 포트는 아날로그 출력이 가능한 포트입니다.


이런식으로 설정을 해주면






마지막소스는 저항에따라 켜는 갯수를 정하는것입니다. 회로는 똑같고 프로그램만 변경합니다.


int sensorPin = A0;    // select the input pin for the potentiometer
int ledPin = 11;      // select the pin for the LED
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  // declare the ledPin as an OUTPUT:
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop() {
  
  sensorValue = analogRead(sensorPin);    
  
 
  if(sensorValue == 0 ){
      digitalWrite(3, LOW);      
      digitalWrite(5, LOW);      
      digitalWrite(6, LOW);      
      digitalWrite(9, LOW);      
      digitalWrite(10, LOW);      
      digitalWrite(11, LOW);      
  }
  else if(sensorValue > 0  &&  sensorValue <= 40){
      digitalWrite(3 , HIGH);      
      digitalWrite(5 , LOW);      
      digitalWrite(6 , LOW);      
      digitalWrite(9 , LOW);      
      digitalWrite(10 , LOW);      
      digitalWrite(11, LOW);      
  }
  else if(sensorValue > 40  &&  sensorValue <= 80){
      digitalWrite(3, HIGH);      
      digitalWrite(5, HIGH);      
      digitalWrite(6, LOW);      
      digitalWrite(9, LOW);      
      digitalWrite(10, LOW);      
      digitalWrite(11, LOW);      
  }
  else if(sensorValue > 80  &&  sensorValue <= 120){
      digitalWrite(3, HIGH);      
      digitalWrite(5, HIGH);      
      digitalWrite(6, HIGH);      
      digitalWrite(9, LOW);      
      digitalWrite(10, LOW);      
      digitalWrite(11, LOW);      
  }
  else if(sensorValue > 120  &&  sensorValue <= 160){
      digitalWrite(3, HIGH);      
      digitalWrite(5, HIGH);      
      digitalWrite(6, HIGH);      
      digitalWrite(9, HIGH);      
      digitalWrite(10, LOW);      
      digitalWrite(11, LOW);      
  }
  else if(sensorValue > 160  &&  sensorValue <= 200){
      digitalWrite(3, HIGH);      
      digitalWrite(5, HIGH);      
      digitalWrite(6, HIGH);      
      digitalWrite(9, HIGH);      
      digitalWrite(10, HIGH);      
      digitalWrite(11, LOW);      
  }
  else{
      digitalWrite(3, HIGH);      
      digitalWrite(5, HIGH);      
      digitalWrite(6, HIGH);      
      digitalWrite(9, HIGH);      
      digitalWrite(10, HIGH);      
      digitalWrite(11, HIGH);      
  }
  
  delay(30);          
  
  //digitalWrite(ledPin, LOW);   
  


이런식으로 받는 값( 0 - 255 ) 를 감지해서 LED를 키는법입니다.

아날로그출력이아니라 디지털출력 그대로 사용하고 받는 값에 따라 갯수만 변경한 것입니다.




오늘은여기까지입니다.


확실히 내머리속에있는대 이걸꺼내는건 어렵내요.

ㅠㅠ


모르시는거 있으시면 꼭 리플달아주세요!!

+ Recent posts