古いピンボールマシンを改造せずにスコアを自動でインターネットにアップロードできるようにするシステムを開発した猛者が登場

GIGAZINE



ピンボールは昔ながらのアーケードゲームの代表格とも呼べる存在ですが、現代でも根強いファンが多く、日本においてもピンボール専門のゲームセンターが存在するほど。ソフトウェアエンジニアのイーライ・リプシッツ氏が、古いピンボールマシンのスコアを自動的にインターネットにアップロードするデバイスを開発しました。

Connecting a 1980s Pinball Machine to the Internet | Eli Lipsitz
https://eli.lipsitz.net/posts/internet-connected-pinball/


幼少期のリプシッツ氏の自宅には1974年製のピンボールマシン「Strato-Flite」と1984年製の「Laser Cue」という2台のピンボールマシンが置かれていました。


「Laser Cue」は「Strato-Flite」と異なり、ライトの点滅や音楽の再生、デジタルでのスコア表示など、画期的な機能が採用されていました。さらに「Laser Cue」をはじめとする、「ソリッドステートマシン」と呼ばれるマイクロプロセッサを備えたピンボールマシンには、4つの最高スコアを表示する機能が搭載されています。しかし、他人に最高スコアを共有したい場合、表示されるスコアを書きとめる必要がありました。


スコアを自動で取得・共有するための「スコービトロン」と呼ばれるデバイスが販売されていますが、300ドル(約4万円)と高額であったことと、月々のサブスクリプション契約が必要なことから、リプシッツ氏は「全スコアの獲得日時やプレイヤー名を自動的に取得し、スコアをウェブサイト上に公開することができる独自のデバイス」の開発に着手しました。

リプシッツ氏は「マシンがスコアを自動的にアップロードする」「インターネット接続が不安定な場合や、スコアのアップロード前にピンボールマシンの電源が切れた場合でもスコアが失われることなく保持される」「ピンボールマシンに改造を加えない」「40年以上の歴史があるピンボールマシンを損傷しない」ことを開発するデバイスの目標として挙げています。

「Laser Cue」はウィリアムズ社製の「システム7」で構築されたマシンです。「Laser Cue」には1KBのRAM容量や最大12KBのROM、スコアなどを保存するための最大128バイトのバックアップ用CMOSRAMなどが搭載されていました。


リプシッツ氏はLaser Cueに搭載されたCPUソケットにメモリーバスとWi-Fi機能を持つマイクロコントローラーを接続し、外部のRAMにデータの書き込みを行えるようにしました。CPUソケットにデバイスを接続することで、ピンボールマシンを傷付けることなく、いつでも取り外して復元することが可能です。

リプシッツ氏が実際にデバイスの開発を行う際には、コネクタのサイズ問題やCPUチップの取り外しなど、さまざまな問題が起きたそうですが、その度にリプシッツ氏は代替案を生み出して対処しています。また、開発したデバイスを使用するためには、Laser Cueの基盤にはんだ付け作業を行う必要がありましたが、リプシッツ氏は2×20ピンのコネクタを用意することで、はんだ付け作業を行うことなくアップロードに必要な信号へのアクセスを実現しています。

デバイスの開発にあたってリプシッツ氏は、Wi-FiとBluetoothを内蔵したSoCのマイクロコントローラーである「ESP32」を用いました。ESP32のCPUは最大240MHzで動作するデュアルコアのXtensaを搭載していることから、強力ながらコストパフォーマンスにも優れています。

もともとLazer Cueに搭載されているCPUの「モトローラ 6800」は、メモリーバスをデコードするのに27個の入力が必要です。ESP32の開発ボードに搭載されている30ピンのGPIOは25個しかなく、そのうち3個は起動時の動作が、今回の用途に適さないものでした。そのため、これらのGPIOを利用するとピンボールマシンが損傷してしまう可能性があります。

しかし、リプシッツ氏は「マイクロコントローラーが全体をデコードする必要はない」と判断して、1KBのRAM領域のみのデコードを実行することで問題を解決しました。なお、残りの制御信号などは、外部端末でデコードするとのこと。

この解決策によって、必要な入力の数を大幅に削減することが可能になり、ESP32開発ボードで利用可能なGPIO内に収めることが可能になりました。


デコードやスコアのアップロードなど、さまざまな問題を解決したリプシッツ氏は、デバイスのプリント基板作成に移ります。リプシッツ氏は回路図とプリント基板デザインの作成に、オープンソースの電子設計ソフトウェアであるKiCad 6を使用しました。


さらにリプシッツ氏は注文したプリント基板に部品をハンダ付けして、完成した試作デバイスでシミュレーションテストを行いました。


リプシッツ氏が行ったテストでは、テストに使用したRaspberry Pi Picoに対して100万回の模擬書き込みを実行し、書き込みに成功した回数を観察・記録しました。

リプシッツ氏が複数回にわたるデバッグとトラブルシューティングを行った結果、シミュレーションテストにおいて正しい配線を行い、有効な書き込みの検出を確認。にもかかわらず、書き込みが正確に検出されない不具合が約1%発生しました。


この問題を解決するために、リプシッツ氏はESP32の技術書などを読み込んで徹底的に調査を行いましたが、結局この問題を解決できる適切な周辺機器やモジュールは見つからず、解決策はなかったことを報告しています。

結果として、リプシッツ氏は「ESP32マイクロコントローラーはこのプロジェクトの実現に適していない」と結論づけています。リプシッツ氏は「今回の検出の不具合に関する正確な原因は不明ですが、バスの競合や割り込みなどが関係している可能性があります」と述べています。

そこでリプシッツ氏は、Raspberry Pi Picoマイクロコントローラのプログラマブル IO機能を活用するという代替案を考案しました。さらに、Wi-Fi機能を内蔵したRaspberry Pi Pico Wが発売されたことで、失敗に終わったESP32の代替品になる可能性が浮上しました。

リプシッツ氏はRaspberry Pi Pico Wのプログラマブル IO機能を正確に評価するため、信頼性を図るテストを行いました。テストでは10分間で6億回の書き込みを行ったものの、すべての書き込みを正確に検出することに成功。


改良を行ったプリント基板の作成後、リプシッツ氏は新バージョンのデバイスを組み立てました。次に、ピンボールマシンのメイン基板に新たなピンヘッダを取り付ける作業を行いました。昔ながらのメイン基板にピンヘッダを取り付ける作業について、リプシッツ氏は「メイン基板はドライバー基板と信頼性の低いコネクターで接続されているため、マシンから取り外すのは困難でした」と振り返っています。コネクターの破損を避けるため、ドライバー基板とメイン基板の両方を一緒に取り外すことになりました。

メイン基板には、ディスプレイやスイッチ、ソレノイド、サウンドなど、さまざまな部品が18個のコネクターで接続されていました。リプシッツ氏によると、これらのコネクターは、40年の歳月を経て硬くなっており、取り外しが少し大変だったとのこと。

はんだ付け作業や電池の交換など、さまざまな工程を経て新たなデバイスが実装されたメイン基板にリプシッツ氏が電源を投入すると、Lazer Cueは無事動作するようになりました。


リプシッツ氏がソフトウェアの修正を行うと、デバイスは1秒間に約4万回の割合で書き込みを行うようになりました。データの正確性を確認するため、リプシッツ氏がLaser Cueの新しいゲームを開始し、手動で検査したところ、デバイス上のメモリにゲームのスコアが正しく反映されていることが確認されました。

デバイスの中核となる書き込み機能が動作したことを確認したリプシッツ氏は次に、ゲームの開始と終了を検出するために、メモリの状態を定期的にチェックするよう、デバイスのプログラミングを行いました。ピンボールにおける各ボールの終了時には、ゲームの進行を追跡するためにメモリ全体のキャプチャを行いました。ゲームの終了時には、デバイスはメモリのスナップショットをウェブサーバーにアップロードし、そのデータを処理してスコア情報を抽出しています。

また、アップロードに失敗する可能性があるため、開発したデバイスはフラッシュストレージにローカルにスコアを保存し、定期的にアップロードを試みています。これにより、Wi-Fiの切断やサーバーのダウンタイムが発生しても、スコアが失われません。

リプシッツ氏が作成したデバイスを取り付けた状態でピンボールマシンで遊ぶ様子は以下の動画でチェックできます。ピンボールマシンにスコアが表示されるとほぼ同時にスコアがウェブサイトにも表示されます。

Connecting a 1980s Pinball Machine to the Internet – YouTube
[embedded content]

アップロードされたスコアサイトのインターフェースには、スコアがシンプルな表で表示され、日付とスコアでソートすることができます。


また、スコアをクリックすると、プレイヤーやボールごとのスコアの内訳が表示されます。また、ゲーム終了後、スコアをタップしてイニシャルを入力すると、そのスコアを修正することができます。


今回の反省点として、リプシッツ氏は「ESP32を用いるのではなく、最初からRaspberry Pi Pico Wを選択しておけば、時間の節約になった可能性があります」などと述べる一方、「数多くのテストポイントを設けることで、デバイスに問題が発生した際のデバッグやトラブルシューティングが非常に容易でした」と述べています。

また、将来的な拡張機能として「ゲームのメモリーからさらにデータを出力して、ボーナスやライトの点灯などの情報を抽出して、スコアサイトに表示させる」「ゲームセンターやレストランなどに設置されているピンボールマシンのスコアを取得し、ウェブサイトでのライブスコア表示を実装する」などの機能を挙げています。

リプシッツ氏は今回のプロジェクトについて、「プリント基板設計の新しいスキルを習得し、興味深い実用的なデバイスを作成することができ、楽しい学習体験ができました」と振り返っています。

この記事のタイトルとURLをコピーする

Source

タイトルとURLをコピーしました