温度センサー(アナログ)の使い方の中でメインとなる温度測定値を計算から求めていくプログラム・フローをまとめてみました。

フローは以下のようになります。

  1. 温度センサー出力電圧をデジタル値(0~1023)へAD変換する。
  2. デジタル値から電圧値(mV)に換算する。
  3. 求められた電圧値から更に温度値(℃)に換算する。

温度センサー基本情報

温度センサー素子「LM61BIZ/CIZ」の特性

素子そのもの特性などは前回記事温度センサーを使ってみるを参照してください。

電圧と温度の換算表

数式で記述してみると

サンプルプログラム(下記)ではmap関数を使用しましたが普通に計算式を使うこともできますので参考として書きました。

上記表と温度勾配(=+10mV/℃)にて計算式を算出すると。

Temperature[℃]=( Vout[mV] – 300mV ) / 10mV  – 30[℃] }

例えば、Vout=1250mvの場合、
Temp.= { ( 1250-300 ) / 10 – 30 } = 65(℃)

出力端子(センター)をアナログピン(A0)に接続

ArduinoNanoのA0ピンに接続しanalogRead()関数で電圧値を読み込む。

計算プログラム・フロー

計算をする部分のみ抜き出したリストを以下に記述。

int analogIn , temperature , sensorVout ;
analogIn = analogRead(0) ; // アナログ0番ピンからセンサー値を読込む
sensorVout = map(analogIn, 0, 1023, 0, 4600) ; // センサー値(デジタル)を電圧に変換する
temperature = map(sensorVout, 350, 1450, -25, 85) ; // センサー電圧を温度に変換する

int analogIn , temperature , sensorVout ;

  • 3個の変数をint(16bit符号あり整数)で宣言。
  • analogIn変数:A0ピンへの入力電圧値がデジタル変換された値を格納する。0~1023(10bit)の範囲を取る。
  • temperature変数:計算された温度値(℃)を格納する。
  • sensorVout変数:analogIn変数の値から計算された電圧値を格納する。

analogIn = analogRead(0) ;

  • analogRead()関数の戻り値をanalogIn変数に代入。
  • analogRead(0)関数のカッコ内の”0″はA0ピンを意味している。なので他のアナログピン、例えばA3ピンを使うならばanalogRead(3)となる。

sensorVout = map(analogIn, 0, 1023, 0, 4600) ;

  • analogIn変数の値から電圧値に換算してsensorVout変数に代入。
  • 換算するためにmap()関数を使用。
  • map関数のカッコ内の各値(5個)は引数と呼び、処理の入力値として関数内部で使用される。
  • map(0関数では2点の対応値を指定し、その2点間を比例計算して換算をする。上の場合の2点とは2番目の”0″と4番目の”0″が最初の点、3番目の”1023″と4番目の”4600″が2個目の対応点となる。
  • 以下にmap()関数での換算のベースとなるanalogInの値を電圧値の関係を表すグラフを示す。

  • 例えば、analoginが”860″とするとmap()関数の戻り値(=換算結果)は”3860mV”となり、この値がsensorVout変数に代入される。

map()関数の一般的説明はこちらのサイトに詳しく説明されてます。

temperature = map(sensorVout, 350, 1450, -25, 85) ;

  • sensorVout変数の電圧値から温度(℃)を求めてemperature変数に代入しているが、換算するには、冒頭にて説明したセンサー情報記事内の数式を使用しても良いが今回は同様にmap()関数を使用してみた。(どちらを使用しても良くて、どれを使うかは好みの範疇です)
  • 以下のグラフにsensorVoutの値(電圧)とtemperature(温度)の関係を表すグラフを示す。

温度センサー使用上の注意

測定精度について

アナログデータの分解能が10bit(0~1023)でデジタル変換時の誤差は約0.1%あります、一方変換の参照電圧は4600mvなので電圧値としても測定分解能は4.6mVであり温度に換算すると約0.5℃あります。

計算上はいくらでも小数点以下の温度表示は可能ですがあくまでも測定精度は約0.5℃あるということを考慮してください。

それと、アナログのためArduinoNanoと温度センサー間のリード線へのノイズ混入も考慮すべき点です。

測定誤差

本センサーは割と温度の絶対値に対して仕様上±2.0℃の誤差があるので他の信頼できる温度計にて較正をした方が良いと思います。

平均値処理

温度値の時間的変移は通常の気温測定程度ではそれほど速くないと思われるので、単純な加算平均処理(本プログラムでは100サンプリングの移動平均処理を使用)をした方が良いと思われます。