10강 / 20강
온도 센서 — MAX31865 와 PT-1000
SPI · 3선식 · 그리고 50 Hz
/mech 10강에서 PT-1000 을 골랐습니다. 이제 그것을 읽는 코드를 씁니다.
MAX31865 라는 칩이 저항을 재서 SPI 로 넘겨 줍니다.
import board, digitalio, adafruit_max31865
spi = board.SPI()
cs = digitalio.DigitalInOut(board.D5)
sensor = adafruit_max31865.MAX31865(
spi, cs,
rtd_nominal=1000, # PT1000 이다 (라이브러리 기본값은 100)
ref_resistor=4300.0, # 보드에 박힌 기준저항 (기본값 430 은 PT100 용)
wires=3, # 3선식으로 배선했다면
filter_frequency=50, # ← 한국은 50 Hz. 기본값은 60 이다
)
print(sensor.temperature, sensor.resistance)
여섯 줄인데 틀리기 쉬운 자리가 셋 있습니다.
PT-1000 이 PT-100 보다 유리한 이유가 숫자로 나옵니다. 배선 저항 1 Ω 의 값이 10배 다릅니다.
Python
브라우저에서 실행
틀리기 쉬운 나머지 둘
| 자리 | 무엇이 잘못되나 |
|---|---|
ref_resistor | 보드에 실제로 박힌 값을 적어야 합니다. 라이브러리 기본값 430 은 PT100 용이고, PT1000 보드는 보통 4300 입니다. 틀리면 전체가 비율만큼 어긋납니다 |
wires=3 | 소프트웨어만 바꾸면 안 됩니다 — 보드의 납땜 점퍼도 함께 옮겨야 합니다. 학생들이 거의 반드시 빠뜨립니다 |
그리고 읽는 속도에 한계가 있습니다. 변환에 수십 밀리초가 걸리므로
초당 열 번~스무 번이 현실적인 상한입니다. 제어 루프 안에서
sensor.temperature 를 매번 부르지 말고, 읽은 값을 캐시해 두고 쓰십시오.
🤔 확인 문제
PT1000 보드를 쓰면서
ref_resistor 를 기본값 430 그대로 두면?해설 기준저항은 비교의 잣대입니다. 잣대를 잘못 적으면 모든 값이 그만큼 틀립니다. 오류 메시지가 없어서 더 위험합니다 — 얼음물로 한 점 검증하는 습관이 답입니다.
🤔 확인 문제
제어 루프 안에서
sensor.temperature 를 매번 부르면 안 되는 까닭은?해설 초당 열~스무 번이 현실적인 상한입니다. 온도는 따로 읽어 캐시하고, 제어 루프는 그 값을 씁니다. 열은 초 단위로 움직이니 충분합니다.