arduinoでNTCサーミスタ(104NT-4-R025H42G)使ってみた

スポンサーリンク

はじめに

サーミスターを使ってみた

使ったもの

104NT-4-R025H42G
抵抗68kΩ
Arduino UNO
マルチメーター

NTCサーミスタの原理

NTCサーミスタ は温度の上昇に対して
抵抗値が減少していく特性がある。

温度と抵抗値の関係は線形ではないので
扱う時工夫が必要。

以下の式が温度Tでのサーミスタ の抵抗値
である。ただしB定数と温度T0の時のR0の
値を代入すること。

f:id:shangtian:20180806215906p:plain

273をTに足している理由は
B定数の単位はケルビンであるため
℃からK(ケルビン)に直している。

B定数とT0,R0の値はデータシートに
記載されている。

f:id:shangtian:20180807095427p:plain

B定数とT0,R0の値を代入して
excelでグラフを描いてみると

f:id:shangtian:20180807100240p:plain

縦軸が温度[℃] 横軸がR[Ω]
緑線がさっき示した式のグラフ
黒線が近似曲線

とりあえず使ってみる

サーミスタは温度によって抵抗値
が変化するのでテスターで測定してみる

f:id:shangtian:20180806220106j:plain

測定結果は98.5kΩ
データシートを見てみると、
だいたい25度ぐらいでちゃんと使えそう

f:id:shangtian:20180806220803p:plain

回路図

回路図を以下に示した。

f:id:shangtian:20180806214027p:plain

ただ単に分圧回路を作り、その電圧変化を
アナログピンで読み取り、サーミスタの抵抗値を
計算する。

見にくいけど、ブレッドボードに
配線した写真

f:id:shangtian:20180806214325j:plain

スケッチ 電圧値を表示する

とりあえずAnalogReadで電圧値を
読み取れるか試してみる

void setup() {
  Serial.begin(9600);
  
}

void loop() {
  float val;

  val = analogRead(A5);
  Serial.println(val);
  delay(500);
}

ちゃんと読み取れたっぽい

f:id:shangtian:20180806221617p:plain

スケッチ 温度を表示

最初に示したサーミスタの特性式を
そのままスケッチに書き込んでも
logの計算が桁数が大きすぎるため
Arduinoでは上手くできなかった。
(ずっと0をはき続けた)

そこで多項式の近似曲線を求めて
それを使って温度を求めていく

const float R1 = 68000;
void setup() {
  Serial.begin(9600);
}

void loop() {
  float val,v,R,T;
  val = analogRead(A5);
  v = 5000*val/1024;
  R = v*R1/(5000-v); //サーミスタの抵抗値

//近似曲線の式から温度を計算する
  float y = 0.000000000000000000254402567772*pow(R,4) - 0.000000000000099002943606193400*pow(R,3) + 0.000000015862761608730100000000*pow(R,2)- 0.001424683215525710000000000000*R + 82.4074664902436;
  Serial.println(y); 

  
  delay(1000);
}

実行してみるとこんな感じ
そこそこいい値が出ていると思う f:id:shangtian:20180806222239p:plain

www.shangtian.tokyo

<参考文献>

サーミスタで温度を計る

NTCサーミスタによる測温回路とパラメータの選定

NTサーミスタ(高耐熱、高感度ガラス封止サーミスタ) 104NT-4-R025H42Gの通販ならマルツオンライン

http://akizukidenshi.com/download/ds/akizuki/%E3%82%B5%E3%83%BC%E3%83%9F%E3%82%B9%E3%82%BF%E6%8A%B5%E6%8A%97%E5%80%A4%E8%A8%88%E7%AE%97%E6%96%B9%E6%B3%95.pdf