温度センサーの使い方 [Arduino]
-8mV/℃の温度係数を持つ温度センサーの使い方です。
Voutから出力される電圧の値をADコンバーターで取得して温度に変換するタイプです。基準となる0℃の出力電圧は1.748Vです。(計算方法は後述)
・温度が1℃温度が上がると-8mV電圧が小さくなる
・温度が1℃温度が下がると+8mV電圧が大きくなる
使用部品・材料
総額で約370円です。(Arduino本体の値段を除く)
部品/材料 | 値段 | 備考 |
---|---|---|
ブレッドボード | ¥270 | 秋月電子の通販コード(P-00315) |
高精度3端子CMOS温度センサ S8100B | ¥100 | 秋月電子の通販コード(I-00113) |
カーボン抵抗器 | 数円 | 1MΩ(1個)を使用 |
配線図
次の写真は公式データシート(S8100B.pdf)より引用
1 | Vdd(入力電圧) |
---|---|
2 | Vss(グラウンド) |
3 | Vout(出力電圧) |
スケッチ(プログラム)
シリアルモニターに「温度」を表示します。
void setup() { Serial.begin(9600); } void loop() { const float coefficient = 0.008; // ±1℃変化した際の温度係数(8mV) const float temperature0 = 1.748; // 0℃の出力電圧 // ADコンバーターから読み取った値を電圧に変換する int val = analogRead(A0); float voltage = (val / 1024.0) * 5.0; Serial.print("電圧:"); Serial.print(voltage); Serial.print(" "); // 温度 Serial.print("温度:"); // 0℃より高い if(voltage < temperature0){ Serial.print((temperature0 - voltage) / coefficient); // 0℃ }else if(voltage == temperature0){ Serial.print("温度:0"); // 0℃より低い }else if(voltage > temperature0){ Serial.print("-"); Serial.print((voltage - temperature0) / coefficient); } Serial.println("℃"); delay(1000); }
[実行例]
抵抗値の計算
データシートに「CMOS出力バッファの出力インピーダンスが高い為、出力電圧が低下する事があります。その場合は、プルアップ抵抗(1MΩ以上)を付加してください。」と記載されています。
0℃の出力電圧の求め方
次表はデータシートにある入力電圧が5Vの場合の出力電圧です。
条件 | type. |
---|---|
Ta = -20℃ | 1.908V |
Ta = +30℃ | 1.508V |
Ta = +80℃ | 1.095V |
冒頭の「0℃の出力電圧は1.748V」という値はデータシートの何処にも記載されていません。計算方法は次の通りです。
今回は「Ta = +30℃」の電圧を基準とします。(3種類どれでも可)
そして、温度係数8mVを使って30℃の電圧を求めます。
「Ta = +30℃」の標準電圧に温度を-30℃にした場合の電圧を加算します。
高精度にするには...
現状のままですと、実際の温度と「±5℃」ぐらい差があると思います。
実際の温度に近づけるには、デジタルテスターでArduinoの5V電源の電圧を計測します。その結果が4.93Vならばスケッチの11行目の「5.0」を4.93に変更します。
恐らく、これで「±2℃」ぐらいになるはずです。
・・・
更に高精度を求める場合は、スケッチの7行目を次のように変更します。
xxxには先ほど計測したArduinoの5V電源の電圧を入力します。
これで、実用的な「±1℃」の誤差になります。
掲示板
ArduinoやRaspberry Piなどの電子工作の掲示板を作成しました。質問やわからない事は電子工作 (Arduino・ラズパイ等)でユーザー同士で情報を共有して下さい。