Raspberry Pi Zero Wを内蔵して遊べるミニチュアテーブル筐体を作る

#0. はじめに
ミニチュアメーカー[HELMETS様](https://www.helmets.co.jp/)から[1/12テーブル筐体プラモデルキット](https://www.helmets.co.jp/helmets-web/products/1-12-%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E7%AD%90%E4%BD%93/)が発売されました。
綿密な取材に基づく再現度、作りやすさとコストダウンを考慮したパーツ分割、改造することを前提とした遊び心。私たち昭和世代が思わず感涙してしまう一品です。

ここでは、私がRaspberry Pi Zero Wとbluetooth機器を利用してプレイアブル筐体を制作した際のお話をいたします。

#1. 作りたいもの
+ 往年のゲームセンターの雰囲気を再現する
 + 下記1.1 , 1.2 , 1.3
+ 趣味で参加している模型展示会へ出品できるようにする
 + 下記1.3 , 1.4

といったことを目指して以下のテーマに取り組みました。

##1.1 遊べるようにする
ゲームセンターの雰囲気を再現するには、とにかく遊べることが必須です。
本キットは[Raspberry Pi Zero用液晶HAT](https://helmets-shop.stores.jp/items/5e031e9e6899fd0f23ef2164)を組み込むことができるように設計されています。これに[RetroPie](https://retropie.org.uk/)を組み込んで遊べるミニチュア筐体を制作します。

##1.2 サウンドを鳴らす
ゲームセンターの雰囲気でもう一つ重要なのはサウンドです。
残念ながらRaspberry Pi Zeroには音声出力がありませんが、ここではbluetoothスピーカーを外部出力として接続することにします。

##1.3 配線をすっきりさせる
キットでは背面の蓋を開けることでUSB端子やHDMI端子を接続することができます。キーボードやゲームパッドを接続すればゲームを操作することができます。よく考えられた仕様ですが、しかしながら1/12スケールのキットに1/1スケールのケーブルはアンバランスですし、そもそも本物はケーブルが刺さっていません。
![20200726_213658.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679760/34158ccf-8804-df9d-c09f-81d95b2ae6c3.jpeg)
（背面左からHDMI出力、USB端子、電源。側面はSDカードスロット）

また模型展示会にてケーブルが接続された状態で出品することはできません。この手の作品はお子様が喰い付いてくれるのですが、彼らは夢中になるとパッドを振り回します。有線だとモーニングハンマーと化し周りを危険に晒してしまうのです。

今回はbluetoothやSSHの利用、電源の供給方法を見直すことでケーブルまわりをスッキリさせます。

##1.4 電池駆動にする
模型展示会会場では電源の確保が困難です。どこへでも気兼ねなく持ち運べるように電池で駆動するようにします。
電池はリチウムポリマではなく単3電池を採用します。会場で長時間稼働させることを考えると安全かつ交換しやすいものが望まれるからです。

#2. 制作
##2.1 RetroPieの導入
今回はWi-Fiとbluetoothを利用するためRaspberry Pi Zero Wを採用しました。これにゲーム用に特化したOSであるRetroPieをインストールします。
HELMETS様が導入ガイドを用意してくださっていますので、詳細はそちらをご覧ください。
[ラズパイ/使用準備 - HELMETS](http://www.helmets.works/?Raspberry+PI%E3%81%AE%E4%BD%BF%E7%94%A8%E6%BA%96%E5%82%99)
[ラズパイ/SDカードの準備](http://www.helmets.works/?SD%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AE%E6%BA%96%E5%82%99)
[ラズパイ/初期設定 - HELMETS](http://www.helmets.works/?%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A)

インターフェース設定でSSHとSPIを有効にしたら、ラズパイを再起動します。

液晶HATの導入はゲームの起動が確認された後に行います。それまではHDMI出力かSSH接続で進行していきます。

##2.2 ゲームパッドを接続する
パッドは入手しやすい8BitDo製を使用しました。``RetoPie_Setup``から接続します。

```
$ sudo /home/pi/RetroPie-Setup/retropie_setup.sh
```

手順はこちらを参照してください。
[Setting up an 8bitdo Bluetooth controller - RetoPie Docs](https://retropie.org.uk/docs/8Bitdo-Controller/)

##2.3 スピーカーを接続する
bluetoothスピーカーはダイソーの600円スピーカーを採用しました。コスパ最高ですね。
![104308104_3012297868888949_7101114557801913058_o.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679760/7edf00c4-3072-0f9e-2dd5-c74dc38a1557.jpeg)
（今回使用したbluetooth対応のゲームパッドとスピーカー）

RetroPieでbluetoothスピーカーを接続する方法は[本家のForum](https://retropie.org.uk/forum/topic/20338/tutorial-bluetooth-audio-on-retropie-v4-4-and-raspberry-pi-3-model-b/)にありました。
注釈に書かれているように**bluealsaをインストールすると機能しません**。決してインストールしないようご注意ください。

```
1. pulseaudio-module-bluetoothをインストールする
$ sudo apt-get install pulseaudio-module-bluetooth

2. piユーザーを bluetoothグループに追加する
$ sudo adduser pi bluetooth

3. PulseAudio serverに自動接続する
$ sudo vi /etc/pulse/default.pa
１行追記
load-module module-switch-on-connect追記

4. audioサービスを有効にする
$ sudo vi /etc/bluetooth/main.conf
２行追記
[General]
Enable=Source,Sink,Media,Socket

5. RetroPie_Setupでスピーカーを接続する
$ sudo /home/pi/RetroPie-Setup/retropie_setup.sh

RetroPie -> BLUETOOTH -> Register and Connect to Bluetooth Device
DisplayYesNo を選択

RetroPie -> BLUETOOTH -> Configure bluetooth connect mode
background を選択

6. 再起動
$ sudo reboot
```

### bluetoothがうまく接続されない場合
もしも再起動しても自動的にbluetoothが接続されない時は、``bluetoothctl``というコマンドがありますので、手動で切断、再接続を試してみてください。

```:手動で接続する例
$ sudo bluetoothctl
# scan on
# scan off
# trust xx:xx:xx:xx:xx:xx
# pair xx:xx:xx:xx:xx:xx
# connect xx:xx:xx:xx:xx:xx
# paired-devices
# quit
```

``Failed to connectエラー``が出ているようなら一旦removeして再接続してみましょう。

[Linux のコマンドラインで Bluetooth 接続 - Qiita](https://qiita.com/propella/items/6daf3c56e26f709b4141)

##2.4 ゲームの起動確認
ROMを配置したらゲームを動かす準備が完了です。
[ROMイメージの配置 - HELMETS](http://www.helmets.works/?ROM%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AE%E9%85%8D%E7%BD%AE)

複数のROMを入れる場合はScraperを設定しておきましょう。液晶HATでは小さすぎて文字が読めませんのでスナップショットが表示されていると選択する時に便利です。
[Scraper - RetroPie Docs](https://retropie.org.uk/docs/Scraper/)

ここまで問題なければ次へ移る前にSD CARDをバックアップしておきましょう。

##2.6 電源の給電方法を変更する
Raspberry Piの給電方法はUSB端子からが一般的ですが、それでは外観を損なってしまうため他の方法でいきます。
実はRaspberry Pi Zeroは裏面にPP1（5V）とPP6(GND)という電源に直結している端子があります。ここにハンダ付けして外部電源へと繋いでやります。
![103706768_3012297398888996_3202602816285119053_o.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679760/5dd9cf71-1355-14f7-adbe-ddc4f85a90b9.jpeg)

ここから電池ボックスへと繋ぎますが、5V 1Aを得るために間に昇圧回路を挟みます。今回はこちらを使用しました。
[PowerBoost 1000 Basic - 5V USB Boost @ 1000mA from 1.8V+](https://www.adafruit.com/product/2030)

配線ですが、キットはこのことを見越して設計されたのでしょうか。最初から穴が開いています！ここを通させてもらいましょう。さらに都合の良いことに昇圧回路は下図9の箱の中にちょうど納まります。
![20200726_134642.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679760/4f9aa880-43cd-932f-72cf-8195bbf62b3c.jpeg)
（赤矢印の穴が最初から開いている。改造する人向けに配慮された仕様ステキ！）

最終的にこのようなスッキリした外観になりました。緊急メンテ時は背面の蓋を開けてキーボードやモニターを繋げます。
![20200726_213725.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679760/8f970b22-493f-52ce-371d-0791a26bd86a.jpeg)

なお、今回の給電方法はこちらのブログを参考にさせていただきました。
[Raspberry Pi Zero用の小型電源とUSB WiFiモジュール用USBコネクタを自作する - Hatena Blog](https://karaage.hatenadiary.jp/entry/2016/09/16/073000)

##2.7 液晶HATの導入
HELMETS様の導入ガイドを参照して、ドライバーをインストールします。
[液晶ドライバーの導入 - HELMETS](http://www.helmets.works/?%E6%B6%B2%E6%99%B6%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%81%AE%E5%B0%8E%E5%85%A5)

なおGPIOピンが長すぎると天面が閉まらなくなりますので、キットを仮組する際にピンの長さを確認しておきましょう。

##2.8 キットの組み立て
ここはQiitaなので手短に（笑）

+ 少年時代に通い詰めたお店で遊んだ筐体を記憶を頼りに再現します。
+ コンパネの形状を変更。一体成型されているボタンを削って面一にした後、ボタンを自作。
+ コンパネ左側のスタートボタンを角棒で自作。
+ インストカードは写真をカラーコピー。
+ 木目模様はキット付属のデカールで。
+ 塗料はタミヤラッカー。

塗装が終わったらキットが壊れないよう、配線が切れないよう慎重に組み立てます。
電源を入れて昔の思い出に浸りましょう。

![20200726_213933.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679760/e20d6da6-5714-718c-8663-1d5d8689053a.jpeg)


#3. おわりに
ミニチュア筐体の制作では狭い空間への基板の収納、入力装置、サウンド出力、メンテナンス性の担保、展示会場での電源確保　等といった課題が山積みです。それらに対して自分なりに表現したいものの優先順位を考えて挑戦してみました。
この記事をきっかけにミニチュア筐体作りに興味をもつ人が現れてくれれば幸いです。