라즈베리파이 피코보드의 내장 온도센서로 온도측정하기

라즈베리파이 피코보드의 내장 온도센서로 온도측정하기

​

앞의 글에서 라즈베리 파이 피코 보드의 아날로그 채널들과, 이들중 4번 채널이 RP2040칩에 내장된 온도센서용이라는 것을 소개한 바 있다.

​

https://kongyine.com/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)

​

피코 보드에 내장된 온도 센서를 이용한 측정 결과는 다음과 같다.

​

​