世界を動かす技術を、日本語で。

現実の中のコンウェイのライフゲーム

概要

  • Conway's Game of Life を物理インタラクティブアートとして実装した体験談
  • 17×17マトリクススイッチ とLEDによるハードウェア設計
  • コスト管理 や部品選定の工夫、回路設計の詳細解説
  • ファームウェアの安全設計 やユーザーインターフェースの工夫
  • コスト比較や代替案、より高価なアプローチへの提案も紹介

Conway's Game of Life物理インタラクティブアート化計画

  • Conway's Game of Life は、2次元グリッド上でセルが生死を繰り返すセル・オートマトン
  • 生存・誕生・死滅 のルールにより、シンプルな規則から複雑なパターンが生まれる現象
  • ゲームというよりは、 初期パターンを描いて観察するアート としての側面
  • インタラクティブアート好き として、物理的な装置で実現することを決意

設計と部品選定

  • 予算を設定し、 実際には10倍のコスト を見込んで計画
  • NKK JB15LPF-JFスイッチ を17×17マトリクスで使用
  • スイッチ単価は 約$3 で、コストの大半を占める
  • PCB設計 では、スイッチが基板の大部分を占拠
    • 左下には Microchip AVR128DA64 を配置
  • スイッチ内蔵LED をx-yグリッドで配置し、MCUのGPIOで制御

回路設計と制御方式

  • 17本のGPIOで 各行のLEDのグランドを切り替え
  • 別の17本で 各列に正電圧を供給
  • ダイオードの点灯 は、行と列の信号が交わる箇所で発生
  • 各行のデューティ比は 1/17(約6%)、明るさ確保のためLED電流を増加
  • 20Ω抵抗 で電流制限、1LEDあたり約 150mA
  • 全行点灯時は最大2.5A 消費だが、通常はプレイフィールドの多くが消灯
  • MCUの駆動力不足を補うため、 n-channel MOSFET(DMN2056U) で行切り替え、 p-channelトランジスタ(DMG2301L) で列を制御

入力検出・ユーザーインターフェース

  • 行選択ラインを利用し、 スイッチ入力検出 も実現
  • 17本のGPIOで スイッチのON/OFFを検知、MCU内蔵プルアップ抵抗を活用
  • 速度調整用ポテンショメータ (Vishay ACCKIS2012NLD6)を右下に設置し、ADCで読み取り
  • ノブ位置に応じて 0〜10Hz でシミュレーション進行
  • スイッチ操作でセルのON/OFFを切り替え、 2秒間ゲーム評価を一時停止 し、複数セルの編集が容易

ファームウェアと安全設計

  • 画面書き換え処理とゲームロジックを分離 し、LED全消灯中に状態更新
  • 150mAの持続点灯によるダイオード損傷防止
  • ウォッチドッグタイマー を有効化し、15ms以上メインループが停止した場合は自動再起動

ケース・完成品・デモ

  • 手作り木製ケース に組み込み、見た目も工夫
  • 動作動画も公開、 ソースコードやPCB設計データ も提供

コスト・代替案・発展的アイデア

  • スイッチのコストが 全体の大半 を占める
  • タッチスクリーン なら安価かつ高機能だが、 触感の楽しさ は失われる
  • 安価なスイッチ+独立LED+自作キーキャップ も可能だが、設備・材料・時間コストが増大
  • さらにコストをかけるなら、 フリップドットディスプレイ など完全電気機械式も面白い選択肢

まとめ・関連情報

  • 電子回路設計・アルゴリズム・オタク文化 をテーマにした独自記事も執筆
  • 読者登録 や他の記事への誘導も推奨

Hackerたちの意見

私の母校にはこれのジャンボ版があって、「ライフゲーム」がいくつかあるモードの一つなんだよね。

プロジェクトにかけるのに妥当な金額を考えたら、それを10倍にしたんだ。君の考え方、いいね。

ジェフ・アトウッドの名言があるんだ。「シャンデリアの電球を18個交換する必要があったんだけど、18倍するのは結構な金額だってことがわかった。」

スイスのコンピュータ博物館で見たことがあるよ。すごく大きなフィールドで、大きなオレンジのLED(それともチューブだったかな?)が使われてたんだけど、いろんなセルオートマトンゲームがサイクルしてたんだ。個々の「ピクセル」が見えるのがすごく魅力的だった。

ティーンエイジャーの頃、コモドールのアセンブリ言語についての本を読んで、すごくシンプルな方法でライフゲームを実装したんだ。テキスト画面だけを使ったよ。セルをオンにするには、アスタリスク('*')を入れるだけ。そしたら、マシンコードプログラムを実行して、ライフゲームのルールに従って進化していった。

それをやらなかった人なんていないよね! :) ASCIIテーブルの上半分から半ブロックや四分の一ブロックのキャラクターを使えば、解像度を4倍にできたし。 (C64の場合はPETSCIIのやつだね)。

「わあ、8ビットマシンはどうやってそれを実現したの? RAMをたくさん食うように見えるけど」という疑問の答えは、フレームバッファがデータストレージになってるってことだよ。実際、フル解像度のフレームバッファがアドレス可能なRAMの1/4だったから、RAMの使用を最大限に活用する必要があったんだ。

完全に話が逸れちゃうけど、もしかしたら間違ってるかもだけど、非LLMの文体がすぐに好きになったし、ただその文章だけで内容に引き込まれたんだ。最近は珍しいよね。

lcamtufは何十年もそれをやってるよ!

個人的には、LLMの文章を読むのがほとんど耐えられない。1、2文読んだら、たくさんの記事を閉じちゃうんだ。これが長期的にエンゲージメントにどう影響するのか、ちょっと気になる。

そんなに珍しくなってるとは感じてないな。確かにYouTubeみたいなプラットフォームでは、自動化されたプロセスがつまらないコンテンツを大量生産してるのは見かけるけど。俺が興味あるおもちゃの電子プロジェクトや、古いゲームのスプライトの描画方法、色空間分析、ツイートに収まるコンパイラみたいな話には影響が出てないと思う。AIが書いた「どうやってサブスクリプションで月1000ドル稼いだか」みたいな記事はたくさんあるだろうけど、それと昔のものを比べて失ったものがあるとは思えないな。

もっと安く済ませる方法は、いくつかのNovation Launchpadを買うことかも。90€で8x8のフルRGBタクタイルボタンが手に入るし、MIDIで操作できる。4つ並べれば16x16で360€、ケーブルやコントローラー代を少し足しても、全体で1/3の価格になるよ。

Hacker Newsで議論の続きを見る