検索コード

ESP32 チュートリアル 25/55 - NTC と LCD を使用した温度測定 | SunFounder の ESP32 IoT 学習キット

ESP32 チュートリアル 25/55 - NTC と LCD を使用した温度測定 | SunFounder の ESP32 IoT 学習キット

このチュートリアルでは、ネガティブ温度係数(NTC)サーミスタを使用して温度を測定し、ESP32マイクロコントローラーを使ってLCD画面に測定値を表示する方法を学びます。プロジェクトでは、NTCサーミスタをESP32に接続し、LCDを使用して摂氏と華氏の両方で温度測定値を表示します。これは、ESP32プラットフォームを使用した温度センサーと表示技術の入門に最適な方法です。

ESP32-25-NTC_サーモメーターLCD

私たちは、Wi-FiとBluetoothを内蔵したESP32の機能を拡張するSunFounderのESP32拡張ボードを利用します。このボードはさまざまなセンサーやディスプレイと簡単に統合できるため、IoTプロジェクトに最適です。NTCサーミスタは、その抵抗に基づいて温度を測定し、抵抗は温度と逆相関の関係にあります。セットアップやコードに関するさらなる詳細については、ビデオをチェックしてください(ビデオの00:00)。

ハードウェアの説明

このプロジェクトで使用される主なコンポーネントには、ESP32マイクロコントローラー、NTCサーミスタ、抵抗器、およびLCDディスプレイが含まれます。ESP32は中央処理装置として機能し、サーミスタからのデータを処理し、LCDディスプレイを制御します。NTCサーミスタは温度に応じて抵抗値を変化させ、固定抵抗器との電圧分圧構成に基づいて温度を計算することを可能にします。

NTCサーミスタ

LCDディスプレイはセルシウスと華氏の両方の温度読み取りを表示します。LCDと通信するためにI2Cプロトコルを使用し、必要なピンの数を減らすことで配線を簡素化します。NTCサーミスタには、温度が上昇するにつれて抵抗が減少する特性があり、これは私たちの計算にとって重要です。

データシートの詳細

製造業者 サンファウンダー
部品番号 NTCサーミスタ
定格抵抗 10 kΩ
ベータ値 3950 K
温度範囲 -40°Cから125°C
パッケージ 軸方向の

  • 予想される温度範囲に対してサーミスタの定格を確認してください。
  • 電圧分圧器には10 kΩの抵抗を使用してください。さもないと、読み取り値が不正確になります。
  • ショート回路を避けるために接続を確認してください。
  • LCDのI2Cアドレスを正しく保つ(通常は0x27)。
  • ESP32および周辺機器のために適切な電源レベルを使用してください。
  • シリアルモニターのボーレートがコードの設定(115200)と一致していることを確認してください。
NTC_formula

配線指示書

ESP32-11_LCD-wiring
ESP32-25-NTC_thermometer_wiring

コンポーネントを配線するには、まずNTCサーミスタをESP32に接続します。サーミスタには極性がないため、どちらの方向でも接続できます。サーミスタの1つのリードをESP32のグラウンド(GND)ピンに接続します。もう1つのリードは10 kΩの抵抗に接続し、その抵抗はESP32の3.3Vピンに接続されます。サーミスタと抵抗の接続点はピンに接続します。35ESP32上で、温度計算のための電圧を読み取ります。

LCDの場合、グラウンドピン(通常は上から2番目のピン)をESP32のGNDに接続します。次に、VCC(通常は1番ピン)をESP32の5Vピンに接続します。SDAピン(通常は3番ピン)はピンに接続する必要があります。21ESP32上で、SCLピン(通常は4番ピン)はピンに接続する必要があります22すべての接続が確実であることを確認し、ピン番号を再確認して間違いを避けてください。

コード例とウォークスルー

コードは、サーミスタの定数を定義することから始まります。これには、ピン番号、基準電圧、および抵抗値が含まれます。セットアップ関数は、シリアル通信を初期化し、サーミスタピンを入力として設定します。

const int thermistorPin = 35; // Pin connected to the thermistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // the 'other' resistor

メインループは、サーミスタピンからアナログ値を読み取り、抵抗を計算し、次にベータパラメータの方程式を使用して摂氏と華氏の両方で温度を計算します。計算された値はシリアルモニタに出力されます。

int adcValue = analogRead(thermistorPin); // Read ADC value
float voltage = (adcValue * referenceVoltage) / 4095.0; // Calculate voltage
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calculate thermistor resistance

最後に、温度がLCDに表示されます。lcd.print()温度の値を度記号とともに表示するために関数が使用されます。

lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Degree symbol
lcd.print("C");

このコードは、最新の温度測定値を使用して、300ミリ秒ごとにLCDを効果的に更新し、リアルタイム監視を可能にします。

デモンストレーション / 期待されること

コードを実行し、配線を完成させると、LCDに摂氏と華氏の温度読み取り値が表示されるはずです。サーミスタを手に持つと、抵抗が減少するにつれて温度が上昇するのがわかるでしょう。極性が逆になっていないか注意し、接続が確実であることを確認してください。適切に配線されていない場合、不正確な読み取りにつながることがあります(動画の04:50)。

動画のタイムスタンプ

  • 00:00 スタート
  • プロジェクトの1:50の紹介
  • 5:32 配線の説明
  • 8:20 ESP32のためのArduino NTCコードの説明
  • 13:38 Arduino IDEでESP32ボードとCOMポートを選択しています
  • 15:20 NTC温度測定デモンストレーション
  • 17:34 ESP32のLCD1602上のNTC温度
  • 18:42 NTC ArduinoコードとLCDの説明
  • 21:15 LCD上の温度のデモンストレーション
  • 23:13 緑のLCDまたは青のLCD1601ですか?

画像

ESP32-11_LCD-wiring
ESP32-11_LCD-wiring
ESP32-11_LCD-wiring-schematic
ESP32-11_LCD-wiring-schematic
NTC_thermistor
NTC_thermistor
ESP32-25-NTC_thermometer_schematic
ESP32-25-NTC_thermometer_schematic
ESP32-25-NTC_thermometer_wiring
ESP32-25-NTC_thermometer_wiring
NTC_formula
NTC_formula
ESP32-25-NTC_thermometeLCD
ESP32-25-NTC_thermometeLCD
824-ESP32 Tutorial 25/55- SunFounder doc page NTC Thermometer
言語: C++
/*
 * // 定数を定義する
 */
const int thermistorPin = 35; // サーミスタに接続されたピン
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // 「別の」抵抗器
const float beta = 3950; // ベータ値(典型値)
const float nominalTemperature = 25; // 温度係数を計算するための名目温度
const float nominalResistance = 10000; // 定格温度における抵抗値

void setup() {
  Serial.begin(115200); // シリアル通信を初期化する
  pinMode(thermistorPin, INPUT); // ピンを入力として設定する
}

void loop() {
  int adcValue = analogRead(thermistorPin); // ADC値を読み取る
  float voltage = (adcValue * referenceVoltage) / 4095.0; // 電圧を計算する
  float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // 更新された構成でサーミスタの抵抗を計算する

 // ベータパラメータ方程式を使用して温度を計算します。
  float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));

  float tempC = tempK - 273.15; // 摂氏で温度を取得する
  float tempF = 1.8 * tempC + 32.0; // 華氏温度を取得する

 // 印刷温度
  printf("TempC: %.2f C\n", tempC);
  printf("TempF: %.2f F\n", tempF);

  delay(300); // 1秒待ってください
}

825-ESP32 Tutorial 25/55- Arduino code for LCD with NTC thermistor
言語: C++
/*
 * これはSunFounderのESP32 IoT学習キットコードのレッスン25/55です。NTCからの温度をLCD画面に表示します。これはAhmad ShamshiriによってSunFounderのESP32 IoT学習キットのために書かれました。フルビデオを視聴するには、https://youtu.be/zJh-gWY0DmEをクリックしてください。このコード、配線図、その他のリソースはhttps://robojax.com/RJT707からダウンロードできます。
 */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

 // SDA->21、SCL->22
LiquidCrystal_I2C lcd(0x27,16,2); // 16文字と2行のディスプレイ用にLCDアドレスを0x27に設定します。


 // 定数を定義する
const int thermistorPin = 35; // サーミスタに接続されたピン
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // 抵抗値(10k)
const float beta = 3950; // ベータ値(典型値)
const float nominalTemperature = 25; // 温度係数を計算するための名目温度
const float nominalResistance = 10000; // 名目温度における抵抗値

void setup() {

  lcd.clear();
  lcd.init(); // LCDを初期化する
  lcd.backlight(); // LCD バックライトをオンにします。

 // Serial.begin(115200); // シリアル通信を初期化
  pinMode(thermistorPin, INPUT); // ピンを入力として設定する
}

void loop() {
  int adcValue = analogRead(thermistorPin); // ADC値を読み取る
  float voltage = (adcValue * referenceVoltage) / 4095.0; // 電圧を計算する
  float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // 更新された設定でサーミスタ抵抗を計算する

 // ベータパラメータ方程式を用いて温度を計算する
  float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));

  float tempC = tempK - 273.15; // 摂氏で温度を取得する
  float tempF = 1.8 * tempC + 32.0; // 華氏温度を取得する

 // 印刷温度
 // printf("TempC: %.2f C\n", tempC);
 // printf("温度F: %.2f F\n", tempF);

 // LCDに温度を表示
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(tempC, 1);
  lcd.write(223); // 度記号
  lcd.print("C");

  lcd.setCursor(0, 1);
  lcd.print("Temp: ");
  lcd.print(tempF, 1);
  lcd.write(223); // 度記号
  lcd.print("F");

  delay(300); // 1秒待ってください
}

リソースと参考文献

ファイル📁

ファイルは利用できません。