연구노트/아두이노

아두이노 가변저항 사용하기!(analogRead(), analogWrite(), map())

생존형수동개발자 2020. 12. 9. 00:18

안녕하세요 뀨입니다.

오늘 아두이노에서 가변저항을 연결해 값을 받아오는 것과 값을 맵핑하여 LED의 밝기를 변화시켜보겠습니다.

analogRead(), analogWrite() 함수에 대한 설명은 아두이노 강좌에 하나 있으니 참고하셔도 됩니다^^

2020/12/01 - [연구노트/아두이노 강좌] - 04장 디지털과 아날로그(digitalWrite/digitalRead, analogWrite/analogRead)

가변저항(Potentiometer)

  • 전자회로에서 저항값을 임의로 바꿀 수 있는 저항.
  • 저항값을 바꿈으로써 전류값을 바꿀 수 있음.
  • 보통 3핀 VCC, SIG, GND로 구성됨.
  • 슬라이더를 돌려서 조절

analogRead() 함수로 저항값 읽기

가변저항 연결회로와 저항을 돌렸을 때의 값

 

  • vcc -> 5v, gnd ->gnd, sig -> a0로 각각 아두이노에서 가변저항으로 연결
  • analogRead() 함수를 이용해 A0의 값을 읽는다.
  • 5V이므로 0~1023의 값이 들어옴

소스코드

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

void loop() {
  int a;
  a = analogRead(A0);  
  Serial.print("Read A0: ");  
  Serial.println(a);  
}

 

map() 함수를 이용한 LED 밝기 조절

위에서 analogRead 함수로 가변저항의 값을 받아올 수 있었는데 이제 가변저항을 이용해 LED의 밝기를 조절하려고 합니다. 

먼저 map() 함수

www.arduino.cc/reference/ko/language/functions/math/map/

 

map() - 아두이노 참조

설명 숫자를 한 범위에서 다른 곳으로 변환한다. 즉, fromLow 의 값은 toLow 으로 변환되고, fromHigh 값은 toHigh 으로, 값들 사이의 값은 값들 사이의 값으로, 등등. 값을 범위 안으로 제한하지 않는데,

www.arduino.cc

result = map(value, fromLow, fromHigh, toLow, toHigh);
/**
* value    : 변환할 값
* fromLow  : 현재 범위값의 하한(value가 가질 수 있는 최소값)
* fromHigh : 현재 범위값의 상한(value가 가질 수 있는 최대값)
* toLow    : 목표 범위 값의 하한(변환할 범위의 최소값)
* toHigh   : 목표 범위 값의 상한(변환할 범위의 최대값)
*/

Map함수는 값을 자동으로 매핑해주는 함수입니다.

예를 들어 입력값이 0~20까지 들어오는데 이 범위를 0~100으로 매핑한다고 하면 아래의 표처럼 결과값을 출력해준다.

맵핑테이블

아두이노의 아날로그 출력은 0~255이기 때문에 0~1023 값을 맵핑하여 LED의 밝기를 조절할 것입니다.

가변저항의 값을 읽고 맵핑하여 LED의 밝기 조절

  • A0에서 가변저항의 값을 읽어서 ~D11 핀의 출력을 이용해 LED에 전류를 조절
  • ※딱히 맵핑을 하지 않아도 가변저항의 SIG에서 바로 LED로 선을 연결해도 밝기를 조절할 수 있다.

소스코드

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

void loop() {  
  int a, b;
  a = analogRead(A0);	//가변저항 값
  b = map(a, 0, 1023, 0, 255);	//0~1023을 0~255로 맵핑
  Serial.print("Read/Map [A0]/[b]: ");  
  Serial.print(a);
  Serial.print(" / ");
  Serial.println(b);    
  analogWrite(11, b);	//핀11을 b값으로 출력
}

 

동작 영상