目次

ライントレースマシンに挑戦(その2)

 ライントレースマシンを構成する電子回路を操作する
 サブルーチンを書いていきます。

 Eye(センサー)、Leg(足)、switches(スイッチ)の順に考えます。

 必要なサブルーチンを書いたなら、次は実際に走行させます。


Eye  Eyeの回路は、以下のようになっています。  アナログマルチプレクサで切替えて、8センサーの論理値を  入力すればよいでしょう。切替えには、OUT命令を使います。  センサーを2個で1セットとして、セット0からセット3と名前を  つけると、OUT命令の組み合わせは、次のようになります。  各セットを選んでから、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ピンのソケットに  ジャックインできるようにしています。  ショートしないように、シングルピンヘッダソケットを  下駄として使います。こうすると、移動メカのボックス  の中に入れられます。
目次

inserted by FC2 system