Project 13.1 サーミスタ/Thermometer

前回はフォトレジスターを使って周辺の明るさに応じてLEDの光量をコントロールしてみました。

あわせて読みたい
Project 12.1 フォトレジスター/NightLamp 前回はポテンションメーターを使用して8LED をグルグル回してみました。 https://kaneshige.org/?p=401 今回はフォトレジスターを使用して暗くなったらLEDを点灯させる...

今回はサーミスタを使用して温度を測定してみたいと思います。

目次

サーミスタとは?

サーミスタは温度によって抵抗値が変化する電子部品です。温度変化を感知するとサーミスタの抵抗値が変化するため、この特性を利用して温度を検出することができます。今回の用途とは違いますが、突入電流防止回路として使用されることもあります。(電流OFF時は冷えているので抵抗が大きく、電流が流れると温度が上がり抵抗が下がる、という特性を利用しています)

以下にサーミスタと、その回路図記号を示します。

サーミスタの抵抗値と温度の関係は、一般的に以下の式で表されます。

  • Rt: 温度 T2 におけるサーミスタの抵抗値
  • R: 基準温度 T1 におけるサーミスタの公称抵抗値
  • EXP[n]: e (自然対数の底) の n 乗
  • B: サーミスタ固有の熱定数
  • T2: 絶対温度 (K) ケルビン温度 = 273.15 + セ氏温度
  • T1: 基準温度 (K)

この式は、指数関数的な関係を表しており、温度が上昇するにつれてサーミスタの抵抗値は指数関数的に変化します。

今回使用するサーミスタは以下の特性です。

  • B = 3950
  • R = 10k (10,000Ω)
  • T1 = 25°C (298.15 K)

サーミスタの接続はフォトレジスターの時と似ています。

サーミスタの抵抗値と温度の関係式を用いて、AD変換器で測定したサーミスタ両端の電圧から温度を算出することができます。

手順

  1. サーミスタ両端の電圧を測定: AD変換器を用いて、サーミスタ両端の電圧を測定します。
  2. サーミスタの抵抗値を算出: 分圧の法則を用いて、サーミスタの抵抗値を算出します。
  3. 温度を算出: サーミスタの抵抗値と温度の関係式を用いて、温度を算出します。

分圧の法則を用いて、サーミスタの抵抗値を算出する式は以下の通りです。

分圧の法則を用いて、サーミスタの抵抗値を算出する式は以下の通りです。

Rt = (Vout / Vin) * R2

  • Vout: AD変換器で測定したサーミスタ両端の電圧
  • Vin: 電源電圧
  • R2: 直列に接続された抵抗器の抵抗値

上記の式を組み合わせることで、温度を算出する式は以下の通りになります。

T2 = 1 / (B * log(Rt / R) + 1/T1)

以下に、例を示します。

  • サーミスタ: B = 3950, R = 10kΩ, T0 = 25°C (298.15 K)
  • 電源電圧: 3.3V
  • R2: 10kΩ
  • Vout: 2.5V

上記の値を式に代入すると、以下のようになります。

Rt = (2.5 V / 3.3 V) * 10 kΩ ≈ 7.57 kΩ
T = 1 / (B * log(7.57 kΩ / 10 kΩ) + 1/T0) ≈ 30.2°C

回路図

接続図

コード

/**********************************************************************
  Filename    : Thermomter
  Description : Making a thermometer by thermistor.
  Auther      : www.freenove.com
  Modification: 2022/10/21
**********************************************************************/
#define PIN_ANALOG_IN   1
void setup() {
  Serial.begin(115200);
}

void loop() {
  int adcValue = analogRead(PIN_ANALOG_IN);                       //read ADC pin
  double voltage = (float)adcValue / 4095.0 * 3.3;                // calculate voltage
  double Rt = 10 * voltage / (3.3 - voltage);                     //calculate resistance value of thermistor
  double tempK = 1 / (1 / (273.15 + 25) + log(Rt / 10) / 3950.0); //calculate temperature (Kelvin)
  double tempC = tempK - 273.15;                                  //calculate temperature (Celsius)
  Serial.printf("ADC value : %d,\tVoltage : %.2fV, \tTemperature : %.2fC\n", adcValue, voltage, tempC);
  delay(1000);
}

今回はプログラミングというよりも工学的な内容でしたね。
温度が測れると、室温に応じてエアコンを入れるなどのスマートホームプログラムが作れるようになりますね!

次回はジョイスティックの値を読み取ってみましょう。

あわせて読みたい
Project 14.1 ジョイスティック/Joystick 前回はサーミスタを使用して温度を測定してみました。 https://kaneshige.org/?p=412 今回はジョイスティックの値を読み取ってみましょう。 【ジョイスティックについて...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次