Arduinoでやりたかった事の1つ、温度センサーを使った温度測定。
更に詳しくツッコむと、
ファンコンに付いている温度センサー(サーミスタ)で測定した温度をLCDに表示することで、
下に置いてあるPCを覗き込むことなく温度を知ることができるようになる
という装置を作ってみたい。
バリバリ使いこなしている人からすると、全然難しいことじゃないんだけどw
まず手始めに、手元にある(ファンコンに付いてきた)温度センサーを使って
温度をPCの画面に表示しよう。
回路的には簡単で
5V out ---- サーミスタ(R) --★-- 分圧のための抵抗(R1) ---- GND
★の部分をArduinoの input へ。
分圧に使う抵抗はサーミスタの抵抗値に合わせるのが良さそうだ。
・・・・・・・・・・・?( ゚д゚ )
サーミスタの仕様がわからない。
ファンコンのサーミスタは極薄のフィルムに包まれているヤツで
NTCサーミスタだろうと思うんだけど、それ以上のことがわからない。
型番っぽいものが印字されているけど、ググっても出てこない。
調べ方が悪かったようで「104」がポイントだった。
どうやら最初の「S」がシンボルマークのSEMITEC社の製品のようだ。
データシートを見ると「104」は100kΩの製品であることがわかった。
で、NTCサーミスタは
という式から計算できる。
R0はサーミスタの25度(=T0 =273.15+25)での抵抗値
BはB定数といってサーミスタのデータシートにR0と共に書かれている値
・・・・・eとか出てきたぞ。
指数関数やら自然対数やら懐かしい・・・。
高校の時にやったような気がするが、当然完璧に忘れている。
目的を達成するだけなら 同じことをやっている人のスケッチをコピーすれば1発なんだけど
なんかそれは負けを認めるような気がする。
解く。紙にガリガリ書いて必死に解くw
で、こうなる。
抵抗値Rはサーミスタの後(★印の所)に掛かっている電圧から計算する。
Vall(回路全体の電圧):Vt(サーミスタに掛かっている電圧)=R+R1:R1
なので
- R1:分圧のための抵抗(100kΩ)
- V:5V
- Vt:ArduinoのInputから読み取り
でRが求まり、
termo = (1 / ((log(R / R1)) / B + 1 / T0)) - 273.15;
コイツにぶち込めば値が出る。
※温度はK(ケルビン)で求まるので273.15を引いている。
あとは1秒ごとにコンソールに出力するようにすればOK。
Serial.println( termo );
delay( 1000 );
こいつ動くぞ!!(何
どれぐらい正確かは微妙なところだけど、だいたい合ってるっぽい。
計算するのに凄ぇ時間かかったけど、ひとまず目的の第一歩は達成(・∀・)
久しぶりに高校レベルの数学&物理の勉強したわ。
こんな形で役立つとは思わなかったw
このセンサーを使用したときのスケッチを教えていただけないでしょうか?至急お願いしたいです.よろしくおねがいします.
また104ではなく103を使用した場合でもつかえますか?
初めまして。YO$HIです。
酷いスケッチ(笑)なので公表するのは微妙ですが、こんな感じです。
#include
const int PIN_ANALOG_INPUT = 0;
const float FAHRENHEIT = 273.15;
float B = 4390;
float T0 = FAHRENHEIT + 25.0; // 25度
float Rt = 0.0;
float R1 = 100.0;
float Vall = 5.0;
float Vt = 0;
float Termo = 0;
int analog_in = 0;
int LED_13 = 13;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(LED_13, OUTPUT);
}
void loop() {
analog_in = analogRead(PIN_ANALOG_INPUT);
Vt = analog_in * 5.0 / 1024.0;
Rt = R1 * Vall/Vt – R1; //プルアップ
Termo = (1 / ((log(Rt / R1)) / B + 1 / T0)) – 273.15;
Serial.println( Termo );
// 30度を超えたらLEDを光らせてみる
if (Termo > 32.0) {
digitalWrite(LED_13, HIGH);
} else {
digitalWrite(LED_13, LOW);
}
delay( 1000 );
}
103は確か抵抗値10kΩだったと思いますので、分圧のための抵抗も変えてやれば使えると思います。