2015-12-15
役所の混み具合、入ったら自動でついてくれる電灯、人は寝ている時に猫はどこにいるのか?
データを定期的に記録するものをデータロガーといいます。これをIchigoJam単体でつくってみます。

まずはセンサー、人感センサー(焦電型赤外線センサーモジュール)を使うと、使って、居るか居ないかを記録してみます。 今回は便利なモジュールを使いましたが、「焦電センサ | マルツオンライン」を見るとセンサー単体で作るのも難しくないかも?

EEPROMを使えばどんどんデータを書き込むことができますが、今回はEEPROMを使わず、裏ワザ的にプログラム領域を使ってデータを記録してみます。

メモリマップを見ると#C00-#1000の1KBにプログラムが書かれることが分かります。FREE()コマンドで空き領域がわかるので、使っていない後ろの空き部分にデータを書き込みます。 IchigoJamのSAVE/LOAD、実はこの1KBの領域をまるっとそのまま書き込むのでデータの保存にも使えます。

?PEEK(#FFF) 0 POKE#FFF,15 ?PEEK(#FFF) 15 SAVE3 NEW ?PEEK(#FFF) 0 LOAD3 ?PEEK(#FFF) 15

このようにデータが保存できていることが分かります。ハイスコアの記録などにも使えますね!
ただしうっかりプログラム部分を書き換えてしまうと、プログラムが壊れてしまうので注意が必要です。
データ保存に使える場所は、#1000-FREE()-2 〜 #FFF までです(プログラム終端として別途2byte必要)


人感センサーを長いコードでつなぎ、単3電池x4を電源として使いました。


居るか居ないかという1bitの記録は、測定間隔30秒(D=3600/2)だと、33時間分記録できます。
今回は画面表示の都合上、1行30データとして、30bitを4byteデータして、#FFFから埋めています。
プログラム内部でSAVEコマンドを読んでおくことで、データ保存を実現!

1 'LOGGER 10 CLS:CLV:D=3600/2:L=(FREE()-2)/4 12 ?D/360*L/20;"HOURS" 15 ?HEX$(H,1);" ";:CLT 20 P=0:LED0 30 IF P=0 AND IN(1) LED1:BEEP:P=1 40 IF TICK()<=D GOTO 30 50 CLT:[M]=P:IF P ?"*"; ELSE ?"."; 60 M=M+1:IF M<30 GOTO20 80 FOR I=0 TO 31 STEP 8:N=0:FOR J=0 TO 7:N=N+[I+J]*1<<(7-J):NEXT:POKE#1000-H*4-I/8,N:NEXT 90 SAVE 95 H=H+1:H=H%L:M=0 98 GOTO 15 100 CLS:FOR H=0 TO L 120 FOR I=0 TO 31 STEP 8:N=PEEK(#1000-H*4-I/8):?BIN$(N,8);:NEXT 125 IF H%23=22 INPUT N 130 NEXT

5行にVIDEO0を加えると画面表示がなくなり省電力になります。
GOTO 100 で、保存されたデータを簡易的に表示します。
FREE()で300byte空いていたとして、自由に書き込める量は298*8bit=2384bit、1bit1分として39.7時間分!


とりあえず、実験用にテープで人感センサーを設置してみて、一晩置いてみました。


結果がこちら、夜中にネコはトイレにはいかなかったことがわかりました。
下の方1が朝、ちゃんと反応した時の記録。
イノシシシシステムはイノシシを扱いますが、こちらはネコ。
生身と対峙するものづくり、おもしろい!

今回は時間ごとの0か1かを書き込んでいますが、反応した時間を記録するのも手です。

いろんなものをセンシングして、インターネットにつなげばIoT、更に自由に使えるオープンデータにするときっと生まれる新しい価値。 誰もが手軽に使えるモジュールにして、カジュアルなリアルタイムオープンデータが増えるとますますおもしろいまちになりそうです! (参考、5つ星リアルタイムオープンデータ SPARQLを使った鯖江市論手川排水機場の水位表示アプリ

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS