作って楽しく学ぶレッドストーン回路
※本サイトでは、ブロックやアイテム名はJava版の名称を用いています。統合版の方は以下の通り読み替えてください。
レッドストーンダスト ⇒ レッドストーンの粉
レッドストーントーチ ⇒ レッドストーンたいまつ
リピーター ⇒ 反復装置
レッドストーン回路って学びにくい
マインクラフトのレッドストーン回路を学ぶとなると、大抵はレッドストーンダストやリピーター、コンパレーターの説明から入ります。そして入力装置や出力装置ぐらいまではいいのですが、AND回路やOR回路などの論理回路の辺りで「何の役に立つのか?」とか思い始めると、眠くなってきます。
しくみを理解しなければ面白くない
ネットや動画で調べて仕組みや原理を理解せず手順通りに作っても、あまり面白くありません。むしろ面倒に感じます。逆に、原理や原則だけ覚えておいて、それらを組み合わせて自部の頭で考えて回路を組んで装置作るようになると楽しくなってきます。
でもレッドストーン回路を学ぼうと、チュートリアルや入門講座のようなもをネットで探しても、なかなか見つかりません。そこで、実用的な機械・装置を作りながら、それに必要な知識や回路を紹介し、作りながら学べるチュートリアルを用意する事にしました。
自動ゴミ箱を作ろう
まず最初に作る自動化装置は、単純で簡単な自動ゴミ箱がいいと思います。
対象読者
- 楽しく作りながら学びたい
- マイクラ歴は結構あるがレッドストーンは避けてきた
- しくみや原理を理解して応用できるようになりたい
- 人の作った自動装置や回路を見て理解できるようになりたい
ゴミ箱って何?という方は、こちらを読んでおいてください。
『ゴミ箱について』
学習できる回路
以下の3ステップでそれぞれ回路を一つづつ学べるようにしました。
- STEP1:クロック回路(コンパレーター式)
- STEP2:AND回路
- STEP3:ラッチ回路
マイクラ初心者の方へ
クリエイティブで試してみよう
今まで作った事のない装置類はクリエイティブで作ってみる事をお勧めします。資源やスペースに縛りのない環境で、あれやこれや試してみるのがいいと思います。
ネザークオーツは必須
マイクラ初心者の方の中には、まだネザーに行ってない人もいるかもしれません。レッドスト―ン回路にはネザークオーツ(BE:暗黒界クオーツ、闇のクオーツ)が必須です。ネザーに行けば比較的簡単に入手できますので頑張って取ってきましょう。
STEP1ー自動ゴミ箱を作る
自動式ゴミ箱とは、捨てたいアイテムが大量にあるときに、チェストに入れておけば自動的に捨ててくれるゴミ箱です。
- 機能:チェストに入れたらすぐに捨て始める
- 学習できる回路:クロック回路(コンパレーター式)
ドロッパーにレッドストーン信号を送る
ドロッパーにレッドストーン信号を送ると、カチッという音がして中に入っているアイテムをドロップします。以下のようにレバーを使ってドロッパーにアイテムを沢山入れてレッドストーン信号を送ってみましょう。
ドロッパー内のアイテムを全てドロップするには、何度もレッドストーン信号を送らなければいけません。レバーだとオンオフを繰り返さないといけませんね。ガチャガチャとレバーを連打するなんて、やってられません。そこで、このレッドストーン信号のオンオフ繰り返しを自動化するのがクロック回路です。
ドロッパーにクロック回路をつなげる
では、このクロック回路をレバーとドロッパーの間に入れてみましょう。
このクロック回路はコンパレーター式です。仕組みを簡単に解説します。
コンパレーター式のクロック回路の仕組み
減算モードのコンパレーターは、後ろからのレッドストーン信号強度から、横のレッドストーン信号強度を引き算します。レバーをオンにするとまずコンパレーターの後ろから強度15の信号が入力されます。横からはまだないので15でそのまま出力します。しかし1RSティック後(0.1秒後)に横から強度13の信号が入ってきます。後ろの信号強度15から横の13を引き算して強度2の信号を出力します。
その結果、強度が15と2のレッドストーン信号を0.1秒毎に交互に出力し続けます。ドロッパーはコンパレ-ターから3マス離れているので、0.1秒ごとに13と0の信号強度になります。これがオンオフが繰り返されるしくみです。
コンパレーター式のクロック回路について、さらに知りたい方はこちらを読んでください。
『クロック回路(コンパレーター式)』
ちなみにオブザーバー式のクロック回路でも同様に動作します。
『クロック回路(オブザーバー式)』
どちらを使うかは好みですが、コンパレーター式の方はクロック周期を変える事ができるので基本はこちらを使う方がいいでしょう。
これでレバーをオンにしている間はクロック回路が動作し続けます。ただ、ドロッパーがアイテムを吐き出し終わってもレバーをオフにするまでクロック回路が動作し、ドロッパーがカチカチ鳴り続けます。
これをなんとかしましょう。ドロッパーにアイテムが入っている間だけ、クロック回路にレッドストーン信号を送ればいい訳です。
ゴミが入っていたらクロック回路が動くようにする
これを実現するにはコンパレーターを使います。コンパレーターはドロッパーにアイテムが入っているかどうか調べて、入っていたらレッドストーン信号を出力します。
この設計で実際に作って動かしてみましょう。
苗木をドロッパーに10本入れてみます。
動かないですね。原因は何でしょうか?
ドロッパーのアイテムを検知するコンパレーターの出力が1になっています。クロック回路までレッドストーン信号が届いていません。コンパレーターはアイテムがどれくらい入っているのか調べるのに使う訳ですが、入っている量によって出力が変化します。最大9スタック入るドロッパーに、苗木10本と少ないのでちょっとしか信号が出ない訳です。ドロッパーにアイテムが入っている限り動かしたいのなら信号強度を増幅するためにリピーターを置きます。
これで問題なく動作します。
これで回路部分はだいたい完成です。アイテムをドロッパーに入れるだけでOKです。楽ちんですね。でも何か忘れているような…。そうです、ドロッパーにホッパーとチェストをつなげましょう。これで大量のアイテムでも大丈夫です。あと、肝心のマグマ(又はサボテン)も置いとかないと!
STEP1完成
では、アイテムを沢山チェストに入れてみましょう。
なぜ3個づつ処理しているのか?
カチカチカチと3個づつアイテムをドロップするはずです。これはホッパーがアイテムを送り出す間隔が0.4秒で、クロック回路の周期0.2秒より遅いからです。ドロッパーがアイテムをドロップするスピードにホッパーが追いついてないのです。そのため、ドロッパー内部が空になる瞬間が生まれます。観察するとドロッパー内部のアイテムを検出するコンパレーターが光ったり消えたりしてますね。
ホッパーがボトルネック
クロック回路のスピードが最速でも、ホッパーを通す限りアイテムを一つ消去するのにかかる時間は0.4秒です。ホッパーがボトルネックになっています。ドロッパーに直接アイテムを入れた場合は、一つのアイテムを消去するのに要する時間は半分の0.2秒になります。
でも、こればかりはホッパーの仕様だから仕方ありませんね。それに自動ゴミ箱の処理スピードをそんなに気にする必要もありませんし。
仕組みを理解しないと改良できない
この動作自体はここでは問題なりませんが、なぜこうなっているのか理解しましょう。でないと何か改良したい時にこれが問題になったりします。実際にこの記事の最後の方で問題になります。解決方法もそちらを参照してください。現段階では機能に問題はありません。
STEP2ー安心安全機能
STEP1では、最初にレバーでクロック回路を作動していました。それからレバーを無くしてドロッパーにアイテムが入っている時だけクロック回路が動くようにしました。STEP2では、この2つの機能をミックスしてみます。つまり、ドロッパーにアイテムが入っていてもレバーでオンにしないと動かないゴミ箱です。
ゴミ箱に間違えて大切なものを入れてしまったら大変です。そこで安全に処分できるように、アイテムを入れて間違いがないか確認してから処分スタート、そんなイメージですね。
- 機能:アイテムが入っていてもレバーでオンにしないと動かない
- 学習できる回路:AND回路
どうやって実装すればいいのか難しそうですが、実は簡単な方法があります。
簡単な方法
この装置の出口であるドロッパーの機能を止めてしまえばいいのです。
ドロッパーにレバーを設置すると、ドロッパーのブロックがオンになりクロック回路が機能しなくなります。また隣接するホッパーにレッドストーン信号が伝わりホッパーが止まります。
ドロッパーのブロックがオンになる、の意味がわからないという方はこちらを読んでください。
ブロックのオンオフ状態の見極めはレッドストーン回路を使った装置ではきわめて重要なので、ぜひ理解してください。
ちょっと問題あり
ホッパーとチェストをドロッパーの上に載せている理由は、大量のアイテムを処分したいからです。ですがドロッパーとホッパーが停止しているので、チェストに入れたアイテムは動きません。ドロッパーとホッパーには合計14スタック入り、そこを使えないのは残念です。
また、レバーがオンになったドロッパーは、ブロック自体がオン状態になっているので、そこからレッドストーン動力が逆流して回路が全く機能しない状態(レバーをオフにすれば問題ありませんが)になっています。現段階では問題ありませんが、これでは改良しづらく柔軟性がありません。
より良い方法
では、本来あるべきレッドストーン回路で考えてみます。ここでSTEP2で追加しようとしていた機能をもう一度おさらいします。クロック回路が動作する条件は
「ドロッパーにアイテムが入っていて」
尚且つ
「レバーがオンになっている」
ですね。
この「尚且つ」が出てくれば、AND回路が必要という事です。
AND回路
AND回路は以下のように2つの入力と1つの出力があります。2つの入力が共にオンの場合に、出力がオンになります。
AND回路の詳細はこちらをご一読ください。
AND回路を組み込む
このAND回路の入力にSTEP2の2つの動作条件を当てはめてみましょう。
この通りに回路を組んでみましょう。
もっとコンパクトにしたいですね。配線を考えて改善しましょう。
ドロッパーのアイテム検出用コンパレータとAND回路の入力をくっつけるとリピーターが不要になります。レバーもブロックに直接くっつけた方がコンパクトですね。
このように、最初はスペースを大きめにとって回路を組んでおき、動作の確認ができてから無駄を省いた配線を考えた方がいいです。
STEP2完成
これでSTEP2の回路部分は完成です。ホッパーとチェスト、マグマを設置して動かしてみましょう。
捨てるアイテムをチェストに入れて、間違いがないか確認してからレバーをオンにすると動き出します。確かに、ドロッパーにアイテムが入っていて、尚且つレバーがオンになっている時だけ、クロック回路が作動していますね。
STEP3ー究極の自動式ゴミ箱
STEP2ではAND回路を使って、ゴミとなるアイテムが入っていてもレバーをオンにしないと動かないようにしました。しかしこれを使ってみると、レバーをオンにしたままになっている事が多く、そうなると安心安全機能としての実用性はイマイチです。STEP3ではこれを改良します。
- 機能:ゴミをチェストに入れてボタンを押したら処分開始
- 学習できる回路:ラッチ回路
問題はレバーオフの自動化
STEP2では、ゴミとなるアイテムをチェストに入れて、間違いがないか確認してからレバーをオンにし、全て処分し終えたらレバーをオフにします。あるいは使う前にレバーがオフになっているか確認します。よく考えるとレバーのオフが手動です。これを自動化したいですね。
こんな時に使えるのがラッチ回路です。
ラッチ回路
ラッチ回路は信号を記憶できる回路です。ここでは自動式ゴミ箱のオンオフを保持する為に使います。ラッチ回路では2つの入力と1つの出力があります。オン(セット)とオフ(リセット)の入力が別になっているのが特徴です。
オンにするのをセット、オフにするのをリセットと呼びます。なぜそんな呼び方をするのかと言えば、それは別にオンオフに限らず1ビットの情報を保持しているからです。今回の自動化ゴミ箱にしても、自動化装置が動作中なのか停止中なのか、という情報を保持しています。
言葉で説明すると、なんだか難しいのですが、以下の回路を作ってボタンをポチポチ押してレッドストーンランプが点いたり消えたりするのを見れば、すぐに理解できるはずです。
ラッチ回路の詳細についてはこちらをご覧ください。
『ラッチ回路』
回路の設計
さて、このラッチ回路をどのように組み込むかを考えましょう。まずは2つの入力に的を絞って考えてみましょう。
セット信号はゴミ箱動作開始ボタンです。
リセット信号はドロッパーが空になった時に受信しないといけません。という事は、ドロッパー内のアイテムを検出しているコンパレーターのオンオフが反転したものが必要という事です。これにはNOT回路を使えばいいですね。各回路の入力と出力に的を絞って考えると、以下の図になります。
ドロッパーのアイテムを検出するコンパレーターから回路がスタートします。このコンパレーターの出力を2つに分岐させて、AND回路とNOT回路のふたつに信号を分けます。厳密に言えば、これはOR回路ですが図をシンプルにするために書いてません。NOT回路で反転した信号をラッチ回路のリセット入力に接続します。ラッチ回路のセット入力はゴミ箱開始ボタンと接続します。そしてラッチ回路の出力をAND回路のもう一つの入力Bに接続します。最後にAND回路の出力をクロック回路の入力に接続します。言葉で説明すると難しいですが、図が理解できていればOKです。
処理の流れ
では、動作を見ていきましょう。
1.アイテムが何も入っていない状態(初期状態)
コンパレーターからの信号出力ないのでAND回路の入力Aはオフです。NOT回路の入力はオフですが出力は反転してオンになり、それがラッチ回路のリセット入力に入るので、ラッチ回路は元の状態にかかわらずリセット状態になります。その結果、ラッチ回路の出力もオフになりAND回路は入力Aも入力Bもオフになります。その結果AND回路からクロック回路への入力もオフになりドロッパーが動作する事はありません。
2.ドロッパーにアイテムを入れると
コンパレーターがアイテムを検出してオン信号を出力します。これがAND回路の入力AとNOT回路に入力されます。NOT回路では信号が反転するので、ラッチ回路のリセット入力への信号はオフなります。勿論ラッチ回路は何も変化がなくリセット状態のままなので、AND回路の入力Bもオフになります。AND回路は、入力Aはオンですが入力Bはオフなので出力はオフになり、その結果クロック回路は動きません。
3.ゴミ処理開始ボタンを押すと
ラッチ回路のセット入力にオン信号が届くとラッチ回路はセット状態となります。AND回路は入力Bもオンになので2つの入力がオンとなり出力はオンになります。その結果クロック回路が作動し、ドロッパーはアイテムを吐き出します。
ドロッパーが空になると
1.に戻ります。
実装
では、設計通りにこれを組んでみましょう。
もっとコンパクトにできますが、回路構成を理解しやすい形にしてます。わかりやすさは大切です。わかりやすいければ改造しやすい、したがってメンテナンスにコストがかからないのです。
仕事の話になりますが、規模の大きなプログジェクトでは実際にお金がかかるのは開発費ではなくてメンテ費用だったりします。例えば、マイクラのようなゲームプログラムのソースコードがぐちゃぐちゃで、いわゆるスパゲッティコードだったら、アプデにかかる費用は莫大な額になるでしょう。
ちょっと脱線しました。話を戻しますと、もしスペースに余裕があるなら無理にコンパクトにする必要はありません。
問題発生
では、ドロッパーにホッパーとチェスト接続して試してみましょう。
動きません…。
3個アイテムを吐き出して止まります。
勘の良い方ならお分かりでしょう。これがSTEP1の最後の方で予告してた問題です。
原因
チェスト又はホッパーに大量のアイテムを入れると、ホッパーがアイテムを送るスピード(0.4秒/1個)よりも、ドロッパーがアイテムを吐き出すスピード(0.2秒/1個)が速いため、瞬間的にドロッパー内部が空になるため、リセット信号が発生してしまうのです。
対処法
ドロッパーがアイテムを吐き出すスピードと、ホッパーがアイテムを送るスピードを同じにしましょう。具体的には、クロック回路をリピーター付きにします。リピーターの遅延は最小の0.1秒にするとクロック周期が0.4秒となり、ホッパーのアイテム輸送スピードとぴったり一致します。
柔軟性の大切さ
もしオブザーバー式のクロック回路しか知らず使っていたら、この問題には対処できませんでした。この例は柔軟性や拡張性の大切さがよくわかるケースですね。クロック回路にコンパレーター式をオススメする理由をご理解いただけたでしょうか。
STEP4完成
ゴミとなるアイテムをチェストに入れて、ゴミ処理開始ボタンを押すとゴミ処理が始まります。ゴミがなくなってゴミ処理が停止したら、もう一度ゴミを入れてもゴミ処理開始ボタンを押さない限り動きません。
ちなみにラッチ回路のリセット入力にボタンを追加すれば、一時停止ボタンにもなります。レイウトや配線ももっと合理化できると思いますので、ぜひご自身の手で組んでみてください。
ここで学んだ回路は、ニワトリの卵を投げる装置、花を増やす装置など、色々な装置に転用可能なので、何か思いついたら色々自分で試しながら作ってみると、マインクラフトというゲームの楽しさの幅が広がるでしょう。