doc drawn up: 2000-11-19 .. 2005-11-04

ジョイスティック自作

サウンドブラスター互換のゲームポート接続タイプのものです。2 軸 4 ボタン。

※本文書の内容は、徹頭徹尾無保証です。実際の製作にあたっては、閲覧者の自己責任で、行って下さい。

パーツリスト
ケース(メーカ不明)C-10-8
ゲーム用ケース
写真
¥2800(千石電商
レバー三和電子 JLF-TP-8YT
基板タイプジョイスティックレバー(平鉄板付き)
写真
¥1720(千石電商
レバー用ハーネス三和電子 JLF-H
TP 専用ハーネス
写真
¥430(千石電商
ボタン三和電子 OBSF-30
SW-68 タイプハメ込み式押しボタン(30Φ)
写真
¥160(千石電商
4 個
基板(メーカ不明)
ユニバーサル基板
¥100(千石電商
トランジスタ東芝 2SA1015 (Y) (*)
(PNP 型、汎用、小信号用、高周波用)
写真
¥60(千石電商
2 個
抵抗47kΩ (**)
写真
¥10(千石電商
6 個
D-Sub15 端子(メス)
写真
¥50(千石電商
D-Sub15 ケーブルアナログ RGB ケーブル 1.5m
(D-Sub15 オス←→オス)
写真
¥650(千石電商
その他リード線・圧着端子(レセプタ)・ネジ等 
注 1
2SA1015 には、BL (Blue) / GR (Green)/ Y (Yellow) / O (Orange) というクラス分けがされているが、これは hFE 区分という品質を表すもので、気にしなくていい。ちなみにこの値は、電流の増幅率に関係がある。ジョイスティックの回路では、単に On/Off をするためだけに使うから、増幅特性はどうでもいいわけである。
注 2
使用する抵抗は設計上では、50kΩ が理想なのだが、回路やケーブルによる損失を考慮して、とりあえず、小さめにした。実際には、ハードウェア的な誤差はどうやっても出るものなので、ソフトウェアの方で、調整を行うことになっているから、ハードウェアレベルでの誤差はあまり気にしなくても大丈夫だと思う。
実際に完成してみると、やはり抵抗が小さめだったので、補正前の Windows のキャリブレーション画面で、ニュートラルポジションが、左上に少し傾いていた。損失は無視して、最初から 50kΩ にしておいても良かったということになる。

回路図

ctips.com という英語のサイトの Game Port というページに掲載されている Figure 2: DIGITAL JOYSTICK の回路図と基本的に同じ。抵抗は 47kΩ と書かれているが、理論的には 50kΩ である(多少のズレは、Windows のキャリブレーション画面で調整することになる)。2N3906 と書かれているトランジスタは、おそらくアメリカ式の型番で、日本の表記と違っているようである。図からすると、PNP 型のものを示しているので、日本では 2SAxxxx(高周波)もしくは 2SBxxxx(低周波)ということになる。というわけで、とりあえず非常にメジャーな東芝の 2SA1015 というトランジスタを、2N3906 と書かれている場所に使うことにした。それ以外はまったくこの回路図の通りである。OPTIONAL(任意)と書かれている部分の、ボタン 3、ボタン 4 も回路に組み込んだ。

回路図の説明

Fig.1

ジョイスティックの場合、通常の XY 座標軸の描き方と違って、パソコンの画面の描画を基準としているため、画面の左上をゼロ点として右下に向かって正方向となる座標軸となっているようだ。その為、左か上にレバーが倒れた場合は回路の抵抗が減り(マイナス)、右か下にレバーが倒れた場合は回路の抵抗が増え(プラス)、抵抗の増減でレバーの状態を検出する方式になっている(そのため、通常の XY 座標軸とは Y 軸のプラス方向が反対になっている)。

ニュートラル状態においては、+5VDC と GND (Ground) 間で電気が流れる。このとき、トランジスタ内部では E(エミッタ)と B(ベース)間で電気が流れる。E と C(コレクタ)の間は、本来は電気は流れない(回路が切れている)のだが、E → B 間で電流が生じると、それにつられる形で、E → C 間で電気の流れが生じる(回路がつながる)。これが PNP 型のトランジスタの特徴である。その結果、+5VDC から、ゲームポート側のピン(3 or 6 番)からサウンドブラスター内部の抵抗計経由で、その先の GND との間で確立する電流の流れる経路は、E → C 間の回路がつながっているので、直列に並んだ 50kΩ の抵抗の 1 個目をバイパスして 2 個目の抵抗の影響だけを受ける経路を流れれば済むことになる。つまり、抵抗計に流れる電流の抵抗値は、50kΩ として認識され PC はレバーが中間地点(ニュートラルポジション)に位置することを検知する。

レバーを右(または下)に倒すと、+5VDC と GND 間での電気の流れは、トランジスタを経由する必要はなくなり、バイパスされて直接流れてしまう。そのため、E → B 間での電気の流れが生じず、E → C 間での回路がつながることもない。仕方がないので、+5VDC と(ゲームポート側のピン(3 or 6 番)を通って)抵抗計経由の GND 間での電気の流れは、50kΩ の抵抗が直列に並んだ経路を通る他なくなる。すなわちこの経路には抵抗が 100kΩ かかることになり、抵抗計ではその値を検出する。よって、PC はレバーが右(または下)に倒されていることを検知する。

レバーを左(または上)に倒すと、スイッチがつながって、電流は抵抗のあるルートを通らなくても、直接抵抗計につながる経路(ゲームポート側のピン(3 or 6 番))へ流れることができる。すなわち、抵抗値は 0Ω で済む。よって、PC はレバーが左(または上)に倒されていることを検知する。

Fig.1.1

B と GND の間に置かれた抵抗は、特に 50kΩ にする必要はないものと思われる。トランジスタというものは本来、(E → B 間の)小電流の変化で、(E → C 間の)大電流の変化をコントロールするという電流の増幅用途のためにあるので、E → C 側のゲームポートの入力に戻る経路に比べて、E → B 側の GND に直接流れる経路の電流は、小さな電流しか必要ない。この電流の増幅率は、hFE として表されるものだから、例えば、今回使った 2SA1015 の Y (Yellow) クラスのものの場合、120 ~ 240 である。すなわち、E → C 側の電流の 1/120 ~ 1/240 程度の少量の電流で十分なのである。その必要な電流を流すに十分な電流(アンペア数)に抑えるために、抵抗を入れて調整すればいいものと思われる。計測していないので E → C 側のゲームポートに入力する電流(Ic)が何 A なのかわからないが、あるサイトの情報によると、+5V に 2.2kΩ の回路という話もあるので、仮にこの数値を採用すると Ic = 5 / 2200 ≒ 2mA となる。よって E → B 側の電流(Ib)必要最低量はその 1/120 ~ 1/240 で、9μA ~ 19μA 程度。また、 E → B 側回路の電圧は 5V のうち、トランジスタ内部の E - B 間電圧が 0.7V 程度(これはシリコン製トランジスタではだいたいこの値になるそうである(参考))なので、残り 4.3V を基準として抵抗の大きさは、R = 4.3 / Ic ≒ 227k ~ 454kΩ であることになる。消費電力を抑えたい場合は、200kΩ 程度の抵抗を使ってみるといいのかもしれない。

Fig.2

ボタンの方は極めて単純な仕組みで、ボタンが押されてスイッチがつながると電流が流れるから、そのことで ON/OFF を判別する。

レバーの方も、ボタンと同じような仕組みを使えばいいのではないかと思う人もいるかも知れない。なぜこのような複雑な仕組みになっているかというと、ゲームポートの規格は本来、アナログジョイスティックを想定した機構になっているからである。フライトシミュレータなどで使われるアナログジョイスティックの場合は、単なる上下左右だけでなくて、上下左右に「どれだけ傾いているか」という傾きの大きさも判別する必要がある。そのため、単純な ON/OFF ではなく、抵抗値が 0kΩ から100kΩ の間を大きくなったり小さくなったりという状態を検出する仕組みになっているのである。しかし、一般のゲームの場合、単なる ON/OFF を検知するだけのデジタルジョイスティックとしての機能だけで十分だから、アナログジョイスティック用のハードウェア仕様の枠組みの中で、抵抗値を 3 段階(0/50kΩ/100kΩ)だけ変化するような仕組みの回路にすればいいということになる。

工作にあたって

生まれて初めて手掛けた(僕は中学の技術の授業で半田付けは習う機会すらなかった)半田付けだったが、やってみると、意外に簡単だった(参考:半田付けの仕方)。D-Sub 15Pin の端子にリード線を半田で直付けするのは、ちょっと大変だったが、リード線に圧着端子を付けてから D-Sub の端子に差し込んで付けるタイプのものもあるようだ(ただしかなり高価)。

テストもあっけなくパスした。ただ、弟のマシンで起きた現象として、マイクロソフト製サイドワインダー・ゲームパッドがジョイスティックの一覧に登録してあると、なぜか認識されなかった。サイドワインダーをジョイスティックの登録から外すと、認識されるようになった。

恐らくこれはサイドワインダーが、2 軸 4 ボタンの機能を拡張して 5 ボタン以上を可能にする拡張機能を実現しているのが原因だろう。拡張ボタン機能は、通常の 2 軸 4 ボタンの ON/OFF のハードウェア的な入力情報を直接そのまま使わずに、どのスティック/ボタンが「どういう組み合わせで」ON/OFF されているかという「暗号」に変換して、その「暗号」を PC がドライバによってソフトウェア的に「解読」して利用するという手法によってその拡張機能を実現している。つまり組み合わせによってボタンの ON/OFF 情報を表現するので、物理的なボタン数よりも多くのボタンの ON/OFF を論理的に表現することが可能になる。

当然、そのような拡張ジョイスティック機能を有効にするためのサイドワインダー用のドライバが有効な状況下では、普通の原始的な(=物理的な入力情報をそのまま利用する)ジョイスティックが使えなくなるのは必然的な結果である。

ちなみに、一見、高等で賢いやり方のように思えるサイドワインダーのような拡張ジョイスティックの仕組みだが、「小手先のセコ知恵が回る者ほど実は愚か」という老荘思想の教えの如く、大きな弱点がある。物理的なボタンの組み合わせで論理的にボタンの ON/OFF を表現しているので、ボタンの同時押しのような真似ができないという致命的な弱点があったりするのだ。

出来上がったジョイスティックをゲームで使用してみての感想としては、三和電子のボタンは反応がイマイチ良くないということだ。というのも、普通ゲームセンタの筐体などに使われているようなボタンは、ボタンの押し込みに一定の「遊び」があり、ある程度押し込んで行って底の方で ON になるものだが、三和電子のボタンはほんの少しでもボタンに指の重さをかけると、それだけで ON になって反応してしまう。連射する場合、ボタンから一度完全に指を離さないと、押しっぱなしの状態として認識されてしまうので、連射にならないのである。普通、ゲーマが連射をするときには、ボタンを半押し状態にして、ボタンを震わせるような形で連射するものだ。そのやり方からすると、三和のボタンは非常に連射しにくいボタンなのだ。ペシペシと指を振りかぶって連打する必要がある。こんなやり方が却って快適と感じるのは、「格闘ゲームぐらいしかやらない」というタイプのゲーマくらいしかいない気がする。なぜかネット上では三和のボタンの評価が高い気がしたけど、そもそもエンドユーザには三和電子セイミツ工業くらいしか選択肢がないので、単なるいい加減な噂の独り歩きに過ぎないのか、よっぽどアーケードゲーマは格闘ゲーム専門ゲーマが多いということなのかの、どちらかというような気がする。

先日、秋葉原のトライという有名なゲーム基板屋さんに行って、実際にその場で交換部品として売っているボタンとスティックについて、三和製とセイミツ製のものを交互に触って確認してみた。もちろん、好みもあるのだろうけど、上のような観点から述べるとはっきり言って「ボタンもスティックもセイミツ製の方が良い」。ボタンはセイミツの方が押し込みが三和のようにペラペラと浅くなくて深め。スティックも三和の方はやけにレバーが長く、細かいレバー操作がしにくいのだが、セイミツの方が短めなので良い。もちろん、アーケード向けのボタン/スティックには、セイミツ製よりももっと良いのがある感じがするけど、エンドユーザが入手可能なこの 2 社の製品に限って言えば、僕はセイミツに軍配を上げる。

前回ジョイスティックを製作したときは、千石電商しかパーツを入手する場所を知らなかったので、千石電商に置いてあった三和のレバー&ボタンを選ばざるを得なかった。もし次にジョイスティック工作を行うような時には、セイミツのボタンやスティックに交換してみたいと思っている。ただ、トライさんには在庫が少なく、変な色のボタンしか残っていなかったので、セイミツの本社はお隣の市(戸田市)にあるようだし、直接行って小売りしてもらう手もあるかなと思っていたりする。

2001-02-09 追記:
ここで使用しているケースとスティック部品の組み合わせの場合、スティック部品の可動部分がケースの鉄板部にに密着してしまうため、スティックの動きが重くなってしまう。そこで、ネジ山にあらかじめカラー(プラスティック製のパイプのようなもの)を挟んでから、スティック部品をナットで止めることにした。カラーを購入したのは秋葉原の西川電子というネジ屋さんで、4mm 径で長さ 5mm のものを 4 個(計 ¥100 以内)。5mm より長いものを買うと、ネジ山が短いのでナットで止められなくなるので注意。この処置を施し、本ジョイスティックはスムーズで完璧な操作が可能なものとして完成した。

完成写真

次回の課題

いつのことになるかわからないが、次にジョイスティックの自作に挑戦するとしたら、
「2人用の2軸2ボタンのジョイスティックのセット」
「可変速連射装置」
をテーマにしたいと考えている。

参考

ctips.com: Game Port
うら太郎さん: ジョイスティック回路から作ろう(残念ながら消滅)
Sugiura Koujiさん: ジョイパッド
岳さん: PC用ジョイスティックの工作
鹿児島大学教育学部技術科教官 M. Tohya さん: 半田付けの仕方
トランジスタ関係: トランジスタ / トランジスタの基礎知識その2 (規格) / 動作と特性 / トランジスターの増幅作用の簡単な説明


新たなる構想

先日、M/B のコンデンサが消耗したのがきっかけで、ジョイスティック製作以来となる生まれて二度目の半田ごてを握ることとなった。それがきっかけで、またぞろ、ジョイスティック製作に対する情熱が多少沸き起こってきた。

実は前回製作したジョイスティックはしばらくの間は弟が順調に使用していたのだが、リード線の半田付けなどがかなりいい加減だったせいもあってそのうち接触不良になって使用不能になり、修理する気にもなれずにそのままお蔵入りしてしまっていた。

あれから月日が経つが、ネット上を情報検索しても、あまり PC/AT 用ジョイスティック自作のコンテンツは見あたらない。そもそもゲームポートのようなレガシィなインタフェースは見捨てられる一方にあり、 USB 接続ジョイスティックが基本となりつつあるので、自作なんてする風潮じゃないのかもしれない。USB 接続ジョイスティックの製作についても興味を持ってちょっと調べてみたことがあるが、実は USB デバイスというのは、ユーザにとっては非常に便利この上ない方式である一方、アマチュア電気工作には敷居を高くする策略が張られているようなのである(どうりで未だ閉鎖的体質が変わらない日本の某大手コンピュータメーカ N?C なんて USB 普及に喜んでいそしむわけだ)。「私造って売る側、あんた買って使う側」という線引き隔壁をはっきり築きたがるのが日本のメーカの体質で、そのあたりもっとアメリカのようにアマチュアイズムを大切にしてプロとアマチュアのギャップを無くして欲しいものだと思う。まあもちろん USB は日本メーカが作った規格じゃないけど、ともかく、ベンダ ID というものを高額な登録料を払って取得しないと、正規の USB 機器を作ることができないようなカラクリになっているので、イマイチ、アマチュア電気工作の熱が盛り上がらない A 級戦犯的原因となっているのだ。

まあ別にベンダ ID なんて無視しててきとーに USB 機器を作ったって(商品として市場で販売でもしない限り)誰にも文句を言われる筋合いはないので、やっても構わないのだけど(多分、そのうち暇ができたらチャレンジする予定)、なんかともかく USB はいろいろと面倒なので、接続インタフェースの問題は切り離して、とりあえずはジョイスティックの仕様を考えようと思っている。そのため、ジョイスティック自体は単純な配線のみの構造にしてしまう。そして、ゲームポート接続するなり、USB 接続するなり、プレイステーションに接続するなり、接続の種類に応じて、外付けのハーネス基板を製作して、そのハーネス経由で PC やゲーム機等につなげる方式にしようと思う。USB 接続用のインタフェースは、場合によっては自分で製作しないで市販の(PS 用ジョイスティックなどを PC につなげるための)変換コネクタを使ってしまってもいいわけだ。

以前製作したジョイスティックの筐体は、最大で、スティック 1 個(上下左右の 4 方向)とボタンが 10 個(スタート/オプションボタンを含む)を装備することができる。つまり、必要となる信号線の数は、それら 14 本に、それぞれの信号線に対となる GND (Ground) 線を考慮すると 14 + 12 = 26 本(レバー用の GND は上下(Y 軸)と左右(X 軸)のペアに対して GND が 1 つずつなので GND は全部で 12 となる)となる。GND は 1 本に束ねて共用にしてしまってもいいのだけど、同時に複数のボタンが押されたりした場合に電流が他の信号線に逆流する可能性もあるので、それを防ぐための対策を行った方が良い。その対策はダイオードによって GND 線を整流する(電流の方向を一方通行にする)ことで実現でき、整流後に各 GND 線を 1 本の GND 線に束ねることが可能になるのだが、前述の方針通り「回路を外付けにする」ためにはジョイスティック本体内では GND 線は束ねずにすべて独立のままコネクタで外部と接続する必要が出てきてしまう。すると、26 本以上ののピンを持つコネクタを用意しなければならないことになる。26 ピン以上というと、D-Sub 37 ピン(D-Sub 26 という数的にジャストなタイプもあるらしいが、非常にマイナーなので避けたいところ)かアンフェノール 36 ピンあたりを選択するしかなくなる。そういう事情を考えると、ダイオードを使った GND 線の一本化に関する回路だけはむしろ内蔵回路にして、従来通り信号線 × 14 + GND 線 × 1 = 15 本で済む D-Sub 15 ピン方式にしてしまった方がスマートな形になりそうだ。何しろ、結構 D-Sub コネクタのリード線の半田付けは細かくて面倒な作業でもあるのだ。

つまり結論として、ジョイスティック本体内では、14 本の信号線は D-Sub 15(メス)端子に直結する。12 本の GND 線は整流用の基板に集線し、12 個のダイオード(小信号用の VR=30V Io=100mA 程度のもので ok だろう)を経由して、基板と D-Sub 15 端子の間を 1 本の GND 線で接続する。また、D-Sub 端子におけるリード線の接続部分は、熱圧縮チューブかセロハンテープで絶縁処理を行うものとする。

ボタン/スティックの交換の便を考慮して、各信号線/ GND 線とボタン/スティック側の端子との接続は半田付けによって固定せず、圧着端子(レセプタ)で取り外しが容易な形にしておく。こちらも絶縁処理は考えておいた方がいいだろう。

整流用基板は、できるだけコンパクトになるように、ユニバーサル基板をカッターで必要なサイズに切って使う。基板上の結線は半田でスルーホールをつなげるか、細いすずメッキ線/ポリウレタン線を使う。もしくはサンハヤト製ユニバーサル基板 ICB-86、ICB-87 あたりを使えば、パターンを利用できるので基板上で結線しなくて済む。絶縁処理は紙でくるむなどの形で行っておき、粘着テープかマジックテープで筐体に固定するような方式にする。

ピンアサインは、

  1. A(下段左から 1 番目)
  2. B(下段左から 2 番目)
  3. C(下段左から 3 番目)
  4. D(下段左から 4 番目)
  5. E(上段左から 1 番目)
  6. F(上段左から 2 番目)
  7. G(上段左から 3 番目)
  8. H(上段左から 4 番目)
  9. I (小ボタン左)
  10. J (小ボタン右)
  11. GND

という形にする。

外付け基板側

ジョイスティックと外付け基板の間は、ジョイスティック側が D-Sub 15 ピン(オス)、基板側が 16 ピンの MIL スタンダードボックスヘッダ(メス)となるケーブルを自作して接続できるようにする。基板上の MIL スタンダードボックスヘッダ(オス)のコネクタに接続することになる。

基板と PC ゲームポートの接続は従来通り、D-Sub 15 ピンケーブルにて行う。すなわち、基板上に D-Sub 15 ピン(メス)のソケットを設ける。ただ、D-Sub 用変換ピッチ基板はやや値が張るので、基板の固定はしないでリード線でぶら下げるだけの接続方法でも構わないと思う。

ジョイスティック-基板間の接続はボックスヘッダコネクタで接続する方式なのに、PC -基板間の接続コネクタに関してはリード線を基板直結にする理由はなぜかというと、将来的にゲームポート接続を廃止して、USB 接続回路を載せた基板を製作した場合のことを予想しているからである。ジョイスティック-基板間の接続は別の基板を使う場合にも必要となり、また D-Sub 15 ピンにリード線を半田付けする作業は結構面倒臭いので、使い回しできるようにしておきたい。一方、PC と基板間の接続に関しては、USB 接続になった場合は D-Sub コネクタによるゲームポート接続方式は必要なくなるので、使い回す必要がなくなる。ゲームポート接続基板もろとも D-Sub 接続端子が要らなくなるので、コネクタと基板間を直接リード線を半田付けしてつないでしまっていても構わないのである。

将来、連射装置や USB 接続回路なんて代物を製作するときのことを考えると、この際ブレッドボードなんてものが手元にあったら便利かなとも思うが、果して電気工作なんてジョイスティックを自作するまで生まれてこの方縁がなかったような人間が、そこまでハマってしまっていいのかという懸念もある(笑)。

参考


《以上》