PHYSICAL COMPUTING LAB

入力 → 出力 → 筐体 → 運用。
展示として成立させるための実験ハブ。

各 STEP は独立したルート。共通のゲームループとステートマシン (@scripts/core) を土台に、入力デバイスと正規化だけを差し替えていく。 各 STEP は動画1本で終える — 記録が残らなかった STEP は完了していない扱い。

PART I

ブラウザだけで完結する

機材を一切買わずに進む。手応えを得てから投資を判断する。

STEP 0 実装済み

雛形とステートマシン

ゲームループと 4 状態 (attract/ready/play/result) の共通雛形。以降すべてコピーして使う。

技術・ハードウェア
TypeScript / requestAnimationFrame / 状態遷移 / Astro
学習ポイント
「更新」と「描画」を分けたゲームループと、状態を明示するステートマシン。以降の全 STEP はこの構造をコピーして入力だけ差し替える。
目安: 半日 機材: 不要
STEP 1 実装済み

音ゲーを作る

音楽ファイルを D&D すると譜面が自動生成されてそのまま遊べる。時刻は AudioContext.currentTime 基準。

技術・ハードウェア
Web Audio API / AudioContext / Drag & Drop / ビート検出
学習ポイント
時刻の基準を AudioContext.currentTime に一元化し、音と描画のズレを防ぐ。判定はこの時刻軸だけで組む。
目安: 2日 機材: 不要 (有線スピーカー推奨)
STEP 2 未着手

体で遊ぶゲーム (MediaPipe)

手を動かして落ちてくるボールを弾く。体がコントローラーになるブロック崩し。

技術・ハードウェア
MediaPipe Hands / getUserMedia / WebGL / 座標正規化
学習ポイント
カメラの生の骨格座標を、解像度に依存しない 0〜1 の入力に正規化してゲームに渡す。トラッキングの遅延と揺れをどう吸収するか。
目安: 1〜2日 機材: 不要 (内蔵カメラ)
STEP 3 未着手

スマホでみんなで対戦

スマホのセンサーを入力に、サーバー権威型で多人数対戦。※優先度低・後回し可。

技術・ハードウェア
WebSocket / DeviceMotion API / サーバー権威型 / Node.js
学習ポイント
判定をサーバー1箇所に集約するサーバー権威型で、複数クライアントの状態を破綻させずに同期する。ネットワーク遅延の前提で設計する。
目安: 1日 機材: 不要 (手持ちのスマホ)

PART II

ハードウェアに手を出す

マイコンは「値を流すだけの箱」に。判断はすべて PC 側へ。

STEP 4 未着手

ESP32 に慣れる

Lチカ→Wi-Fi→WebSocket でブラウザと双方向通信。IMU を 50Hz で送りグラフ化。

技術・ハードウェア
ESP32 / Arduino / PlatformIO / Wi-Fi / WebSocket / IMU
学習ポイント
マイコンは判断せず「値を流すだけの箱」に徹する。50Hz の連続送信を落とさずブラウザ側で受けてグラフ化するところまで通す。
目安: 1〜2週 機材: ESP32-DevKitC + M5StickC Plus
STEP 5 未着手

自作コントローラーを組む

プルアップとチャタリング除去。WebSocket と BLE HID の両方を作る。

技術・ハードウェア
GPIO / プルアップ / デバウンス / BLE HID / WebSocket
学習ポイント
物理スイッチのチャタリングをデバウンスで除去する。同じ入力を独自プロトコル(WebSocket)と標準デバイス(BLE HID)の2系統で出す設計を比べる。
目安: 1〜2日 機材: タクトスイッチ→アーケード部品
STEP 6 未着手

非接触操作とアトラクトモード

ToF で洞窟飛行。中央値フィルタ→正規化→平滑化。ロスト処理=状態遷移。

技術・ハードウェア
ToF 測距センサー / 中央値フィルタ / 平滑化 / I2C
学習ポイント
ノイズの多い距離センサーを 中央値フィルタ→正規化→平滑化 の順で整える。値のロスト(検出失敗)を例外でなく状態遷移として扱う。
目安: 2〜3日 機材: M5Stack ToF Unit
STEP 7 未着手

物理的な出力を加える

LEDテープ・サーボ・ソレノイド。電源分離と逆起電力対策。物理は失敗すると体で知る。

技術・ハードウェア
NeoPixel / PWM / サーボ / ソレノイド / MOSFET / 電源設計
学習ポイント
ロジックと駆動の電源を分離し、コイル負荷の逆起電力をフライバックダイオードで逃がす。ここは配線ミスが即ハードウェア破損につながる領域。
目安: 2〜3日 機材: LEDテープ, サーボ, ソレノイド等

PART III

展示として成立させる

作品が動くことと、人に触られて朝から晩まで回ることは別のスキル。

STEP 8 未着手

常設運用と堅牢化

既存の作品を「1週間放置しても回る状態」に。キオスク化・watchdog・8時間連続稼働テスト。

技術・ハードウェア
キオスクモード / watchdog / 自動再起動 / ログ / 監視 / systemd 等
学習ポイント
「動く」と「無人で1週間回り続ける」は別スキル。異常を検知して自動復帰する仕組みと、8時間連続稼働テストで壊れ方を先に知る。
目安: 1〜2週 機材: 不要 (既存の作品を対象に)
STEP 9 未着手

「手に取ると反応する」什器

磁気/測距/重量/NFC の 4 方式を並べて比較。センサー側とコンテンツ側を分離。

技術・ハードウェア
ホール(磁気)センサー / ToF 測距 / ロードセル(重量) / NFC / RFID
学習ポイント
「手に取ると反応する」を4方式で実装し、反応速度・誤検知・設置性を横並びで比較する。センサー側とコンテンツ側を疎結合に保つ。
目安: 2〜3週 機材: センサー各種

PART IV

越境するかどうかを決める

8時間触って、自分に合うか合わないかを結論として書き残す。

STEP 10 未着手

TouchDesigner 評価

8時間で結論を出す。既に作ったものを 1 つ再実装して比較。結論を出すこと自体が成果物。

技術・ハードウェア
TouchDesigner / ノードベース / GLSL / OSC / 連携
学習ポイント
コードで作った1作品をノードベース環境で再実装し、自分の制作スタイルに合うかを8時間で判断する。「越境するか否かの結論」自体が成果物。
目安: 土日1回・8時間 機材: 不要 (Non-Commercial 版)

PARALLEL

並走トラック

メイントラックに順番で挟まず、平日枠で常時進める。

T1

FreeCAD の基礎

Part Design と Sketcher だけに絞る。完全拘束を目で確認する癖をつける。

T2

3Dプリンタの実測とノウハウ蓄積

テストピース駆動。収縮率・はめあい・熱圧入インサート下穴径を実測して残す。

T3

社内展開の準備

テンプレート・1枚ガイド・ワークショップ。レーザー/CNC の導入検討。