TOP > カテゴリ > ロボット・電子工作・マイコン >

温度センサーの使い方 [Arduino]

-8mV/℃の温度係数を持つ温度センサーの使い方です。

Voutから出力される電圧の値をADコンバーターで取得して温度に変換するタイプです。基準となる0℃の出力電圧は1.748Vです。(計算方法は後述)

[-8mV/℃の温度係数]
・温度が1℃温度が上がると-8mV電圧が小さくなる
・温度が1℃温度が下がると+8mV電圧が大きくなる

使用部品・材料

総額で約370円です。(Arduino本体の値段を除く)

部品/材料値段備考
ブレッドボード¥270秋月電子の通販コード(P-00315)
高精度3端子CMOS温度センサ S8100B¥100秋月電子の通販コード(I-00113)
カーボン抵抗器数円1MΩ(1個)を使用

配線図

次の写真は公式データシート(S8100B.pdf)より引用

1Vdd(入力電圧)
2Vss(グラウンド)
3Vout(出力電圧)

スケッチ(プログラム)

シリアルモニターに「温度」を表示します。

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℃の電圧を求めます。

0.24V = 30 x 0.008

「Ta = +30℃」の標準電圧に温度を-30℃にした場合の電圧を加算します。

1.748V = 1.508 + 0.24

高精度にするには...

現状のままですと、実際の温度と「±5℃」ぐらい差があると思います。

実際の温度に近づけるには、デジタルテスターでArduinoの5V電源の電圧を計測します。その結果が4.93Vならばスケッチの11行目の「5.0」を4.93に変更します。

11行目 float voltage = (val / 1024.0) * 5.0;

恐らく、これで「±2℃」ぐらいになるはずです。

・・・

更に高精度を求める場合は、スケッチの7行目を次のように変更します。

7行目 const float temperature0 = 1.748 / (xxx/5.0);

xxxには先ほど計測したArduinoの5V電源の電圧を入力します。

これで、実用的な「±1℃」の誤差になります。





関連記事



公開日:2017年05月18日 最終更新日:2017年05月21日
記事NO:02380