2019年9月8日日曜日

IchigoJamで温度を測る

IchigoJamに温度計をつないでみます。

I2Cタイプを使います。理由はこんなところ


  1. アナログだとノイズもあり精度が出しにくい
  2. SPIだと貴重なポートを消費する。

IC品番

ADT7410
秋月さんで購入しました。参考LINKかこちら
ディフォルトなので13ビットで変換しているはずです。

プログラム例



1 @ARUN'TEMP
50 SWITCH1
100 POKE#700,0,0
110 R=I2CW(#48,#700,1)
115 ?R;" ";
120 R=I2CR(#48,#700,2)
125 ?R;" ";
130 T=PEEK(#700)*256+PEEK(#701)
140 PRINT T/128;".";(T+6)%128*10/128;" ";T
150 WAIT 30
160 GOTO 100

読み取りを128で割ると温度になりますが、IchigoJamでは整数で扱うので小数点以下の表示するためにPRINTが少々複雑になっています。Tが読み取ったデータです。

==追記==
このセンサーは、アドレス設定ができて最大4個を同じ線に接続できます。
とりあえず、A0=A1=Hの場合を追加してみました。

1 @ARUN'TEMP
50 SWITCH1
100 POKE#700,0,0
110 ?I2CW(#48,#700,1);
115 ?I2CR(#48,#702,2);
120 ?I2CW(#4B,#700,1);
125 ?I2CR(#4B,#704,2);" ";
130 T=PEEK(#702)<<8+PEEK(#703):U=PEEK(#704)<<8+PEEK(#705)
135 U=[1]
140 PRINT T/128;".";(T+6)%128*10/128;" ";T;" ";U/128;".";(U+6)%128*10/128;" ";U
150 WAIT 30
160 GOTO 100

--さらに追記--

MixJuiceをつないで、温度をクラウドにUPしてみました。

2 CLS:?"Ambient":UART1
3 'MJ PCT application/json
4 'MJ POST START ambidata.io/api/v2/channels/チャンネルIDを書く/data
5 '{"writeKey":"ライトキーを書く","d1":"#"}
6 'MJ POST END
100 'MAIN
110 P=#C1A
120 gosub1000:A=T
130 gosub600:gosub600:gosub600:gosub600
140 wait120
150 goto 100
600 'TX
610 ifpeek(p)<>asc("'")letP,P+1:goto610
620 P=P+1:ifpeek(P)=asc("#")?A;".";(A+6)%128*10/128;:goto620
630 ifpeek(P)<>0?chr$(peek(P));:goto620
640 ?:return
1000 R=I2CW(#4B,#700,1):R=I2CR(#4B,#702,2)
1010 T=PEEK(#702)<<8+PEEK(#703)
1020 T=T/128
1030 RETURN
----------------

回路

回路図はありませんが、A0、A1をGNDにつないでください。あとは電源とGNDとSCLとSDAをROMカセット接続するソケットにつなげばOKです。
秋月さんで購入するなら基板付きもあるので、そちらが便利かもしれません。


結果

実行するとこんな感じです。最初の0,0はI2C関数の戻り値です。最後の大きな数字はセンサーの読み出し値です。