Edited at

Kinoma Create で温度計を作る

More than 3 years have passed since last update.

手元にアナログ出力の温度センサー LM61CIZ があったので、この値を表示してみる。

スタートアップメニューから辿れるサンプルプログラムのなかに、analog-temperature というそれらしき物がある。

ホーム画面の Front Pins でピンを設定して、センサーをつなぐ。左から、Power, Analog, Groundとする。

kinoma1.jpg

が、実行してみると動くがどうも値がずれている。使っているセンサーが違うので、あたりまえといえばあたりまえ。プログラムを変更するしかない。

温度計を表示するプログラムは、analog-temperatureというサンプルプログラムがここにある。

http://kinoma.com/develop/samples/

リンクをクリックしても他のサンプルプログラムと違い、GitHub に飛ばされるだけだが。

https://github.com/Kinoma/KPR-examples/tree/master/analog-temperature

というわけで、早速開発環境の Kinoma Studio をインストールして変更してみる。開発環境 Eclipse をベースに作られているようなので、僕にはなじみ深い。

Eclipseと同じ要領で、プロジェクトをインポートする。

基本的には3つのファイルで構成されているようだ。

ファイル名
説明

application.xml
プログラムの名前とかのメタ情報の記述

src/main.xml
名の通り、メインファイル。xmlの中にjavascriptが埋め込まれている。

src/analog.js
いまいち何をしてるかよくわからない。

というわけで、main.xml を覗いて、センサー値を取って、計算しているところを探す。


main.xml

<container id="MainContainer" top="0" left="0" bottom="0" right="0">

<skin color="white"/>
<label left="0" right="0" string="'- - -'">
<style font="46px" color="black"/>
<behavior>
<method id="onAnalogValueChanged" params="content,result"><![CDATA[
//Converts voltage result to temperature.
var temp = 100 * ( result * 2.8 ) - 50;
content.string = temp.toFixed(2) + " °C";
]]>
</method>
</behavior>
</label>
</container>

result というのが、センサーの値のようだ。マニュアルによると、アナログ値のセンサーの値は 0から1 の間の値をとるそうだ。で?何ボルトなの?おそらく、ベース電圧の3.3Vが 1 の値をとるのだろう。3.3倍するとボルト数が得られる。さらに、1000倍して ミリボルト数が得られる。

(ミリボルト数) = result*3.3*1000

このセンサーは、測定範囲が、-30°Cから100°Cで、1°Cあたり10mV上昇するとのこと。0°Cのとき 600mv になる。すなわち、以下の式で求められる。

((result*3.3*1000)-600)/10 ---簡略化---> (result * 3.3 * 100) - 60;

さらに、小数点以下一桁だけ表示させる様に変更。


main.xml

                    var temp = (result * 3.3 * 100) - 60; 

content.string = temp.toFixed(1) + " °C";

Kinoma Studio では、同一のネットワークに繋がっている Kinoma Create を自動的に探して表示してくれる。bento と名前をつけた Kinoma Create の横の 'Run >' ボタンをクリックすると、リモートでプログラムを実行できる。

kinoma.png

動いた!

kinoma1.jpg

だけど、表示がたまにチラチラして、19.0 になることがある。

分解能がたりないのか?

kinoma2.jpg

動いたから、とりあえずいいや。