본문으로 바로가기

  아두이노(Arduino) 기초 아날로그 입출력 전압읽기 2편  


애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지 읽어주세요.




안녕하세요. 애드라이프입니다. 

아날로그 입출력 1편에서 간단한 아날로그 입출력 기능중 PWM기능에 대한 포스팅을 했었습니다.

이번엔 간이 테스터기를 만들어 볼 예정인데요.

그전에 ADC(Analog Digital Converter)에 대한 사전 지식이 필요합니다.


이번에도 어렵지 않게 설명해 드릴테니 걱정말고 시작하도록 하죠.


ADC(Analog Digital Converter)란?

연속적인 값인 아날로그 값(전압,온도,음성 등)을 디지털 값으로 변환하는 장치를 일컷습니다.



아두이노에서는 이 기능을 analogRead()라는 함수를 통해 지원 받으며

0v~5v 내의 전압을 0~1023사이의 숫자로 표현해 줍니다.

이렇게 받아드린 데이터를 계산하여 측정된 전압이 얼마인지 출력해주면 되는 것입니다.

이번에 사용하는 포트는 아날로그 포트입니다. 지금까지는 디지털 포트를 사용했는데 아날로그 포트는 어디있을까요?


아두이노 우노

적색상자로 표시된 부분이 아날로그 INPUT포트입니다. ▲

표시된 부분을 활용해서 전압을 읽어볼겁니다!


바로 회로를 한번 살펴보도록 하죠.

아두이노 전압읽기 회로

아두이노의 5v를 아날로그 포트 A0에 연결하고 3.3v를 A1에 연결해주면 끝!

이렇게 해서 A0포트로는 5V전압을 읽고 0~1023로 받고 다시 비례식으로 전압으로 바꿔 출력해주면 된다.

3.3v도 A1포트로 받아드려 같은 방식으로 프로그램을 작성하면 됩니다.

앞서 언급한 analogRead()함수를 이용하여 어떻게 전압을 읽어오는지 확인해봅시다.


int _5vPin = A0;          //아날로그 포트 A0는 5V입력
int _3_3vPin = A1;        //아날로그 포트 A1은 3.3V입력
void setup() {
  Serial.begin(9600);        //시리얼 통신속도 9600
}
 
void loop() {
  int _5vValue = 0;
  int _3_3vValue = 0;
  float _5voltage=0.0;
  float _3_3voltage=0.0;
 
  _5vValue= analogRead(_5vPin);  //5V전압을 디지털 신호로 변환 /아날로그 A0핀에 들어오는 전압값을 0~1023의 값으로 표현
  _3_3vValue= analogRead(_3_3vPin);//3.3V전압을 디지털 신호로 변환 /아날로그 A1핀에 들어오는 전압값을 0~1023의 값으로 표현
 
  _5voltage=((float)_5vValue/1023.0)*5.0;       //받아온 값을 5v(1023)기준 전압으로 계산
  _3_3voltage=((float)_3_3vValue/1023.0)*5.0;
 
  
  Serial.print("5V읽기 :");
  Serial.print(_5vValue);
  Serial.print(",");
  Serial.print(_5voltage);
  Serial.print("  3.3V읽기 :");
  Serial.print(_3_3vValue);
  Serial.print(",");
  Serial.println(_3_3voltage);
 
  delay(50);
  
}


위 프로그램에서 조금 추가 설명을 덧붙이자면 0~1023과 0v~5v의 상관관계에 대해서입니다.

그렇다면 5v의 절반인 2.5v는 몇으로 표현될까요?


1024/2 = 512 = 2.5v


선형적인 비례관계입니다.



이론적인 설명은 여기까지입니다. 이제 프로그램을 보드에 업로드하고 결과를 확인해 봅시다.

이전 포스팅들을 참고하시면 쉽게 업로드와 테스트 하실 수있습니다.

[아두이노/개발환경 구축] - 아두이노(Arduino)IDE 개발환경 구축 2편(스케치 세팅하기)<-업로드방법 참고

[아두이노/아두이노 기초] - 아두이노(Arduino) 기초 시리얼(RS232) 통신 1편<-시리얼 모니터 사용시 참고

아두이노 시리얼 모니터에 표시된 전압


A0에서 읽어 온 5V는 1023의 값을 갖으며 전압으로 다시 환산하면 5V가 출력되는 것을 확인 할 수 있습니다.

하지만 3.3v의 경우에는 678~684까지 약간 흔들리는 값을 갖으며 당연히 전압으로 다시 환산한 값도 3.31v에서 3.34v로 약간 흔들립니다. 이유가 무엇일까요?


다시 말씀드리지만 전압은 아날로그 값입니다. 아날로그 값은 연속적인 값을 의미합니다. 약간식 차이가 나는 이유는 아날로그의 연속적인 특성때문이기도 합니다. 그렇다면 5v는 일정할까요?

정말 딱 5v가 출력되거나 아니면 5v보다 조금 클 경우입니다. 5v는 1023(Max)값을 갖는데 이보다 큰값은 표현이 안되기때문입니다. 물론 측정되는 선로나 소자의 손실로 인한 편차도 있을 수 있습니다.


실제로 5v와 3.3v 대신에 다른 전압을 사용하여 읽어보는 프로그램을 작성해보세요.

실제 테스터기많큼은 아니더라도 일정범위의 전압을 읽는데는 전혀 문제가 없을 것입니다.



지금까지 아두이노(Arduino) 기초 아날로그 입출력(전압 읽기) 2편 포스팅 이였습니다.

계속해서 도움되는 포스팅으로 찾아뵙겠습니다.

by 애드라이프