目次
前
次
モータ制御
ビニルハウスの側面にあるシートを上下動する
ことを考えます。
モータは、次のように設置されているとします。
シートを上下動する場合、開いていれば閉じていき
閉じていれば開くという動作が必要といわれました。
閉じているか開いているかの情報をデジタル値で
入力し、モータを回転する方向を決めます。
2つのセンサーでデジタル情報を取得するとして
上下のセンサー値から、モータ動作を以下とします。
(上センサー,下センサー)=(開、閉) シートを巻き上げ
(上センサー,下センサー)=(閉、開) シートを送り下げ
開閉を論理値の'0'、'1'で表現すると、機能表は
次のようにすればよいでしょう。
(上センサー,下センサー)=(0、0) シートを送り下げ
(上センサー,下センサー)=(0、1) シートを巻き上げ
(上センサー,下センサー)=(1、0) シートを送り下げ
(上センサー,下センサー)=(1、1) 警報音鳴動
上下センサーが、どちらも開いているのはシートが中間に
あるので、どちらかの位置に移動させて対応。
上下センサーが、どちらも閉じているのは、あり得ない
状態なので、センサーが異常とし警報音を鳴動させます。
センサーは、次の回路を利用。
センサーから情報を入力するサブルーチンを
定義しておきます。
100 @GETS
110 A = IN(1) << 1 + IN(3)
120 D = A
130 RTN
センサーから得られる状態と動作を次のように
まとめることができます。
センサー値 = 0 シートを送り下げ
センサー値 = 1 シートを巻き上げ
センサー値 = 2 シートを送り下げ
センサー値 = 3 警報音鳴動
モータを回すトリガーを与える回路を次のようにします。
トリガーを取得して、モータを動かすルーチンは、以下でよいでしょう。
30 @LOOP
40 IF IN(4) = 0 GOTO LOOPX
50 GSB @GETS
60 IF D = 0 GSB @DOLW : IF D = 1 GSB @DOUP
70 IF D = 2 GSB @DOLW : IF D = 3 GSB @DOBP
80 @LOOPX
IchigoJamの出力では、モータを回せないので
ドライバを利用します。
ドライバの仕様は、以下。
モータは上に回すか、下に回すかなので、2つの
サブルーチンを定義。
140 @DOUP
150 B = 1 : GSB @DOUPLW
160 RTN
170 @DOLW
180 B = 2 : GSB @DOUPLW
190 RTN
回転方向を決めてから、ドライバに対して
制御信号を出力するので、自動停止を含め
2つのサブルーチンから使えるサブルーチン
を定義します。
200 @DOUPLW
210 OUT B
220 GSB @GETS
230 IF A = B GOTO @DOXUPLW
240 GOTO 220
250 @DOXUPLW
260 OUT 0
270 RTN
ここまでで、モータを回す処理を作成できたので
警報音の鳴動と、LED点滅で対応するとします。
警報音は、BEEPで出力できるので、サブルーチンを
次のように定義しました。
300 @DOBP
310 @DOBPA
320 OUT 4 : BEEP : WAIT 60 : OUT 0 : BEEP : WAIT 60
330 IF BTN() GOTO @DOXBP
340 GOTO @DOBPA
350 @DOXBP
360 RTN
鳴動と点滅をしているのを、止めるためにIchigoJam基板
のプッシュボタンを利用しています。
まとめると、以下。
10 ' motor control
20 OUT 0
30 @LOOP
40 IF IN(4) = 0 GOTO LOOPX
50 GSB @GETS
60 IF D = 0 GSB @DOLW : IF D = 1 GSB @DOUP
70 IF D = 2 GSB @DOLW : IF D = 3 GSB @DOBP
80 @LOOPX
90 GOTO @LOOP
92 END
100 @GETS
110 A = IN(1) << 1 + IN(3)
120 D = A
130 RTN
140 @DOUP
150 B = 1 : GSB @DOUPLW
160 RTN
170 @DOLW
180 B = 2 : GSB @DOUPLW
190 RTN
200 @DOUPLW
210 OUT B
220 GSB @GETS
230 IF A = B GOTO @DOXUPLW
240 GOTO 220
250 @DOXUPLW
260 OUT 0
270 RTN
300 @DOBP
310 @DOBPA
320 OUT 4 : BEEP : WAIT 60 : OUT 0 : BEEP : WAIT 60
330 IF BTN() GOTO @DOXBP
340 GOTO @DOBPA
350 @DOXBP
360 RTN
目次
前
次