11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【電子工作 / PCB】スーパーファミコンのコントローラーをUSBゲームパッドに改造する基板を作ってみました!

既存製品の内部に組み込まれている基板形状を上手く模して作ることが出来れば、何か面白そうなものが作れそう・・・?

具体的にどんな事かと言うと、例えば昔懐かしのファミコンのコントローラー内の基板形状が作れるとコントローラーの外枠自体はそのまま活かし内部の基板をごっそりと自作したものに入れ替えて全く別のものに作り変えるなんて事ができ面白そうですよね!

内部の基板を自作し、例えばESP32を組み込めばWi-FiやBluetoothといった無線コントローラーに改造するなんてことも出来そうです。

100均で売られているミニゲーム機の内部基板をゲームエミュレーターが動く自作基板に入れ替えたり・・・既存製品の内部基板の形状をCAD上で作ることが出来れば、アイデア次第で電子工作でいろいろと面白い事に活かせそうです!

そのような事を前々から考えていたのですが、Kicadを使った自作基板の設計&製作にも少し慣れてきたのでチャレンジしてみることに・・・。

今回製作したものは本物のスーパーファミコンのコントローラーをUSBゲームパッド化させるというものです!

当初、ファミコンコントローラー型の無線操縦機みたいなものを作る予定でした。
懐かしいファミコンのコントローラーでこのような自作ロボットを操作出来ると面白そうですよね!

手元にあったコントローラーを分解してみたところ、この基板形状を上手くCADで再現する事が出来れば実現出来そうなんですが・・・無線コントローラーとなると内部にバッテリーを仕込む必要があり、その充電端子などケース側の加工も必要となってくるため今回は製作しやすいUSBゲームパッドとしてまず作ってみることにしました。

結果的にスーファミコントローラーにピッタリと合う基板形状を作ることができ、上手く機能するUSBゲームパッドを自作する事が出来ました!

似たような形状のUSBゲームパッドはAmazonなどでも安価で購入する事が出来るのですが・・・電子工作を趣味でやっている身としては自作してみるのは非常に楽しくそれなりに知識も身に付きます!

今回の製作過程は自分の中で非常にいい経験値となりました。
今後別の既存製品の改造などいろいろと応用出来そうです!

今回は実物のスーパーファミコンのコントローラーを改造しUSBゲームパッドを製作した話となります。

スーパーファミコンのコントローラーをUSBゲームパッドに改造する基板の製作!

こちらが今回製作したスーファミコントローラー型USBゲームパッドです。
本物のスーファミコントローラーを使い内部の基板を自作してUSBゲームパッド化させています。

PCでファミコンやスーファミなどのゲームエミュレーターで遊ぶ場合キーボードでも操作する事が出来ますが、一般的にはこのようなゲームパッドを接続してプレイすることが多いと思います。

ゲームパッドは様々な形状のものが市販されているようですね!
スーファミコントローラーっぽいものではこのあたりでしょうか?

このようなゲームパッドをあえて自作するとなると製作時間や部品調達の手間などコスパはあまりよくありませんが・・・電子工作を趣味でやられている方ならお分かりだと思いますが、その労力も楽しみの一つですよね!

そして何より本物のコントローラーを使っているので実際に使っている時にテンションも上がります!

回路構成

今回製作したスーファミコントローラー型USBゲームパッド(SNES USB GamePad)の回路構成はこのような設計となっています。
USB接続したPCのキー操作を行うわけですが、その制御はMCU(マイコンチップ)にATmega32U4を使っています。

ATmega32U4と言えばArduinoではArduino LeonardoやPro Microで使われているMCUで、USB経由でPC上のマウスやキーボード操作を行うといったHID(ヒューマン・インターフェース・デバイス)機能が備わっています。
自作キーボードを製作されている方でPro Microを使われているのをよく見かけますよね!

上記回路図はArduino LeonardoやPro Microの回路構成とほぼ同じで、コントローラーのボタン(十字キー・A/B/X/Y/L/R)をATmega32U4のI/O端子に割り当てて基板化させています。

基板形状

USBゲームパッドとしての回路構成は上記のように簡単なんですが、コントローラー実物に合う基板形状を作るというのが私の中では今回のメインの課題でした。
基板外形データが公開されていれば簡単なんですが、調べた限りではありませんでした!

冒頭でお話したように無線コントローラーに改造するなど、ケース自体の加工が必要ならこのような3Dモデルを作っておくと後々便利になると思いますが・・・

今回は基板形状が取れれば問題ないので、実物のスーファミコントローラー基板と同形状になるようにFusion360で形状を作っていきました。
ボタンのパッドの位置や基板を固定する穴位置や穴径など現物合わせで何度か確認しながらスケッチを修正していく感じですね!

ある程度形状が整ってくると実際の基板の厚み(約1.6mm)に押し出して3Dプリンタで出力して微調整していきました。

3Dプリントしたものでは穴径はCAD寸法よりどうしても若干小さくなってしまいますが、これくらいのはめ込み具合まで調整出来れば実際のPCBでは問題ないと思います。

基板設計

基板の形状が作れれば基板設計です。
回路構成は簡単でパーツ数もさほど多くないのですが、ボタンパッドのラバー部分に被らないようにパーツを配置しました。

あと基板設計時に気になったのがボタンのパッド部分、メンブレンスイッチって言うのでしょうかね?
フットプリントが見つからず自作したのですが、こんな感じで上手く動作してくれるか心配でしたが問題ないようです。

メンブレンスイッチは見ての通り非常に単純な構造のものですが、パターンがむき出しになっているので時間が経つとメッキ部分の酸化や腐食などにより接触不良等起きやすくなるようですね。

SNSでアドバイス頂きましたが、表面処理に金メッキ加工をするのが望ましいようです。(ENIG処理)。
これについては後述します。

JLCPCBに基板発注

基板発注はJLCPCBさんに発注しました。

今回製作したゲームパッドの基板サイズは約125×44mmとなりますが、PCB製造メーカーは標準サイズとなる100mmを超える基板サイズになると各社基板製作料金が一気に高くなります。

JLCPCBでは標準サイズを超える基板でも他社と比べ基板製作料金は安く、また送料区分もOCSを選択することが出来るのでトータルコストは非常にお安く作れます。

今回の基板では送料込みで1,200円ほどで製作することが出来ました。(オプション項目なし)

基板データ(ガーバーファイル)をダウンロード出来るようにしておきます。
基板形状など何かの参考になればと思います!

またJLCPCBでの基板発注方法に関しては、こちらの記事で詳しく解説しているので合わせて読んで頂ければと思います。

【電子工作】はじめての基板製作!JLCPCBさんに基板を発注してみました。ユーザー登録・データ納品・基板到着までの一連の流れをご紹介!

ケースに合う基板形状が作れているか?
スイッチ部分はうまく機能するのか?
など少し不安材料があったので、今回オプション項目は入れずにテスト的に発注してみました。

今回製作した基板ではメンブレンスイッチのためのパッドを作り込んでいます。
オプション項目を入れずに表面仕上げを通常のはんだメッキで発注しましたが、このようなパッドのメッキ部分がむき出しになった状態では時間の経過とともに酸化や腐食等によりボタンの反応が悪くなる可能性があるため、オプション項目にある表面仕上げにENIG(無電解金メッキ)を指定するのが本当は望ましいようですね!

結構追加料金がかかる表面処理のオプション項目なので、今回は通常発注しました。
完成後スイッチ操作は非常に良好ですが、時間の経過とともに接触具合がどうなるか・・・何かあれば検証&追記しておきます。

ENIG(無電解金メッキ処理)のオプション項目は、JLCPCBでは発注項目のこの部分です。
オプション項目となる表面処理となるので追加料金が発生します。

ENIG(無電解金メッキ処理)
表面処理の一つで表面を薄く金メッキして銅箔の酸化を防ぐ処理。(参考:JLCPCB)

基板データを使って製作される方は製作料金が高くなりますが参考にして下さい!

パーツの実装

OCS Expressを選択して1週間ほどで基板が到着しました!
JLCPCBさんは送料が安いOCSを選択する事が出来るため、トータルコストが他社より安くて到着も早いのがいいですね!

パーツの実装はMHP30というミニリフロー装置を使って行いました。

【電子工作】コンパクトボディーで安全設計!ミニリフロー装置『Miniware MHP30』を使ってみる!

コンパクトで非常に便利なリフロー装置ですが、今回の基板は少しサイズが大きいのでこのような治具があると便利です!

【電子工作】『Miniware MHP30』で大きな基板のリフローに対応出来るように治具基板を作ってみました!

使用パーツ一覧

基板実装に必要なパーツ一覧です。
ベースとなるスーファミコントローラーは中古ショップやオークションなどで比較的安く入手出来ると思います。

パーツ定数入手先
ATmega32U4U1Aliexpress / 秋月電子
16MHzクリスタルY1Amazon / Aliexpress / 秋月電子
コンデンサ
(0805)
C1/C5/C7/C8 0.1μFAmazon / Aliexpress
C2 10μF
C3/C4 22pF
C6/C9 1μF
C10/C11 5PF
ポリフューズF1 500mA(1812)Aliexpress
抵抗
(0805)
R1/R4 10kΩAmazon / Aliexpress
R2/R3 22R
USBケーブルーーーーーー

プログラムの書き込み

パーツの実装が出来たらプログラムの書き込みです。
ATmega32U4は生チップを使っているので何もプログラムが書き込まれていません。
Arduinoとして動作するスケッチ(プログラム)を書き込んで動作させようと思いますが、それにはまずブートローダーの書き込みが必要となります。

ブートローダーの書き込み

ブートローダーの書き込みにはAVRライタが必要となります。
Arduinoを書き込み装置として使うことも出来るのでその方法で進めていきます。
Arduinoではおなじみの書き込み方法ですね!

書き込み装置として使うArduino(こちらではUnoを使いました)に、Arduino IDEの[スケッチ例]の中にある[ArduinoISP]スケッチを書き込みます。
これでArduinoを経由して本基板にブートローダーの書き込みが行なえます。

製作した基板にはブートローダーを書き込む際に使用するICSP端子があります。

ピンヘッダーをはんだ付けしてArduinoと接続します。

Arduino Uno本基板
5V5V
GNDGND
D10RESET
D11MOSI
D12MISO
D13SCK

このようなテストワイヤーがあるとスルーホールにそのまま差し込み固定することが出来るので便利です。

Arduino IDEのボード設定は[Arduino Leonardo]、書き込み装置は[Arduino as ISP]を選択します。
あとは[ブートローダを書き込む]をクリックして書き込みます。

[ブートローダの書き込みが完了しました。]と表示されればOKです。

MEMO
ブートローダーの書き込みが完了したら接続したピンヘッダーはケースの邪魔になるので取り外して下さい!

スケッチの書き込み

次にゲームパッドとして動作するスケッチの書き込みです。
マイコンチップATmega32U4にブートローダーを書き込んだので、スケッチの書き込みはPCと接続したUSBケーブルを経由して書き込むことが出来ます。

まずUSBケーブルの接続です。
USBケーブルは先端がフリーになったものを購入してもいいのですが、手持ちであまっているケーブルをカットして使えば問題ないと思います。

USBケーブル内部の4本のケーブルは、赤(VBUS)/黒(GND)/緑(D+)/白(D-)となっています。
基板の対応したパッド部分にはんだ付けします。

配線が完了したらPCと接続してArduino IDEからゲームパットとして動作するスケッチを書き込みます。
書き込むスケッチはこちらからダウンロードできます。

上記ダウンロードしたスケッチは[ArduinoJoystickLibrary]というライブラリを使っています。
以下GitHubのサイトからライブラリをダウンロードしてArduino IDEにインストールしておく必要があります!

参考 ArduinoJoystickLibraryGitHub

ダウンロードしたライブラリのZIPファイルをArduino IDEにインストールします。

ライブラリのインストールが完了したらスケッチの書き込みです。
Arduino IDEのボード設定を[Arduino Leonardo]にし認識されたシリアルポートを選択して、あとは上記ダウンロードしたスケッチを書き込めば完了です。

組み立て

スーパーファミコンのコントローラーを分解し今回製作した基板と入れ替えます。
L/Rスイッチ部分の小さな基板は使い回すので取り外して本基板に付け直して下さい。

組み立てが完了したら動作テストです。
PCと接続しArduino IDEのシリアルモニタを立ち上げます。(ボーレート115200bps)
各ボタンを押して動作に問題がないか確認して下さい!

これでUSBゲームパットの完成です!

実際にゲームエミュレーターで使ってみる!

ゲームエミュレーターに関してはあまり詳しくないのですが、こちらではMac環境で使えるOpenEmuで使う方法を簡単に見ていきます。
OpenEmuはこちらからダウンロードできます。

参考 OpenEmuトップページOpenEmu

ゲームROMを配布しているサイトはいろいろとありますが、一例として以下サイトを参考にして下さい。

参考 GamesThe NES Files

ダウンロードしたROMデータをOpenEmuにドラッグして格納し、お好みのゲームを立ち上げます。

設定項目の中にある[コントローラを編集]からボタンを割り当てていきます。

[入力]の項目はデフォルトで[キーボード]になっていますが、ゲームパッドをPCと接続すると[Arduino Leonardo]を選択することが出来ます。

あとは対応したボタンを押してキーを割り当てていけばOKです。

これでゲームエミュレーターをゲームパッドで操作する事が出来ます。

【追記】ファミコンコントローラーのUSBゲームパッド化基板も作ってみました!

スーパーファミコンのコントローラーで作ったUSBゲームパッド化基板ですが、なかなか良かったのでファミコンのコントローラーをUSBゲームパッド化する基板も作ってみました。

【電子工作 / PCB】ファミコンのコントローラーをUSBゲームパッド化する基板を作ってみました!

【追記】ATmega32U4を使ったシンプルな1キーキーボードを製作しました!

ATmega32U4を使った1キーのみのシンプルな自作キーボード(1Key Keyboard)を製作しました。

今回製作したファミコンコントローラーをUSBゲームパッド化する基板と構成はほぼ同じなので、ArduinoでUSB機能を使う参考等になればと思います。

【電子工作/ PCB】1キーのみの可愛い自作キーボード(1Key Keyboard)の製作!

最後に!

USBゲームパッドは様々なものが販売されており今回のように自作すると手間がかかりますが、電子工作としては面白く得るものも多いと思います。

実物のスーファミコントローラーに内蔵してゲームパッド化させる基板として今回製作しましたが、使用したATmega32U4はArduino LeonardoやPro Microで使われているMCUなので、これらボードがあれば上記スケッチを書き込んでブレッドボード上でも簡単に試すことが出来るので興味ある方はやってみるのも面白いと思います。

【Arduino】Arduino Leonardoの基本仕様・ピン配列等まとめ!
【Arduino】Pro Microの基本仕様・ピン配列等まとめ!

また、こちらのサイト様の記事ではスーパーファミコンではなくファミコンのコントローラーにPro Microを仕込んでゲームパッドとして改造されています。
ファミコンのコントローラーを改造するのも面白そうですね!
今回参考にさせて頂きました!

参考 本物ファミコンのコントローラをUSBゲームパッドに簡単改造kohacraftのblog

2 COMMENTS

コメントを残す