Appearance
組立・検証手順書(ベンチ作業編)
手持ち部品で進められる作業を、図を見ながらそのまま手を動かせる粒度で書く。 在庫の正は Parts Manager(miniArcade)。寸法の正は cad/params.scad。ピン割当の正は firmware/pico-lever/main.py。 図は docs/img/gen_svg.py から生成している(数値を変えたら再生成する)。
| 作業 | 所要 | 必要なもの | 得られる判断 |
|---|---|---|---|
| A. Pico 2 の準備 | 15 分 | Pico 2、USB ケーブル、Mac | ファームが動く状態 |
| B. RKJXV の端子確認と配線 | 20 分 | RKJXV、テスター、ジャンパ | 端子の実配線・INVERT_X/Y |
| C. ボタン 4 個の配線 | 15 分 | タクト赤 2・黒 2 | 連射の動作 |
| D. Dock に接続して NES で操作 | 15 分 | Dock、現行 bitstream | A/B の実機動作 |
| E. RKJXV の実測 | 15 分 | ノギス | CAD の LEVER_* 確定 |
| F. LCD 3 枚の点灯比較 | 30 分 | Dock、LCD ×3 | 本番パネルの決定 |
| G. PAM8403 の試聴 | 20 分 | M8403VD、φ27 ×2 | スピーカー決定・#4 クローズ |
| H. インサートの試し圧入 | 10 分 | 試し刷りパーツ、半田ごて | 下穴径の確定 |
A. Pico 2 の準備(ファーム書き込み)
やること: MicroPython を入れて、レバー+4 ボタンのファームを自動起動させる。
- https://micropython.org/download/RPI_PICO2/ から RPI_PICO2 用 UF2 をダウンロード(Pico H 用ではない。RP2350 と RP2040 で UF2 が違う)
- Pico 2 の BOOTSEL を押しながら USB を Mac に挿す →
RPI-RP2ドライブが出る - UF2 をドライブにドラッグ → 自動で再起動しドライブが消える
- Thonny を起動 → 右下のインタプリタ表示をクリック → MicroPython (Raspberry Pi Pico) を選ぶ → 下の Shell に
>>>が出れば接続 OK - リポジトリの
firmware/pico-lever/lever_logic.pyを Thonny で開く → File → Save as → Raspberry Pi Pico → 名前lever_logic.py - 同様に
main.pyを Pico にmain.pyとして保存(4 ボタン対応は PR #20 のブランチfeature/issue-19-turbo-buttons) - USB を抜き差し → Shell に
lever: center x=... y=...が出れば自動起動している
何も繋いでいない状態では ADC が浮くので
centerの値は毎回変わる。これは正常。
判定: Shell に lever: center ... が出る。
B. RKJXV の端子確認と配線
やること: RKJXV の 8 端子(X 3 本・Y 3 本・SW 2 本)をテスターで特定してから Pico に繋ぐ。データシートの端子番号は実装向きで変わるので当てにしない。
- テスターを抵抗レンジにする
- 片側の 3 端子で 10kΩ で一定になる 2 本を探す → それが A・C(両端)。残りが B(中点)。スティックを倒して B–A が変化することを確認
- 反対側の 3 端子で同じことをする。倒す方向で変化する側が X(左右) / Y(上下)
- 残り 2 端子は SW。押した時だけ導通する
- 図2 の表のとおりに配線する(図1 のピン番号を見る)
- X の A・Y の A → 3V3_OUT(pin 36)
- X の C・Y の C・SW2 → GND
- X の B → GP26(pin 31) / Y の B → GP27(pin 32) / SW1 → GP16(pin 21)
- USB を挿し直す。起動から 1 秒はレバーに触らない(中立を自動校正している)
- 中立で LED 消灯、倒すと点灯、中央を押すと点灯 → OK
- Thonny の Shell で
main.pyのDEBUG = Trueにして保存・再起動 →x y {'up':..,'down':..,'left':..,'right':..} pushedが流れる - 右に倒して
right: Trueなら OK。leftになるならINVERT_X = True。下に倒してdownでなければINVERT_Y = True DEBUG = Falseに戻して保存
判定: 8 方向すべて期待どおり、中立で全て False。→ INVERT_X / INVERT_Y の値を issue #15 にコメント
XH コネクタで作る場合: 4P ハウジング 1=3V3, 2=X-B, 3=Y-B, 4=GND、SW は 2P。コンタクトは購入済み(秋月 112265)。
C. ボタン 4 個の配線
やること: 12mm タクト 4 個を Pico に繋ぎ、連射が効くことを LED で確認する。
- タクトスイッチの 対角の 2 端子を使う(隣同士は内部で繋がっているので誤動作する)
- 片側を全部 GND にまとめる(ブレッドボードの GND レールへ)
- もう片側を Pico へ:
| ボタン | キャップ | 位置 | Pico |
|---|---|---|---|
| A | 赤 | 手前 | GP7(pin 10) |
| B | 黒 | 手前 | GP8(pin 11) |
| A連射 | 赤 | A の奥 | GP9(pin 12) |
| B連射 | 黒 | B の奥 | GP10(pin 14) |
- USB を挿し直す → A を押すと LED 点灯、A連射を押すと LED が 15Hz で明滅(チラつきが見える)
- A と A連射を同時に押すと点灯しっぱなし(通常ボタン優先)
判定: 4 ボタンが独立に効き、連射で明滅する。→ 動画か一言を issue #19 にコメント
連射速度を変えたいときは
main.pyのTURBO_HZ。NES は 60fps なので 15(2 フレーム ON / 2 フレーム OFF)が上限目安。30 だと 1 フレームずつになり取りこぼす作品がある。
D. Dock に接続して NES で操作
やること: Pico の出力を Dock の PMOD に繋ぎ、NES コアで A/B が効くことを確認する(現行 bitstream でできる範囲)。
- Dock を USB-C で給電して NES を起動しておく
- GND を先に繋ぐ: Pico GND → Dock PMOD0 の GND
- 図3 の赤い線を繋ぐ。Dock 裏面シルクの PMOD0 を見ながら:
| Pico | Dock | 機能 | 現行 bitstream |
|---|---|---|---|
| GP11(pin 15) | PMOD0 下段 R8 | A | ✅ 動く |
| GP12(pin 16) | PMOD0 下段 T6 | B | ✅ 動く |
| GP2(pin 4) | PMOD0 上段 P6 | 上 | #17 待ち |
| GP3(pin 5) | PMOD0 上段 T7 | 下 | #17 待ち |
| GP4(pin 6) | PMOD0 上段 P8 | 左 | #17 待ち |
| GP5(pin 7) | PMOD0 上段 T9 | 右 | #17 待ち |
| GP6(pin 9) | PMOD1 T11 | Start | #17 待ち |
- Pico の出力はオープンドレインなので Dock の 3V3 に繋ぐ線は無い。Dock 側の内蔵プルアップが HIGH を作る
- ゲームで A/B と連射を試す
判定: A/B が効く。レバーは #17 の bitstream 後に再確認。
⚠️ PMOD1 の
T12 R11 M14 M15 J14 J16は LED 出力。ここに Pico の出力を繋ぐと衝突するので触らない。
E. RKJXV の実測(CAD 確定用)
やること: ノギスで 4 つ測って issue #6 にコメントする。これで params.scad の LEVER_* と、コンパネ図(図4)を確定できる。
| # | 測るもの | 測り方 | 反映先 |
|---|---|---|---|
| 1 | 可動部の最大外径 | スティックを一杯に倒し、台座の外周が描く円の直径(4 方向で最大値) | LEVER_OPEN_D(φ22〜24 の決定) |
| 2 | 本体の高さ | 基板(or 取付面)から台座上面まで、中立で | LEVER_UNDER(14 想定) |
| 3 | 端子の出っ張り | 基板裏面から端子先端まで | パネル下の余裕 |
| 4 | 固定方法 | 本体のツメの位置 / 小基板に載せるなら穴ピッチ | M2 ボス の座標 |
判定: 4 つの数値。→ #6 にコメントすれば CAD+シミュレーターの修正 PR を作る。
F. LCD 3 枚の点灯比較
やること: QT43272B576 ×1 と YXKJ430240 ×2 を順に Dock に挿して、筐体本番に使う 1 枚を決める。3 枚ともピン配・タイミングは同一で bitstream 変更は不要。
- Dock の電源を切る
- DISPLAY コネクタ(40P FPC)のロックを起こし、FPC を既存パネルと同じ向きで奥まで挿してロックを倒す
- 電源 ON → NES 画面が出ることを確認
- 同じ画面で比較する:
- 斜め 45° から見た時の色の反転・白飛び(視野角)
- 赤・青の沈み、黒の締まり(発色)
- 10 分点灯後の裏面の温度(BL 発熱)
- 3 枚繰り返す
判定: 本番 1 枚・開発機 1 枚・予備 1 枚を決める。→ 私に伝えれば Parts Manager の status を更新する。
G. PAM8403 の試聴(#4)
やること: M8403VD(PAM8403+VR)で φ27 スピーカーを鳴らし、音量とノイズを判断する。
- M8403VD の 5V / GND に USB(モバイルバッテリー or Pico の VBUS)から 5V
- VR を最小にして電源 ON → スピーカーに耳を当て「サー」音(ノイズ床)を確認
- Dock の 3.5mm → 3.5mm ケーブルを切って L / R / GND を M8403VD の入力へ(GND を Dock と共通に)
- φ27 SPK27R08BA を L+ L− / R+ R− に繋ぐ(極性はどちらでも鳴るが、2 個の向きは揃える)
- NES の音を出して VR を上げる。展示の環境音に負けない音量が出るか
- ポップ音・ハム・ジーがあれば、購入済みの 1000uF(高分子)を 5V/GND 間に足して再確認
判定: φ27 で足りる → #4 クローズ。足りない → 秋月 30mm UGSM30A-8-01(¥120 ×2)。
H. M3 インサートの試し圧入
やること: PR #14 マージ後に bezel か front を試し刷りし、ウルトラサート IV を圧入して保持力を確認する。
cd cad && openscad -D 'PART="front"' -o out/front.stl plate.scad→ X2D で印刷(PLA・ブリム)- 半田ごてを **200〜230℃**にし、インサートを下穴(φ4.2)の上に置いてこて先で垂直に押し込む。面一で止める
- 冷めてから M3×8 を締める。空回り・抜けが無いか
判定: 緩ければ params.scad の INSERT_D を 4.0 に、きつくて割れるなら 4.4 に。
コンパネの配置(参考)
E の実測が入るまでレバー開口 φ23 とパネル下 14 は仮。ボタン座標は確定(#19)。
進捗の記録先
| 作業 | 記録先 |
|---|---|
B の INVERT_X/Y | issue #15 コメント |
| C・D の動作 | issue #19 / PR #20 コメント |
| E の実測値 | issue #6 コメント |
| F の本番パネル・G の結論 | issue #4 / Parts Manager |