こんにちは「MAKO」と言います。
今回は、MicroPython で Raspberry Pi PicoのRP2040内蔵温度センサーから温度を取得する方法について書いてみます。
ただし、Raspberry Pi Picoの内蔵温度センサーは搭載されたマイコンチップ RP2040の内部にあるためマイコンチップの温度の影響を受けるため、室温とは結構誤差が出ます。
温度測定を行いたい場合は、外付けで温度センサーを接続して測定することをお勧めします。
それではコードを書いてみます。
from machine import ADC
import time
# 内蔵温度センサーのADCチャンネル
TEMP_SENSOR_CHANNEL = 4
# 温度センサーのADC値を温度に変換する関数
def convert_to_temperature(adc_value):
# 温度を計算する式はRP2040のデータシートから取得します
conversion_factor = 3.3 / (65535)
voltage = adc_value * conversion_factor
temperature_celsius = 27 - (voltage - 0.706) / 0.001721
return temperature_celsius
# ADCオブジェクトの作成
adc = ADC(TEMP_SENSOR_CHANNEL)
# メインループ
while True:
# ADCから温度センサーの値を読み取る
sensor_value = adc.read_u16()
# 温度に変換
temperature = convert_to_temperature(sensor_value)
# 温度を出力
print("Temperature: {:.2f} °C".format(temperature))
# 1秒待つ
time.sleep(1)
RP2040 には電圧出力の温度センサーが内蔵されていて4つ目の ADC(アナログデジタルコンバータ)から電圧を取得して計算することになります。
計算式については、マイコンチップRP2040の以下のリンクのデータシートのPDFの
https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf
4.9.5. Temperature Sensor
をもとに作成しています。
temperature_celsius = 27 - (voltage - 0.706) / 0.001721
上記の voltage の値を計算する際に ADCから取得した値に対し
conversion_factor = 3.3 / (65535)
を乗算している理由ですが、
ADCの値は0から65535の範囲でこの値はADCのビット数に依存しますが、RP2040のADCは通常16ビットとなってます。
また、RP2040のADCのリファレンス電圧は通常3.3Vであり、それを踏まえて以下の計算式から電圧が決定されるためです。
はい、では、実際にプログラムを動かした結果です。。。。
Temperature: 27.98 °C
Temperature: 27.98 °C
Temperature: 27.98 °C
Temperature: 27.98 °C
Temperature: 28.45 °C
Temperature: 27.98 °C
Temperature: 27.98 °C
その時の室温は以下の画像の通り、、、思いっきりずれてますね(+_+)