製作物

アナログライフゲーム2.0を作りました

投稿日:

以前にライフゲームを抵抗とコンパレータを使って計算する「アナログライフゲーム」という作品を作りました。

自分の作品の中でもお気に入りの作品で、何度かイベントにも展示したりしたのですが、この度バージョンアップさせることにしました。

過去作の製作記事はこちら↓

1セル1基板のアナログライフゲーム作ってみた vol.1

 

アナログライフゲームの仕組み

まずはアナログライフゲームの計算の仕組みについて紹介します。ここは今回のバージョンアップでも変わっていない部分です。

なおライフゲームそのものについては知っている前提で話を進めます。

 

ライフゲームの計算の特徴として以下の2点が挙げられます。

  • 自分および周囲8マスの状態のみから次の状態が決定する
  • 全体で同時に計算を行う

これらの特徴から、隣接セルとの通信、全体でのクロックの共有ができれば、各セルが自分の状態を計算することでライフゲームが実現できることが分かります。

 

各セルは0か1(死か生)の状態を持っていて、次の状態の計算は次のように行います。

現在の状態 周囲の生きているセルの数
0~1 2 3 4~8
0 0 0 1 0
1 0 1 1 0

現在の状態にも依存しますが、周囲の生きているセルの数が少なすぎず、かつ多すぎない場合に次の状態は1になります。

 

これを計算するための回路を考えます。まずは周囲の生きているセルの数を計算する部分です。

8個の0/1の入力のうち1の数を数えるのは、論理回路を使おうと思うと大変になりますが、合計だけに注目するならば次のような非常に簡単ながらも画期的な方法があります。

抵抗8個を用いて1の数を数える回路の回路図ご覧のとおり、8個の入力に対して8個の抵抗をつなぐだけです。

オームの法則から、同じ大きさの抵抗を用いれば図中のAの電圧はIN0~IN7の平均となります。8個中n個が1だとすると、平均の電圧はn/8です。

1/8はスケールが変わるだけなので、要するにnの値が電圧としてアナログに計算できていることになります。

 

次にnの値から次の状態を判定する部分を考えます。nの値が小さすぎず、かつ大きすぎなければよかったので、2つのコンパレータを用いて次のように計算できます。

2つのコンパレータを用いて次の状態を計算する回路の回路図

上のコンパレータは「大きすぎない」という条件に、下のコンパレータは「小さすぎない」という条件に対応しています。図中Bはその2つの条件の論理積を取ったもので、次の状態の値です。

アナログの値の比較になるので、「3以下」という条件を「3.5未満」として計算します。

上側の基準値は固定なので抵抗で分圧することで簡単に作れますが、下側の基準値は現在の状態によって異なります。この点の解決策は後ほど紹介します。

 

最後にクロックに同期する方法ですが、これは計算した次の状態をDフリップフロップを用いてクロックに合わせて更新すればよいです。

ここまでを踏まえると、1セルの回路は次のように作ることができます。

抵抗、コンパレータ、フリップフロップで構成された、ライフゲーム1セルの回路図

追加のポイントとしては以下の2点があります。

  • コンパレータはオープンドレイン出力のものを用いることで、プルアップ抵抗1つで論理積になる。
  • Dフリップフロップの反転出力Qを使うことで下側の基準値を上手く調整できる。

この回路を1枚の基板にして同一の基板を何枚も作るのですが、斜めのセルは直接接続できないので下図のように信号をバイパスする必要があります。

基板同士の入出力関係を表した図

 

アップデート① 入力フローティングに対応

先ほど説明したとおり、この回路では抵抗で分圧することで周囲の1の数を数えているのでした。

では基板の端で入力信号がない場合はどうなるかというと、入力信号の平均を取るという部分は変わりませんが、n/8だったところの分母が減るので電圧値としての計算結果が正しくなくなってしまいます。

そのため、以前の作品では入力がフローティングにならないように、明示的に0に接続したり、上下と左右をループさせたりといった対策が必要でした。

この問題に対応すべく、アナログライフゲーム2.0では以下のように隣のセルがない場合に入力信号を0にする回路を追加しました。

Nch MOSFETを用いて入力がフローティングのときに0に落とす回路

IN0を例にしていますが、すべての入力に対して同じ回路を追加しています。IN0とexistは隣のセルからの入力信号で、existには0が入力されます。

隣のセルが存在してexistが0の場合はNMOSがオフになるのでIN0の値はそのままですが、存在しない場合はIN0とexistはフローティングになり、プルアップ抵抗によってオンになったNMOSによってIN0のラインは0になります。

この変更により、隣との接続に必要なピン数はexistの入出力の2本が増えて合計9本となり、2×5のピンヘッダ/ピンソケットを使用しました。

 

アップデート② はんだ付け部品点数の大幅減少

前作の基板ではSMDのフリップフロップ、コンパレータを手ではんだ付けしていました。これも大変ではあるのですが、もっと大変だったのは基板1枚あたり17個あったアキシャルリードの抵抗のはんだ付けです。64枚の基板で1000個以上の抵抗をはんだ付けしたのは明らかに無茶でした。

今回はキット化も考えて抵抗はSMDにしてSMD部品の実装までJLCPCBで注文しました。

これによりはんだ付けが必要なのはLEDとピンヘッダ/ピンソケットだけになりました。キットにしては作業が少ない気もしますが、複数の基板を作ることを前提にすればこれくらいでも十分でしょう。

基板はこんな感じです。

1セル分のプリント基板の裏表の2枚が並んだ写真

アップデート③ 面付けしたままでも使用可能

基板1枚のサイズは小さいので、同一の基板を繰り返し配置する面付けを行って注文するのですが、今回は面付けの方法を工夫して基板を分離しないでもそのまま使用できるようにしてみました。

面付けにはmouse biteというミシン目のような穴を開ける方法と、V-cutという基板に浅い切れ込みを入れる方法があるのですが、今回はmouse biteをアレンジして行いました。

普通はドリル穴を開けてミシン目を作るのですが、ドリル穴の代わりにビアを使い、コネクタのパッド↔ビア↔ビア↔コネクタのパッドの間に配線を引くことで、面付けしてつながったままでも隣のセルとコネクタ同士を接続した状態を作ることができました。

また基板を接続する橋の部分が普通の面付けよりも大きくなっていますが、これはコネクタで接続したときと同じ幅にするためです。(多少のマージンを設けました)

ビアを用いて面付けと配線を同時に行っている部分のkicadのスクリーンショット 面付けされた基板に部品を乗せた3DCG
実際に届いた基板はこのような状態になっています。
4x4の計16枚が面付けされた基板の写真

アップデート④ LED大型化

LEDは大きいほうが見栄えが良いだろう!ってことで10mmの大きいLEDを使うことにしました。色は当然緑です。

使用したのは秋月電子で販売している 抵抗内蔵10mm LED です。抵抗内蔵ですが、消費電流を抑えるために外付けの抵抗をつけています。高輝度なのもありがたい。

基板は黒色にしてみました。かっこいいです。

旧バージョンの基板と並べて比較してみるとこんな感じです。

大きな緑色LEDとコネクタを実装した基板と旧バージョンの基板を並べた写真

動作例

4×4の繋がったままの基板に分離した基板を4つ繋げて、4×5にして動作テストした動画です。

 

キット販売

現在はまだ準備が整っていませんが、いずれキットとして販売したいと思っています。

気になった方はXをフォローしていただけると、開発状況を知ることができます。

-製作物

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【PIC】圧電素子を使って2000円で電子マリンバを作ってみた

前回の記事で圧電素子の使い方について紹介したので、今回はその応用編として電子マリンバを作ってみました。 以前ネットで電子マリンバなるものを見つけたとき、めちゃくちゃ欲しいと思ったんですが、ウン十万とい …

1セル1基板のアナログライフゲーム作ってみた vol.2

この記事は前回からの続きとなります。前回をご覧になっていない方は是非こちらもご覧ください。 1セル1基板のアナログライフゲーム作ってみた vol.1   目次1 コントローラー2 555+可 …

USB給電の小型吸煙器を作ってみた

今回はUSB給電で動作する小型の吸煙器を作ってみました。 今まではんだ付けの際はヤニの煙を吸わないように気を付けながら行っていましたが、吸煙器を使うことでとても快適になりました。 もっと早く作ればよか …

1セル1基板のアナログライフゲーム作ってみた vol.3

前々回でライフゲーム基板、前回でクロックコントローラーを制作しました。 第3回の今回は関連アイテムを作って完成となります。 前々回、前回をまだご覧になっていない方は是非そちらを先にご覧ください。 1セ …

8x8x2色ドットマトリクスLEDの制御基板を作ってみた

今回は秋月電子で販売されているこちらの 8x8x2色ドットマトリクスLED を4個並べて 16x16x2色 のLEDを制御できる基板を作成しました。   なおこの記事は PCBGOGO にス …