ピストン式論理回路bak

「ピストン式論理回路bak」の編集履歴(バックアップ)一覧はこちら

ピストン式論理回路bak」(2012/09/09 (日) 02:34:54) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

***具体例 ・敵を5体倒すと扉が開く ・鍵を三つ定位置に差し込むと橋が現れる ・計算機で加減乗除 リトルビッグプラネットの住人としてこんな仕掛けを一度は目にしたことでしょう。 //いやいや計算機で乗除は見たことない。 &u(){これらの仕掛けは全て論理回路を使用してるのです。} 論理回路をある程度理解すれば可能性は一気に広がりますよ! 同じ結果が得られる回路でも現在載っているより効率的なものがあれば 遠慮せずにどんどん追加してください。特に温度計が節約できる構成は歓迎。 図解の記号説明(表示するブラウザによってはズレることがあります) S マグネットスイッチ K マグネットキー → ピストン(基本的にONで矢印の方向へ伸びるor縮むと思ってください) ■ ブロック等 論理回路とは? 条件を設定して何かアクションを起こしたい時に必要になるものです。 「ボタンを押せば扉が開く」という類のものならスイッチとピストンを直結すれば 簡単に作ることができますが、「敵を倒した後でスイッチを押すと扉が開く」という 仕掛けの場合、「敵を倒した」「スイッチを押した」という2つの条件を判断して 扉を動作させることになります。この場合直結では実現できませんね。 論理回路はこういう場合に活躍します。(上の例では「AND回路」を使います。) 入力と出力 「入力」は条件となる装置(ボタンやセンサー等) 「出力」は結果として起こるアクションを発動するためのスイッチ と読み替えてください。 例えば、2つのボタンを同時に押すと扉が開くという仕掛けの場合、内部的な仕組みでは ・ボタンAが押されると伸びるピストンA ・ボタンBが押されると伸びるピストンB ・ピストンAの先につけられたマグネットキー ・ピストンBの先に付けられたマグネットスイッチ という4つに分解されます。ピストンA・B両方が伸びきった時に反応するように設定された マグネットスイッチにより、扉を開くためのピストンやウインチを動かします。 この場合、ボタンAとBが「入力」、マグネットスイッチが「出力」ということになります。 ---- **変換回路 このページの下のほうにある、「RS-FF」などの回路は出力の挙動が強制的に「方向」になります(保持などのため) それでは、ライトや、オン、オフの挙動にしたいとき、単発にしたいときにはこれを使います。 [S]←←→→K 方向のスイッチの線をこのピストンに繋いでください。Sはスピード以外だったらなんでも好きで結構です。 思うようなON、OFFに成らなかったら、ピストンの逆行など試してみてください。また、これを使って同時にNOT回路も実現できます。 ---- *論理ゲート 論理回路を作る上で最も基本的な回路の構成要素になっているのが論理ゲートです 家庭用の電卓からスパコンまで、あらゆるデジタル回路は全てこの論理ゲートが大量に組み合わさって出来ています 基本的にはNOT,AND,ORの回路の組み合わせだけで全て再現できるのですが、容量に限りのあるLBPにおいては、複雑な機能を持ちつつできるだけ単純な仕組みのものが好ましいです **NOT回路 入力とは逆の結果を出力します。 つまり、入力がONならOFF、OFFならONを出力します。 //***動作 //|入力|出力| //|ON|OFF| //|OFF|ON| &bold(){図解} [S]→→→K マグネットスイッチを付けたブロック+ピストンの先にマグネットキー。 ピストンがONになって伸びるとキーがスイッチの範囲外に出るのでスイッチはOFFになります。 ※単純に逆の動作をすればいい場合は、入力となるボタンやスイッチの動作を「反転」にすれば  回路を使わなくても実現できる場合が多いです。 **OR回路 2つの入力のうち、どちらかでもONになればONを出力します。 ボタンが2つあって、どっちを押してもOKという仕掛けを作りたいならば、この回路です。 1つのピストンにボタンを直接2つ繋げれば単純な装置で完成できるように思われがちですが、 現在のLBPの仕様としてピストン等の装置には1つのスイッチしかつけることができません。 //***動作 //|入力A|入力B|出力| //|OFF|OFF|OFF| //|OFF|ON|ON| //|ON|OFF|ON| //|ON|ON|ON| &bold(){図解} ■→→K S K←←■ ピストンはそれぞれ入力A,入力Bとなる装置に、動作:方向 で繋ぐ。 どちらかのピストンがONになって伸びるとキーが近づいてマグネットスイッチが ONとなり、これを出力とします。 **3入力以上に対応したOR回路 上記のOR回路で、条件を3つ以上設定する場合の構成例です。 &bold(){図解}    K    ↓ K→[S]←K    ↑    K マグネットスイッチとキーは全て同色です。 ピストンの設定を逆行にして、ONで縮むように設定しておきます。 4つのピストンのうち、1つでも縮めば中央のマグネットスイッチが反応しONとなります。 &bold(){写真} #ref(写真_2.jpg) **AND回路 2つの入力がどちらもONの場合だけONを出力します。 「全ての条件を満たさないとクリアできない」という、おそらくゲーム内では 一番よく使うことになるであろう回路です。 ・2つのレバーを決まった方向へ動かすと扉が開く ・2匹の敵をどちらも倒すと扉が開く 等、全てこのAND回路によって仕掛けを作ることになります。 //***動作 //|入力A|入力B|出力| //|OFF|OFF|OFF| //|OFF|ON|OFF| //|ON|OFF|OFF| //|ON|ON|ON| &bold(){図解} ■→→K S←←■ 2つのピストンが伸びた時にしか反応しない感知範囲を設定することが重要です。 **3入力以上対応のAND回路 3つ以上の条件に対応したバージョンです。 OR回路版の応用なので簡単だと思います。 &bold(){図解}    K    ↑ K←[S]→K    ↓    K ピストンがONになるとキーが感知範囲外に出るように設置します。 中央のマグネットスイッチの動作を「逆転」にすれば結果的に 「全てのキーが範囲外に出るとマグネットスイッチがON」となります。 **XOR回路 2つの入力のうち、どちらか一方だけがONの場合のみONを出力 入力がどちらもOFF、もしくはどちらもONの場合OFFを出力 表にするとこうなります |入力A|入力B|出力| |OFF|OFF|OFF| |OFF|ON|ON| |ON|OFF|ON| |ON|ON|OFF| &bold(){図解} キーを2つ間隔を開けて(ONでピストンの動く幅の倍)固定し、その中央にスイッチを配置する ■→→→S ■→K━━K ON ■→→→→→→S   OFF ■→→→S    ON ■→→→K━━K OFF ■→K━━K OFF ■→→→S      ON  ■→→→→→→S    ON ■→→→K━━K  OFF ■→K━━K &bold(){写真} #ref(写真_8.jpg) NOT(XOR) = EQのため、EQのスイッチを反転させたほうが作成が簡単。 **EQ回路 それぞれのスイッチのON OFF が同じ時にONになります。 XORの逆ですが、こちらの方が仕組みが分かりやすいと思います。 |入力A|入力B|出力| |ON|ON|ON| |ON|OFF|OFF| |OFF|ON|OFF| |OFF|OFF|ON| ■→→→S ■→→→K 同じ長さの時にONになります。 ---- *フリップフロップ(保持回路) 入力状態の保持と解除を行う回路。つまりメモリの事。 **RS-FF ***概要 2種類の入力があり、片方を入れると出力がオン(set)、なにもしないとオンまたはオフの状態を保持し、もう片方を入れると出力がオフになる(reset)。 ***実装例 setの入力を上のピストン、resetの入力を下のピストン、スイッチを真ん中のピストンに繋ぐ。 出力は真ん中のスイッチから。 ■→→→K    ■→→→S       ■→→→K #ref(写真_10.jpg) RS-FF回路 ***参考動画 &youtube(http://jp.youtube.com/watch?v=ca3Is5KSqRU){480,270} **T-FF ***概要 RS-FFの、setとresetを一つのスイッチで行う回路。スイッチを押すたびに出力のオンオフが切り替わる。 ***実装例 これまでの回路とは違い、ピストンを使わないやり方が単純である。 モータで接合した円盤を用意する。そのモーターにオンオフ設定のスイッチを接続し、 そのスイッチが反応する場所にエミッタからキーを貼り付けたダークマターを出現させるようにする。 キーの持続時間を、モーターが丁度半回転する時間に設定(モーターは速さ12のとき1秒で1周する)し、 エミッタに単発設定でスイッチを接続する。 円盤上にキー、そのキーにギリギリ反応する位置に固定したスイッチを配置する。 こうする事で、エミッタに接続したスイッチを入れるたびに、固定したスイッチのオンオフが入れ替わる。 #ref(写真_13.jpg) T-FF回路 ***参考動画 &youtube(http://jp.youtube.com/watch?v=JUp9v67PXI8){480,270} ***実装例2 設定がシビアではあるが部品を節約した回路もある。 動作スイッチを「挙動=単発」にすることによりピストン2個、マグネットスイッチ、マグネットキーのみでできる。 #ref(T-FF-OFF.jpg) T-FF回路例2 OFF #ref(T-FF-ON.jpg) T-FF回路例2 ON #ref(T-FF-AREA.jpg) T-FF回路例2 マグネットスイッチ範囲 写真での設定  押しボタンスイッチ   挙動 単発(1)  ピストン(右側)   最長 17.5   最小 2.5   強度 10.0   スピード 0.1S   ポーズ 0.0S   シンク 0.0S   角度固定 はい(レ)   反転モーション アウト(|→)   表示する はい(レ)  ピストン(左側)   最長 17.5   最小 2.5   強度 10.0   スピード 0.1S   ポーズ 0.0S   シンク 0.0S   角度固定 はい(レ)   反転モーション オフ(X)   逆行 いいえ(X)   表示する はい(レ)  マグネットスイッチ   挙動 方向(←/→)   探査範囲 (OFFのときにマグネットキーにかからない程度)   トリガー角度範囲 360.0   スイッチカラー (キーと同じ色)   反転 いいえ(X)   表示する はい(レ) **D-FF ***概要 クロック(CLK)とデータ(D)の入力があり、クロックがONになったときのデータのON/OFFが保持される。 (この例で紹介するD-FFはクロックの立ち上がりに対応もの) ***実装例 ピストンの挙動はすべて同じである。マグネットスイッチの挙動はすべて同じである。 マグネットスイッチの範囲は写真の状態で左のMSと右のMSのどちらかが常に入るように設定する。 左上のピストン接続元 上MS 左中のピストン接続元 クロック 左下のピストン接続元 データ 右ピストン接続元 下MS 出力 上MS #image(D-FF_P1.jpg,width=352,height=240) #image(D-FF_P2.jpg,width=352,height=240) ***動作 #image(D-FF1.jpg,width=352,height=240) 待機の状態では出力はOFFである。 #image(D-FF2.jpg,width=352,height=240) データがONになっても出力はOFFである。 #image(D-FF3.jpg,width=352,height=240) データがONでクロックが入ると(立ち上がり)出力はONになる。 #image(D-FF4.jpg,width=352,height=240) データ、クロックがOFFになても出力はONを保持する。 #image(D-FF5.jpg,width=352,height=240) デーががOFFでクロックが入ると(立ち上がり)出力はOFFになる。(OFFを保持) #image(D-FF6.jpg,width=352,height=240) クロックがONの間にデータがONになっても出力は変化しない。 **JK-FF ***概要 クロック(CLK)とJ(RS-FFのS)、K(RS-FFのR)の3つの入力があり、 クロックが1回押されてから、入力J、Kの結果を出力・保持する。 (この例で紹介するJK-FFはクロックの立ち上がりで結果を出力、上記の方法で対応する) >D-FFにセット入力、リセット入力のあるバージョン(セット、リセットの動作はRS-FFと同じ) >と考えるといい。 -このJK-FFは、RS-FFに近い。 -入力J、KがどちらもONのときに前の出力結果を反転するので、T-FFとして使用できる。 -入力J、KをON/OFFともに反転させれば、D-FFとしてでも使用できる。 >このように、JK-FFはさまざまな用途で使用できるため、万能FFといわれている。 ---- | J | K |結果 | |OFF|OFF|保持 | |ON |OFF|ON | |OFF|ON |OFF | |ON |ON |反転 | ***実装例 a b c d e f g h i j k l 1 K | K | K | K 2 ↑ | ↑ | ↑ | ↑ 3 K ← S | S → K | S | S 4 ↓ | ↓ | ↓ | ↓ 5 K | K | K | K ※上の図のピストンは全て最大の長さ ※ | 線で区切られた所からマグネットスイッチ・キーは色を変える ***ピストンの設定 >最大の長さは全て統一(|線で区切られていないキーが全てギリギリ入る範囲)。 >最小の長さは全て「0」。 >(d4)(f4)のピストンだけは反転モーションを「イン」。 ***スイッチのつなぐ場所 ※普通スイッチ設定は「方向」 |J|K|CLK|(d3)|(f3)|(j3)|(l3)| |(c3)|(g3)|(d4) (f4)(単発)|(j2)|(l2)|(l4) (f2)|(j4) (d2)| ピストンの挙動はすべて同じである。マグネットスイッチの挙動はすべて同じである。 マグネットスイッチの範囲は写真の状態で左のMSと右のMSのどちらかが常に入るように設定する。 *** 作成例 JK-FFの動作を見るとT-FFと似ていることがわかる。 -QがOFFでJがONのときはクロックを入れる -QがONでKがONのときはクロックを入れる -Qにかかわらず、J,KがONのときはクロックを入れる 上記のように考えるとT-FFで代用できる。 クロック=(/Q・J + Q・K) ・ CLK ピストン6個とマグネットスイッチ2個、マグネットキー3個ですむ。 #ref(JKT-FF.jpg) ***応用、その他 自分の出力を反転して入力に繋ぐとT-FFになる。(データの代わりに上MSを左下のピストンに繋ぎ、ピストンの動作を逆行にする) D-FFの出力を別のD-FFの入力に繋ぐとシフトレジスタになる。(8個つなぐと8Bitシフトレジスタ) ---- *演算回路 入力されたデータを数値として認識し、それを計算して別の数値を出力する回路です ・論理演算 NOT,AND,OR,XORなど ・数値演算 いわゆる足し算、引き算、掛け算、割り算など ここでは数値演算の紹介をします。 ・半加算器(ハーフアダー) 足し算を行う ・全加算器(フルアダー) 半加算器に前の桁からの繰り上がり入力を加えたもの ・10進補正 4桁の2進数を10進数(普通の数字)に変換する。 ・表示機 結果を表示する機構 ・補数 基本となる数に足すと繰り上がる最小の数、マイナスの数字を扱うのに使用する ・減算器 引き算を行う ・シフト ビットシフトを行う。シフトされた数字は2倍、4倍、、、1/2、1/4、、、になる ・乗算気 掛け算を行う。 **2進数半加算回路(ハーフアダー) 募集中 **2進数加算回路(フルアダー) 2進数の加算は、単純なON/OFFを入力データとして設定できるので、LBPにおいても非常に扱いやすい 入力は基本的には2系統だが、繰り上がりを考えると入力は3系統、出力は基本出力と繰り上がりの出力の2系統となる 入力の系統はそれぞれ等価なので、ONになった入力の数によってそれぞれの出力は次のように決まる |入力数|基本出力(D)|繰り上がり(X)| |0|OFF|OFF| |1|ON|OFF| |2|OFF|ON| |3|ON|ON| この結果を実現する回路として、次のようなものを提案する ***実装例 #ref(2bit.jpg) 基本的な構造はリニア式のAND回路で、入力が増えるごとにピストンの伸びが加算されていき、MKの位置が変化する よって、このキーの位置によってそれぞれの出力のON/OFFを変えればいい 繰り上がりの出力方は単純で、入力数2以上の位置にMKが入ったときにONになるようにMSを設定する 基本出力の方は出来るだけ回路をシンプルにするために次のような範囲設定を行う #ref(sense.jpg) こうする事で入力数が1,3のときだけMSがONになってくれる ***使用方法 1桁目の回路の繰り上がり出力を2桁目の回路の入力に、という形で次々接続していき、n桁目まで繋げたときその繰り上がり出力を基本出力のn+1桁目とする #ref(ex.jpg) これはn=2のときの例である 1桁目の入力Xは基本的にはOFF状態にしていれば問題ないが、減算を行う場合に入力された値の内小さい方の値を2の補数(2進数の、0と1を入れ替えたもの)に変換して更に1を足す必要がある為、この加算する1の値として扱うとよい #ref(ex2.jpg) 実際に011+011(=3+3)の計算を行うと、きちんと110=6という計算結果が出力される ---- *募集中 **カウンタ **そのた 内容が不明なためこの部分をコメントに変更しました。 執筆者は再編集をしてください。 // 2010-3-29 コメントに変更 // 理由 図がありません //    OR回路ならOR回路の位置に入れてください。 //    この図では説明がわかりません。 //    内容をまとめて見る人の参考になるようにしてください。 //** // //ぼくの考えた回路を説明します。ちなみにOR回路と同じ働きをします。あとこんなところに貼ってしまってすいません。 //&bold(){図解} //―=ボタンスイッチ //D=ダークマター //T=溶ける素材 //X=重さがあるものならなんでもおk // // D D D D //        ←結合 // T⇔T T T //        ←結合 // X⇔X X X //  ↑間隔 //こんな感じです。 //

表示オプション

横に並べて表示:
変化行の前後のみ表示: