[WinForms / 아두이노] (아날로그 입력) 온도 센서로 온도계 제작

00·2025년 2월 15일

프로젝트

목록 보기
13/14

온도센서

  • 온도센서는 온도를 감지해 전기신호로 바꿔주는 전자 부품이다.
  • TMP36이라는 온도센서는 단자가 세 개이다. 각각 전원(Vs), 출력(Vout, 온도 값에 해당하는 전압 출력), 접지(GND)다.

아두이노 회로 배선

스케치 코드

// c# code
//
void setup()
{
  Serial.begin(9600); // 온도값을 출력하기 위해 시리얼 통신을 초기화한다
  				      // 1초에 9600비트로 데이터 전송
 
}


void loop()
{
  
  int analogInput = analogRead(A0); // 온도 센서값 측정
  // 온도센서의 출력(가운데 단자)을 아두이노의 아날로그 A0핀에 연결해 측정한 값을 변수 analogInput에 저장
  
  
  
  float voltage = analogInput*5.0/1023.0; // 전압값 변환
  float temperature = voltage*100-50; // 온도값 변환
  
  
  
  Serial.print("temperature : "); 
  Serial.println(temperature); // 온도 센서값 출력
  
}

위 그래프에서 b가 TMP26인데, b는 y=ax+b와 같은 일차방정식 모양으로 나타나므로, 온도와 전압 사이의 관계를 일차방정식으로 정리할 수 있다. 일차방정식이므로 전압을 알면 온도를 구할 수 있고 온도를 알면 전압을 구할 수 있다.

(출처: https://wikidocs.net/30790)

	float voltage = analogInput*5.0/1023.0; // 전압값 변환
  • 디지털 값으로 변환된 값을 다시 아날로그 값인 전압으로 변환
  • 아두이노 보드의 작동 전압이 5V이므로 아두이노의 구성 요소들이 입력받을 수 있는 전압의 기본 범위는 0~5V이다. 0~5V 범위 안의 전압이 아날로그 핀 A0에 들어가 10비트 ADC(아날로그 디지털 컨버터)를 거쳐 0~1,023 범위 안의 숫자로 변환된다. 따라서 ADC로 변환된 디지털 값을 다시 아날로그 값으로 변환하면 온도 센서가 출력한 전압의 값을 구할 수 있게 된다.
  • 즉, 위 스케치 코드에서 5를 곱한 것은 아두이노 동작전압이 5V이기 때문(동작전압이 3.3V나 다른 전압일 경우 이 값을 수정해야함)이고, 1023으로 나누는 이유는 10비트의 ADC를 사용하기 때문이다.
  • 정수 5와 1,023이 아닌 실수 5.0과 1,023.0으로 나눈 이유는 연산 과정에서 자동으로 형 변환이 일어날 때 데이터 손실을 방지하기 위함이다.
	float temperature = voltage*100-50; // 온도값 변환
  • 시리얼 모니터에 온도 값을 출력해야 하기 때문에 전압에 관한 식을 온도에 관한 식으로 바꾸어 스케치 코드로 작성한다.

실행

0개의 댓글