目次
前
次
モーター制御
IchigoJamにモーター制御用ICを接続して
プログラムで動かしてみます。
モーター制御用ICの回路は、以下。
IchigoJamがOUT命令で出力できる電圧は3V程度
なので、モーター制御用ICを動かすには、不足です。
モーター制御用ICを動かせる程度までに電圧を
引き上げるため、インバータを2つ接続します。
OUT命令で出力する電圧が3V程度でも、インバータを
2つ接続した後で出てくる電圧は5Vくらいになります。
インバータの入力にはLEDを接続し、IchigoJamが論理値
の'1'を出力したとき、点灯させてプログラムの動作を
わかりやすくします。
利用しているモーター制御用ICは、2ビットで次の
動作をさせられます。
モーター制御用ICは、2個使うので、ツインギアモーター
を利用すると、前進、後退、右回転、左回転、停止が可能。
ツインギアモータは、次のフォークリフトを
使えばメカと一緒に入手できます。
前進、後退、右回転、左回転、停止を
サブルーチンで定義してみます。
200 ' forward
210 OUT 3,1 : OUT 4,0 : OUT 5,1 : OUT 6,0
220 RETURN
230 ' reverse
240 OUT 3,0 : OUT 4,1 : OUT 5,0 : OUT 6,1
250 RETURN
260 ' right
270 OUT 3,1 : OUT 4,0 : OUT 5,0 : OUT 6,1
280 RETURN
290 ' left
300 OUT 3,0 : OUT 4,1 : OUT 5,1 : OUT 6,0
320 RETURN
330 ' stop
340 OUT 3,0 : OUT 4,1 : OUT 5,1 : OUT 6,0
350 RETURN
各サブルーチンは、ピン3から6に4つの値
を出力するだけになっています。FOR...NEXT
で、配列に入れた値をOUT命令で与えればよい
でしょう。これをサブルーチンにまとめます。
100 ' impress
110 FOR I=3 TO 6 : OUT I,[I] : NEXT
120 RETURN
サブルーチンを使う方は、配列[3][4][5][6]に
論理値の'1'か'0'を入れ、呼び出せば、うまく
いきそう。
100 ' impress
110 FOR I=3 TO 6 : OUT I,[I] : NEXT
120 RETURN
200 ' forward
210 LET [3],1,0,1,0 : GOSUB 100 : RETURN
220 ' reverse
230 LET [3],0,1,0,1 : GOSUB 100 : RETURN
240 ' right
250 LET [3],1,0,0,1 : GOSUB 100 : RETURN
260 ' left
270 LET [3],0,1,1,0 : GOSUB 100 : RETURN
280 ' stop
290 LET [3],0,0,0,0 : GOSUB 100 : RETURN
モーターを回している時間が必要になるので
WAIT命令を利用して、サブルーチンを呼出す
方は、指定して貰いましょう。
前進、右回転、後退、左回転、停止をさせてみます。
停止状態から動き出すとします。
10 ' moving
20 LET D,1200 : LET W,60 : GOSUB 280
30 GOSUB 200 : WAIT D : GOSUB 280 : WAIT W : ' forward & stop
40 GOSUB 240 : WAIT D : GOSUB 280 : WAIT W : ' right & stop
50 GOSUB 220 : WAIT D : GOSUB 280 : WAIT W : ' reverse & stop
60 GOSUB 260 : WAIT D : GOSUB 280 : WAIT W : ' left & stop
70 END
100 ' impress
110 FOR I=3 TO 6 : OUT I,[I] : NEXT
120 RETURN
200 ' forward
210 LET [3],1,0,1,0 : GOSUB 100 : RETURN
220 ' reverse
230 LET [3],0,1,0,1 : GOSUB 100 : RETURN
240 ' right
250 LET [3],1,0,0,1 : GOSUB 100 : RETURN
260 ' left
270 LET [3],0,1,1,0 : GOSUB 100 : RETURN
280 ' stop
290 LET [3],0,0,0,0 : GOSUB 100 : RETURN
前後左右の移動のために、サブルーチンの行番号を
区別するのは面倒なので、変数で移動の仕方を変え
られるようにします。
10 ' moving
20 D=1200 : W=60
30 C=0:GOSUB 100: ' stop
40 C=3:Z=D:GOSUB 100:C=0:Z=W:GOSUB 100:' forward & stop
50 C=1:Z=D:GOSUB 100:C=0:Z=W:GOSUB 100:' right & stop
60 C=4:Z=D:GOSUB 100:C=0:Z=W:GOSUB 100:' reverse & stop
70 C=2:Z=D:GOSUB 100:C=0:Z=W:GOSUB 100:' left & stop
80 END
100 ' control
110 IF C>4 GOTO 190
120 IF C=1 LET [3],1,0,0,1 : ' right
130 IF C=2 LET [3],0,1,1,0 : ' left
140 IF C=3 LET [3],1,0,1,0 : ' forward
150 IF C=4 LET [3],0,1,0,1 : ' reverse
160 IF C=0 LET [3],0,0,0,0 : ' stop
170 FOR I=3 TO 6 : OUT I,[I] : NEXT
180 WAIT Z
190 RETURN
ラベル利用で、次のようにもかけます。
10 ' moving
20 D=1200 : W=60
30 C=0:GSB @CON: ' stop
40 C=3:Z=D:GSB @CON:C=0:Z=W:GSB @CON:' forward & stop
50 C=1:Z=D:GSB @CON:C=0:Z=W:GSB @CON:' right & stop
60 C=4:Z=D:GSB @CON:C=0:Z=W:GSB @CON:' reverse & stop
70 C=2:Z=D:GSB @CON:C=0:Z=W:GSB @CON:' left & stop
80 END
100 @CON
110 IF C>4 GOTO 190
120 IF C=1 LET [3],1,0,0,1 : ' right
130 IF C=2 LET [3],0,1,1,0 : ' left
140 IF C=3 LET [3],1,0,1,0 : ' forward
150 IF C=4 LET [3],0,1,0,1 : ' reverse
160 IF C=0 LET [3],0,0,0,0 : ' stop
170 FOR I=3 TO 6 : OUT I,[I] : NEXT
180 WAIT Z
190 RTN
移動に利用している変数Cは、2進数で表現すると以下。
C=0 -> `000
C=1 -> `001
C=2 -> `010
C=3 -> `011
C=4 -> `100
右のモータを回転させるときには、`001
左のモータを回転させるときには、`010
として、両方のモータを回転させるとき
`011として、どちらのモータかがわかる
ようにしてみました。
サブルーチンの先頭で、変数値として
正しくない場合の処理をしています。
モーター制御回路のICの数を減らすには、次のように
します。
目次
前
次