.. note:: こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Raspberry Pi、Arduino、ESP32をさらに深く学び、仲間とともに楽しんでください。 **なぜ参加するのか?** - **専門的なサポート**:販売後の問題や技術的な課題をコミュニティやチームのサポートで解決できます。 - **学びと共有**:スキルを向上させるためにヒントやチュートリアルを交換しましょう。 - **限定プレビュー**:新製品の発表や先行情報をいち早く手に入れましょう。 - **特別割引**:最新の製品に対して限定割引を享受できます。 - **イベント・プレゼントキャンペーン**:プレゼント企画や特別プロモーションに参加できます。 👉 一緒に探索し、創造していきませんか? [|link_sf_facebook|] をクリックして今すぐ参加しましょう! .. _py_temp: 2.13 温度計 =========================== このレッスンでは、Raspberry Pi Pico 2を使用して、 **サーミスター** を使った温度測定方法を学びます。サーミスターは、温度に応じて抵抗が大きく変化する種類の抵抗器です。特に、負の温度係数(NTC)サーミスターを使用し、温度が上がると抵抗が減少します。 **必要なもの** このプロジェクトには、以下のコンポーネントが必要です。 一式で購入するのが便利です。こちらからリンクをご覧ください: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - 名前 - キット内アイテム - リンク * - Newton Lab Kit - 450以上 - |link_newton_lab_kit| 個別に購入したい場合は、以下のリンクから購入できます。 .. list-table:: :widths: 5 20 5 20 :header-rows: 1 * - SN - コンポーネント - 数量 - リンク * - 1 - :ref:`cpn_pico_2` - 1 - |link_pico2_buy| * - 2 - Micro USBケーブル - 1 - * - 3 - :ref:`cpn_breadboard` - 1 - |link_breadboard_buy| * - 4 - :ref:`cpn_wire` - 数本 - |link_wires_buy| * - 5 - :ref:`cpn_resistor` - 1(10KΩ) - |link_resistor_buy| * - 6 - :ref:`cpn_thermistor` - 1 - |link_thermistor_buy| **サーミスターの理解** 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プログラムを作成します。 .. note:: * ``2.13_thermometer.py`` を ``newton-lab-kit/micropython`` から開くか、コードをThonnyにコピーして、「実行」ボタンを押すか、F5キーを押して実行してください。 * 適切なインタープリターが選択されていることを確認してください:MicroPython(Raspberry Pi Pico)。COMxx。 .. code-block:: python 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) コードを実行すると、コンソールに摂氏と華氏の温度が表示されます。 * サーミスターに触れて温度が上昇するのを確認してみましょう。 * 氷や冷たい物体を使って温度が下がるのを観察しましょう。 **コードの理解** #. モジュールのインポート: * ``machine``: ハードウェア関連の機能にアクセスします。 * ``utime``: 時間関連の関数(例えばスリープ)を使用できます。 * ``math``: 数学関数(例えば対数)を提供します。 #. 定数: * ``BETA``: サーミスターのベータ係数(データシートに記載されており、通常3950付近)。 * ``T0``: 基準温度(ケルビンで25°Cは298.15K)。 * ``R0``: T0でのサーミスターの抵抗(10 kΩ)。 #. ADCピンの初期化: * ``thermistor = machine.ADC(28)``: GP28をアナログ入力として設定します。 #. メインループ: * ``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) )``: ベータ式を使ってケルビン温度を計算します。 * 摂氏と華氏に変換: .. code-block:: python 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を使ってサーミスターで温度変化を測定できる基本的な温度計を作成しました。このプロジェクトでは、アナログ入力の読み取り、計算、センサーのデータを解釈して有意義な情報を得る方法を示しました。