Arduinoで体温計をつくる
作り始めた経緯
だいぶ前に病院で体温を測った時に1分かからないくらいで測定された。
今どきの体温計はかなり早く測定できるんだななんて思っていたら、
調べてみる15秒で調べられるものまであるらしい。
速く測定するために予測式なんて方式をとっているようだが、詳しい考え方は
多くの人の体温上昇データを統計的に処理・・・とかうまくお茶を濁された感じだったので自分なりに速く、そして精度よく予測し測定する方法を考えていこうと思う。
学校の勉強の復習も兼ねて今ある知識で何かを作りたいと考え、偏った知識で作っているのでいるので間違っているかもしれないが、とりあえずやってみる。
材料
arduino(家にあったstudino)
サーミスタ[NXFT15XH103FA2B]
10KΩ抵抗
作りたいのはわきに挟むようなタイプの体温計だ。体温をどんなセンサで測温するかを考えた。
もちろん精度のいいセンサがいいが、わきと体温計の間で熱が移動するとき、測温部が大きいと体温計によってわきが冷やされてしまい、本来のわきの温度に戻るまでに時間がかかり予測が難しくなるだろうと考え、測温部を極力小さくするためにサーミスタを選んだ。
NTCサーミスタ(温度検知・温度補償用)10kΩ(5個入): センサ一般 秋月電子通商 電子部品 ネット通販
回路設計と温度の測定
回路は次のように接続した。
図の黒いやつが温度によって抵抗値が変わるサーミスタと呼ばれるセンサだ。
抵抗値をanalog inのピンの値と分圧の法則から求め、抵抗値から温度を求めていく。
#include <math.h> int analog = 0; //アナログpin 生値 int V_0 = 3276; //回路電源[mV] double V_R0 =1; //部分電圧[mV] int circuit_R0 =10000; //回路内抵抗[Ω] int thermo_B = 3380; //サーミスタB定数 int thermo_R0 = 10000; //サーミスタ基準抵抗値[Ω] int thermo_T0 = 298; //サーミスタ基準温度[K] double thermo_R = 1; //サーミスタ抵抗値[Ω] double temp = 25.00; //測定温度[℃] void setup () { Serial.begin(9600); /* 9600 bpsで接続 */ Serial.println("READ_START"); /* 最初に1度だけ Start を表示 */ } void loop () { analog=analogRead(0); V_R0 = analog*3.3/ 1.024; //回路内抵抗の消費電圧を算出 thermo_R=V_0/V_R0* circuit_R0 - circuit_R0; //サーミスタの抵抗値を算出 //Serial.println( thermo_R); //サーミスタの抵抗値を表示 temp=(1000/(1/(0.001*thermo_T0)+log(thermo_R/thermo_R0)*1000/thermo_B)-273); //温度の計算 Serial.println(temp,1); //温度の表示 delay(100); // 0.1s 待つ }
より精度を上げるため抵抗値や供給電圧はテスターでの測定値を利用した。
電源供給はPCからUSBで行っている。テスターで測った結果と照らし合わせると、ANALOG INは5Vではなく3.3Vを1024分割していた。
計算順序を変え、計算途中で大きすぎたり、小さすぎる数字が出てくるとうまく値が出なくなってしまうので注意が必要だった。
このままだとただの温度計ではあるが、これだけでも一応一分ぐらいで平熱をはかれた。
これからは最終的な温度の予測に挑戦したい。