目次
前
次
ライントレースマシンに挑戦(その2)
ライントレースマシンを構成する電子回路を操作する
サブルーチンを書いていきます。
Eye(センサー)、Leg(足)、switches(スイッチ)の順に考えます。
必要なサブルーチンを書いたなら、次は実際に走行させます。
Eye
Eyeの回路は、以下のようになっています。
アナログマルチプレクサで切替えて、8センサーの論理値を
入力すればよいでしょう。切替えには、OUT命令を使います。
センサーを2個で1セットとして、セット0からセット3と名前を
つけると、OUT命令の組み合わせは、次のようになります。
- OUT 6,0 : OUT 1,0 : ' set 0
- OUT 6,0 : OUT 1,1 : ' set 1
- OUT 6,1 : OUT 1,0 : ' set 2
- OUT 6,1 : OUT 1,1 : ' set 3
各セットを選んでから、IN命令で値を入力して保存します。
200 ' sensor
210 OUT 6,0:OUT 1,0:LET [11],IN(4):LET [10],IN(1)
220 OUT 6,0:OUT 1,1:LET [13],IN(4):LET [12],IN(1)
230 OUT 6,1:OUT 1,0:LET [15],IN(4):LET [14],IN(1)
240 OUT 6,1:OUT 1,1:LET [17],IN(4):LET [16],IN(1)
250 LET [0],([17] << 1) | [16]: LET [0],([0] << 2)
260 LET [0],[0] | ([15] << 1) | [14]: LET [0],([0] << 2)
270 LET [0],[0] | ([13] << 1) | [12]: LET [0],([0] << 2)
280 LET [0],[0] | ([11] << 1) | [0]
290 RETURN
シフト命令を利用するなら、もう少し短くできます。
200 ' sensor
210 OUT 6,0:OUT 1,0:LET [10],(IN(4) << 1) | IN(1)
220 OUT 6,0:OUT 1,1:LET [11],(IN(4) << 1) | IN(1)
230 OUT 6,1:OUT 1,0:LET [12],(IN(4) << 1) | IN(1)
240 OUT 6,1:OUT 1,1:LET [13],(IN(4) << 1) | IN(1)
250 LET [0],([13] << 2) | [12]: LET [0],([0] << 4)
260 LET [0],[0] | ([11] << 2) | [10]
270 RETURN
FORを利用すると、OUT命令の扱いがわかりやすくなります。
200 ' sensor
210 FOR J=0 TO 1 : FOR I=0 TO 1
220 OUT 6,J : OUT 1,I : LET K,10+2*J+I
230 LET [K],(IN(4) << 1) | IN(1)
240 NEXT : NEXT
250 LET [0],([13] << 2) | [12]: LET [0],([0] << 4)
260 LET [0],[0] | ([11] << 2) | [10]
270 RETURN
マルチプレクサを利用しないときは、IN1からIN4に
フォトリフレクタが接続されているとして、以下の
単純なプログラムでテストできます。
10 ' test sensor
20 LET [1],0,0,0,0
30 FOR I=1 TO 4:LET [I],IN(I):NEXT
40 ? [1],[3],[4]
50 WAIT 120
60 IF BTN() GOTO 80
70 GOTO 30
80 ? "Exit"
90 END
ラベルを利用すると、次のようにも書けます。
10 ' test sensor
20 LET [1],0,0,0,0
30 @LOOP
40 FOR I=1 TO 4:LET [I],IN(I):NEXT
50 ? [1],[3],[4]:WAIT 120
60 IF BTN() GOTO @EXIT
70 GOTO @LOOP
80 @EXIT
90 ? "Exit"
95 END
フォトリフレクタの感度を、上のプログラムで
調整できます。
Leg
モータの回転には、PWM命令を使います。
モータを駆動する回路を見ると、以下。
モータの回転は、前進、後退、右回転、左回転があるので
PWMのDUTY比は、配列の[20]から[23]に入れられていると
して、次のようにサブルーチンを作成すればよいでしょう。
300 ' motor
310 PWM 2,[20],100 : PWM 3,[21],100
320 PWM 4,[22],100 : PWM 5,[23],100
330 RETURN
単体での動作チェックは、次のプログラムを利用。
10 ' test motor
20 LET A,0:GOSUB 100
30 FOR I=2 TO 5:LED 1:OUT I,[I]:LED 0:NEXT
40 GOSUB 100:WAIT 120
50 IF BTN() GOTO 70
60 GOTO 30
70 FOR I=2 TO 5:OUT I,0:NEXT
80 ? "Exit"
90 END
100 ' judge
110 FOR I=2 TO 5:OUT I,0:NEXT
120 ? A
130 IF A=0 LET [2],1,0,1,0
140 IF A=1 LET [2],1,0,0,1
150 IF A=2 LET [2],0,1,1,0
160 IF A=3 LET [2],0,1,0,1
170 LET A,A+1:IF A>3 LET A,0
180 RETURN
ラベルを利用すると、次のようにも書けます。
10 ' test motor
20 LET A,0:GSB @JUDGE
30 @LOOP
40 FOR I=2 TO 5:LED 1:OUT I,[I]:LED 0:NEXT
50 GSB @JUDGE:WAIT 120
60 IF BTN() GOTO @EXIT
70 GOTO @LOOP
80 @EXIT
82 FOR I=2 TO 5:OUT I,0:NEXT
84 ? "Exit"
90 END
100 @JUDGE
110 FOR I=2 TO 5:OUT I,0:NEXT
120 ? A
130 IF A=0 LET [2],1,0,1,0
140 IF A=1 LET [2],1,0,0,1
150 IF A=2 LET [2],0,1,1,0
160 IF A=3 LET [2],0,1,0,1
170 LET A,A+1:IF A>3 LET A,0
180 RTN
PWMのDUTY比を可変する方式ではなく、Hブリッジで
単純に回転方向を変えます。
IchigoJam基板上のボタンを押すと停止します。
switches
スイッチ処理の回路図を見てみます。
A/D変換器の入力値は、300、600、700、800、900、1000台となります。
これらの数値で、押されたボタンを判断できます。
サブルーチンは次のようにすればよいでしょう。
400 'switch
410 LET [1],ANA(2)
420 LET [1],[1] / 100
430 RETURN
単体でのチェックは、次のプログラムで充分。
10 ' test button
20 LET [2],ANA(2)
30 LET [2],[2] / 100
40 ? [2]
50 WAIT 120
60 IF BTN() GOTO 80
70 GOTO 20
80 ? "Exit"
90 END
ラベル利用で、次のようにも書けます。
10 ' test button
20 @LOOP
30 LET [2],ANA(2):LET [2],[2] / 100
40 ? [2]:WAIT 120
50 IF BTN() GOTO @EXIT
60 GOTO @LOOP
70 @EXIT
80 ? "Exit"
90 END
インタフェース基板
TA7291を利用したモータドライバとセンサーに関係する
回路を実装した基板は、以下のようになります。
LPC1114は28ピンのICなので、左右にある14ピンのソケットに
ジャックインできるようにしています。
ショートしないように、シングルピンヘッダソケットを
下駄として使います。こうすると、移動メカのボックス
の中に入れられます。
目次
前
次