7 ディスプレイに温度を表示させてみよう

温度センサーの使い方

温度センサーは、一定の電流を流してダイオードなどの半導体のpn接合部の順方向の電圧降下が温度により変化する性質を利用して,その電圧を測定することによって温度が分かるようにしたものです。

新しくShowingTempというプロジェクトを追加します。(忘れた人はこちらへ

温度を測定するメソッドはBrainPad.TemperatureSensor.ReadTemperature()です。 これは、摂氏の温度を小数点付きで返します。



温度を調べる
        private void main()
        {
            BrainPad.Display.Clear();
            while (true)
            {
                String temp = BrainPad.TemperatureSensor.ReadTemperature().ToString("F3");
                BrainPad.Display.DrawString(10, 55, 
                    "Temperature=" + temp, BrainPad.Color.White);
                Thread.Sleep(100);
            }
        }
 1 
 2 
 3 ディスプレイ消去
 4 永久ループ
 5 
 6 温度を摂氏で測定し小数点以下3桁の文字列にする
 7 
 8 中間あたりに白で表示する
 9 100ミリ秒待つ
10 
11 


やってみよう
ある温度以上になったら赤の信号LEDを点滅するようにしてみましょう。

ADコンバーターについて

 ADコンバーターとは、電圧(アナログ量、Analog)を数字(Digital)に変換する装置のことをいいます。BrainPadの中のCPUにはこれが組み込まれています。電圧の測定は通常ノイズ(雑音)にまみれていることが多く、上記のプログラムは、10回測定してその平均を計測量として返してきています。
 ここでは、一回での測定量がどのくらいの量であるかを調べてみます。小数点以下の数字が、かなり暴れているのが分かります。

注意  以下のプログラムをビルドするには、BrainPad.csファイル中の変数BrainPad.TemperatureSensor.inputをpublicに修正する必要があります。

ADコンバータから直接測定する
        private void main()
        {
            while (true)
            {
                double tempC = (BrainPad.TemperatureSensor.input.Read()*3300.0 - 450) / 19.5;
                String sTemp = BrainPad.TemperatureSensor.ReadTemperature().ToString("F3");
                BrainPad.Display.DrawString(10, 55, 
                    "Temperature=" + sTemp, BrainPad.Color.White);
                Thread.Sleep(100);
            }
        }
 1 
 2 
 3 
 4 
 5 電圧データを摂氏に変換
 6 小数点以下3桁の文字列
 7 
 8 
 9 
10 
11 


ここで、簡単なデジタルフィルタというのを用いてみます。一番最初のプログラムも簡単なフィルタのようなものですが、10回測定する必要があります。以下のプログラムは一回の測定で、alphaの定数を変えればファイルた特性を変えることができます。
 このプログラムのフィルタは99%は前回の値で、最新の値は1%となっています。つまりすぐには変わらないで、少しずつ近過去の値を加算していき、古い値は忘れていくような仕組みになっています。

デジタルフィルタ
        private void main()
        {
            double alpha = 0.99;
            double tempC = (BrainPad.TemperatureSensor.input.Read() * 3300.0 - 450) / 19.5;
            while (true)
            {
                double t = (BrainPad.TemperatureSensor.input.Read() * 3300.0 - 450) / 19.5;
                tempC = alpha * tempC + (1-alpha) * t;
                String sTemp = tempC.ToString("F3");
                BrainPad.Display.DrawString(10, 55,
                    "Temperature=" + sTemp, BrainPad.Color.White);
                Thread.Sleep(100);
            }
        }
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14