10강 / 20강

온도 센서 — MAX31865 와 PT-1000

SPI · 3선식 · 그리고 50 Hz

온도 센서 — MAX31865 와 PT-1000
±0.5 °C 를 말하려면 읽는 쪽부터 그만큼 고와야 합니다.

/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 를 매번 부르면 안 되는 까닭은?