Hardware | Arduino 의 AREF pin 에 대해 알아보자

|

1. 시작


일전에 여러 photoresistor 의 수치적인 차이를 확인해 보았습니다.


* Hardware | Arduino 로 Photoresister 가지고 놀기 - 2

http://chocoball.tistory.com/entry/Hardware-Arduino-Photoresister-2


여기서 사용했던 arduino 의 또다른 기능.

그것은 AREF 였습니다.



위의 글에서는 참고한 사이트를 단순히 따라하다 보니 진정 AREF 의 기능을 모르고 사용했더랬습니다.

오늘은 이 AREF 에 대해 좀더 알아보도록 하죠.




2. What is the AREF?


왜 욕하냐구요?

아닙니다. Arduino 는 영어하는 형들이 만들었으므로, 기본 영어로 모든 문서가 되어 있습니다.


AREF 는 Analog REFerence 의 약자 입니다.


가장 명확한 설명은 당연 arduino 제조사 사이트겠지요.


* analogReference()

https://www.arduino.cc/reference/en/language/functions/analog-io/analogreference/


다만 뭔가 와닿지 않습니다.

다른 사이트를 살펴 보지요.


* Arduino Tutorials – Chapter 22 – the AREF pin

http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/


설명이 자세하게 잘 나와 있습니다.

요는, analogRead() 를 통해서 입력받은 voltage 값이 작거나 차이가 적을 때, digital 화 시켜서 leveling 을 해준다는 것 입니다.


실제로 photoresistor 를 가지고 놀았을 때, 소자간의 차이가 거의 없는 경우는,

단순히 voltage 값만 안다고 해서 그 차이를 느낄 수가 없었습니다.




3. ADC


이런 analog 값을 digital 로 바꿔주는 기능이 ADC 입니다.

그럼 ADC가 뭐야? 라고 할 수 있습니다. (욕 아니예요)


* Analog to Digital Conversion

https://learn.sparkfun.com/tutorials/analog-to-digital-conversion



위의 그림처럼 5V 기준으로 4가지로 레벨링 한다고 합시다 (0, 1, 2, 3),

입력값이 1V라고 한다면 1.25V ~ 0V 사이이므로 0값을 리턴하고, 3V 라고 한다면 2값을 리턴하게 됩니다.

위의 경우는 2의 2승인 2-bit 해상도의 ADC 입니다.


Arduino 는 10-bit ADC 가 내장되어 있어서, 2의 10승인 1024 leveling 이 가능합니다.

실제 output 값은 0~1023 까지가 되지요.



아래는 실제 photoresistor 를 측정했을 시의 표시 값들입니다.

실제 voltage 값이 아니라 0~1023 으로 leveling 한 값이 측정되게 됩니다.






4. Sketch


그럼 어떻게 사용하는 것일까요?

아래 소스처럼 선언해주면 됩니다.


void setup() {
  ...

  analogReference(EXTERNAL);

  ...
}


옵션의 의미는 다음과 같습니다.


* DEFAULT

  - 5V 전압이 기본인 arduino 에서는 5V,

    3.3V 전압을 사용하는 arduino 에서는 3.3V 를 기준 전압으로 사용합니다.


* INTERNAL

  - 내장 기준 전압을 사용한다는 의미이며, ATmega168/ATmega328 를 사용한 arduino 에서는 1.1V,

    ATmega8 를 사용한 보드에서는 2.56V 가 기준 전압이 됩니다.

    Arudino MEGA 는 아래 두가지 (1V1 / 2V56) 기준이 사용됩니다.


* INTERNAL1V1 (only for Arduino MEGA)

  - 내장 1.1V 를 기준 전압으로 사용합니다.


* INTERAL2V56 (only for Arduino MEGA)

  - 내장 2.56V 를 기준 전압으로 사용합니다.


* EXTERNAL

  - AREF 핀에 외부 전원 (0~5V)을 연결하여, 이를 기준 전압으로 사용합니다.

  - 이것을 우리가 사용한 것이죠.





FIN


이제 analogRead() 를 사용할때면 analogReference() 를 사용하여 쉽게 leveling 할 수 있을것 같습니다.


And