目次

モータ制御

 ビニルハウスの側面にあるシートを上下動する
 ことを考えます。



 モータは、次のように設置されているとします。



 シートを上下動する場合、開いていれば閉じていき
 閉じていれば開くという動作が必要といわれました。

 閉じているか開いているかの情報をデジタル値で
 入力し、モータを回転する方向を決めます。

 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


目次

inserted by FC2 system