가변저항이란?

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



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

- 스피커 볼륨

- 전등 밝기 

등에 많이 사용됩니다.


사용법은

이런식으로 양끝에 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를 키는법입니다.

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




오늘은여기까지입니다.


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

ㅠㅠ


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

1. 버튼다루기!!


버튼이란 눌렸을때 , 안눌렸을때 를 구분하는 기능을 합니다. 오락실가면 보는 버튼들을 생각하시면되죠.


이번에 할 소스는 '버튼' 을 이용하여 'LED'를 껏다 켰다 하기입니다.


설계도를보시면 5V로 출력하는 부분이 스위치에 연결되어있고 

- 하나는 저항을 통해 접지

- 다른하나는 2번핀으로 들어갑니다.

* 여기서 저항을 사용하는이유 => 저항이없으면 모든전력이 GND로 들어가게됩니다, 하지만 저항이있기에 남는전류가 2번핀으로 들어가게되여 입력되게 됩니다.


위 설계도는 버튼을 눌렀을때 , 안눌렀을때 를 구분하는법입니다. 이제 빵판에 버튼을 이용해 LED를 제어해보도록 하겠습니다.




우선 편하게 진행하기위해 5v는 +에 접지는 -에 꼳아줍니다.

그다음 

버튼을 설치합니다.

버튼은 대각선으로 작동합니다. 버튼이 눌렸을때 대각선끼리 이어준다고 생각하시면됩니다.

이렇게되면 위의 설계도처럼 완성이되었내요.


다음은 LED를 설치합니다. 1일차와 같은원리니 어렵지 않다고 생각합니다.


 소스코드 1


const int buttonPin = 2;

const int ledPin =  11;

int buttonState = 0;

// v

void setup() {

    pinMode(ledPin, OUTPUT);      

    pinMode(buttonPin, INPUT);     

}


void loop(){

    buttonState = digitalRead(buttonPin);


   if (buttonState == HIGH) {     

      digitalWrite(ledPin, HIGH);  

  } 

  else {

     digitalWrite(ledPin, LOW); 

  }

}


위의 소스코드를 적고 작동시키면 아래와 같이 실행될 것입니다.






2. 버튼 2개로 LED 제어하기



빨간 LED는 아직사용할것이 아니니 신경쓰지 마셔도됩니다.

위의 설계도를 참고하여  버튼을 하나더 추가한뒤 소스를 변경해줍니다.


 소스코드 2


const int buttonPin = 2;

const int buttonPin2 = 4;

const int ledPin =  11;

int buttonState = 0;

int buttonState2 = 0;


void setup() {

    pinMode(ledPin, OUTPUT);      

    pinMode(buttonPin, INPUT);     

    pinMode(buttonPin2, INPUT);         

}


void loop(){

    buttonState = digitalRead(buttonPin);

    buttonState2 = digitalRead(buttonPin2);


   if (buttonState == HIGH && buttonState2 == HIGH) {     

      digitalWrite(ledPin, HIGH);  

  } 

  else {

     digitalWrite(ledPin, LOW); 

  }

}


위의 소스코드를 적고 작동시키면 아래와 같이 실행될 것입니다.






- 보너스

위의 방법을 활용하여 버튼2개눌렸을때 3개눌렸을때를 제어해봅시다.



솔직히 동영상이나 설명만보면어렵고

제글을 보러오신분들은 직접 해보시는걸 추천합니다. 사진만 따라하셔도 도움이 되리라 생각드려요.

C를 하신다는 가정하에 글을적기에 소스코드는 따로 설명드리지않습니다.


내일 또 오겠습니다.

'Programming > Arduino' 카테고리의 다른 글

74HC595를 이용한 3핀->8핀 만들기  (1) 2013.01.17
4일차 가변저항으로 LED 제어하기  (2) 2013.01.12
3일차 아두이노 피아노 만들기!!!  (2) 2013.01.11
보너스 - LED CUBE  (0) 2013.01.09
1일차 LED에 불켜보기.  (0) 2013.01.07

+ Recent posts