注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Raspberry Pi、Arduino、ESP32をさらに深く学び、仲間とともに楽しんでください。

なぜ参加するのか?

  • 専門的なサポート:販売後の問題や技術的な課題をコミュニティやチームのサポートで解決できます。

  • 学びと共有:スキルを向上させるためにヒントやチュートリアルを交換しましょう。

  • 限定プレビュー:新製品の発表や先行情報をいち早く手に入れましょう。

  • 特別割引:最新の製品に対して限定割引を享受できます。

  • イベント・プレゼントキャンペーン:プレゼント企画や特別プロモーションに参加できます。

👉 一緒に探索し、創造していきませんか? [こちら] をクリックして今すぐ参加しましょう!

2.13 温度計

このレッスンでは、Raspberry Pi Pico 2を使用して、 サーミスター を使った温度測定方法を学びます。サーミスターは、温度に応じて抵抗が大きく変化する種類の抵抗器です。特に、負の温度係数(NTC)サーミスターを使用し、温度が上がると抵抗が減少します。

必要なもの

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

一式で購入するのが便利です。こちらからリンクをご覧ください:

名前

キット内アイテム

リンク

Newton Lab Kit

450以上

Newton Lab Kit

個別に購入したい場合は、以下のリンクから購入できます。

SN

コンポーネント

数量

リンク

1

Raspberry Pi Pico 2

1

購入

2

Micro USBケーブル

1

3

ブレッドボード

1

購入

4

ジャンパーワイヤー

数本

購入

5

抵抗器

1(10KΩ)

購入

6

サーミスタ

1

購入

サーミスターの理解

NTCサーミスターは温度感知型の抵抗器で、温度が上昇するにつれてその抵抗が減少します。これを電圧分割回路に組み込むことで、温度に応じて変化する電圧を測定できます。Raspberry Pi Pico 2のアナログ・デジタル変換器(ADC)を使って、この電圧を読み取り、対応する温度を計算します。

回路図

sch_temp

この回路では、10KΩの抵抗とNTCサーミスターが電圧分割回路を形成し、GP28がサーミスターにかかる電圧を読み取ります。10KΩの抵抗は、電流を制限することで保護作用も果たします。

  • 高温:サーミスターの抵抗が減少し、電圧が下がり、GP28の読み取り値も低くなります。高温になると、抵抗はゼロに近づき、GP28の値は0に近づきます。

  • 低温:サーミスターの抵抗が増加し、電圧が上昇し、GP28の値も高くなります。極端に冷たい場合、抵抗はほぼ無限大になり、GP28の値は65535に近づきます。

10KΩの抵抗は、3.3VとGNDが直接接続されないようにして、ショートを防ぎます。

配線図

wiring_temp

コードを書く

サーミスターからアナログ値を読み取り、摂氏および華氏で温度を計算して表示するMicroPythonプログラムを作成します。

注釈

  • 2.13_thermometer.pynewton-lab-kit/micropython から開くか、コードをThonnyにコピーして、「実行」ボタンを押すか、F5キーを押して実行してください。

  • 適切なインタープリターが選択されていることを確認してください:MicroPython(Raspberry Pi Pico)。COMxx。

import machine
import utime
import math

# 定数
BETA = 3950  # サーミスターのベータ係数
T0 = 298.15  # 基準温度(25°Cをケルビンに変換)
R0 = 10000   # T0での抵抗(10 kΩ)

# GP28でADCを初期化
thermistor = machine.ADC(28)

while True:
    # アナログ値(0-65535)を読み取る
    analog_value = thermistor.read_u16()

    # アナログ値を電圧に変換
    voltage = analog_value * 3.3 / 65535

    # サーミスターの抵抗を計算
    Rt = (voltage * R0) / (3.3 - voltage)

    # ベータ式を使ってケルビンで温度を計算
    tempK = 1 / ( (1 / T0) + (1 / BETA) * math.log(Rt / R0) )

    # ケルビンから摂氏に変換
    tempC = tempK - 273.15

    # 摂氏から華氏に変換
    tempF = tempC * 9 / 5 + 32

    # 結果を表示
    print('Temperature: {:.2f}°C  {:.2f}°F'.format(tempC, tempF))

    # 次の読み取りまで待機
    utime.sleep(2)

コードを実行すると、コンソールに摂氏と華氏の温度が表示されます。

  • サーミスターに触れて温度が上昇するのを確認してみましょう。

  • 氷や冷たい物体を使って温度が下がるのを観察しましょう。

コードの理解

  1. モジュールのインポート:

    • machine: ハードウェア関連の機能にアクセスします。

    • utime: 時間関連の関数(例えばスリープ)を使用できます。

    • math: 数学関数(例えば対数)を提供します。

  2. 定数:

    • BETA: サーミスターのベータ係数(データシートに記載されており、通常3950付近)。

    • T0: 基準温度(ケルビンで25°Cは298.15K)。

    • R0: T0でのサーミスターの抵抗(10 kΩ)。

  3. ADCピンの初期化:

    • thermistor = machine.ADC(28): GP28をアナログ入力として設定します。

  4. メインループ:

    • analog_value = thermistor.read_u16(): 生のアナログ値を読み取ります。

    • voltage = analog_value * 3.3 / 65535: 生の値を電圧に変換します。

    • Rt = (voltage * R0) / (3.3 - voltage): 電圧分割回路の公式を使ってサーミスターの抵抗を計算します。

    • tempK = 1 / ( (1 / T0) + (1 / BETA) * math.log(Rt / R0) ): ベータ式を使ってケルビン温度を計算します。

    • 摂氏と華氏に変換:

      tempC = tempK - 273.15
      tempF = tempC * 9 / 5 + 32
      
    • print('Temperature: {:.2f}°C {:.2f}°F'.format(tempC, tempF)): 結果を表示

    • utime.sleep(2): 次の読み取りまで2秒待機。

温度計算の理解

  • スティーンハート・ハート式:

サーミスターの抵抗と温度の関係を示す式です:

temp_format

  • T はサーミスターの温度(ケルビン)。

  • T0 は基準温度、通常は25°C(ケルビンでは273.15 + 25)。

  • B は材料のベータ係数で、NTCサーミスターのこのキットでは3950。

  • R は測定した抵抗。

  • R0 は基準温度T0での抵抗値で、このキットのNTCサーミスターは25°Cで10キロオームです。

安全上の注意

サーミスターに熱を加える際は注意してください。過剰な温度にさらすと、サーミスターやRaspberry Pi Pico 2が損傷する恐れがあります。

さらに実験してみよう

  • データロギング:コードを修正して、温度データをPicoのファイルに記録するようにしましょう。

  • 温度閾値:温度が一定の値を超えたり、下回ったりした場合にアクションをトリガーする条件を追加しましょう(例:LEDを点灯させる、ブザーを鳴らす)。

  • 表示出力:LCDやOLEDディスプレイを接続して、温度データを表示しましょう。

結論

Raspberry Pi Pico 2を使ってサーミスターで温度変化を測定できる基本的な温度計を作成しました。このプロジェクトでは、アナログ入力の読み取り、計算、センサーのデータを解釈して有意義な情報を得る方法を示しました。