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などでまとめます。万が一の時に「何番の人がいつ・どこへ行ったか」を追跡できます。