NETMF : サーミスターの抵抗値から温度を求める方法

回路がシンプルで、手軽なセンサー、かつデータ取得も AnalogInput で簡単なのがサーミスター(温度センサー)です。
IoT ALGYAN のハンズオンでも大活躍です。

ただし、サーミスターのデータは抵抗値を A/D 変換した値なので、温度が直接分かるわけではありません。あくまでも温度との相関関係を持つ抵抗値が得られているだけの話。

では温度はどうやって求めるか、というのが今回のテーマ。


サーミスターの抵抗値と温度との関係は、以下の式で表されます。(Wikipedia からもらってきました)

2015-10-24 23-52-43

これを使うと、抵抗値から現在の温度を計算できます。

PinKit のセンサーボードに乗っているサーミスターは 103AT-11 なので、特性表から、

  • B 定数・・・3435 (サーミスターごとに決まっている係数)
  • R25・・・10000 (摂氏25度でのゼロ負荷抵抗値)

であることが分かります。

この定数値と、.NET Micro Framework では AnalogInput の ReadRaw メソッドを使って抵抗値が得られること、GR-PEACH, GR-SAKURA では A/D 変換の分解能が 4096 であることを考え合わせると、以下のコードで温度が求められます。

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using GrFamily.MainBoard;

namespace TemperatureDemo
{
  public class Program
  {
    private const double Tk = 273; // 絶対温度と摂氏温度との差
    private const double T25 = Tk + 25; // 摂氏25度
    private const double Bc = 3435; // 103ATのB定数
    private const double R25 = 10000; // 103ATの25度でのゼロ負荷抵抗値
    private const double Vrd = 5000; // 分圧抵抗値(サーミスタ隣のVR1を中間にした場合)
    private const double Adc = 4096; // GR-PEACHのADコンバーターの分解能

    public static void Main()
    {
      var input = new AnalogInput(Pins.ANALOG_5);

      while (true)
      {
        var raw = input.ReadRaw();
        var temp = GetTemperature(raw);
        Debug.Print(temp.ToString());

        Thread.Sleep(1000);
      }
    }

    private static double GetTemperature(int raw)
    {
      return 1 / (System.Math.Log(Vrd * raw / (Adc - raw) / R25) / Bc + 1 / T25) - Tk;
    }
  }
}

VRd は電圧をサーミスターとで分割する抵抗の抵抗値です。センサーボードのサーミスターの隣にある半固定抵抗は 10kΩ なので、真ん中(くらい)にすると 5kΩ = 5000Ω ということになります。
温度をできるだけ正確に計りたい場合は、テスターで半固定抵抗の値を調べるか、他の温度計を使って調整してください。検証程度であれば、”だいたい真ん中” で問題ないと思います。


今回は .NET Micro Framework とは直接関係のない話題でしたが、これで温度を求められるようになりました。
次回はいよいよ I2C に入っていきます。

広告
カテゴリー: .NET Micro Framework, GR-PEACH, IoT ALGYAN タグ: , , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中