上下に分かれたフレーム構造からなります。
タイマー回路により、上下のフレームを1つずつずらして移動させます。
ブロックにぶつかると3秒後に停止信号を出し、
モーターを動かすためのタイマー回路を停止させます。
(わかりやすいよう、赤いランプを点灯させます。)
衝突を検知しなくても止まるといえば止まりますが、
衝突したい時に何か処理をさせたい、となると一手間加える必要があります。
ではひとつひとつみていきましょう。
下側のフレームを動かすのはこちら。
普通にタイマー回路でON入力を送るだけです。
上側のフレームを動かすのはこちら。
NOT回路を使って常にONの状態にしておき、
下側のフレームが1つずれた時だけモーターと接続するようにします。
これで下側のフレームが動いた後、自動で上側のフレームも動かしてくれます。
フレームの移動としてはたったこれだけです。
ただこのままだと動画のように途中で充電切れとなるので、
上側のフレームを動かすためのモーターへの電力供給は改善の余地有りです。
衝突検知機構は上側と下側で別れています。
仕組みとしては、
フレームが動いている(ブロックと衝突していない)なら何もしない、
フレームが止まった場合、3秒間待つ。
(フレームが動ける場合は1秒以内に再度移動処理が走り3秒カウントも初期化。)
3秒経過、つまり何かに衝突したと判断したら信号を出し、トグル回路で状態を保存。
フレーム移動用モーターのためのタイマーと、3秒カウントのタイマーを停止させる。
という感じです。
衝突を検知するのは下側のフレームだけで、上側が衝突した場合は知りません。
画像を見ながらみていきましょう。
(移動前)
(移動後)
まず上側のフレームからNOT回路で信号を出しておきます。
下側のフレームが動いて、それと連動して上側のフレームが動いて
元の位置に戻った、というときに、上側と下側を接続するようにします。
下側の回路の受け取り部分はこうなります。
定位置ですよ、というON入力は、NOT回路で反転させて3秒タイマーに送ります。
動作中=OFF→反転してONで伝える、3秒タイマーは停止
動作停止=ON→反転してOFFで伝える、3秒タイマーの動作
となります。
3秒タイマーの部分はこうなっています。
動作中はON入力が入りタイマーは停止、
動作が停止するとOFFとなり3秒カウントの開始、です。
3秒経過するとタイマーからON入力を飛ばします。
それをトグル回路で受け取り、あとは上側のタイマー回路に伝えれば
衝突から3秒後にストップする機構となります。
衝突検知機構を利用して、反復移動する機構を作ってみました。
上記の機構を2つ対にして作成し、
衝突検知時のトグル回路の切り替わりにより交互に動作するようにしています。
また、下側のフレームでしか衝突の検知ができないので、
機構の高さだけ下側のフレームを積み増しています。
上側のフレームと干渉しないよう、やや間を空けるのを忘れないでください。