Arduinoで作るエアコンファンコントローラー3

温度測定中

温度センサの使用

今回は温度センサの動作を確認していきます。MCP9700AーE/TOを秋月電子通商で購入してきました。1ケ30円です。後々、回路素子が異常に発熱した場合に備えて使用することを目論んでいます。

センサーの姿図
トランジスタのように見えるMCP9700A

温度センサというとサーミスタがよく知られていますが動作特性が一定温度を越えると抵抗値が急峻に変わるのでマイコンで温度測定などに活用するのが難しいようです。回路に組み込んでヒューズのように使用するのに向いています。温度センサICはそのあたりの取り扱いが楽になるように設計がされていて、温度に対してリニアな動作特性を持っています。種類によるのですが供給する電圧がおおよそ2Vか3V~5.5Vと広範囲に対応しています。

データシートより(仕様書より)

それで今回、使用するMCP9700Aについて、VDDが2.3Vからとなっているので思いのほか低く、そのあたり出力の動作範囲について調べてみたのですが、上の図のように最大出力電圧VOUT(125℃時)は1.7Vあたりなので、動作範囲内だったのですね。(^_^;) 5V回路のほか3.3V系回路の場合でも使える仕様ですね。

なお、秋月電子通商の部品説明文のうち下記のあたりを押さえておけば、利用できそうです。

  1. 出力はアナログ
  2. 出力電圧が500mV/0℃      ※0℃のときは500mVが出力されるということ。後述
  3. スケールファクタが10mV/℃

簡単そうですね。ちなみにデータシートでは、

データシートより
データシートから抜粋

マークしたところが該当箇所の表記です。( ゚Д゚) 0℃の時(TA=0℃)に500mVが出力されるのだから500mV/0℃ って表記はチト違うんじゃぁないのかな🤔

実際に確認してみる

出力電圧を確認してみます。今回はArduino IDEのメニューから[ファイル]→[スケッチ例]→[03.Analog]→[AnalogInOutSerial]を使用します。

スケッチ例
専用プログラムはないので流用します。

温度センサ専用のプログラムではないのですがこのスケッチを編集していきます。

AnalogInOutSerialの編集前

ここでピン出力は使用しないので、const int analogOutPin = 9; と analogWrite(analogOutPin, outputValue); の行をコメントアウトします。

次に温度と出力電圧の関係、そしてそのアナログ値との関係を見てみます。下の表に示します。

温度と出力電圧、analog入力値の関係

温度と電圧の関係は、0℃が0.5Vで、1℃毎に0.01V増減します。

  • 0.50 + 0.01 x 温度 (V)

アナログ入力は、電圧を10bitで認識します。すなわち、0~5Vを1024階調で認識するので、”1”当たりは0.00488281Vです。

  • 0.00488281 ⅹ 電圧 - 1

で計算でき、整数に丸めます。

丸めとVDDの正確性、素子個体それぞれの誤差によって、実際の測定温度に1,2度の誤差がありそうですね。

温度とアナログ入力の関係性が分かったので、outputValue = map(sensorValue, 0, 1023, 0, 255); を編集して、outputValue = map(sensorValue, 19, 357, –40, 125); と変更します。表では太文字にしておきました。map関数は変数の”sensorValue”の値をコンマで区切った前2つの数字の範囲を後ろ2つの数字の範囲で置き換えます。いろいろな数字の変換に応用できるのでネットを調べていただくと妄想がふくらみ面白いですよ。

これを書き込み実行します。実行後、シリアルモニターを起動して実際の温度と比較します。

室温の測定温度

画像の通り、シリアルモニタは、24℃か25℃と表示されます。温度計は22.5℃を指していますので1.5℃~2.5℃高く表示されました。将来の目的は回路の異常温度の検出にあるので許容することとします。

予想以上にうまくいきました🙌

ちなみにセンサがパッケージされている関係からか温度変化への追従はハッキリ言って遅いですね。念のため低温も試してみます。

3℃あたりまで下がる

今回は以上です。

今回もご覧いただきありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA