.NET Gadgeteerで温度計


沖縄ITまつり2012で、私の講演を聴いてくださった皆様ありがとうございました。主催者の皆様お世話になりました。また来年も呼んでいただけると嬉しいです。

さて、本題。.NET Micro Frameworkをベースにした、超小型ネットワークデバイス向けRAD環境、.NET Gadgeteerを使った温度計を紹介します。

GHI Electronics社から販売されている、Fez Spiderと、温度センサーを使います。

http://tinyclr.jp/products/fez-completekit.htm

http://tinyclr.jp/products/fez-sensors.htm

 上のURLから購入可能です。

そして、Visual Studio 2010 (Express Editionでも可)をインストールしたPCに、更に、

http://www.ghielectronics.com/catalog/product/297/

の、”Downloads and Tutorial”のリンクを辿って、”3.GHI NETMF v4.1 and .NET Gadgeteer Package ”をダウンロードし、ZIPファイルを解凍して、入っている、Setup.exeを実行します。 必要なアプリ、ドライバー一式がインストールされます。途中で、Fez Spiderを.NET Gadgeteer対応にする為の、ボード上のファームウェアアップデートが走るので、そのときには、図の様にFez SpiderのボードとUSB Client DPボードを結線し、USBでPCと接続してファームウェアアップデートを行ってください。

次に、温度センサーを繋ぐ説明に移ります。温度センサーは、eBlockExpansionというボードを介してつなぎます。このボードには7つの3端子コネクタ(白いの)が付いています。基本、温度センサーはどのコネクタに接続しても構いません。ここでは、4と書いてあるコネクタに接続したものとして話を進めます。

Visual Studio 2010を起動して、Gadgeteerテンプレートを用い、プロジェクトを一つ作成します。デフォルトではFez Hydraが表示されるので、これをマウスで選択して、DELキーで削除します。ツールボックスのFez Spiderをダブルクリック、もしくは、ドラッグ&ドロップして、Program.gadgeteerに表示させます。他に、UsbClientDPとeBlockExpansionを同様に表示させます。

2012/2/6時点では、この環境には、ここで”Connect All Modules”をすると正しいコネクタ間に線が引かれないというバグがあるので、eBlockExpansionの黒いソケットをマウスでクリックして、FezSpiderの10コネクタを結線してしまいます。その後、”Connect All Modules”を実行してください。

※温度センサーのボードをよぅく見ると、”A”と書いてあります。更にSpiderのボードの各ソケットにも、AとかYとか書かれています。もし”Connect All Modules”で結線されたとおりにつないだのに、正しく動作しない場合は、センサーなど周辺ボードに書いてあるアルファベットが、Spider側に繋いでいるコネクタにかかれてあるかチェックしてみてください。無い場合は、そのアルファベットが記載されているコネクターにマニュアルで繋ぎなおしてください。

実際の接続は、図の通り

以前のポストで説明したように、ソフトウェア側は、Program.gadgeteerの絵で使いたいボード群の結線図を書いてしまえば、必要なアセンブリが追加され初期化コードが自動生成されます。

後は、Program.csを開き、Programクラスに、

    GT.Interfaces.AnalogInput thermIn;
    GT.Timer timer;

という温度センサーとタイマーのメンバー変数を追加し、ProgramStarted()メソッドの一番最後の行の上に、

            thermIn = eBlockExpansion.SetupAnalogInput(GT.Socket.Pin.Four);

            timer = new GT.Timer(1000);
            timer.Tick += new GT.Timer.TickEventHandler(timer_Tick);
            timer.Start();

            // Use Debug.Print to show messages in Visual Studio’s “Output” window during debugging.
            Debug.Print(“Program Started”);

と追加します。eBlockExpansionは、Program.gadgeteerに、eBlockExpansionボードを追加した時に自動生成されたメンバー変数です。ソケットピンを指定することによって温度センサーを参照するインスタンスを取得できます。その後のコードは、1000msに一回、timer_Tick()メソッドをコールするというコードです。timer_Tick()メソッドは、

        void timer_Tick(GT.Timer timer)
        {
           double degree=thermIn.ReadVoltage();
           degree = degree * 78.0 / 3.3 – 22.0;

           …
        }

とコードを書けば、温度センサーが読み取った温度を取得できます。温度センサーは、計測した温度を0~3.3Vの範囲の電圧に変換します。0Vが-22℃、3.3Vが56℃なので、補正して温度を出しているわけです。
これで温度が計測できたので、後は、LCDへの表示やネットワークへの転送など、.NET Micro Frameworkで用意されている豊富なAPIで様々な処理への入力とすることが出来ます。

計測コードはこれでおしまいです。次回以降、ネットワークへの転送や、LCDへの表示を解説するので、お楽しみに。

 

Comments (0)

Skip to main content