注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。

参加する理由

  • 専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。

  • 学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。

  • 限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。

  • 特別割引: 最新製品を特別割引でお楽しみいただけます。

  • 季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。

👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!

2.10 サーミスタ

はじめに

サーミスタ(Thermistor)は温度に応じて抵抗値が変化する温度感知抵抗であり、温度測定や温度制御の用途で広く利用されています。光を検出するフォトレジスタとは異なり、サーミスタは温度の変化に応じて抵抗値が変化します。そのため、ヒートアラーム、サーモスタット、温度監視システムなどのプロジェクトに適しています。本プロジェクトでは、サーミスタを使用して周囲温度を測定し、摂氏(Celsius)と華氏(Fahrenheit)の両方で表示する方法を学びます。


必要なもの

このプロジェクトに必要なコンポーネントは以下のとおりです。

COMPONENT INTRODUCTION

PURCHASE LINK

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

サーミスター

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

以下はサーミスタをFusion HAT+に接続する方法を示した回路図です。

../_images/2.2.2_sch.png

配線図

以下の配線図を参考に回路を組み立ててください。

../_images/2.2.2_bb.png

次の点を確認してください。

  • サーミスタがFusion HAT+に正しく接続されていること。

  • 電源とGNDの接続が確実であること。

  • 配線が図と一致しており、正常に動作するように接続されていること。


サンプルの実行

このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに含まれています。 以下の手順に従ってサンプルを実行してください。

cd ~/ai-lab-kit/python/
sudo python3 2.10_Thermistor.py

このPythonスクリプトは、Fusion HAT+ を介してサーミスタからアナログ信号を読み取り、対応する温度を計算します。実行すると次のように動作します。

  1. スクリプトは電圧値を継続的に読み取ります。

  2. サーミスタの抵抗値( Rt )を計算し、ケルビン(Kelvin)、摂氏(Celsius)、華氏(Fahrenheit)の温度を求めます。

  3. 計算された温度は、 Celsius: <value> C  Fahrenheit: <value> F の形式で小数点以下2桁まで表示されます。

  4. この処理は0.2秒ごとに繰り返され、 Ctrl+C が押されるまで実行されます。


コード

以下はこのプロジェクトで使用するPythonコードです。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from fusion_hat.adc import ADC
import time
import math

thermistor = ADC('A3')

# Run the process in a try-except block
try:
   while True:
      # Read the voltage from the sensor
      Vr = thermistor.read_voltage()
      # Calculate the resistance of the thermistor
      if 3.3 - Vr < 0.1:
            print("Please check the sensor")
            continue
      else:
            Rt = 10000 * Vr / (3.3 - Vr)
            # Calculate the temperature in Kelvin
            temp = 1 / (((math.log(Rt / 10000)) / 3950) + (1 / (273.15 + 25)))
            # Convert Kelvin to Celsius
            Cel = temp - 273.15
            # Convert Celsius to Fahrenheit
            Fah = Cel * 1.8 + 32
            # Print the temperature in both Celsius and Fahrenheit
            print('Celsius: %.2f C  Fahrenheit: %.2f F' % (Cel, Fah))
            # Wait for 0.2 seconds before the next read
            time.sleep(0.2)

# Handle KeyboardInterrupt for graceful termination
except KeyboardInterrupt:
   pass

コードの解説

  1. インポート:

    from fusion_hat.adc import ADC
    import time
    import math
    

    このスクリプトでは必要なモジュールをインポートします。 fusion_hat ライブラリの ADC は電圧読み取りに使用し、 time は待機処理、 math は数値計算に使用します。

  2. 初期化:

    thermistor = ADC('A3')
    

    A3ピンに接続されたADCオブジェクトを初期化します。

  3. データ処理:

    while True:
       # Read the voltage from the sensor
       Vr = thermistor.read_voltage()
       # Calculate the resistance of the thermistor
       if 3.3 - Vr < 0.1:
          print("Please check the sensor")
          continue
       else:
          Rt = 10000 * Vr / (3.3 - Vr)
          temp = 1 / (((math.log(Rt / 10000)) / 3950) + (1 / (273.15 + 25))) # Calculate the temperature in Kelvin
          Cel = temp - 273.15 # Convert Kelvin to Celsius
          Fah = Cel * 1.8 + 32 # Convert Celsius to Fahrenheit
    
    • サーミスタから電圧を読み取ります。

    • サーミスタの抵抗値を計算します。

    • Steinhart-Hart方程式を用いてケルビン温度を求めます。

    • ケルビンを摂氏および華氏に変換します。

  4. 出力:

    print('Celsius: %.2f C  Fahrenheit: %.2f F' % (Cel, Fah))
    time.sleep(0.2)
    

    計算された温度は摂氏と華氏の両方で画面に表示されます。 また、読み取り値の安定化とCPU負荷軽減のため、短い待機時間を設けています。


トラブルシューティング

  1. 温度値が不正確または不安定

    • 原因: サーミスタのパラメータ設定が誤っている、または入力信号にノイズがある。

    • 解決方法:

      • サーミスタの25°C時の抵抗値(このスクリプトでは 10000)と 3950 のB値が正しいことを確認してください。

      • ノイズを低減するためにコンデンサやソフトウェアフィルタを追加してください。

  2. ゼロ除算エラー

    • 原因: 電圧 Vr が0または3.3Vに非常に近く、抵抗計算時にゼロ除算が発生する。

    • 解決方法: ADC入力電圧が0〜3.3Vの範囲内であることを確認し、短絡や断線がないか配線を確認してください。


拡張アイデア

  1. LCDやOLEDへの温度表示 LCDまたはOLEDディスプレイを使用して温度をリアルタイムで表示できます。

  2. データログ記録 温度データをファイルに保存して分析できます。

    with open("temperature_log.txt", "a") as log_file:
       log_file.write(f"Celsius: {Cel:.2f}, Fahrenheit: {Fah:.2f}\n")
    
  3. しきい値アラート 温度が一定値を超えた場合に警告を表示します。

    if Cel > 30:
       print("Warning: High temperature!")
    
  4. LEDまたはブザーによる通知 温度に応じて視覚または音によるフィードバックを追加できます。

    from fusion_hat import Pin
    led = Pin(27.Pin.OUT)
    if Cel > 30:
          led.on()
    else:
          led.off()
    

まとめ

この実験では、Fusion HAT+ とサーミスタを使用して周囲温度を測定する方法を学びました。アナログ-デジタル変換とSteinhart-Hart方程式の原理を理解することで、さまざまな用途に対応した高度な温度監視および制御システムを構築することができます。