아두이노 기반 실외 온도계: 추세, 최고/최저 온도 표시
부품 및 소모품
| 아두이노 우노 |
|
1 |
| 정밀 온도 센서 TS-NTC-103 (10kΩ) |
|
1 |
| Adafruit 16x2 LCD (청백색, I2C 변환기 사용) |
|
1 |
| 12V DC 2.0A 파워 서플라이 |
|
1 |
| 커패시터 100nF |
|
2 |
| 전해 커패시터 470µF 16V |
|
1 |
| 메탈 필름 저항 10kΩ (0.1% 허용오차) |
|
1 |
| 푸시 버튼 (상시 개방) |
|
1 |
| 가변 저항 10kΩ (리니어) |
LCD 대비 조절용 |
1 |
| 저항 10kΩ |
|
1 |
프로젝트 소개
개요
아두이노 프로그래밍과 LCD 디스플레이 사용 경험을 쌓기 위해 제작한 실외 온도계입니다. 개발 과정에서 현재 온도뿐만 아니라 최고/최저 온도 기록과 온도 추세(상승/하강 화살표) 표시 기능을 추가했습니다. 푸시 버튼으로 최고/최저값을 현재 온도로 리셋할 수 있습니다.
제작 방법
회로도대로 부품을 연결하면 됩니다. 아두이노 우노의 5V 출력을 모든 +5V 연결부에, 그라운드는 모두 공통으로 연결합니다. 12V DC 외부 전원으로 아두이노를 구동합니다. 스케치를 업로드하면 완료됩니다.
센서: 고정밀 NTC 서미스터
B+B Thermo Technik의 TS-NTC-103 (10kΩ)을 사용했습니다. 25°C에서 저항 허용오차 ±0.5%, 측정 범위 -60~+150°C로 백금 저항체 대체 가능. B값도 ±0.5% 이내라 별도 캘리브레이션 없이 ±0.12K(25°C) 정확도 달성. -60~+85°C에서 최대 오차 ±0.5K.
분압 회로의 기준 저항도 0.1% 허용오차의 메탈 필름 10kΩ(온도 계수 25ppm)을 사용하여 정밀도를 보장했습니다.
노이즈 대책
실외 설치로 수 미터 케이블이 필요하여 노이즈 취약. 아두이노 아날로그 입력 핀(A0)과 그라운드 사이에 100nF 디커플링 커패시터 추가. 그래도 LCD 클록 노이즈가 남아 LCD VDD-VSS 핀 사이에 100nF 커패시터를 최대한 짧게(1cm 이내) 납땜하여 해결. 스위칭 파워 서플라이 리플 방지를 위해 아두이노 5V-GND 사이에 470µF 전해 커패시터 추가.
센서 설치 위치
직사광선을 피해야 하므로 북향(남반구는 남향) 그늘진 곳, 벽에서 수 mm 떨어진 위치 권장. 차고 벽 등 난방 영향 없는 벽면이 이상적.
소프트웨어 설명
LiquidCrystal 라이브러리로 1602 LCD 제어. 3초 간격 측정(interval=3000ms), 30회 이동 평균(90초 평활화)으로 부드러운 온도 변화 표시. Steinhart-Hart 근사식으로 NTC 저항-온도 변환. 제조사 스펙의 -10, 0, +20°C 세 점을 이용해 계수(A, B, C) 산출. 베타 공식보다 높은 정확도.
Steinhart-Hart 근사식
NTC는 온도 상승 시 저항 감소. 비선형 R-T 곡선을 Steinhart-Hart 식으로 근사: 1/T = A + B·ln(R) + C·ln³(R). 온라인 계산기(Stanford Research Systems)로 계수 산출. 그래프에서 빨간 점(실측), 파란 곡선(베타 근사), 녹색 곡선(Steinhart-Hart) 비교. 10kΩ에서 25.0035°C(Steinhart-Hart) vs 25.7716°C(베타)로 후자가 현저히 부정확.
코드
버전 1.4: 오프라인 에디터 컴파일 오류 수정(PrintPG 함수 선언). 버전 1.3: 추세 화살표에 히스테리시스 추가. GitHub에서 전체 코드 및 라이브러리 다운로드 가능.
회로도
회로도 파일 제공 예정