NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

サーミスタの使い方! その2( 実測編!)(103JT-050)

イメージ 7
サーミスタ(103JT-050)

 前回の記事サーミスタを使った「抵抗の分圧回路出力電圧」から、「サーミスタ温度」を求める式を作りました。
 今回は理論通りに温度が測定可能か実際に回路を作って実験してみました!

1.サーミスタとは

 サーミスタ(英:Thermistor)とは、Thermally Sensitive Resistor(熱に敏感な抵抗体)の総称で、 負の温度係数を有するNTC※1サーミスタを一般にサーミスタと呼ばれています。
 NTCサーミスタは温度に対する抵抗値変化が大きいことから、温度センサとして広く使用されています。
 サーミスタは金属酸化物を主原料とし高温にて焼結して得られるセラミック半導体で、 その製造法や構造によって各種の形状・特性があり、温度測定や温度補償等の目的に応じたものが使用されています。

※以下補足です

※1:温度の上昇で抵抗が大きくなるものを PTC、減少するものを NTC、特定の温度で抵抗が急変するものをCTRと言う。


1.1 103JT-050とは
  今回使用するJTサーミスタの特徴として、最大の厚さが500μmと非常に薄型の温度センサです。
 電気絶縁性も優れており、電極に接触し易い場所にも使用可能です。
 今回の使用目的にピッタリな薄型なのでチョイスしました。

イメージ 2
図1:JTサーミスタ103JT-050」の外観および寸法

1.2 仕様
 サーミスタ103JT-050仕様を表1に、サーミスタの各温度における抵抗値を表2に示します
表1: JTサーミスタ103JT-050の仕様
イメージ 18

表2:JTサーミスタ103JT-050の各温度における抵抗値一覧
温度T(℃)抵抗値R1(kΩ)
-50367.7
-40204.7
-30118.5
-2071.02
-1043.67
27.70
1018.07
2012.11
2510.00
308.301
405.811
504.147
603.011
702.224
801.668
851.451
901.267
1000.9753
1100.759
1200.5981
1250.5331
103JT-050」のSDSより引用させて頂きました

1.3 回路
 サーミスタの抵抗値変化は非線形であり、種類も様々あります。
 この為、図2回路例のようにサーミスタ(R1)と調整用の固定抵抗器(R2)を直列に接続し、中間から出力電圧(Vout)を得て測りやすい電圧にリニアライズする方法(分圧回路)が一般的です。
イメージ 3
図2:サーミスタの直線化回路例

1.4 サーミスタ回路の出力電圧から温度に変換
 図2サーミスタ回路の出力電圧から温度に変換する式を以下①~④に示します。
 最初に固定抵抗値R2を①の式1で求め回路を作ります。
 作った回路で測定した出力電圧(Vout)から、サーミスタ温度(T)を求める為には、②~④に示す式3,6,7を順に計算すればOK!

:固定抵抗値(R2,単位:kΩ)を選定する

②:出力電圧(Vout,単位:V)と電源電圧(Vcc,単位:V)から、サーミスタ抵抗値(R1,単位:kΩ)に換算
イメージ 1

③:表1の「定数B」を「変数B」として最適化(単位:K)
イメージ 2

④:サーミスタ抵抗値(R1,単位:kΩ)から温度(T,単位:K)に換算
イメージ 3
※計算の詳細は前回記事をご覧下さい

2. 実験!

 実際にArduinoUNOにサーミスタを接続して温度が測定出来るか実験してみました!

2.1 接続
 回路接続図をFritzingを使って図3の様に書いてみました。 また図3の通り実際に繋げた状態を図4に示します。
 固定抵抗(R2)には4.7kΩを使用しました。
イメージ 5
図3:ブレッドボード回路図

イメージ 6
図4:実際に作ったもの

2.2 プログラム
 図4の回路で使っている、ArduinoUNOに書き込むプログラムを図5に示します。
 内容としては、ArduinoUNOのA0ピンでサーミスタ回路の出力電圧を測定し、1.4 ②~④の流れでサーミスタ温度を推定し、シリアルモニタに出力します。
/*NOBのArduino日記! Thermistorの使い方 20180826*/
#include <math.h>
double Vout;  //出力電圧(Vout)
double R1;  //サーミスタ抵抗値(R1)
double B;  //補正係数(B)
double T;  //サーミスタ温度(T)

void setup() {
 Serial.begin(9600);           //9600bpsでシリアルポートを開く
 pinMode(A0, INPUT);  //A0番ピンを入力用に設定する
}

void loop() {
 Vout = analogRead(0) * 5.0 / 1024.0; //出力電圧(Vout)を測定
 R1 = (5.0 * 4.7) / Vout - 4.7; //サーミスタ抵抗値(R1)を計算
 B = 3452.9 * pow(R1,-0.012329); //補正係数(B)を計算
 T = B / log(R1*exp(B/(25+273.15))/10)-273.15; //サーミスタ温度(T)を計算
 Serial.print("Vout:");Serial.print(Vout); //温度をシリアル出力
 Serial.print(",R1:");Serial.print(R1); //温度をシリアル出力
 Serial.print(" B:");Serial.print(B); //温度をシリアル出力
 Serial.print(" T:");Serial.println(T); //温度をシリアル出力
 delay(1000);
}
イメージ 1
図5:プログラムの内容

2.3 実験!
 図4の回路で図5のプログラムを実行した結果を図6に示します。

エアコン25℃設定の室温
 室温で測定した結果(図6上半分)、24.71~25.19℃とかなりいい感じの温度が出て来ました!

〇センサーを指で触る
 サーミスタ先端部を指で挟んだ状態で測定した結果(図6下半分)、最終的に33.53℃で安定して来ました。
 指先の温度は体温(36℃位)より若干低く出るので、こんなものじゃないでしょうか
イメージ 4
図6:Arduino IDE シリアルモニター

 なんともザックリした基準温度での確認結果ですが、サーミスタでちゃんと温度を測れました
 これで一個¥140の温度計が作れます!
 サーミスタは3個買ってきたので、ArduinoUNOと接続しやすいように多チャンネル測定シールド(折角なので6chの温度or電圧測定シールド)を次回作ります!

イメージ 1イメージ 3
励みになりますのでよければクリック下さい(^o^)/



この商品は、マルツオンライン が販売、発送します。