Arduinoで温度センサーを扱う

標準

今回はArduinoで温度センサーを扱うのに挑戦したいと思います。温度センサーとして使うのは「MCP9700E」です。このMCP9700Eは温度をアナログ出力してくれます。
しかし、今回は出力されたアナログ値の大小が分かればいいだけではなく、電圧をなるべく正確に求める必要があります。この点について、詳しく書いていきます。

ArduinoのA/D変換

Arduinoには、入力されたアナログ信号、つまりは電圧の変化をデジタル信号に変換するA/Dコンバーターが内蔵されています。この出力されるデジタル値は、0Vを最小、基準電圧を最大として10bit(210=1024段階)の数値として表現されます。

この基準電圧は、何も設定しなければ5.0Vになり、これが1024段階に分割されるので、分解能は5000÷1024=4.88mVということになります。しかし、これでは大雑把すぎて、もう少し正確な値を読み取りたいという時があります。そんな時には、この基準電圧を変更することで可能になります。以下はスケッチでanalogReference()に指定することが出来る内部基準電圧の一覧です。

analogReference() 概要 分解能
DEFAULT 電源電圧が基準になる。5.0V 4.88mV
INTERNAL 内部基準電圧が基準になる。1.1V 1.07mV
EXTERNAL AREFピンに供給される電圧。0V以上5V以下

AREFピンは、SDAピンとGNDピンの間にあるピンです。ここに電圧をかけることで、基準電圧を変更できます。

MCP9700Eの特性

今回使っていくMCP9700Eは色々な特性があるので、ある程度は把握しておく必要があります。

  • 誤差:±4.0 ℃ (0~70℃)
  • 出力電圧:500 mV (0℃)
  • 温度係数:10.0 mV/℃

以上の情報を利用して、電圧を求めていきます。ただし、このセンサーは電圧と温度が曲線的な関係なので、どうしても誤差が出てしまいます。この点を留意して次に進みましょう。

回路

今回は単純に、温度センサーに電圧を供給し、出力をA0で受け取るのみです。以下にその図を示します。

温度センサー回路図

ただ、プルダウン抵抗は無いと大分出力が不安定になってしまうので、これは必須アイテムです。

スケッチ

前項で紹介した特性を用いて、「電圧 = 温度 ÷ 10.0 + 500」という関係式を導きます。また、デジタル値から基準電圧の変換式を「デジタル値 × 1100 ÷ 1024」という関係式も導きます。この式を使って、簡単にスケッチを書いていきます。以下がそのスケッチです。

float volt;
float temp;

void setup() {
  Serial.begin(9600);
  analogReference(INTERNAL); //基準電圧を1.1Vに
}

void loop() {
  volt = (float)analogRead(A0) * 1100 / 1024; //デジタル値を電圧に変換
  temp = (volt - 500) / 10; //電圧を温度に変換
  Serial.println(temp);
  delay(100);
}

こんな感じです。基準電圧に関する記述はsetup()関数の中に記述します。

考察

上記スケッチで動かすと以下の様な結果を得ることが出来ます。温度センサー

指などで温めると、ちゃんと数値が上がることが分かります。(人によっては下がることも?)

投稿者プロフィール

yoshipc

コンピューター関連を得意としています。PHPが専門です(尚、技量はお察し)。このブログとMastodonのインスタンスを運営・管理しています。よろしくお願いいたします。


コメントを残す

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