目次
前
次
IchigoJamCarを動かす
IchigoJamは、LPC1114にBASICインタプリタの
載せたパーソナルコンピュータ。
¥1500で入手できることから、1(イチ)5(ゴ)と
名称をつけられています。
IchigoJamの入出力に、赤外線センサーとDCモータ
ドライブ回路を接続してできたのが、IchigoJamCar。
コース上の移動するIchigoJamCarは、以下。
2018年2月11日、小樽市総合博物館でのIchigoJam
体験会にて、コース上を動かしたので、その時の
内容をレポートします。
体験会の主催者側で、ハードウエアと開発環境は
用意されていたので、センサー入力と制御出力を
どう扱って小学生に説明したのかを、順を追って
紹介します。
センサー入力
IchigoJamのBASICには、デジタル入力として
次の4ピンが用意されています。
基板上では、写真の枠で囲んだ部分に
割り当てられています。
センサーの出力は、IN_1、IN_2に接続されているので
変数R、Lに値を入力し確認するには、以下とします。
20 R=IN(1):L=IN(2)
25 ? L,R
100 GOTO 20
このプログラムを動かすと、次のことがわかりました。
紙に描いたコースでは、白を検出すると論理値で'0'を
表示。黒では論理値で'1'を表示。
IchigoJamCarをコース上で動かすには、センサーの値
を使うので、この内容を忘れないようにメモ。
制御出力
IchigoJamの出力は、以下の6ビットがあります。
- OUT_1
- OUT_2
- OUT_3
- OUT_4
- OUT_5
- OUT_6
基板上では、写真の枠で囲んだ部分に
割り当てられています。
1個のモータは、正転と逆転ができると説明されました。
各ビットに論理値を出力して、タイヤの挙動を確認。
6ビットでタイヤに挙動があったのは、以下。
- OUT 2,1 : ' rotate right tire with forward
- OUT 2,0 : ' stop right tire
- OUT 3,1 : ' rotate right tire with reverse
- OUT 3,0 : ' stop right tire
- OUT 4,1 : ' rotate left tire with forward
- OUT 4,0 : ' stop left tire
- OUT 5,1 : ' rotate left tire with reverse
- OUT 5,0 : ' stop left tire
車を前進、後退、左回転、右回転させるための
命令の組合せをリストします。
- OUT 4,1 : OUT 2,1 : ' forward
- OUT 5,1 : OUT 3,1 : ' reverse
- OUT 4,1 : OUT 2,0 : ' right turn
- OUT 4,0 : OUT 2,1 : ' left turn
- OUT 4,1 : OUT 3,1 : ' right quick turn
- OUT 5,1 : OUT 2,1 : ' left quick turn
移動制御
センサー値により、コース上を移動するために
どういう組合せを作ればよいか考えます。
右に外れている
左に動かせば、コースを辿れます。
BASICのコードにすると、以下。
IF R=0 THEN OUT 4,0:OUT 2,1:WAIT 15
WAITで、右のモータだけ回している
時間を指定。15で、250ms程度。
Rが0になっているので、それを出力すると
考えれば、次のように書いてもOK。
IF R=0 THEN OUT 4,R:OUT 2,1:WAIT 15
左に外れている
右に動かせば、コースを辿れます。
BASICのコードにすると、以下。
IF L=0 THEN OUT 2,0:OUT 4,1:WAIT 15
Rが0になっているので、それを出力すると
考えれば、次のように書いてもOK。
IF L=0 THEN OUT 2,L:OUT 2,0:WAIT 15
コースから外れていないときは、直進すれば
よいので、IchigoJamCarをラインに沿って
走らせるには、次のようにまとめられます。
20 R=IN(1):L=IN(2)
25 ? L,R
30 OUT 4,1:OUT 2,1
50 IF R=0 THEN OUT 4,R:WAIT 15
60 IF L=0 THEN OUT 2,L:WAIT 15
100 GOTO 20
これで、IchigoJamCarはライントレーサロボットになります。
大学生レベルでは配列を利用して、変数を
極力少なくしたコードを作成すべきでしょう。
センサーは左右に1ビットずつなので、2進数で
取り得る組合せは、以下。
(L,R)=(0,0)
(L,R)=(0,1)
(L,R)=(1,0)
(L,R)=(1,1)
左か右のどちらかに外れたときを除いて
直進なので、10進数に変換してまとめる
と、次のようにまとめられます。
20 LET [0],IN(2) << 1 | IN(1)
25 ? [0]
30 OUT 4,1:OUT 2,1
50 IF [0]=1 THEN OUT 4,0:WAIT 15
60 IF [0]=2 THEN OUT 2,0:WAIT 15
100 GOTO 20
2進数と10進数の扱いができるようになれば
中学生以上でも対応できるでしょう。
ラベル、コメントを使うと、もう少しわかりやすい
コードになります。
20 @LOOP
22 LET [0],IN(2) << 1 | IN(1)
24 ? [0]
30 ' straight
35 OUT 4,1:OUT 2,1
50 ' turn left
55 IF [0]=1 THEN OUT 4,0:WAIT 15
60 ' turn right
65 IF [0]=2 THEN OUT 2,0:WAIT 15
100 GOTO @LOOP
目次
前
次