본문 바로가기
서브 공부/아두이노 & 회로구성

Thermistor - arduino uno (써미스터 with 아두이노) - 온도 측정, 어떻게 할까

by 쉬고 싶다 2020. 10. 8.
반응형

- Thermistor - arduino uno (써미스터 with 아두이노 우노)

- 온도 측정을 어떻게 하는지

- Potential divider circuit for thermistor (읽은 V로 R 계산하기 위해)

- Steinhart-hart equation (구한 R로 T 구하기)

- 회로연결

- 코드

 

 

Thermistor - arduino (써미스터 with 아두이노)

 

 

<<Thermistor 이론적인 부분 링크>>

2020/09/10 - [분류 전체보기] - 써미스터 (Thermistor=Thermal resistor) - 사용온도, B value

 

써미스터 (Thermistor=Thermal resistor) - 사용온도, B value

- Thermistor - Thermistor 구입에 있어, - Thermistor 종류, 사용온도 - "B" value 써미스터 (Thermistor=Thermal resistor)   써미스터는 주로 폴리머나 세라믹 소재로 제작되며, 섭씨 영하 90도에서 130도..

setoo0922.tistory.com

 

 

온도 측정을 어떻게 하는지

 

써미스터는 온도에 따라 저항이 변하는 가변저항이다. 그렇기에 저항을 측정함으로써 온도를 계산할 수 있다.

하지만 아두이노는 저항을 바로 측정할 수 없기 때문에 전압을 측정해 계산해 들어간다.

아두이노로 써미스터 사이의 전압과 우리가 값을 아는 저항에 걸리는 전압을 측정

==> Potential divider circuit (전압 값으로 저항값 구하기 위한 회로 구성)

==> Steinhart-hart equation (구한 R로 T 구하기)

 

 Potential divider circuit for thermistor (읽은 V R 계산하기)

 

 

  • PTC를 기준으로, 만약 직렬로 연결된 기본 저항 Rs와 써미스터인 RTH의 위치를 바꾸면,
  • Vout의 방향이 반대로 바뀌고, 써미스터가 뜨거워짐에 따라 Vout이 커질것이다(=저항이 작아질 것이다.)
  • PTC NTC처럼 역할을 하게 되는 것이다.
  • Self-heating effect로 인한 문제 발생 가능성. I^2xR만큼의 파워로 열로써 에너지를 잃게 되고, 써미스터의 온도가 열에너지로 인해 크게 상승하기 시작하면 자체 발열로 인해 R이 변하고 우리가 읽는 값이 V도 변하게 된다.
  • NTC의 경우, 자체 발열로 인해 온도가 오르면 저항이 줄고 더 많은 전류가 흐른다
  • constant current를 줄 시, 써미스터의 정확성이 높아진다.
  • Known resistor의 저항값과 써미스터의 상온에서의 저항값 혹은 사용하는 범위에서의 저항값이 가까울수록 정확도가 높아진다.

 

 

 

 Steinhart-Hart equation (구한 R T 계산하기)

 

Steinhart-Hart equation: 

반도체에서 온도와 저항의 관계를 나타낸 식, 보통 저항을 통해 온도를 구하는데 사용된다.

 

A, B, C Steinhart-Hart 상수로, 써미스터의 모델과 타입에 따라, 사용하는 온도 범위에 따라 다르다.

https://web.archive.org/web/20110708192840/http://www.cornerstonesensors.com/reports/ABC%20Coefficients%20for%20Steinhart-Hart%20Equation.pdf

링크에 ABC 상수 값을 정리한 표가 있습니다.

온도 구간별 값이 달라지고,

R/T 비율 값에 따라 달라진다고 하는데 (이부분은 어떤 기준인지 잘 모르겠어서 하나씩 다 넣어봤습니다.)

저는 F값이 잘 맞네요.

 

 회로연결

 

위의 V --> R --> T로 값을 계산하는 수식들은

코드에 사용되는 수식들이기에 먼저 알아보았습니다.

 

5V, GND, A0

 

 

 코드

 

루프 내에

첫번째 덩어리가 Potential divider circuit을 살린, 전압에서 저항 값을 계산/읽는 구간이고

두번째 덩어리가 Steinhart-hart equation을 사용해, 위에서 구한 R값으로 온도를 구하는 구간입니다. + 온도 단위 변환

 

==> 측정한 온도값 Serial Monitor로 나타내기

int Thermistor0 = 0;
int V0;

// Static resistor or RT termistor resistance?
float SR = 10000;
float logR0, R0, T0;

// ABC constant
float c1 = 1.028525291852400E-03 , c2 = 2.392327985577990E-04 , c3 = 1.562478971912460E-07;

void setup() {

  Serial.begin(9600);
}

void loop() {

  // preparing the varialbes to calculate the temperature from volatage which get from thermistor
  V0 = analogRead(Thermistor0);
  R0 = SR * ((float)V0 / (1023.0-(float)V0));
  logR0 = log(R0);

  // calculate the temperature from resistance which get from above
  T0 = (1.0 / (c1 + c2*logR0 + c3*logR0*logR0*logR0));
  T0 = T0 - 273.15; // K --> C
  //T0 = (T0 * 9.0) / 5.0 + 32.0; // C --> F

  Serial.print("Temperature: ");
  Serial.println(T0);

  delay(500);
}

 

 

다음 포스팅으로,

여러개의 써미스터로 온도 값 받아오기

받아온 온도 값 LCD display로 나타내기

측정한 값을 실시간으로 Excel에 기록하기

제가 사용한 써미스터 + 써미스터 온도 측정 정확도를 올리기 위한 구간별 (Rs)저항값

 

참고

 

다른 온도 측정 도구(Thermocouple) + Arduino 사용

2020/10/02 - [정리, 공부해요/아두이노] - Thermocouple(열전대, 써모커플), 아두이노로 값 읽기, MAX31855 증폭기 사용

 

Thermocouple(열전대, 써모커플), 아두이노로 값 읽기, MAX31855 증폭기 사용

- Thermocouple (열전대) - Thermocouple amplifier (MAX31855, 왜 필요한지) - Thermocouple with arduino (회로 연결 & 코딩)  Thermocouple (열전대) 열전대에 관한 간단한 내용들은 아래 글을 참고하면 좋을..

setoo0922.tistory.com

 

반응형

댓글