서미스터(NTC) 온도 센서 아두이노 활용 완전 정복 - 수식부터 구현까지
서미스터란?
서미스터(Thermistor)는 온도에 따라 저항값이 변하는 특수 저항소자입니다. 온도 계수 부호에 따라 두 종류로 나뉩니다:
- PTC (Positive Temperature Coefficient): 온도 상승 시 저항 증가
- NTC (Negative Temperature Coefficient): 온도 상승 시 저항 감소 → 본 가이드에서 다룸
NTC 서미스터는 저렴하고 감도가 좋아 취미/교육용 온도 측정에 가장 널리 쓰입니다.
온도 계산 원리: B-상수 방정식
NTC 서미스터의 저항-온도 관계는 B-상수 방정식(Steinhart-Hart 근사)으로 모델링됩니다:
R_T = R₀ × exp[B × (1/T - 1/T₀)]
R_T: 온도 T(K)에서의 저항값
R₀: 기준 온도 T₀에서의 저항값 (데이터시트 명시, 통상 25℃ = 298.15K에서 10kΩ)
B: 재료 상수 (K 단위, 데이터시트 명시, 예: 3977K)
T, T₀: 절대 온도 (켈빈, K) — ℃ 값에 273.15를 더해 변환 필수
실측 회로: 전압 분배기
아두이노 아날로그 핀으로 저항값을 직접 읽을 수 없으므로, 고정 저항(R, 10kΩ)과 서미스터(RT)로 전압 분배기를 구성하여 분배 전압(VRT)을 측정합니다.
회로: 5V(VCC) ──[고정저항 R]──●──[서미스터 RT]── GND
│
아날로그 핀 A0 (VRT 측정)
옴의 법칙으로 서미스터 저항 계산:
VRT = 아날로그 읽기값 × (5.0 / 1023.0)
VR = VCC - VRT
RT = VRT / (VR / R)
아두이노 구현 코드
// 서미스터 상수 (데이터시트 확인 필수)
#define RT0 10000 // 25℃에서 저항값 (Ω)
#define B 3977 // B 상수 (K)
#define VCC 5.0 // 공급 전압 (V)
#define R 10000 // 고정 저항 (Ω)
float RT, VR, ln, TX, T0, VRT;
void setup() {
Serial.begin(9600);
T0 = 25.0 + 273.15; // 기준 온도 켈빈 변환
}
void loop() {
VRT = analogRead(A0); // 0~1023 읽기
VRT = (VCC / 1023.0) * VRT; // 전압 변환 (V)
VR = VCC - VRT; // 고정 저항 양단 전압
RT = VRT / (VR / R); // 서미스터 저항 (Ω)
ln = log(RT / RT0); // 자연로그
TX = 1.0 / ((ln / B) + (1.0 / T0)); // 켈빈 온도 계산
TX = TX - 273.15; // 섭씨 변환
Serial.print("Temperature: ");
Serial.print(TX); Serial.print("°C\t");
Serial.print(TX + 273.15); Serial.print("K\t");
Serial.print((TX * 1.8) + 32); Serial.println("°F");
delay(500);
}
정밀도 향상 팁
- 고정 저항값 정확히 측정: 멀티미터로 실측값 사용 (공칭 10kΩ → 실측 9.87kΩ 등)
- 전원 전압 보정: USB 전원 시 5V가 아닐 수 있음 → 3.3V 레퍼런스 또는 실측 VCC 사용
- 아날로그 레퍼런스 변경:
analogReference(INTERNAL)로 1.1V 내부 레퍼런스 사용 시 분해능 향상 (단, 분배기 비율 재설계 필요)
- 평균 필터링: 연속 10~20회 읽기 평균으로 노이즈 제거
- Steinhart-Hart 3차 방정식: 넓은 온도 범위에서 더 높은 정밀도 필요 시 사용 (A, B, C 계수 필요)
일반적인 문제 해결
| 증상 | 원인 | 해결 |
| 온도가 높게 나옴 | 고정 저항값이 실제보다 큼 | 실측값으로 R 상수 수정 |
| 온도가 낮게 나옴 | 서미스터 자체 발열 / VCC 낮음 | 전류 제한, 전압 보정 |
| 값이 튀거나 불안정 | 브레드보드 접촉 불량 / 노이즈 | 납땜 보드 사용, 커패시터 추가, 평균 필터 |
| 부팅 후 값 변동 | 서미스터 열평형 미도달 | 예열 시간(30초~) 대기 후 측정 |
응용 예시
- 3D 프린터 핫엔드/히트베드 온도 제어 (마를린 펌웨어 등에서 표준 채택)
- 발효기/인큐베이터 온도 모니터링
- PC 수냉 쿨링 시스템 수온 표시
- 기상 관측소, 스마트 홈 온도 센서 노드
부품 구매 가이드
가장 흔한 NTC 10kΩ B=3950~3977 타입을 권장합니다. 데이터시트에 R₂₅=10kΩ ±1%, B₂₅/₈₅=3977K ±0.75% 등으로 표기된 제품 구매 시 코드 상수 그대로 사용 가능. 10kΩ 정밀 저항(1% 금속피막)과 세트로 구비하세요.