2015년 4월 19일 일요일

아두이노의 아날로그( analog)핀 개요

 아두이노 우노의 A0부터 A5 까지 6개의 핀을 이용하여 아날로그 입력을 받을 수 있는데 디지털 핀이 0과 1 두 값 만을 입출력으로 가지는 것과는 달리 아날로그 핀은 그 전압을 0~1023 의 정수값으로 변환하여 읽어들인다.

[그림 1] A0~A5 핀과 AREF핀
A0~A5핀으로 아날로그 입력을 받는다.
AREF핀은 아날로그 기준 전압을 설정한다.

아날로그 핀은 0~5V 사이의 전압 값을 0~1023 사이의 정수값으로 변환시킨다. 이것을 A/D변환(analog-to-digital conversion)이라고 한다. 따라서 분해능은 0.0049V (4.9mV = 5V/1024)이며 이 때 사용되는 함수가 analogRead()함수이다.

ananlogRead(pin)

입력 인수로 0(또는 A0), 1(또는 A1), … 5(또는 A5)를 주고 리턴값은 int형으로서 앞에서 언급한 대로 0~1023 값이다. 변환 시간은 100micro-sec 으로서 이론상으로는 1초에 10000번 정도 변환이 가능하다. 아날로그 핀은 디지털 핀과 달리 기본적으로 입력으로 설정되어 있으므로 별도로 입력을 설정하는 과정 없이 바로 위의 함수를 이용할 수 있다.

 한 가지 알아두어야 할 점은 아두이노 우노의 경우 다음 세 가지 방법은 같은 동작을 수행한다.

[표 1] 아두이노 우노의 analogRead()함수 동작에 사용되는 상수
방법1
방법2
방법3
비고
analogRead(0)
analogRead(A0)
analogRead(14)
A0 == 14
analogRead(1)
analogRead(A1)
analogRead(15)
A1 == 15
analogRead(2)
analogRead(A2)
analogRead(16)
A2 == 16
analogRead(3)
analogRead(A3)
analogRead(17)
A3 == 17
analogRead(4)
analogRead(A4)
analogRead(18)
A4 == 18
analogRead(5)
analogRead(A5)
analogRead(19)
A5 == 19

즉, analogRead(0)과 analogRead(A0) 그리고 analogRead(14) 는 내부적으로 같은 동작을 수행한다. 왜냐면 상수 A0, A1, …, A5 는 내부적으로 다음과 같이 14,15,...,19로 정의되어 있기 때문이다.

              #define A0  14
              #define A1  15
              ….
              #define A5  19

(필자는 처음에 상수 A0 는 내부적으로 0으로 정의되었을 것으로 짐작을 했었는데 그게 아니었다.) 보통은 [표 1]의 <방법1> 혹은 <방법2> 를 사용하고 <방법3>은 사용하지 않지만 내부적으로 A0상수가 14값을 갖는 다는 것은 알아두는 것이 좋은데 그 이유는 아날로그 핀을 디지털 핀으로 사용할 때 이 상수가 사용되기 때문이다. 디지털 핀이 13번 까지 있으므로 그 다음 숫자부터 아날로그 핀에 할당되었다는 것을 알 수 있다.


댓글 3개:

  1. 디지털 핀을 아날로그 핀처럼 사용하는 방법은 없나요?
    압력센서 10개를 아날로그 핀에 연결해서 쓰려고 하는데 핀이 부족해서요..

    답글삭제
    답글
    1. 답변 좀 해주세요 3년전인데 아직까지..

      삭제
    2. 디지털 핀을 아날로그 핀으로는 전환이 불가합니다. 메인MCU의 특성입니다. 이런 경우에는 ADC 여러 채널이 있는 모듈을 적용하고, 이 모듈과는 I2C나 시리얼 통신으로 여러 채널값을 읽어올 수가 있습니다.

      삭제