IchigoJam+バーコードリーダ+レシートプリンタで大人向けレジごっこ

IchigoJamで簡単に大人向けレジごっこ遊びができます。
野菜などの無人直売所で、商品管理や自動レシート発行に利用できるかもしれません。

レーザーを扱うので、未成年者を対象とした活用は、ご遠慮ください。

写真の左側は、ESC/POS 対応のレシートプリンタQR204です。プリンタのシリアルRX端子とGND端子を、それぞれIchigoJamのTXDとGNDへ配線しました。プリンタの電源はDC9V出力のACアダプタで供給します。
右側は小型のバーコードリーダSymcode MJ2090です。こちらは基板上のシリアルTXと5V、GNDを、それぞれIchigoJamのRXD、5V、GNDへ接続しました。

ESC/POS 対応のレシートプリンタQR204とバーコードリーダSymcode MJ2090。プリンタはシリアル入力、バーコードリーダはシリアル出力なので、両方をIchigoJamへ接続することが出来る。

※実験するときは、かならずカバーを閉めること。
拡散されていないレーザーが目に入ると、失明などの大きな傷害を負う恐れがあります。
バーコードリーダの方は、シリアル出力TXを基板から取り出す必要があります。5VやGNDはUSB端子から引き出しても良いでしょう。
下図のバーコードリーダの場合、RS-232C用レベル変換IC用ランドの10番ピンがシリアル出力TXです。また、15番ピンがGNDで、16番ピンが5Vです。
バーコードリーダの基板。RS-232C用レベル変換IC用ランドの10番ピンがシリアル出力TXで、15番ピンがGND、16番ピンが5V。
バーコードリーダに付属の説明書などを見ながら、データ出力形式を「RS-232C」に、データレートを「9600bps」に設定します。はじめに、「facrory default」と書かれたバーコードをスキャンし、続いてInterface Modeの「RS232C Mode」、Baud rate settingの「Baud rate 9600」をスキャンしてください。設定値はFLASHに保存され、次回からは起動するだけでシリアル出力となります。なお、ボクが購入した商品に付属していた説明書は「1D Laser Wired Barcode Scanner User Guide」でした。Symcode MJ2090専用の説明書では無いので、仕様などが曖昧な書き様になっている点に注意してください。
IchigoJam側では、BPS 9600を実行して、シリアル速度を9600bpsに変更してください。
本機は測距センサが搭載されており、紙などを接近させると、自動的にレーザー光が線状に放射されます。照射されないときは、一度、対象物を遠ざけて、再度、接近させてください。
バーコードでスキャンすると、スキャンしたバーコードの数値やコードが、IchigoJamに表示されます。
ご注意:レーザ光が止まっても覗き込まないでください
紙などを接近させると、自動的にレーザ光が線状に放射される。自分や周囲の人の目に入らないように十分に注意する。
プリンタの方は、分解や改造不要で配線だけで動かすことが出来ます。
プリンタで文字を印字するには、シリアルから?命令でテキスト文字を送るだけです。
BPS 9600:UART 1
?"TEST Print":?
ESC/POS 対応のレシートプリンタへ、テキスト文字をシリアル出力して印字してみたときの様子。

レジごっこ用プログラム(2018/7/29追加)

レジごっこ用のプログラムを以下に示します。実行すると、受信したバーコードのデータと、変数FとRの値を示します。変数Fは受信の有無です。変数Rは検索値の一致を示します。
new
1 cls:?"Tester Barcode":?"クニノ ワタル"
2 clv:bps9600:uart0
3 let[4],#6552,#6461,#2E79
4 [0]="4910016200362":'マチウケ モジ 13ケタ
10 @M
20 cls:uart3*F:?"read:";str$(#808):?"F=";F,"R=";R:gsb@R
30 ifFbeep:gsb@T:goto@M
40 waitT*60:goto@M
500 @T
510 copy#808,#940,16:rtn
700 @R
710 uart0:clt:R=0:F=0
720 I=inkey():ifI>31clt:F=1:?chr$(I);
730 iftick()>30goto770
740 ifR=13goto720
750 ifI=peek([0]+R)R=R+1elseR=0
760 goto720
770 ?:R=R=13:rtn
999 bps0:uart1:?"MJ GET bokunimowakaru.github.io/MJ/808.txt
実行すると、バーコードを読むたびに読んだコードをプリンタへ印字します。また、行番号4に書かれた13桁の待ち受け文字と一致すると、変数Rに1を応答します。
read:4910016200362
F=1     R=1
read:4910016200362
F=1     R=1
read:4910066630966
F=1     R=0
read:4910066630379
F=1     R=0
read:9784789842211
F=1     R=0
大人のレジごっこをお楽しみください。

by ボクにもわかるIchigoJam用マイコンボード
https://bokunim
o.net/ichigojam/


以上の記事では、シリアル信号を基板から取り出していますが、PS2を利用したほうが、より簡単に扱えるようになります。本機のマニュアルにはPS2対応と書かれているので、いろいろと試しましたが、いまのところPS2での動作は成功していません。以下は試行や調査したときの関連情報です。
【情報提供依頼】
本バーコードリーダーは、PS2出力にも対応していますが、設定するためのバーコードが記載されていませんでした。PS2へ接続する方法をご存知の方は、教えてください。
【試してみたこと・確認してみたこと】
  • 通常のWindows PCへ接続してみたが、PS2キーボードとして認識しなかった。
  • 他の機種のマニュアルに掲載されているPS2キーボード設定のバーコードを読んでみたが、PS2接続はできなかった。
  • IchigoJamへ接続し、PS2信号を確認すると、キーボードが無い状態と同じ状態となる。
    電源ONと同時に、CLOCK(D+)とDATA(D-)がHレベルになり、約1.5秒後にCLOCK(D+)がLレベルに、その0.2μs後にDATA(D-)側がLレベルになる。CLOCKは約1μs以内にHレベルへ復帰するが、DATAはLレベルのままになる。このあと、本来であれば、デバイス側(バーコード側)がCLOCKをLレベルに遷移させるはずだが、その動きがみられない。
  • D+のプルアップ抵抗を外してみたが、PS2接続が出来なかった。
【USB/PS2判定方法】
NXPのUSBキーボード用の制御IC M68HC08のリファレンス資料「USB and PS/2 Multimedia Keyboard Interface」によると、以下のような方法でUSB/PS2の自動切り替えを実現しています。
USBロースピードのデバイス(キーボード側)は、D+(CLK)が1.5kΩでプルアップされています。このため、起動直後は、、D+(CLK)はHレベルとなります。
その後、USBの場合は4us以内にUSBリセットでLになります。このとき、D+(CLK)がLにならない(USBリセットが来ない)場合はPS2と判断します。
しかし、タイミングによってはPS2の場合もホストからD+(CLK)のLが来ます。その場合はUSBリセットの完了またはPS2のクロック解除後に次の第2の判定処理を行います。
第2判定処理においても、D+(CLK)を監視します。USBデータがあればデータの検出を試み、USBデータを検出すればUSBと判定します。データがHレベルのまま1ms以上、変化が無ければPS2と判断します。
第1・第2のどちらの場合も、不定な状態が10秒以上、継続した場合は、USBと判定します。
【PS2の動作】
             ───┐   ┌───────────────────
Host Clock      └───┘
             ──────┐  ┌───┬───┬───┬───┬─
Host Data          └──┴───┴───┴───┴───┴─
             ────────┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌
Device Clock         └─┘ └─┘ └─┘ └─┘ └─┘
             ───────────────────────────
Device Data
──────┼←→┼←────────────────
送信     ホスト送信データ
要求
下記から転用
by ボクにもわかるIchigoJam用マイコンボード