時計 : 日照センサーと村人制御
少し前から時計を作りたいと考えていました。イメージしていたものは現実に存在するような1から12の時間が分かる時計です。(分、秒は分かりません。)
それを目指し、日照センサーとレッドストーンランプを使って時計を作ることにしました。
この時計が機能するのは「日中」かつ「晴天」と条件が限られています。
Minecraft内での時間
Minecraftの時間について以下のページを参照しました。
https://minecraft.fandom.com/ja/wiki/昼夜サイクル
ゲーム内での1日は24000ティックで、現実世界での経過時間は20分です。
そして、1昼夜を1サイクルとして、「村人が目覚める」、「蜂が巣に帰る」、「アンデットモンスターが日の出によって燃える」というような事象を繰り返しています。
特に村人は今回の時計作りでとても重要な役割を果たしているのですが、詳しくは
「制御機能 : 日照センサーと村人」にて説明します。
また、ゲーム内において1時間に相当する時間は1000ティック(現実では50秒)とのことですが、日照センサーの出力レベル切り替えは1000ティック毎ではないようです。
日照センサーと時間区分
日照センサー
日照センサーについては、以下のページを参照しました。https://minecraft.fandom.com/ja/wiki/日照センサー
日照センサーは時間経過で出力が変化し、反転させることで夜間も信号を出力することができます。
左から、反転なし、反転あり、 レッドストーントーチを使い反転 |
しかし、マルチプレイはせず夜は寝ることが多いため、作成した時計は夜間に対応していません。
また、日照センサーは天気によって、最大出力や切り替え時間が異なります。
晴天を想定して作成した今回の装置では、晴天以外の天気である場合、表示されない時間ができたり、時間がズレたりするかもしれません。
日照センサーからレッドストーンダストを伸ばしレッドストーンランプを接続すれば、時間経過でランプの光る位置が変わるシンプルな時計ができます。
日照センサーが出力レベル15の時 |
正午とその前後の時間は最大出力の15レベルが続くため、時間を細かく刻むには日照センサー以外の方法が必要です。
(今のところ何も思いつきません。)
時間区分
12ヶ所のレッドストーンランプを順番に点灯させるため、出力レベル毎に時間を区切ることにしました。
(公式の時間区分とはズレているかもしれません。)
上記のリンクページにある晴天時の日照センサー出力表のデータを引用し、さらに時計作りに必要となった情報を書き込みました。
表の「明るくなる時間」、「暗くなる時間」の数値は元データのコピーなのですが、それぞれ日照センサーが切り替わるティックを示しています。
「信号」は日照センサーの信号レベルを示しています。
Daylight Detector Data
もしも表示されない場合はこちらのリンクからご覧ください。
spreadsheet_daylightDetectorData
日照センサー装置
上の時間区分に対応してレッドストーンランプを点灯させる7種類の日照センサー装置を作りました。
以下の装置では消灯の機能を付けるため、全てに減算モードのコンパレーターとリピーターを使用します。
①信号レベル1–2
日照センサーの信号レベルが1–2の間(4時台、19時台)を担当する装置を作ります。
緑の数字は日照センサーの出力が3レベル である場合の信号伝搬を示しています。 |
日照センサーとレッドストーンランプ(以降ランプ)の間にはコンパレーターを設置します。
これは指定時間以外にランプを消灯させるため必要です。
信号レベルが3以上の場合はランプを消灯させたいため、コンパレーターを減算モードにして日照センサーからレッドストーンダスト(以降ダスト)を3ブロック設置しコンパレーターの横に接続します。
このとき、信号を増幅するため、コンパレーターとダストの間にはリピーターが必要です。
②信号レベル3–7
日照センサーの信号レベルが3–7の間(5時台、18時台)を担当する装置を作ります。
緑の数字は日照センサーの出力が8レベル である場合の信号伝搬を示しています。 |
信号レベルが2以下の場合はランプを消灯させたいため、2以下では信号が届かないように、日照センサーとランプの間にはダストを3つと減算モードのコンパレーターを設置します。
次は、信号レベルが8以上の場合に消灯させたいため、センサーからダストを8つ使い、コンパレーターの横に接続します。
この装置でもリピーターで信号を増幅させます。
③信号レベル8–10
日照センサーの信号レベルが8–10の間(6時台、17時台)を担当する装置を作ります。
②の装置と同じように、ダストの長さによってランプの点灯と消灯を操作します。
信号レベルが7以下の場合に消灯させるため、ダストを8つ設置。
次は、信号レベルが11以上の場合に消灯させるため、別方向からダストを11個設置して減算。
④信号レベル11–12
日照センサーの信号レベルが11–12の間(7時台、16時台)を担当する装置を作ります。
こちらも②③と同じようにダストで調整します。
ただし、回路が届かない所ができたのでコンパレーターを追加使用しました。
こうすると信号レベルを減らさず回路を延長できると思います。
後で作成する制御用回路はどちらのコンパレーターに接続しても良いですが、接続する方は減算モードにします。
丸で囲んだ部分が追加のコンパレーター |
信号レベルが10以下の場合に消灯させるため、ダストを11個設置。
次は、信号レベルが13以上の場合に消灯させるため、別方向からダストを13個設置して減算。
⑤信号レベル13
日照センサーの信号レベルが13の間(8時台、15時台)を担当する装置を作ります。
これまでの装置と同じようにコンパレーターの減算機能によってランプを消灯させるのですが、回路を短くするためコンパレーターをもう1つ使いさらに減算を行います。
緑の数字は日照センサーの出力レベルが14 である場合の信号伝搬を示しています。 |
信号レベルが12以下の場合に消灯させるため、ランプに向かうコンパレーターから12の信号を引きます。
次は、信号レベルが14以上の場合に消灯させるため、日照センサーから上のコンパレーターに向かうもう1つのコンパレーターからも12レベルの信号を引きます。
日照センサーが14レベルの信号を出力した場合、このコンパレーターからは2(14-12)レベルの信号が出発することになります。
そして、2つのダストを経由してリピーターに信号が届きます。
⑥信号レベル14
日照センサーの信号レベルが14の間(9時台、14時台)を担当する装置を作ります。
⑤の装置とほとんど同じ回路です。
緑の数字は日照センサーの出力レベルが15 である場合の信号伝搬を示しています。 |
信号レベルが13以下の場合に消灯させるため、ランプに向かうコンパレーターから13の信号を引きます。
次は、信号レベルが15以上の場合に消灯させるため、日照センサーから上のコンパレーターに向かうもう1つのコンパレーターからも13の信号を引きます。
日照センサーが15レベルの信号を出力した場合、このコンパレーターからは2(15-13)レベルの信号が出発することになります。
そして、2つのダストを経由してリピーターに信号が届きます。
⑦信号レベル15
日照センサーの信号レベルが15の間(10から13時台)を担当する装置を作ります。
信号レベルが14以下の場合に消灯させるため、ランプに向かうコンパレーターから14レベルの信号を引きます。
装置設置
まず、アナログ時計のような表示盤を作ります。
十字方向のレッドストーンランプ(以降ランプ)同士の間は13ブロックに作成しましたが、もう少し大きい方が作業しやすいかもしれません。
次に、「時間区分」で決めた時間の位置に対応する装置を設置するのですが、時計の裏側で作業するため位置が左右反転します。
以下の画像は文字盤の裏側から見たおおまかな装置の配置を示しています。
(距離は反映していません。)
装置配置図
裏から見た装置配置図 赤い文字色は午前、青い文字色は午後 |
レッドストーンダストや、コンパレーターなどを設置するブロックにはガラスを使いました。
理由は、日照センサーの上に不透過ブロックがあると点灯時間がズレてしまうからです。
以下の画像では、回路の変更が多かったため全てにガラスを使っていますが、日照センサーの上に置くブロックだけで大丈夫です。
①②装置はそれぞれ④③装置のランプを点灯させます。
リピーターを使い ①装置が④装置に接続されている |
追加のリピーターを経由し、①②装置をそれぞれ④③装置の回路に接続します。
(このとき、④③装置の日照センサーから始まる回路のうち、リピーターを経由する回路に接続しても①②の時間にランプは点灯しません。)
また、後で設置する制御回路からの影響を考え、①②装置がランプから離れ過ぎないように気を付けます。
(離れ過ぎると①②装置の信号が打ち消される可能性があるためです。)
また、②装置は③装置の日照センサーから信号を受け取れるように、少し回路を変更しました。
(日照センサーを両用せずに②装置を作っても大丈夫です。)
信号レベルが減少しないように 不透過ブロックを設置した②装置 |
制御機能 : 日照センサーと村人
「装置配置図」では赤色の数字が午前、青色の数字が午後を担当する装置を示しています。
装置を設置した段階では、午前と午後で同じ番号の装置が同時に作動し、2ヶ所のレッドストーンランプ(以降ランプ)が点灯してしまいます。
そのため、午前と午後を切り替えて点灯を制御するための回路を表示盤裏に追加する必要があります。
③–⑥と①②では制御の方法が違うため、以下で分けて説明します。
また、上で述べたように⑦のランプが同時に点灯することを制御する方法は思い付かないのでこのままとします…。
4つの⑦装置が同時にランプを点灯させる |
③–⑥の制御 : 日照センサー装置
②と⑦の装置を使い制御のための回路を作ります。
⑦の装置が午前側の③–⑥装置をロックし、②の装置が午後側の③–⑥装置をロックします。
上ピストンを動かす⑦装置と 下ピストンを動かす②装置 |
ロックにはレッドストーンブロック、さらに向かい合った2つのピストンを使います。
②と⑦の装置がそれぞれのピストンを動かします。
②ピストンで押されたレッドストーンブロックから午後側装置のコンパレーター横へと繋がるようレッドストーンダストを設置。
②装置によって午後側装置が ロックされている状態 |
このとき、⑤⑥装置についてはリピーターを用いて信号の逆流を防ぎます。
③④装置では接続されている②①装置の信号を打ち消す可能性があるので、リピーターは使いません。
午前側装置も⑦ピストンで同じようにロックできるよう回路を伸ばします。
①②の制御 : 村人
②以下の装置を②の装置では制御できないため、午前と午後の切り替えを村人に任せることにしました。
普通の村人と無職村人の2人、さらに夜を検出する装置が必要です。
(区別のため無職村人でない村人を普通村人と呼んでいます。)
勤勉に働く普通村人です。 |
無職村人ですが立派に仕事をしています。 目覚めるだけという仕事ですが。 |
Daylight Detector Data には村人の就寝と起床の時間を書き込みました。
以下ページの村人日程表(Bedrock Edition)を参照しました。https://minecraft.fandom.com/ja/wiki/村人
普通村人に関して、プレイヤーがベッドで眠らない場合は、夜検出装置だけで大丈夫です。
普通村人は午前側の区分②の時間に目覚めます。
無職村人は午前側の区分④の時間に目覚めます。
また、夜を検出する装置には(反転していない)日照センサーとレッドストーントーチを使いました。
日照センサーの出力が0の間(夜)だけトーチが点灯します。
無職村人が目覚めることにより午前側①②をロックし、普通村人もしくは夜検出装置により午後側①②をロックします。
③–⑥装置と同じように、レッドストーンブロックとピストンによって制御します。
ピストンと①②装置ロック用の回路、 信号逆流防止用のリピーター設置 |
普通村人用のベッドと夜検出装置 |
村人のベッド横に感圧板を置き、感圧板からの信号でピストンを動かします。
このとき、後の回路のため、ピストンに向かう回路の途中にコンパレーターを設置し減算モードにします。
普通村人と夜検出装置が動かすピストンに押されたレッドストーンブロックから回路を伸ばし、午後側の①②装置に接続します。
信号の逆流を防ぐため、①②装置との接続部分にはリピーターを使います。
一方、無職村人では午前側①②装置に対して同じことをします。(夜検出装置は不要です。)
そして、ここからが最後の作業です。
普通村人は起きている間、いつでも感圧板を踏む可能性があります。
すると、無職村人が午前側装置に掛けたロックを、普通村人がピストンを動かすことにより解除してしまいます。
その結果、時計の表示が意図しないものになる可能性があります。
また、村人が感圧板を踏む度にピストンが動くのはなんとなく気になるので、2人の村人両方の回路を新たな日照センサー装置でロックします。
普通村人が起床するのは区分②の時間なので、日照センサーの信号レベルがそれよりも大きい時間ロックを掛けます。
区分②は最大で7レベルの出力となるため、7レベルの減算を行った日照センサー装置を作ります。
普通村人側の回路をロックする装置 額縁からの信号で減算を行う |
このとき、額縁を使うと信号の調整が簡単です。
まず、日照センサーから信号を受けるコンパレーターを減算モードにします。
次に、額縁の付いた不透過ブロックの反対側にコンパレーターを設置し、日照センサー側のコンパレーター横に接続します。
(額縁にアイテムを設置した時点では1レベルの出力で、角度を変える度1レベルずつ増加します。)
この装置を、ピストンに向かう減算コンパレーターの横に、リピーターを経由して接続します。
一方、無職村人が起床するのは区分④で、日照センサーの最大出力は12レベルとなります。
普通村人と同じようにロック用の装置を作ります。
無職村人側の回路をロックする装置 小チェストからの信号で減算を行う |
今度は減算が12レベル必要なので小さいチェストを使いました。
木の剣の場合は22個のアイテムを入れます。
スタックできるアイテムの場合は22スロットを完全にスタックしたアイテムで満たします。
これで時計が完成です。
村人に手伝ってもらうので身の安全を保証しなければなりません。
モンスターに襲われないよう家を建て、光源を設置しました。
普通村人の就寝部屋 |
庭 |
上から |
感想
実は、無職村人を確保するのが少し大変でした。
時計を村の近くに作れば、いつかは村人に無職村人を産んで(?)もらえるので確保しやすいと思います。
また、時計を高い場所に作ると村人を運ぶのも難しい作業です。
ボートで海上を進み、リードでボートを引いてハシゴを登りました。
なかなか上手くできなかったのですが、海上からボートを引いてハシゴを登るには、一度陸に上がる必要があると知りました。
今回作成した時計は昼の晴天時でしか使えないので、いつか夜や雨天に対応した時計を作れたらいいなと思います。
最後まで読んでくださり、ありがとうございました!
コメント