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.6804 | 0 | 0.97 | 10 | 25.2 | 50 | 70 | 280* |
電圧(V) | 0 | 0.003226 | 0.5 | 0.51 | 0.6 | 0.75 | 1.0 | 1.2 | 3.3* |
測定値 | 0 | 1 | 155 | 158 | 186 | 233 | 310 | 372 | 1023* |
*注意:実際に280℃(測定値1023)は測ることはできません。あくまでも計算上の値です。
※注意: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の限界を友達に教えてあげましょう。