SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

イベント参加者追跡システム

最近のイベント会場では、万が一ウイルス感染が起きた時のために「参加者がいつ・どこへ行ったか」を記録・追跡する必要があります。
そこでIchigoJam Rを使って「イベント参加者追跡システム」を作ってみました。

f:id:shiro0922:20210403135019j:plain
システム全体図。IchigoJam R+拡張基板+バーコードリーダーで、参加者カードのバーコードを読み取ります。


システム部分。IchigoJam Rに拡張基板を差しています。
拡張基板には、有機EL(OLED)画面、RTC(時計)モジュールが付いています。


IchigoJam Rのキーボード端子に、バーコードリーダーのUSBドングルを差して、無線で接続します。電源ONから5秒くらいで使えるようになります。
(USBケーブル接続では、バーコードリーダーの初期化に失敗して使えません)
バーコードリーダーとUSBドングルは決まったペアでペアリングされているので、リーダーと基板に番号シールを貼るなどして管理するといいでしょう。
IchigoJam RでUSBキーボードが直接差せるようになって、この組み合わせが実現しました。


IchigoJam Rの裏面には、電源の単3乾電池×3本。
バーコードリーダーはバッテリ駆動なので、あらかじめ充電しておきます。


動作画面。バーコードカードを1枚読み取るごとに、バーコードの値・通算の人数「~nin」・時刻の3行を表示します。

最近はスマホのアプリ+クラウドサービスで似たような記録・追跡機能を実現したものがあるのですが、イベント参加者全員がスマホを持っている訳ではありません(特に子ども向けイベントではなおさら)。ですので、こうした簡単なシステムも使い道がありそうです。

基板データ

f:id:shiro0922:20210403234204p:plain

*同じ基板を2枚配置しています。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。

(C) 2021 Shiro Saito (https://www.ichigojaman.jp)

プログラム

参加者記録プログラム

バーコードカードをリーダーで読み取って、RTCモジュールから読み取った時刻と共にOLED画面に表示、拡張基板上のEEPROMへデータを記録します。

1 @ARUN:'Tracking
2 CLV:CLK:VIDEO3:CLS:GSB35
3 POKE#700,0,0
4 R=I2CR(81,#700,2,#710,4):WAIT2
5 N=PEEK(#710)<<8+PEEK(#711)
6 ?"*START*":GSB37
7 BEEP10,30
8 INPUT"",D
9 IFD<0||D>9999GOTO8
10 BEEP:LED1
11 N=N+1
12 GSB26:WAIT2
13 GSB24:GSB37:WAIT2
14 POKE#700,0,0
15 POKE#710,N>>8,N&#FF,0,0
16 R=I2CW(81,#700,2,#710,4):WAIT2
17 T=(H-8)<<12+M<<6+S
18 A=N*4
19 POKE#700,A>>8,A&#FF
20 POKE#710,T>>8,T&#FF,D>>8,D&#FF
21 R=I2CW(81,#700,2,#710,4):WAIT2
22 LED0
23 GOTO8
24 ?"=";N;"nin"
25 ?DEC$(H+100,2);":";DEC$(M+100,2);":";DEC$(S+100,2):RTN
26 POKE#700,0
27 R=I2CR(#68,#700,1,#701,7)
28 X=PEEK(#703)
29 H=X>>4*10+X&15
30 X=PEEK(#702)
31 M=X>>4*10+X&15
32 X=PEEK(#701)
33 S=X>>4*10+X&15
34 RTN
35 let[84],#4000,33,#227F,#700,#D5AE,#8D80,#2014,#A100,#DAC8,#8112,#D9CF,#DBF1,#A440,#AFA6
36 ifi2cw(60,#8A8,1,#8B0,20)?"E"
37 ifi2cw(60,#8A8,1,#8AA,6)?"E"
38 for[98]=0to7:for[99]=0to15:copy#8A0,vpeek(7-[98],[99])*8,8:ifi2cw(60,#8A9,1,#8A0,8)?"E"
39 next:next:rtn

f:id:shiro0922:20210404104128p:plain

  • EEPROMの回路やアクセス方法は、秋月電子IchigoROMと同じです。最初にEEPROMの先頭から人数データを読み込んで記録を始めるので、もし途中で電源が切れても、再起動すれば継続して記録できます。
  • バーコードの番号は0~9999に対応します。
  • 有機EL(OLED)表示サブルーチンは、国野さんのプログラムを使わせていただいています。
  • 当初IchigoJam Sで作っていたプログラムをRへ移行したのですが、Rだと動作速度が速すぎるので、I2CでEEPROMへアクセスした後にWAITが必要です。WAITを入れないと、前のアクセス処理が終わらない内に次のアクセスになってしまい、エラーが返って動作がおかしくなります。いろいろ試した感じでは、I2CR(読み出し)の後は「WAIT 1」待てば十分ですが、I2CW(書き込み)の後は「WAIT 2」待たないと厳しいようです。

ダンププログラム

EEPROM上の記録データ(時刻と参加者カード番号)を読み出して、一覧リスト(CSV形式)で表示します。拡張基板の10ピンソケットにUSBシリアルをつないで、PCからアクセスすることを想定しています。表示されたCSVリストをコピペして、Excelなどでまとめてください。

10 '*Tracking Dump
20 CLV:CLS
30 POKE #700,0,0
40 R=I2CR(81,#700,2,#710,4):WAIT 2
50 N=PEEK(#710)<<8+PEEK(#711)
60 ?"Number=";N
70 FOR I=1 TO N
80 A=I*4
90 POKE #700,A>>8,A&#FF
100 R=I2CR(81,#700,2,#710,4):WAIT 2
110 T=PEEK(#710)<<8+PEEK(#711)
120 D=PEEK(#712)<<8+PEEK(#713)
130 H=8+T>>12:T=T&#FFF
140 M=T/64:S=T%64
150 ?DEC$(H+100,2);":";DEC$(M+100,2);":";DEC$(S+100,2);",";D
160 NEXT

人数リセットプログラム

EEPROMの記録をリセットして、人数0人に初期化します。

10 'COUNT RESET
20 POKE #700,0,0
30 POKE #710,0,0,0,0
40 R=I2CW(81,#700,2,#710,4)

RTCモジュールの時刻設定プログラム

福野さんの時刻設定プログラムに、OLED表示ルーチンを追加しています。
最初にこのプログラムで、現在時刻をRTCモジュールに設定しておいてください。

1 'TIME SET
100 CLS:GSB800
300 P=#707
310 ?"Y:20";:GSB900:INPUT"",X:GSB400
320 ?"M:";:GSB900:INPUT"",X:GSB400
330 ?"D:";:GSB900:INPUT"",X:GSB400
340 X=0:GSB400
350 ?"H:";:GSB900:INPUT"",X:GSB400
360 ?"M:";:GSB900:INPUT"",X:GSB400
370 ?"S:";:GSB900:INPUT"",X:GSB400
375 POKE #700,0
380 IF I2CW(#68,#700,1,#701,7) ERR
390 ?"END":GSB900:END
400 GSB900:X=X/10*16+X%10:POKE P,X:P=P-1:RTN
800 '@OLEDI
810 let[84],#4000,33,#227F,#700,#D5AE,#8D80,#2014,#A100,#DAC8,#8112,#D9CF,#DBF1,#A440,#AFA6
820 ifi2cw(60,#8A8,1,#8B0,20)?"E
900 '@OLEDP
910 ifi2cw(60,#8A8,1,#8AA,6)?"E
920 for[98]=0to7:for[99]=0to15:copy#8A0,vpeek(7-[98],[99])*8,8:ifi2cw(60,#8A9,1,#8A0,8)?"E
930 next:next:rtn

参加者カード

バーコード付きの参加者カードは、無料で使えるプログラム「ラベル屋さん」で作れます。
f:id:shiro0922:20210403235858p:plain

  • ラベル屋さん用デザインファイル
    • A4サイズに名刺カードが10枚割り付けられた用紙に対応したファイルです。バーコードの形式は「CODE39」です。イベント名や日付などのデザインは適宜変えてください。
  • バーコード差し込みExcelファイル
    • バーコードにしたい番号をExcel表で作っておき、ラベル屋さんの「差し込み」メニューで読み込んで、カード上にバーコードを自動配置します。プログラム側は0~9999の番号に対応しています。

イベント会場での運用

  • 受付で参加者に名前や連絡先を書いてもらい、バーコード付きの参加者カードを配布します。
  • 会場入口や各ブースでこのシステムを使ってバーコードを読んで、カード番号と時刻を記録します。会場入口で「入る人用」「出る人用」の2台を使えば、画面に表示された人数を差し引きして「会場内に現在何人いるか」もわかります。
  • イベント終了後にシステムを回収して、記録データを読み出してExcelなどでまとめます。万が一の時に「何番の人がいつ・どこへ行ったか」を追跡できます。

USBシリアル変換基板R

IchigoJam RでICがRISC-Vに変更されて、ファームウェア書き換えの手順も変わりました。
既存のIchigoJam SとRの両方に対応した、USBシリアル変換基板を作ってみました。
f:id:shiro0922:20210402040327j:plain

f:id:shiro0922:20210402050442j:plain


スイッチ部分。
ファームウェア書き換え時はISPスイッチを、IchigoJam Rでは左側(VCC)、S以前では右側(GND)にして、Resetボタンを押してISPモードにします。
通常接続の時はISPスイッチを逆にしておきます。

回路図

f:id:shiro0922:20210402042232p:plain

基板データ

*同じ基板を2枚配置しています。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。

(C) 2021 Shiro Saito (https://www.ichigojaman.jp)

祝!IchigoJam7周年「IchigoJamのうた」

2021年4月1日に、IchigoJamは7周年を迎えました。
その記念に替え歌動画を作ってみました。

IchigoJamのうた

IchigoJam Lチカかんたん
IchigoJam ゲームも作れる
IchigoJam 今こそBASIC
Oh IchigoJam

IchigoJam センサー使える
IchigoJam サーボも回せる
IchigoJam ロボット走るぞ
Oh IchigoJam

IchigoJam 自分で作れる
IchigoJam マイ・コンピュータ
IchigoJam 世界を創るぞ
Oh IchigoJam

プログラム

10 'IchigoJam Song
20 CLS:?"[IchigoJam ノ ウタ]":?:WAIT 60
30 [0]="E8.E16E8.E16CR E8.E16E8.GF16E"
40 [1]="F8.F16F8.F16DR F8.F16F8.AG16F"
50 [2]="E8.E16E8.E16CR E8.E16E8.GF16E"
60 [3]="RGG8.F16DC2.R"
70 [10]="Lチカ カンタン"
80 [11]="ゲームモ ツクレル"
90 [12]="イマコソ BASIC"
100 [13]="センサー ツカエル"
110 [14]="サーボモ マワセル"
120 [15]="ロボット ハシルゾ"
130 [16]="ジブンデ ツクレル"
140 [17]="マイ・コンピュータ"
150 [18]="セカイヲ ツクルゾ"
160 PLAY "R"
170 FOR I=0 TO 6 STEP 3
180 FOR J=0 TO 2
190 ?"IchigoJam ";
200 ?STR$([10+I+J])
210 PLAY [J]
220 IF SOUND() CONT
230 NEXT
240 ?"Oh IchigoJam"
250 PLAY [3]
260 IF SOUND() CONT
270 ?
280 NEXT