Embedded/Raspberry Pi Pico

Raspberry Pi Pico 내부 온도 센서 값 읽기

변화의 물결1 2024. 8. 9. 00:15

 

 

안녕하세요.

 

 이번에는 Raspberry Pi Pico의 온도센서의 값을 읽어 보도록 하겠습니다. Raspberry Pi Pico에는 내부적 온도 센서가 ADC(Analog to Digital Converters) 한 개의 핀에  연결되어 있습니다. 그래서 이 핀을 이용해서 온도를 디지털로 읽어 볼 수가 있습니다.

 


 

1. 하드웨어 구성

 

   Raspberry Pi Pico와 시리얼 통신을 통해서 값을 가져오도록 하겠습니다. 그래서 필요한 것은 Pico와 연결할 수 있는 USB Micro 5 pin케이블만 있으면 됩니다.

 

  

 

Pico 핀 맵을 보면 ADC0, 1, 2 가 있고, ADC_VREF가 있습니다. 그런데 물리적으로 온도 센서는 외부 핀으로 나와 있지 않습니다. 그렇다면 어디에 있을까요? 바로 내부에서 ADC4라고 사용하고 있습니다. 그래서 물리적으로 연결할 필요 없이 코드상에서 핀을 지정해서 읽기만 하면 됩니다.

 

 

 

2. 소스 코드 확인

 

  Thonny IDE를 실행시킨 다음에 새 파일을 만들어 붙여 넣기하고 저장한 다음에 실행합니다.

 

 

 

  machine과 utime 라이브러리를 임포트(import) 해줍니다.  여기서 machine은 ADC가 작동할 수 있도록 ADC class를 지원해 줍니다.

  sensor_temp를 출력을 한다면, 0~65535의 정수 값을 받게 될 것입니다. 그래서 온도 값으로 변환해 주는 작업이 필요합니다.

  reading은 16bit(65535)로 읽어드린 값을 3.3V 기준으로 볼 때 입력된 전압 값으로 보면 됩니다. 즉, 입력된 전압(온도에 따른 전압 변화 값)

  RP2040 데이터 시트를 보면 온도가 27도일 때 0.706V 전압이 발생한다고 합니다. 그리고 1도가 추가될 때마다 전압은 0.001721V 씩 감소합니다. 그래서 다음과 같이 온도를 구하는 공식이 나오게 됩니다.

 

 

import machine
import utime

sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)

while True:
    reading = sensor_temp.read_u16() * conversion_factor
    temperature = round(27 - (reading - 0.706) / 0.001721,2)
    print("Temperature : ", temperature)
    utime.sleep(2)

 

 

3. 실행 결과

 

  2초마다 측정된 온도가 나타납니다. 입김을 불거나 따뜻한 곳에 가져가면 온도가 올라가는 것을 확인할 수 있습니다.

 

 

 

  그러나 이 온도가 정확하다고 생각해서는 안될 듯합니다. 포럼에 올라온 글을 보면 오차가 있으므로 대략적 값으로 사용해야 하지 않을까 합니다.

 

 

<참고사이트>

1. Read Temperature Sensor Value from Raspberry Pi Pico

https://how2electronics.com/read-temperature-sensor-value-from-raspberry-pi-pico/

2. Internal temp sensor

https://forums.raspberrypi.com/viewtopic.php?t=300991    

 

 

반응형