앞의 글에서 라즈베리 파이 피코 보드의 아날로그 채널들과, 이들중 4번 채널이 RP2040칩에 내장된 온도센서용이라는 것을 소개한 바 있다.
https://blog.naver.com/mythee1/223185316470
이를 이용하면 별도의 온도센서 없이도, 라즈베리파이 피코 보드 주변의 온도를 측정할 수 있다.
피코 보드에 내장된 온도센서의 경우 27도(섭씨)에서 0.706V의 입력값을 나타내며, 온도 1도가 증가할 때마다 0.001721V 감소하는 것으로 Data Sheet에 보고되어 있다.
따라서, 이를 이용하면 다음과 같은 관계식이 만들어지게 되고, 이를 이용하여 온도를 측정하게 된다.
(입력 전압 V – 0.706)
측정 온도 = 27 – ——————————–
0.001721
방법은 다음과 같다.
먼저 온도측정에 사용할 변수를 정하고, 이 변수에 ADC(4) 채널을 할당해 준다.
변수명 = machine.ADC(4)
아날로그 센서 신호값을 읽는 방법은 다음과 같다.
변수명.read_u16( )
그리고, 측정값을 전압값으로 환산하기 위해 이 conversion_factor를 만들고,
측정값에 이 Conversion factor를 곱해 입력 전압 값을 구한다.
Conversion_factor = 3.3 / 65535
입력 전압 = 변수명 * Conversion_factor
이렇게 구해진 전압을 토대로 다음식을 이용하여 온도값을 계산한다.
Celcius_T = round(27 – (inputvolt – 0.706)/0.001721, 2)
다만, 공개되어 있는 환산식은 위와 같지만, 실제 계산된 값과, 주변에 있는 온도계와 편차가 있어 나는 환산식에 +5.8을 더하여 다음과 같은 식을 사용하기로 했다. (위의 식을 이용하는 경우 편차가 많아든 의견들이 포럼 등에 꽤 많이 제시되어 있어서, 위의 식만으로 구해지는 온도값은 단순 참조로 사용하고, 이를 그대로 사용하려면 자신이 사용할 온도 범위에서 수식에 대한 일부 보정이 필요해 보인다.) 여기에 적용한 +5.8은 한 점의 온도를 기준으로 보정한 값이며, 보다 정교한 보정을 원하는 경우, 여러개의 온도값과 전압값을 이용하여 나름의 회귀분석을 통해 환산식을 만들면 된다.
Celcius_T = round(27 – (inputvolt – 0.706)/0.001721, 2) + 5.8
결과적으로 Code는 다음과 같다.
import machine import utime sensor_T = machine.ADC(4) conversion_factor = 3.3 / (65535) while True: inputvolt = sensor_T.read_u16() * conversion_factor Celcius_T = round(27 - (inputvolt - 0.706)/0.001721, 2)+5.8 print(Celcius_T) utime.sleep(5)
피코 보드에 내장된 온도 센서를 이용한 측정 결과는 다음과 같다.

