手元にアナログ出力の温度センサー LM61CIZ があったので、この値を表示してみる。
スタートアップメニューから辿れるサンプルプログラムのなかに、analog-temperature というそれらしき物がある。
ホーム画面の Front Pins でピンを設定して、センサーをつなぐ。左から、Power, Analog, Groundとする。
が、実行してみると動くがどうも値がずれている。使っているセンサーが違うので、あたりまえといえばあたりまえ。プログラムを変更するしかない。
温度計を表示するプログラムは、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 を覗いて、センサー値を取って、計算しているところを探す。
<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;
さらに、小数点以下一桁だけ表示させる様に変更。
var temp = (result * 3.3 * 100) - 60;
content.string = temp.toFixed(1) + " °C";
Kinoma Studio では、同一のネットワークに繋がっている Kinoma Create を自動的に探して表示してくれる。bento と名前をつけた Kinoma Create の横の 'Run >' ボタンをクリックすると、リモートでプログラムを実行できる。
動いた!
だけど、表示がたまにチラチラして、19.0 になることがある。
分解能がたりないのか?
動いたから、とりあえずいいや。