前回に続き、ADコンバータを使って、傍らに落ちていたサーミスタから温度の取得までを行うかなぁとおもう。手元にあるサーミスタが

これは一体、どこから持ってきたのかというと・・・


これについていたサーミスタ。防水仕様!!。テスターには接続して使っていないのでADコンバータにつないでみたくなったw。まずは、実際テスターで抵抗値がどのくらい変化するか観察してみる。

室温22度ぐらいで、11.85kΩ。まぁ、まず一般的な10kΩ(25℃)のサーミスタと考えられる。

上のような商品なんだろうなと思う。SODIAL製なんかコネクタまで一緒で同じかなとも思った。

サーミスタの抵抗値を実際の温度に変換するには、何かしら計算が必要。下のサイトでざっくりと勉強。とても参考になりました。感謝です。

サーミスタにには温度が上がると抵抗が下がるNTC、また逆タイプのPTCがあるらしく、一般的にはNTCで、これもこのタイプだった。また、サーミスタにはB値という、ある規定された温度間での抵抗値変化の固有値があるらしくサーミスタごとに違うとのこと。このサーミスタ・・・B値が不明ww。B値って簡単に求まるのかなと思い、検索すると

(抜粋)

むむ・・・。T0の0度は冬だからどうにかなるとして、T1の100度はちょっと厳しい。100度でなくてもいいんだろうけど・・・計測予定の温度が、その2点間にあればいいので、「TSYS01 0.1℃精密温度センサモジュール」なんかを使って求めようかと思ったけど長くなりそう(この段階でAM0:00)なので、SODIALのB=3380をとりあえず準用しようと思うw。

では、Pythonで実際コードを書いてみる。まずは抵抗値から温度を求めるコード。下の式を参考にした。ln(自然対数)なんて高校以来w。pythonはmath.log()で底を指定しなければeが底の自然対数となる。常用対数(底が10)とごっちゃにならないように・・・まぁlogで底が書いてなければ自然対数だった気がするけどどうだったかな

(抜粋)

[py]

# B値
B_value = 3380

# 基準温度
B_temp = 25
# 基準温度での抵抗値10kΩ
B_reg = 10000
# 0℃の絶対温度
abs_temp = 273.15

# 抵抗値より温度計算
t = (1/((1/B_value)*math.log(therm_reg/B_reg)+1/(B_temp+abs_temp))) – abs_temp
[/py]

therm_regはサーミスタの抵抗値。これは次の分圧回路からADコンバータを介して取得した電圧値から求める。入力電圧Vin=3.3、分圧抵抗(バランス抵抗)R1=10000Ωとして、下の式を参考にPythonでコード化。

(抜粋)

とりあえず、0.5秒毎に表示するコード全体は次の通り


この動画、ボケボケですんませんw。一応、手でサーミスタを握ると体温(35℃)付近まで上昇し、離すと低下していますね。離しているときは大体室温と同じかなぁとおもうけど、精度の程は・・・。あと、抵抗10kΩはテスターで測定して10kΩに一番近いものを選びました(テスターが正しいかどうかはまた別w)。B値もあやしいしw。とりあえず眠かったのでここまでにしました。

 

 

投稿者 まる

Twitter : @dinagon Instagram : @d_dinagon フォロバします!!最近、ESP/Arduinoいじりすぎでアプリ開発が進んでない。歯医者なのに歯のことはあまり触れませんw