でじたる百葉箱(温度ロガー)

5V充電ケースとIchioJam本体+センサ基板(LCD+LED付き)。

測定場所でオートランさせて計測を開始。
計測した温度はLCDで確認しEEPROMへ自動記録。

計測終了後は、EEPROMの記録データを表示させて、模造紙のグラフ用紙( 1センチ四方のマス目模造紙 )にプロットする。
グラフ用紙は、温度と回数の比を2:1にして、温度変化を見やすくした。

各グループ3~4カ所を計測。

サンプルプログラムは 10秒間隔で10分間(60プロット)の測定例


1 ‘LCDオンドケイ by NEXTDAY SAVE0
10 CLS: L=1:C=1
20 [0]=(ANA(2)*32-500)/10
30 LC 0,0: ?”IchigoTemp 10sec”
40 LC 0,1: ?”No.”;C, [0];”゚C “
50 GOSUB @LCD

60 LED 1
70 IF [0]>20 OUT 1
80 IF [0]>25 OUT 3
90 IF [0]>30 OUT 7

99 LRUN1
100 @continu

110 BEEP
120 WAIT 60*10
130 C=C+1: IF C <= 60 GOTO 20

140 LRUN2



29000 END
29010 @LCD
29020 LET[96],640,64,#5639,#C6C,#C080,64
29030 Z=I2CW(62,#8C3,5)
29040 Z=I2CW(62,#8C0,3,#900,16)
29050 Z=I2CW(62,#8C8,3,#920,16)
29060 RTN

【プログラム概要】
10行目 初期化
    変数L:EEPROMへの記録数(1固定)
    変数C:測定した回数(最初は1回目)
20行目 温度センサのアナログ値を摂氏温度に変換
50行目 LCDへ測定値を表示
99、100行目 EEPROMへ温度を記録
120行目 10秒間待つ
130行目 6回/分×10分=60回の測定を繰り返す
140行目 EEPROMから測定した温度をリスト表示する

29000行目 Display on LCD (hidden subroutine)
     LCD表示サブルーチン
     LIST命令では非表示。

測定値から温度の求め方
温度センサーMCP9700は、温度を電圧で出力するセンサーです。
1. 温度センサーMCP9700は、0度のとき0.5Vを出力
2.0.01V毎に1度
3.ANA(2)には、MCP9700の出力電圧を読み取り、0(0V)から1023(3.3V)の範囲です。
4.


‘ ———————————————–SAVE1
‘ EEPROMデータ書き込み(I2Caddress 80)
‘ ———————————————–
‘ LRUN1   配列[n]の値をEEPROMへ書き込み(DATA追加)
‘  実行後は、LOAD0のプログラムの100行目へジャンプする
‘ LRUN1,1111 EEPROMのデータを初期化(DATA消去))
‘  実行後は、LOAD0を実行して終了

‘ L 記録する配列の長さ
‘ [0]~[L-1] EEPROMに書き込みする値
‘ M EEPROMに書き込まれたデータ数
‘ N EEPROMの書き込み先アドレス

1000 @EWRIT:’Write to EEPROM SAVE1(INIT)
1010 N=0:IF !L ? “EEPROM Write Error L=0!”:BEEP:END
1020 IF I2CR(80,#8E6,2,#8E4,2) ?”EEPROM I2C ERROR!”:BEEP:END
1030 M=M+1
1040 N=M*L*2
1050 N=N<<8|N>>8&#FF
1060 R=I2CW(80,#8E6,2,#800,L*2)
1070 N=0
1080 R=I2CW(80,#8E6,2,#8E4,2)
1100 IF FILE()=1 LRUN0,100
1110 RTN

1111 @EINIT:N=0:M=0: ‘EEPROM Initialization
1112 IF I2CW(80,#8E6,2,#8E4,2) ?”EEPROM I2C ERROR!”:BEEP:END
1113 ?”EEPROM ヲ ショキカ シマシタ”
1114 IF FILE()=1 LOAD0
1115 RTN


‘ ———————————————–SAVE2
‘ EEPROMデータ表示(I2Caddress 80)
‘ ———————————————–
‘ LRUN2   EEPROMの全データを1画面ごとに表示(SPCキーで次)
‘ LRUN2,2222 で、EEPROMの全データを1画面に集計(L=1のみ対応)
‘  実行後は、LOAD0のプログラムを実行(温度測定)
‘※IchigoJamが整数32256までしか扱えないため、LRUN2,2222は1000個以上の集計は表示がおかしくなる。

‘ M EEPROMに書き込まれたデータ数
‘ N EEPROMの読み込み先アドレス

‘ I カウンタ(レコード)
‘ J カウンタ(データ)
‘ Q データ表示用カウンタ(0~22)
‘ X プロット位置(X座標)
‘ R,S プロット位置(Y座標)
‘ T 最大値
‘ U 最小値
‘ Z I2C用
‘F 表示モード 0:グラフ、1:リスト

2000 @EREAD:F=1:’Read from EEPROM SAVE2
2010 CLS:N=0:Q=0:R=0:S=0:T=-30:U=99:IFI2CR(80,#8E6,2,#8E4,2)?”EEPROM I2C ERROR!”:BEEP:END
2020 IF M<1 ?” NOT DATA”:GOTO @END
2030 IF !L INPUT”DATA length?”,L
2040 FOR I=1 TO M
2050 N=I*L*2:N=N<<8|N>>8&#FF:Z=I2CR(80,#8E6,2,#800,L*2)
2060 IF F Q=Q+1:X=30:?DEC$(I,4);” ,”; ELSE X=I*30/M
2070 FOR J=0 TO L-1
2080 IF F ?[J];”,”;:GOTO@L2
2090 R=R+1:S=S+[J]
2100 IF T<[J] T=[J]
2110 IF U>[J] U=[J]
2120 @L2:NEXT
2130 IF F GOTO @L3
2140 IF X=Q GOTO @L4 ELSE GSB @GDSP:GOTO@L4
2150 @L3:?
2160 IF Q<23 GOTO @L4
2170 IF !INKEY() AND !BTN() CONT ELSE Q=0
2180 @L4:NEXT
2190 @END:LC0,23,1
2200 IF !INKEY() AND !BTN() CONT
2210 IF FILE()=2 LOAD0
2220 RTN

2222 @GRAPH:’EEPROM Graph
2230 F=0:GOTO @EREAD+10

2240 @GDSP
2250 LC0,0:?”サイコウ”;T;” サイテイ”;U;” データ”;M;
2260 LCX,35-(S/R):?”*”;:Q=X:R=0:S=0
2270 LCX,20:IFI>999?I/1000;
2280 LCX,21:IFI>99?I%1000/100;
2290 LCX,22:IFI>9?I%100/10;
2300 LCX,23:?I%10;
2310 LC0,5:?”30″:LC0,10:?”25″:LC0,15:?”20″
2320 RTN

「LRUN2」の表示例
「LRUN2,2222」の表示例

※EEPROMへの書き出しと読み出しプログラムは、福野さんのコードを参考にして作成しました。
https://fukuno.jig.jp/2192(福野泰介の一日一創