IchigoJamで遊ぶ その4 アナログ入力で温度計
IchigoJamには(あのRaspberry Piにも付いていない)アナログ入力が備わっていて、0V~3.3Vの範囲の電圧を0~1023の数値として取得できます。
今回はこのアナログ入力を使ってみようと思います。
アナログ温度センサで温度を測る
見た目はトランジスタみたいですけど、温度センサです。
(この形だとトランジスタだと思っていた時期が私もありました)
これはTMP36というアナログ温度センサで、この三つある足のひとつから、温度が25℃の時には750mVが出力され、そこから温度が1℃変わる毎に電圧も10mV増減します。
なので、この足をIchigoJamのアナログ入力につないで電圧を測れば、温度が分かるというわけです。
(ちなみに残り2本の足は、電源とGND)
例によってつなぎ方はこんな感じ。
TMP36のVoutというのが温度の出力で、Vsが電源です。
今回はIN2のアナログ入力を使うので、VoutとIN2をつないでます。
実際の接続はこんな感じ。
アナログ入力の値はANAという関数で調べられるので、早速取得してみます。
IchigoJamのアナログ入力は0~3.3Vが1024段階なので、1段階あたりは 3.3V ÷ 1024 ≒ 0.0032V =3.2mV。
アナログ入力の値が225ということは、3.2mvをかけると720mv。
25℃の時の750mVとの差は-30mVなので、温度は22℃という事になります。
若干肌寒い。
温度計で測ってみると22.8℃。
まぁまぁ近い値でした。
温度計プログラム
しかし、いちいちアナログ入力の値を調べて計算するのは面倒なので、こういうことはコンピュータにやらせましょう。
5 CLS 10 O=ANA(2)*32-5000 20 LOCATE 10,10 30 PRINT O/100; 40 PRINT "."; 50 PRINT O%100/10 60 GOTO 20
20行目、IchigoJamは小数を扱えない(たぶん)ので、アナログ入力の値に3.2mV分の32を掛け、500mV分の5000を引いておきます。
この値を100で割ると温度が求まるハズ。
40行目や60行目で、100で割ったり余りを求めたりして小数1桁まで表示してます。
温度の数字以外何も出さない、手抜きプログラムです。
では、実行~。
速すぎっ!
こんな温度計はせわしなさすぎる。
というわけで、途中にウェイトを入れて調整。
55 WAIT 10
まだ速い気もしますけど、そこはWAITを調整かな。
単にWAITを入れるだけではなくて、待ってる間にも値を測定し、それを平均化したものを表示するのが良いかもしれない。
温度計の分解能
温度計を動かしていると、値はころころ変わるわりに、小数部分は同じ数字ばかり出てきます。
これは、IcihgoJamのアナログ入力の分解能が約3.2mVであるのと、温度センサの1℃あたり10mVという仕様とが相まって、約0.3度単位でしか温度を測れないからでしょう。
もっと細かく温度を測ろうと思ったら、センサを1℃あたり20mVとかのものに換えたり、出力電圧を増幅したりが必要かと。
あるいは、上に書いた平均を求めるようにプログラムを改造しても、ある程度は細かくなりそうな気がします。