でじたる百葉箱2(温度+紫外線ロガー)

2.しくみ

【2-1 温度センサー】

IchigoJamのアナログポートに温度センサーの出力をつないで使うのですが、IchigoJamはどのようにして温度を知るのでしょうか。

温度センサーMCP9700のデータシート(部品を扱うための決まりごとを書いた説明書)には、次のように書かれています。

・温度0℃のとき、0.5Vを出力する。
・温度係数は、0.01V/℃(10.0mV/℃)。
・精度は、25℃のときは±1℃(0〜70℃範囲で最大±4℃)

一方、IchigoJamのアナログポートの値と入力電圧には、次の関係があります。
この関係は、基本的にどのセンサーと繋いでも変わることはありません。

・入力が0Vのとき、ANA命令の値は0になる(最小値)。
・入力が3.3Vのとき、ANA命令の値は1023になる(最大値)。
・入力0.5Vは、ANA命令の値は155です。

つまり、温度センサーが0℃を測定したときは、0.5Vの電圧をIchigoJamのアナログポートに出力しているのです。
ここでANA命令を実行すると、IchigoJamは155の値であることを人間に教えてくれます。

温度センサーは、1℃毎に出力電圧が0.01V変化する決まりを持っています。
温度が0℃から10℃に変わると、出力電圧も0.5Vから0.6Vに変化します。
ここでIchigoJamのANA命令を実行すると、0.6Vの電圧に応じた、186の値であることを教えてくれます。

つまり、直接「温度」をやり取りしているのではなく、

センサーもIchigoJamも「電圧」を共通の「ことば」として扱っている

のです。

温度とANA命令の値(測定値)の関係を表にすると、次のようになります。

温度(℃)-50-49.680400.971025.25070280*
電圧(V)00.0032260.50.510.60.751.01.23.3*
測定値011551581862333103721023*

*注意:実際に280℃(測定値1023)は測ることはできません。あくまでも計算上の値です。

横軸x:アナログポートの値(測定値)、縦軸y:温度(℃)

※注意:MCP9700センサーが測定できる温度は-40~70℃です。また、IchigoJamの動作保証温度範囲も-65~150℃です。しかし、電源(電池)の条件や精度を考えると、0~30℃(測定値155~248)くらいが、実用上の使用範囲になります。
マイナス温度も測れますが、冷蔵庫などで試すときは、結露や氷結に十分注意(特に電池や基板)しなければなりません(大人の方に判断してもらいましょう)。

さて、
コンピュータの世界では、0〜3.3Vの電圧値を、0から1023までの値にすることを、AD変換(アナログデジタルへんかん)と言います。
そして、この機能のことをADコンバータと呼んでいます。
さらに、1024通りの表現ができることを、「10bitの分解能がある」と言います。

【測定した温度の計算方法】

IchigoJamがセンサーの値(電圧)をデジタル値(測定値)をして認識していることはわかりました。
しかし、デジタル値を見ても私たちには、すぐには何度なのかがわかりません。
もちろん、IchigoJamが人間様の書いたデータシートを都合よく理解して、わかるようには変換してくれません。

そこで、IchigoJamに、温度を求める式を教えてあげる必要があります。

まず初めに、測定値から電圧を求めます。
次に、その電圧から温度を求めれば完成です。

測定値 × 3.3V ÷ 1023  = センサーの出力電圧(V)
(センサーの出力電圧 - 0.5V) ÷ 0.01V = 温度(℃)


これを合わせると、

((測定値 × 3.3V ÷ 1023) - 0.5V) ÷ 0.01V = 温度(℃)

となります。
整理すると・・・

(測定値 × 0.003226 - 0.5V) ÷ 0.01V = 温度(℃)

電卓やエクセル等で、正しい結果が出る式になっているか確かめてみましょう。

【IchigoJamで計算する方法】

温度を求める式はわかりました。
これで、プログラミングできるでしょうか。

残念ながらIchigoJamのBASICでは、整数の計算しかできません。

IchigoJamは小数計算ができません!

試しに、 10℃を求める式で確かめてみてください。
先の表から、10℃は測定値186になりますので、

A=186
T=(A*0.003226-0.5)/0.001
PRINT A,T

あれれ?な結果ですよね。
そもそも、計算できないと言っていそうです。

IchigoJamでプログラムするには、ちょっと工夫が必要なのです。
小数計算ができないなら、整数で計算するしかありません。
整数にするためには、式の中で使われている一番小さい数を10倍や100倍にして、整数になるようにすればよいのです。

今回の式で最小の数は、0.003226ですので、これを整数にするには・・・

元の値:0.003226
10倍:0.03226 小数点を切り捨てると 0 ・・計算には使えない
100倍:0.3226 小数点を切り捨てると 0 ・・計算には使えない

1000倍:3.226 小数点以下を切り捨てると 3
10000倍:32.26 小数点以下を切り捨てると 32

10000倍の32が計算に似合いそうです。
他の数も10000倍します。

(ANA命令の値 × 32 - 5000) ÷ 100 = 温度

これでIchigoJamで計算ができるようになりました。
IchigoJamおよび、電卓やエクセル等で検算して確かめてみましょう。

A=186
T=(A*32-5000)/100
PRINT A,T

186 9

結果はどうでしょう。
10(℃)の結果を期待しましたが、9(℃)の表示になっていますよね。
これは、元の式にて3.3V÷1023=0.0032としたことに生じた誤差と、IchigoJamBASICで整数除算をするので、小数点以下を切り捨てるための影響です。
3.3V÷1023の値は、本当は0.0032258・・・と続きます。

それでは、100000倍以上にして、322や3225で計算すればよいでしょうか。
実は、もう一つ限界があって、

IchigoJamは最大32767までしか数えられません(最小は-32768)

そのため、A=186のとき、PRINT A*322 は、本当は 59892 になるはずですが、IchigoJamは数えられらない値で計算しようとするので、おかしな結果を答えてしまいます。
どんな結果になるかは、自分自身で試してみてください。

IchigoJamに限らず、コンピュータの計算には、必ず誤差と限界があるのです。

では、でじたる百様箱で使うプログラムを書きましょう。

T=(ANA(2)*32-5000)/100
PRINT T;”゜C “

※もうひとつの計算方法※
わかりやすいように、電圧を基準に式を説明してきましたが、「温度センサーの使い方」に掲載したグラフを見てください。
このグラフは、測定値と温度の直接の関係です。
式は、(x-155)*0.3226 となります。
であれば、この式をIchigoJamBASICで計算可能な式として使ってもよいはずです。
その場合の式(整数計算)は、「(x-155)*323/1000」となります。
ただし、IchigoJamは32767までしか数えられないので、1000分の1したときの32℃までしか測れません。

T=(ANA(2)-155)*323/1000

当然、33℃以上はおかしな答えなので、そのときは、「暑すぎると IchigoJamは計算を怠けるんだよねー」と言って、IchigoJamの限界を友達に教えてあげましょう。