2.13 温度計

温度計は、温度または温度勾配(物体の熱さや冷たさの度合い)を測定する装置です。 温度計には2つの重要な要素があります:(1) 温度センサー(例えば、水銀温度計の球根や赤外線温度計の焦電センサー)で、これには温度の変化に伴い何らかの変化が生じます; そして(2)この変化を数値に変換する何らかの手段(例えば、水銀温度計にマークされた目盛りまたは赤外線モデルのデジタル表示)。 温度計は、テクノロジーや産業でプロセスを監視するため、気象学、医学、科学研究で広く使用されています。

サーミスターは、温度に強く依存する抵抗値を持つ温度センサーの一種で、2つのタイプがあります: 負温度係数(NTC)と正温度係数(PTC)、別名NTCおよびPTCです。PTCサーミスターの抵抗は温度とともに増加し、NTCの状態はそれと逆です。

この実験では、 NTCサーミスター を用いて温度計を作成します。

必要なコンポーネント

このプロジェクトでは、以下のコンポーネントが必要です。

一式をまとめて購入するのは便利です。リンクはこちら:

名称

このキットに含まれるアイテム

リンク

ケプラーキット

450+

Kepler Kit

以下のリンクから個別に購入することもできます。

SN

コンポーネント

個数

リンク

1

Raspberry Pi Pico W

1

BUY

2

Micro USBケーブル

1

3

ブレッドボード

1

BUY

4

ジャンパーワイヤー

数本

BUY

5

抵抗器

1(10KΩ)

BUY

6

サーミスター

1

BUY

回路図

sch_temp

この回路では、10Kの抵抗とサーミスターが直列に接続されており、両方を通る電流は同じです。10Kの抵抗は保護として機能し、GP28はサーミスターの電圧変換後の値を読み取ります。

温度が上昇すると、NTCサーミスターの抵抗値は減少し、その電圧も減少するため、GP28からの値も減少します。温度が十分に高い場合、サーミスターの抵抗はほぼ0に近く、GP28の値もほぼ0に近くなります。このとき、10Kの抵抗は保護として働き、3.3VとGNDが直結し短絡することを防ぎます。

温度が下がると、GP28の値は増加します。温度が十分に低い場合、サーミスターの抵抗は無限大になり、その電圧はほぼ3.3Vに近くなります(10Kの抵抗は無視できます)、GP28の値は最大値の65535に近くなります。

計算式は以下の通りです。

(Vp/3.3V) x 65535 = Ap

配線

wiring_temp

注釈

  • サーミスターは黒く、103とマークされています。

  • 10Kオームの抵抗器のカラーリングは赤、黒、黒、赤、茶です。

コード

注釈

  • kepler-kit-main/micropython のパスにある 2.13_thermometer.py ファイルを開くか、このコードをThonnyにコピーして、"Run Current Script"をクリックするかF5キーを押して実行します。

  • 右下隅の"MicroPython(Raspberry Pi Pico)"インタープリターを忘れずにクリックしてください。

  • 詳細なチュートリアルについては、 コードを直接開いて実行する を参照してください。

import machine
import utime
import math

thermistor = machine.ADC(28)

while True:
    temperature_value = thermistor.read_u16()
    Vr = 3.3 * float(temperature_value) / 65535
    Rt = 10000 * Vr / (3.3 - Vr)
    temp = 1/(((math.log(Rt / 10000)) / 3950) + (1 / (273.15+25)))
    Cel = temp - 273.15
    Fah = Cel * 1.8 + 32
    print ('Celsius: %.2f C  Fahrenheit: %.2f F' % (Cel, Fah))
    utime.sleep_ms(200)

プログラムが実行された後、シェルは摂氏と華氏の温度を出力します。

仕組みは?

各サーミスターには通常の抵抗値があります。ここでは、それは10kオームであり、25度摂氏で測定されます。

温度が高くなると、サーミスターの抵抗が減少します。その後、A/Dアダプターによって電圧データがデジタル量に変換されます。

プログラミングを介して摂氏または華氏での温度が出力されます。

import math

これは、一般的な数学的演算と変換を計算する一連の関数を宣言する数値ライブラリです。

temperature_value = thermistor.read_u16()

この関数は、サーミスターの値を読み取るために使用されます。

Vr = 3.3 * float(temperature_value) / 65535
Rt = 10000 * Vr / (3.3 - Vr)
temp = 1/(((math.log(Rt / 10000)) / 3950) + (1 / (273.15+25)))
Cel = temp - 273.15
Fah = Cel * 1.8 + 32
print ('Celsius: %.2f C  Fahrenheit: %.2f F' % (Cel, Fah))
utime.sleep_ms(200)

これらの計算は、サーミスターの値を摂氏度と華氏度に変換します。

Vr = 3.3 * float(temperature_value) / 65535
Rt = 10000 * Vr / (3.3 - Vr)

上記の2行のコードでは、まず読み取ったアナログ値を使用して電圧を計算し、次にRt(サーミスターの抵抗)を取得します。

temp = 1/(((math.log(Rt / 10000)) / 3950) + (1 / (273.15+25)))

注釈

ここでは、抵抗と温度の関係が以下のようになっています:

RT = RN expB(1/TK – 1/TN)

  • RTは、温度がTKのときのNTCサーミスターの抵抗です。

  • RNは、定格温度TN下でのNTCサーミスターの抵抗です。ここでは、RNの数値値は10kです。

  • TKはケルビン温度で、単位はKです。ここでは、TKの数値値は273.15 + 摂氏度です。

  • TNも定格ケルビン温度であり、単位もKです。ここでは、TNの数値値は273.15+25です。

  • B(ベータ)はNTCサーミスターの材料定数であり、熱感度指数とも呼ばれ、数値値は3950です。

  • expは指数の略であり、基数eは自然数で、約2.7に等しいです。

この関係は、実用的な公式です。温度と抵抗が有効範囲内にある場合にのみ正確です。

このコードは、ケルビン温度を取得するために、Rtを式TK=1/(ln(RT/RN)/B+1/TN)に代入しています。

temp = temp - 273.15

ケルビン温度を摂氏度に変換します。

Fah = Cel * 1.8 + 32

摂氏度を華氏度に変換します。

print ('Celsius: %.2f °C Fahrenheit: %.2f ℉' % (Cel, Fah))

シェルに摂氏度、華氏度、およびそれらの単位を出力します。