프로그래밍 / C++ / 언리얼

Programming/Arduino

[Arduino] 아두이노 가변저항(Potentiometer) 쉽게 응용하기

아트성 2020. 7. 8. 12:49

 

 

   가변저항의 개요

가변저항(Potentiometer)은 전기회

로의 소자로서 회로에 흐르는 전류의 값을 다양하게 변화시킬 수 있는 저항이다. 

우리가 수도꼭지를 돌려서 흐르는 물의양을 조절할 수 있듯이 회로에서는 가변저항을 통해서 도선에 흐르는 전류의 값을 변화시킬수 있다. 이 전자의 흐름은 아두이노를 통해 센서로부터 입력 된 아날로그 신호를 받을 수 있다.

 

본론으로 가변저항은 저항 값을 조절 할 수있는 조절기와 3개의 핀으로 구성 되어 있다.

핀은 VCC, A0, GND로 나누어져 있다. A0은 아날로그 신호를 내보내는 역할을 하는데, 시리얼 모니터를 통해서 아날로그 값을 읽어올 수 있다.

 

그럼, 조건문을 통해서 가변저항의 값에따라서 전구의 색이 바뀌도록 몇가지 실험을 진행 해 보도록 한다.

 

 

   예제실습 - 가변저항의 작동확인

int val=0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  val = analogRead(A0); // 가변저항으로부터 아날로그 신호를 받을 변수를 선언해준다.
  Serial.println(val); 
}

코드는 위와같이 간단하게 정수타입의 변수를 설정하고 아날로그값을 읽어들이면된다.

 

그런뒤 시리얼 모니터로 출력을 해보면 가변저항 스위치를 돌릴때마다 값이 0~1023까지 변하는것을 확인해볼수 있을것이다.

 

위의 코드는 너무 간단하니 LED전구를 추가해서 밝기를 조절해보도록 해보자.

GND(공통) - GNDVCC(가변저항)- 5VOUTPUT(가변저항) - A0LED - D11

회로구성은 위와같다. 가변저항핀의 가운데(OUTPUT)은 아날로그0번포트에 연결시켜주고, LED는 디지털11번핀에다가 연결시켜준다.

int val=0;
void setup() {
  Serial.begin(9600);
  pinMode(11, OUTPUT); 
}

void loop() {
  val = analogRead(A0); // 가변저항으로부터 아날로그 신호를 받을 변수를 선언해준다.
  Serial.println(val); 
  val = map(val, 0, 1023, 0, 255); // val의 최댓값을 1023에서 255로 매핑해준다. 
  analogWrite(11, val); // 보드에서 아날로그로 쓸수있는 11,10,9,6,5,3번핀(물결표시)중에서 하나를 선택하면 된다.
}

컴파일을 진행시키면 위와같이 스위치를 반시계방향으로 돌릴때마다 전구의 밝기가 0~255까지 밝아지는것을 확인할 수 있다.

 

 

   예제실습 - 특정값에 따라 바뀌는 LED

 

이번에는 RGB LED 모듈을 통해 조건문을 활용해서 색상을 바꿔보는 실험을 진행해보자.

 

실험조건은 

 - 350 이하일때 RED LED 
 - 350 보다 크고 700보다 작을때 GREEN LED
 - 700 이상일때 BLUE LED불을 키게한다.

 

가변저항 회로

회로구성은 이렇다.

 

가변저항은 

포트 왼쪽부터 GND(검정), A0(노랑), 5V(빨강)에 각각 연결시켜준다.

가장 처음에 봤던 회로에서 봤을때와는 달리 이번 회로에는 가변저항의 극성이 반대방향임을 확인 할 수있다.

이번 실험을 통해서 극성이 반대방향일때 어떤 현상이 나타나는지 살펴보도록 해보자.

 

LED는 R, G, B ,GND 총 4개의 포트가 있다.

RGB는 각각 2(빨강),3(초록),4(파랑)번 포트에다가 연결하고 GND(검정)은 GND에 연결시켜주면 된다.

 

코드는 아래와 같다.

int val=0;
int ledred = 2;
int ledgreen = 3; 
int ledblue = 4;

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  Serial.begin(9600);
  Serial.println("RGB Start");
}

void loop() {
  val = analogRead(A0); // 가변저항으로부터 아날로그 신호를 받을 변수를 선언해준다.
  Serial.println(val); 
  if (val <= 350) {
    digitalWrite(2, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);;
  }
  else if(val > 350 && val <= 700){
    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
  }
  else{
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);
  }
  delay(20);
}

초기의 val 이라는 변수를 선언해주고 아날로그 신호를 정수값으로 바꿔주고, val이라는 변수를 통해서 조건문을 작성한다.

 

가변저항을 이용하고 난 뒤 시리얼 모니터를 확인해보면 각 수치에따라 LED색이 바뀌는것을 확인할수있다.

첫 실험에서 보여준 LED밝기조절을 통해서 가변저항을 시계반대방향으로 돌렸을때 값이 늘어났다면, 이번에 극성을 반대로 진행(시계방향)으로 했을때 값이 늘어나는것을 볼 수 있었다.

극성을 뒤바꾸면 값이 반대로 바뀌긴 했지만 신호값이 증감하는데는 변함이 없었고 쇼트의 위험또한 없었다. 그 이유는 저항은 극성이 없는 전자소자이기 때문이다.

따라서 가변저항의 음극과 양극의 위치를 헷갈릴 필요없이 회로를 구성하면 된다.

 

이 외에도 가변저항으로 서보모터를 제어할수있고, 스피커 볼륨조절, 라디오 주파수 설정, 하드웨어 제어등 다양하게 이용된다.  우리 실생활에서 쉽게 쓰이는 가변저항, 다음 실험에도 유용하게 써보자.

반응형