はじめに
サーミスターを使ってみた
使ったもの
104NT-4-R025H42G
抵抗68kΩ
Arduino UNO
マルチメーター
NTCサーミスタの原理
NTCサーミスタ は温度の上昇に対して
抵抗値が減少していく特性がある。
温度と抵抗値の関係は線形ではないので
扱う時工夫が必要。
以下の式が温度Tでのサーミスタ の抵抗値
である。ただしB定数と温度T0の時のR0の
値を代入すること。
273をTに足している理由は
B定数の単位はケルビンであるため
℃からK(ケルビン)に直している。
B定数とT0,R0の値はデータシートに
記載されている。
B定数とT0,R0の値を代入して
excelでグラフを描いてみると
縦軸が温度[℃] 横軸がR[Ω]
緑線がさっき示した式のグラフ
黒線が近似曲線
とりあえず使ってみる
サーミスタは温度によって抵抗値
が変化するのでテスターで測定してみる
測定結果は98.5kΩ
データシートを見てみると、
だいたい25度ぐらいでちゃんと使えそう
回路図
回路図を以下に示した。
ただ単に分圧回路を作り、その電圧変化を
アナログピンで読み取り、サーミスタの抵抗値を
計算する。
見にくいけど、ブレッドボードに
配線した写真
スケッチ 電圧値を表示する
とりあえずAnalogReadで電圧値を
読み取れるか試してみる
void setup() { Serial.begin(9600); } void loop() { float val; val = analogRead(A5); Serial.println(val); delay(500); }
ちゃんと読み取れたっぽい
スケッチ 温度を表示
最初に示したサーミスタの特性式を
そのままスケッチに書き込んでも
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); }
実行してみるとこんな感じ
そこそこいい値が出ていると思う
<参考文献>