아두이노 우노의 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) | 2015.05.22 |
---|---|
아두이노의 아날로그 핀 기준 전압 설정 (0) | 2015.05.22 |
아두이노를 이용한 소프트웨어 디바운싱(debouncing) part 2/2 (0) | 2015.05.22 |
아두이노를 이용한 소프트웨어 디바운싱(debouncing) part 1/2 (0) | 2015.05.22 |
아두이노 인터럽트를 이용한 터치센서 실험 (0) | 2015.05.22 |