본문 바로가기
코딩/아두이노

[아두이노 강좌] 예제로 배우는 아두이노 #4 ReadAnalogVoltage, 아두이노로 전압측정하기

by DIYver 2020. 3. 25.

<목표>

 

 

- analogRead() 함수를 이용하여 아두이노로 회로의 전압을 측정할 수 있다.


<준비물>

 

 

- 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led, 110옴 저항, 건전지

아두이노 우노 / 시리얼 통신 케이블(USB-B타입) /  브레드보드 / LED / 저항110옴 / 건전지

 


<회로도>

 

<1> 저항 110 옴에 걸린 전압 측정하기

<2> 건전지 전압 측정하기


<코드>

 

 

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);
  // print out the value you read:
  Serial.println(voltage);
}

코드는 아두이노 - 파일 - 예제 - 01.Basics - ReadAnalogVoltage 의 예제 파일과 동일 합니다.

예제파일을 쓰셔도 되고, 위의 코드를 복사하여 붙여넣으셔도 됩니다.


<실행 결과>

 

 

 

<1> 저항 110 옴에 걸린 전압 측정하기

 5V의 전압이 LED를 거치고 난 후, 저항에 걸리는 전압을 측정할 수 있다.

LED에 걸리는 전압을 구하고 싶은 경우, 5V에서 저항에 걸린 전압을 빼주면 구할 수 있다.

멀티미터기로 확인해본 결과 아두이노로 읽은것과 값이 매우 비슷한 것을 확인할 수 있다.

 

아두이노로 읽은 값은 2.33 이지만, 멀티미터기로 읽은 값은 2.24 V 였다.

값의 차이가 나는 이유는 아무래도 아두이노 출력핀이 정확하게 5V를 출력하지 않는 경우가 있으며, 멀티미터기가 정확하지 않을 수 있다고 할 수 있다.

 

 

 

 

 

<2> 건전지 전압 측정하기

 사용하고 남은 건전지의 수명을 체크하기위해 아두이노를 사용할 수 있다.

1.5V 건전지의 경우 +극에는 A0 핀을, -극에는 GND를 연결해주면 측정이 가능하다.

멀티미터기로 확인해본 결과 아두이노로 읽은것과 값이 매우 비슷한 것을 확인할 수 있다.

 

여기서도 0.06V 차이가 나오고 발생하고 있다.

이경우에는 사실 확정할 수는 없지만, 명확한 환경에서 진행하지 않은 문제가 있다.

그리고 멀티미터기가 아무래도 저렴한것을 사용하고 있다보니, 멀티미터기에 신뢰가 많이 떨어진다.

 

 

 

 

 

아두이노 코드중 새로운 함수는 없지만, 중요한 부분을 짚고 넘어가보자

저번 강의에서 다루었던 analogRead() 함수는 측정된 전압을 0~1023 의 범위의 숫자로 저장된다고 하였다.

이 때, 이 범위를 다시 0~5 의 값으로 변환해주는 것이 이번 강의의 핵심이다.

이렇게 해서 전압을 측정할 수 있는 것이다.

수식이 전혀 어려운것이 아닌게, 측정된 센서값 범위(0~1023)가 전압범위(0~5V)에 대응되게 하는 수식이 사용되었다.

이 때, 정확히 소수까지 나타내기위해 float 이라는 실수형 변수를 선언한 것이다.

 

이를 바탕으로 코드의 내용을 살펴보면

 

setup에서

시리얼을 사용하는데, 보레이트(baud rate)를 9600으로 한다.

loop 에서

sensorValue 라는 변수에 A0핀에 해당하는 전압값을 analogRead()함수를 이용하여 읽고 저장한다.

voltage 라는 변수에 센서값에 해당하는 전압값을 계산하여 저장한다.

시리얼 모니터에 측정한 전압값을 출력한다.

 

따라서 아두이노를 통해서 5V 이하의 전원을 사용하는 회로 어디에서든 전압을 측정할 수 있다.

5V이상도 측정 가능하지만, 여러개의 저항을 이용하는 회로를 추가적으로 구성해야 한다.

기회가 되면 다뤄보도록 하겠다.


※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!

 

 

 

 

댓글