[아두이노] 서미스터 온도 측정 완벽 워크플로우 (저항형 센서 감도 조절 및 캘리브레이션)
“비선형 데이터를 직선으로 펴고, 기울기와 절편까지 맞춘다” 아두이노로 온도를 측정할 때 가장 흔히 겪는 문제는 단순합니다. 값이 둔감하다 (변화가 잘 안 보인다) 값이 비선형이다 (온도와 비례하지 않는다) 값이 부정확하다 (실제 온도와 다르다) 이 문제를 해결하는 가장 정석적인 방법이 바로 다음 3단계입니다: ① 하드웨어 튜닝 → ② 수학적 선형화 → ③ 캘리브레이션 이 글에서는 이 과정을 “엔지니어링 워크플로우” 관점에서 정리합니다. 1. 하드웨어 단계: 가변저항으로 “감도” 확보 핵심 개념 서미스터는 온도에 따라 저항이 변하지만, 우리가 측정하는 것은 “전압”입니다. 그래서 반드시 전압 분배 회로 를 구성해야 합니다. 회로 구조 5V ── 가변저항(Rf) ── A0 ── 서미스터(Rs) ── GND 여기서 중요한 포인트는: 가변저항을 이용해 “측정 구간”을 중앙에 맞춘다 왜 이게 중요할까? ADC(analogRead)는 0~1023 범위를 사용합니다. 하지만 잘못 설정하면: 800~820만 왔다 갔다 → ❌ 해상도 낭비 100~120만 사용 → ❌ 감도 낮음 최적화 방법 👉 목표: 측정하려는 온도 범위의 중앙값에서 ADC ≈ 512 예: 측정 범위: 25~30°C 기준 온도: 27°C 목표: analogRead ≈ 512 (약 2.5V) 조정 방법 실제 온도를 27°C로 맞춘다 가변저항을 돌린다 analogRead 값이 512 근처가 되도록 맞춘다 결과 위쪽/아래쪽 변화 모두 감지 가능 Headroom 확보 측정 해상도 최대화 ⚠️ 매우 중요한 주의사항 한 번 맞춘 후 절대 건드리지 마세요 이 값이 바뀌면 이후 모든 계산이 틀어집니다. 2. 소프트웨어 단계: 로그 함수로 “선형화” 문제의 본질 서미스터는 이렇게 동작합니다: 온도 ↑ → 저항 ↓ (비선형, 지수형) 즉, 온도 vs 저항 그래프는 곡선이다 해결 방법: 로그 변환 로그를 취하면: 곡선 → 직선에 가까워짐 이를 정밀하게 모델링한 공식이 바로: Steinhart-Hart 방정식 1/T = ...