SHIROのIchigoJam日記

IchigoJamの電子工作とプログラミングをメインに

バーコードカムロボSkyBerry

栃木工業高校製のIchigoJam互換機「SkyBerryJAM」を組み込んだバーコードカムロボを作りました。
通常はIchigoJamとMaplesyrupの2枚を組み込むのですが、モータードライバ搭載のSkyBerryJAMを使うと基板が1枚で済むので、安価で簡単に作れます。
f:id:shiro0922:20190306130539j:plain:w480

f:id:shiro0922:20190306130823j:plain:w480

f:id:shiro0922:20190306140709p:plain:w640
モーターと距離センサーの配線はこちらのとおり。

命令表

f:id:shiro0922:20190306141035p:plain

カトラリーカード(バーコード付き)PDFファイル

材料

タミヤ 楽しい工作シリーズ No.151 単3電池ボックス 2本用 スイッチ付 (70151)

タミヤ 楽しい工作シリーズ No.151 単3電池ボックス 2本用 スイッチ付 (70151)

単3電池4本で動くので、電池ボックスは2個必要です。
カムロボの改造方法はカムロボ部のページを参照。
eleshop.jp
ビジコム バーコードリーダー 二アレンジCCD USB 黒 液晶読取対応 BC-BR900L-B

ビジコム バーコードリーダー 二アレンジCCD USB 黒 液晶読取対応 BC-BR900L-B

hello002.stores.jp
akizukidenshi.com

プログラム

プログラムの方も、各種ロボットに対応した「バーコードOS」として作りかえました。
バーコードでカードを読むと、「ピッ、ピッ…」とプログラムの行数だけブザーが鳴ります。(画面が無くても使えます)
「やってみる」(RUN)カードでプログラムを実行、「プログラムをぜんぶけす」(NEW)カードでプログラムを消去します。

メインプログラム(スロット0)

1 UART1:CLS:?"*Barcode OS*"
2 CLV:F=FILE():CLK
3 Z=0:L=0
4 OUT0:?"OK":LED1:BEEP30,30:WAIT30:LED0
5 ?CHR$(1);:R=1
6 B=INKEY():IF!BCONT
7 GSB30
8 ?CHR$(8);:IF!CGOTO16
9 IFTGSB15 ELSEGSB13
10 FORI=1TOZ:LED1:BEEP10,3:WAIT10:LED0:WAIT10:NEXT
11 GOTO24
12 GOTO5
13 Z=Z+1:[Z]=C*16+O:IFC=8L=L+1:[70+L]=Z
14 ?">";Z*10;" ";:RTN
15 [Z]=[Z]|((C*16+O)<<8):T=0:RTN
16 IFO=1?"RUN":R=0:GOTO21
17 IFO=2?"LIST":R=2:GOTO21
18 IFO=3?"NEW":GOTO3
19 IFO=4CLS:GOTO4
20 GOTO5
21 LED1:BEEP30,30:WAIT30:LED0:A=0
22 A=A+1:IFA>ZGOTO4
23 C=[A]&#F0/16:O=[A]&15:?A*10;" ";
24 IFC=15&&O=15LRUNF+1,150
25 IFC&12=4O=C&3*16+O:C=4
26 LRUNF+1,C*10
27 IFT&&(R!=1):C=([A]&#F000)>>12:O=([A]&#F00)>>8:T=0:GOTO24
28 B=INKEY()&#FF:IFBGSB30:IFC=15&&O=15?"ESC":GOTO4
29 GOTO22
30 I=89
31 I=I+1:[I]=B-48
32 B=INKEY():IF!BCONT
33 IFB!=10GOTO31
34 D=0:FORJ=90TOI:D=D*10+[J]:NEXT
35 C=D/16:O=D%16:WAIT30:CLK:RTN

コマンドサブルーチン(スロット1):通常版(IchigoJam+Maplesyrup)

1 '*Barcode OS-1
10 @LED
11 ?"LED ";O:IFR=1LRUNF,12
12 IFR=2LRUNF,27
13 LEDO:LRUNF,27
20 @WAIT
21 IFO<8O=O*60ELSEO=(O&7)*10
22 ?"WAIT ";O:IFR=1LRUNF,12
23 IFR=2LRUNF,27
24 WAITO:LRUNF,27
30 @BEEP
31 ?"BEEP":IFR=1LRUNF,12
32 IFR=2LRUNF,27
33 BEEP:LRUNF,27
40 @OUT
41 ?"OUT ";O:IFR=1LRUNF,12
42 IFR=2LRUNF,27
43 OUTO:LRUNF,27
80 @LABEL
81 ?"@";O:IFR=1LRUNF,12
82 LRUNF,27
90 @GOTOL
91 ?"GOTO @";O:IFR=1LRUNF,12
92 IFR=2LRUNF,27
93 A=[70+O]-1:LRUNF,27
100 @IFBTN
101 ?"IF BTN()=";O;" THEN ";:T=1:IFR=1LRUNF,12
102 IFR=2LRUNF,27
103 T=(BTN()=O):IF!T?
104 LRUNF,27
110 @IFANA2
111 ?"IF ANA(2)";
112 IF O THEN ?">500"; ELSE ?"<=500";
113 ?" THEN ";:T=1:IFR=1LRUNF,12
114 IFR=2LRUNF,27
115 D=(ANA(2)>500):T=(D=O):IF!T?
116 LRUNF,27
120 @FOR
121 ?"FOR I=1 TO ";O:IFR=1LRUNF,12
122 IFR=2LRUNF,27
123 I=1:J=O:S=A:LRUNF,27
130 @NEXT
131 ?"NEXT":IFR=1LRUNF,12
132 IFR=2LRUNF,27
133 I=I+1:IFI<=JA=S
134 LRUNF,27
150 @END
151 ?"END":IFR=1LRUNF,12
152 IFR=2LRUNF,27
153 A=Z:LRUNF,27

コマンドサブルーチン(スロット1):SkyBerry版

1 '*Barcode OS-1 SkyBerry
10 @LED
11 ?"LED ";O:IFR=1LRUNF,12
12 IFR=2LRUNF,27
13 LEDO:LRUNF,27
20 @WAIT
21 IFO<8O=O*60ELSEO=(O&7)*10
22 ?"WAIT ";O:IFR=1LRUNF,12
23 IFR=2LRUNF,27
24 WAITO:LRUNF,27
30 @BEEP
31 ?"BEEP":IFR=1LRUNF,12
32 IFR=2LRUNF,27
33 BEEP:LRUNF,27
40 @OUT
41 ?"OUT ";O:IFR=1LRUNF,12
42 IFR=2LRUNF,27
43 OUTO&3+(O&48)>>2:LRUNF,27
80 @LABEL
81 ?"@";O:IFR=1LRUNF,12
82 LRUNF,27
90 @GOTOL
91 ?"GOTO @";O:IFR=1LRUNF,12
92 IFR=2LRUNF,27
93 A=[70+O]-1:LRUNF,27
100 @IFBTN
101 ?"IF BTN()=";O;" THEN ";:T=1:IFR=1LRUNF,12
102 IFR=2LRUNF,27
103 T=(BTN()=O):IF!T?
104 LRUNF,27
110 @IFANA2
111 ?"IF ANA(2)";
112 IF O THEN ?">500"; ELSE ?"<=500";
113 ?" THEN ";:T=1:IFR=1LRUNF,12
114 IFR=2LRUNF,27
115 D=(ANA(2)>500):T=(D=O):IF!T?
116 LRUNF,27
120 @FOR
121 ?"FOR I=1 TO ";O:IFR=1LRUNF,12
122 IFR=2LRUNF,27
123 I=1:J=O:S=A:LRUNF,27
130 @NEXT
131 ?"NEXT":IFR=1LRUNF,12
132 IFR=2LRUNF,27
133 I=I+1:IFI<=JA=S
134 LRUNF,27
150 @END
151 ?"END":IFR=1LRUNF,12
152 IFR=2LRUNF,27
153 A=Z:LRUNF,27

43行でOUTポートを変換しているだけで、その他は通常版と同じです。
IchigoJam+Maplesyrupでは、左モーターをOUT1とOUT2、右モーターをOUT5とOUT6で制御するのですが、SkyBerryJAMでは右モーターがOUT3とOUT4につながります。そのままだとバーコードカードを変更しないといけないので、プログラム内でポートを変換して合わせています。