Arduino Uno 보드의 A0~A5까지 6개의 핀을 이용하여 아날로그 입력을 받을 수 있습니다. 디지털 핀은 '0'과 '1'의 논리적 값만을 받을 수 있는 것과는 달리, 아날로그 입력은 전압을 그대로 읽고 이를 1024개의 레벨로 구분하고 0~1023 중의 정수값으로 읽어들인다는 것입니다.
이것이 가능한 이유는 ATmega328 칩 내부에는 10bit A/D 컨버터(analog-to-digital converter, ADC)를 내장하고 있기 때문이며, 2^10=1024개의 레벨로 구분할 수 있다는 것은 이 컨버터의 분해능(resolution)이 전원전압 5V를 기준으로 0.0049V(4.9mV = 5V/1024)라는 말이며, 아날로그 전압을 읽어들이는 명령은 analogRead() 함수입니다.
ananlogRead(pin)
인수로는 아날로그 입력 핀의 번호를 지정하고 반환값은 int 형으로 0~1023 값 중의 하나가 됩니다. 이때 입력 핀은 0~5 혹은 A0~A5, 14~19로 지정할 수 있으며, 여기서 핀 번호 0과 A0, 14는 같은 핀을 의미합니다. A/D 변환 시간은 100us인데, 이는 사실 느린 편으로 간단한 비교만을 원할 때는 칩 내부에 포함된 빠른 비교기(comparator)를 대신 사용하게 됩니다. 아날로그 핀은 디지털 핀과 달리 기본적으로 입력으로 설정되어 있으므로 별도로 입력을 설정하는 과정이 필요 없습니다.
아날로그 핀에 연결된 A/D Converter(혹은 ADC)의 기준 전압을 바꿀 수 있는데, 이때 analogReference() 함수를 사용합니다.
ananlogReference(type)
A/D Converter의 기준 전압은 아날로그 입력값이 1023으로 읽히는 최대 전압 값을 의미합니다. 위 함수로 지정하지 않으면 디폴트(DEFAULT)로 Arduino의 동작 전압이며, 외부 전압(EXTERNAL)을 사용할 경우에는 아날로그 핀의 전압을 읽기 전에 반드시 미리 설정해야 합니다. 내부 전압(INTERNAL) 1.1V를 사용할 경우에 가장 안정된 기준전압을 제공함을 기억해야 합니다.
DEFAULT : Arduino의 동작 전압(Uno는 5V 이고 보드에 따라서 3.3V일 수도 있습니다.)
INTERNAL : 내장 전압 (Uno는 1.1V)
EXTERNAL : AREF핀에 인가된 전압 (0~ 5V 사이어야 함니다)
INTERNAL로 설정되어 기준 전압이 1.1V이면 디폴트보다 더 높은 분해능(0.0011V)을 얻을 수 있습니다. 만일 3.3V를 기준 전압으로 사용하고 싶다면 Arduino Uno 보드상의 3.3V핀과 AREF 핀을 연결 후 EXTERNAL 옵션을 설정하면 됩니다. 이 경우에 분해능은 0.0032V로 분해능이 개선될 수 있습니다. 보드의 3.3V 핀은 7~12V의 외부 전원을 연결한 경우 뿐만 아니라 USB만 연결한 경우에도 레귤레이터(regulator)를 사용하여 정확히 3.3V 전압을 출력합니다. 만일 Uno 보드의 동작 전압인 5V보다 높은 전압을 읽을 경우에는 외부에서 [정밀] 저항으로 voltage divider를 결선해야 합니다.
'Embedded Lecture > Arduino' 카테고리의 다른 글
아날로그 출력(PWM) (0) | 2017.03.20 |
---|---|
아날로그 입력 및 온도계 예제 (0) | 2017.03.19 |
인터럽트와 volatile 지시자 (1) | 2017.03.18 |
아두이노의 TWI(I2C) 통신 (0) | 2017.03.18 |
아두이노의 시리얼 통신 (0) | 2017.03.18 |