注釈

こんにちは!FacebookのSunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!仲間たちと一緒にRaspberry Pi、Arduino、ESP32についてさらに深く学びましょう。

参加する理由は?

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

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

  • 特別なプレビュー: 新製品の発表やプレビューに早期アクセスできます。

  • 特別割引: 最新製品の独占的な割引を楽しめます。

  • フェスティブなプロモーションとプレゼント企画: プレゼント企画やホリデープロモーションに参加できます。

👉 私たちと一緒に探索し、創造を始める準備はできましたか?[ここ]をクリックして、今すぐ参加しましょう!

7.2 室温メーターの作成

このプロジェクトでは、サーミスターとI2C LCD1602ディスプレイを使用して 室温メーター を作成します。このシンプルで実用的なデバイスは、周囲の温度を測定し、その値をLCD画面に表示します。リアルタイムで環境の温度を測定できるようになります。

2.13 サーモメーター

必要な部品

このプロジェクトでは、以下の部品が必要です。

キット一式を購入するのが便利です。こちらがリンクです:

名称

このキットに含まれる部品

リンク

Pico 2 Wスターターキット

450+

Pico 2 W Kit

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

SN

部品

数量

リンク

1

Pico 2 Wの概要

1

2

Micro USBケーブル

1

3

ブレッドボード

1

買う

4

ジャンパーワイヤー

数本

買う

5

抵抗器

1(10KΩ)

買う

6

サーミスター

1

買う

7

I2C LCD1602

1

買う

部品の理解

  • サーミスター: 温度に応じて抵抗が大きく変化する抵抗器の一種です。ここでは、負の温度係数(NTC)サーミスターを使用します。つまり、温度が上がると抵抗が減少します。

  • 電圧分割回路: サーミスターと固定抵抗を組み合わせて電圧分割回路を作り、温度の変化に応じて電圧の変化を測定します。

  • I2C LCD1602ディスプレイ: I2Cインターフェースを持つ16x2のキャラクタLCDディスプレイで、2本のデータ線(SDAとSCL)のみで接続でき、配線やコードが簡単になります。

回路図

sch_room_temp

配線

wiring_room_temp

コードの作成

サーミスターから温度を読み取り、LCDに表示するMicroPythonプログラムを作成します。

注釈

  • 7.2_room_temperature_meter.pypico-2w-kit-main/micropython から開くか、このコードをThonnyにコピーして「Run」をクリックするか、F5キーを押して実行します。

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

  • このプロジェクトでは lcd1602.py というライブラリを使用しますので、Picoにアップロードされているか確認してください。詳細なチュートリアルについては 1.4 Picoにライブラリをアップロード を参照してください。

from lcd1602 import LCD
from machine import I2C, Pin, ADC
import utime
import math

# サーミスターの初期化(ピン28のADC)
thermistor = ADC(28)  # サーミスターからのアナログ入力

# LCD1602ディスプレイのI2C通信の初期化
i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=400000)

# LCD1602ディスプレイを操作するためのLCDオブジェクトの作成
lcd = LCD(i2c)

# スタインハート・ハート方程式の定数
BETA = 3950  # サーミスターのベータ係数
R0 = 10000   # 25度Cでの抵抗
T0 = 298.15  # 参考温度(ケルビン)

def read_temperature():
    # サーミスターからの生のADC値を読み取る
    adc_value = thermistor.read_u16()

    # 生のADC値を電圧に変換
    voltage = adc_value * 3.3 / 65535

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

    # スタインハート・ハート方程式を適用して温度をケルビンで計算
    tempK = 1 / ((1 / T0) + (1 / BETA) * math.log(Rt / R0))

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

    return tempC

def main():
    while True:
        temperature = read_temperature()
        # 温度を小数点以下2桁にフォーマット
        temp_str = "{:.2f} C".format(temperature)

        # LCDに温度を表示
        lcd.clear()
        lcd.write(0, 0, "Room Temp:")
        lcd.write(4, 1, temp_str)

        # コンソールに温度を表示(オプション)
        print("Temperature:", temp_str)

        utime.sleep(1)

if __name__ == "__main__":
    main()

コードが実行されると、LCDに現在の室温(摂氏)が表示されます。 LCDが表示されない場合は、背面のポテンショメーターでコントラストを調整してください。 Thonnyのコンソールにも温度読み取り値が表示されます。

コードの理解

  1. インポートと初期化:

    • lcd1602.LCD: LCDディスプレイを操作するためのライブラリ。

    • machine.ADC: サーミスターからアナログ値を読み取るためのライブラリ。

    • math: 温度変換に必要な対数計算を行うためのライブラリ。

  2. 変数:

    • BETA: サーミスター特有のベータ係数(通常3950)。

    • R0: 参考温度でのサーミスターの抵抗(通常25°Cで10kΩ)。

    • T0: 参考温度(ケルビン単位、25°C + 273.15)。

    BETA = 3950  # サーミスターのベータ係数
    R0 = 10000   # 25度Cでの抵抗
    T0 = 298.15  # 参考温度(ケルビン)
    
  3. 温度の読み取り( read_temperature 関数):

    • ADC読み取り: サーミスターからアナログ値を読み取ります。

    • 電圧計算: ADC値を実際の電圧に変換します。

    • 抵抗計算(Rt): 電圧分割式を使用してサーミスターの抵抗を計算します。

    • スタインハート・ハート方程式: サーミスターの抵抗と温度の関係を示す数学的モデル。

    • 摂氏への変換: 温度をケルビンから摂氏に変換します。

    def read_temperature():
            # サーミスターからの生のADC値を読み取る
            adc_value = thermistor.read_u16()
    
            # 生のADC値を電圧に変換
            voltage = adc_value * 3.3 / 65535
    
            # サーミスターの抵抗を計算
            Rt = (voltage * R0) / (3.3 - voltage)
    
            # スタインハート・ハート方程式を適用して温度をケルビンで計算
            tempK = 1 / ((1 / T0) + (1 / BETA) * math.log(Rt / R0))
    
            # ケルビンから摂氏に変換
            tempC = tempK - 273.15
    
            return tempC
    
  4. メインループ( main 関数):

    • 温度を継続的に読み取り、表示します。

    • LCDに温度をフォーマットして表示します。

    • コンソールに温度を表示(デバッグ用オプション)。

    • 1秒ごとに待機します。

    def main():
        while True:
            temperature = read_temperature()
            # 温度を小数点以下2桁にフォーマット
            temp_str = "{:.2f} C".format(temperature)
    
            # LCDに温度を表示
            lcd.clear()
            lcd.write(0, 0, "Room Temp:")
            lcd.write(4, 1, temp_str)
    
            # コンソールに温度を表示(オプション)
            print("Temperature:", temp_str)
    
            utime.sleep(1)
    

トラブルシューティング

  • LCDに表示されない場合:

    • SDAおよびSCLの接続(GP6およびGP7)を確認します。

    • LCDが正しく電源供給されているか確認します。

    • LCDモジュールのコントラストポテンショメーターを調整します。

  • 温度が正しく表示されない場合:

    • サーミスターと抵抗が正しく接続されているか確認します。

    • 抵抗値が正しいか確認します。

    • BETA値がサーミスターの仕様に合っているか確認します。

  • プログラムエラー:

    • 必要なライブラリが正しくPicoにアップロードされているか確認します。

    • コードにタイプミスやインデントエラーがないか確認します。

さらに実験する

  • 摂氏から華氏に変換:

    read_temperature 関数を変更して、摂氏から華氏に変換します: tempF = (tempC * 9 / 5) + 32

  • 湿度測定を追加:

    DHT11またはDHT22センサーを統合して、温度と一緒に湿度も表示します。

  • データロギング:

    時間経過に伴う温度データをPicoのファイルに保存し、コンピュータで解析のためにプロットします。

  • 視覚的な警告:

    LEDやブザーを追加して、温度が特定の閾値を超えたときに警告を出します。

科学的背景の理解

  • サーミスターと温度測定:

    • サーミスターは温度変化に敏感で、精密な測定に最適です。

    • 電圧分割回路は、サーミスターの抵抗変化を電圧変化に変換し、PicoのADCで読み取ることができます。

  • スタインハート・ハート方程式:

    • 簡単な線形近似よりも精度の高い温度計算が可能です。

    • 正確な温度測定が必要なアプリケーションに不可欠です。

結論

おめでとうございます!Raspberry Pi Pico 2 Wを使用して、実用的な室温メーターを作成しました。このプロジェクトは、アナログセンサーとI2Cデバイスをインターフェースする方法を示すだけでなく、温度測定と表示技術に関する実務経験を提供します。

新しい機能を追加したり、他のセンサーと統合したりして、温度メーターをさらに拡張してみてください。このプロジェクトは、環境モニタリングや制御システムを探索するための堅実な基盤となります。