プレステコントローラをH8TINYに接続してみる

公開日:  最終更新日:2014/06/05

すいません m(_ _)m、本記事はブログ引越時に書式が崩れました。順次修正中です。

次期マシーンのコントローラは、プレステコントローラを使おうと思っています。というわけで、まずは手持ちのジャンクなプレステコントローラをH8/TINYで読み取り実験をしました。「ATmega128じゃないの?」と言われそうですが、マシーン側のコントローラに接続するのではなく、オペレータ側で読み取って、BlueToothで転送する予定です。というのも、うちで作っているマシーンに載せるにはワイヤレスコントローラの受信機、ちょっとでかいです。で、たぶん(かなりの確度で)、あの受信機って受信機と言いながら送信もしますので、


バラして使うと電波法に引っかかるかも


なんです(認証を受けた状態で使わないといけないはずなので、ばらす=認証時と異なる状態になる)。もし、確認された方がいましたら、教えてください。無線やってた経験からいくと、上記のような解釈になります。


各イベントでも合法性を確認するよう言われていることもありますし、違法性を感じながらやるのも気が引けるので、ちょっとお金はかかりますが手元で読み取って、BlueToothで送ることにしました。BlueToothはまた入手するとして、まずは基礎実験です。


情報ソース
既にプレステコントローラの解析、読込プログラムなどはみなさんがアップされていますので、それを思いっきり参考にさせて頂いて作りました。情報ソースは以下の通り。



今回は、あまりにも人様の情報ばっかり使ってますので、サンプルプログラムは無しです。


製作&実験
製作といっても、たいした物は作らないんですが、まずは手持ちで余っているAKI-H8/3664を引っ張り出してきて(昔、G-Tuneに使っていたやつ)、ピンヘッダを取り去って気分一新です。取り方ですが、万力で固定して、半田ゴテでハンダを解かしてラジペンで引っ張って取りました。で、最後にハンダ吸い取り器で「シュポ」っとやります。そんなに綺麗に取れるもんではないので、まあ、だいたいにやっておきます。


 


次に、NONSAYAさんの製作記事に従って、AKI-H8/3664を3V動作モードにします。これをやるには、AKI-H8/3664の裏側にある、C7のコンデンサを取ります。取り方ですが、片方ずつハンダを溶かしても取れません。ここは一発、コンデンサにハンダがかぶるぐらいまでハンダを盛ってしまい、両側を一度に溶かしてはずします(小技)。コンデンサが壊れると思いますが、ここはすっぱりとあきらめます。真似されるときは、かならずメガネなどをかけて、ちゃんと保護対策をしてからやってくださいね。部品によっては「プシュ!」とか言って、わけのわからないものが出てくる時がありますので。


あとは、電源とVCLを接続して完了です。


 


ちょっともったいないですが、手持ちのプレステコントローラの電線を「ブチ」と切りました。中はこんな感じで、結構、しっかりした線です。さすが茶の間で使われるものは違います。あとはこれをAKI-H8/3664に直接ハンダ付け。まあ、あまり部品ばかりというのもありますし、ハンダ除去って、なかなか綺麗には取れないので、ピンヘッダとかって入らないことが多いんです。


ちなみに、プレステ等のゲーム機はまったく所有していません。どうもゲームって燃えないんです。ゲームセンターでちょっとやるぐらいにはやりますが、買って家に設置してまで、という感じじゃないんですよねー。人が作った世界の中で活動するだけのものだからかな。


 


ケーブルの色ですが、こんな感じです。向きは、コントローラのコネクタを正面から見た状態です。下の図で、左が1番ピンのようです。




-------------
|○○○|○○○|○○○|
\___________/
|茶橙紫|黒赤黄|青 緑|
      (灰)


というわけで、実験完了です。うーん、こんなに簡単にできるなんて…。最初、ちょっとデータが化けていたのですが、信号間の待ち時間を調整したら、ちゃんと読み取れるようになりました。情報を公開してくださっているみなさま、ありがとうございますー。最終的にAKI-H8/3664周りはこうなりました。


 


情報ソースからの変更点ですが、純正コントローラを接続する限りでは、ACKは開放のままでよさそうです。また、DATのプルアップは、マイコン内臓のプルアップで大丈夫でした。そんなわけで、配線は、AKI-H8/3664に接続するだけです。


思いのほかうまくいったので、今度、お気に入りのコントローラを購入して、本格的に改造しようと思います。構想では、コントローラにABSとかでフレームを継ぎ足し、マイコン、モジュール、電池を搭載する予定です。あ、でもあんまり重くしないよう、気をつけないといけないですね。ついつい豪勢に作りたくなるクチですので。あはは。

  • このエントリーをはてなブックマークに追加
  • Pocket

関連前後記事

Comment

  1. B.W より:

    SISOさん、こんばんは。B.Wです。
    やっぱりバラすと電波法に引っかかるんでしょうか。私もそれが気になって取説を読んでみたのですが、電波法うんぬん以前に、「バラすな」とも書いてなかったんですよね・・・。だからOK!ってことにもならないとは思うのですが。認証のシールはカバーに貼ってありますしね。う~ん、やっぱり後ろめたい状態で使うのもよくないので、戻した方がいいかぁ・・・。

  2. B.W より:

    すいません、いま読み返してみたらちゃんと「分解、ハンダ付けは絶対にしないでください」と書かれていました。そりゃそうだよなぁ。

  3. SiSO より:

    SISOです。お久しぶりですー。
    前からやばいかなーって思っていたんですが、最近、各イベントで無線の話が出ているようだったので、思い切って大きく書いちゃいました。
    注意書きからすると、ピン(サーボとかのコネクタをちょっと広げると入ります)を使って接続するのは問題ない、ということですね!なんとかデザインに取り込んでみるというのはどうでしょう?顔にしている人もいましたし。
    ほんと、安くて小さくて信頼性のある通信モジュールって無いもんですかねーって思います。小型クラスだと、売られているもの、ちょっとつらいですよね。
    それでは!

  4. 平野 康博 より:

    小型のモジュールとなると、ベステクのZigBeeなんでしょうね。信頼性はソフトウェアで向上させるしかないですが。
    大きさの都合で、有線PSコントローラとのことですが、今回作られた構成で、無線コントローラにする(PSコントローラ—無線—H8—BlueTooth—Robot)のも操作性の点でいいかもしれませんよ。

  5. SiSO より:

    平野さん、こんばんは!授乳完了です。
    値段でいくとZigBee、値段を考えなければPBT-001ってところですよね。ワイヤレスPSコントローラで受信機からBT化するのもおもしろいですね!それだと、コントローラの重量バランスが崩れないとか、身体の周りにケーブル取り回さなくてよさそうです。うーん、どうしようかな。あ、でも、両方とも2.4GHz帯ということで、ちょっと心配かも…。

  6. 織田 より:

    こんばんは
     RoboShellもPSのコントローラ、対応中です。
     コントローラのプロトコルの資料を入手したのですが、PS用みたいです。
     PS2用にやるには、どのコントローラになるのでしょうか?
     #アナログ?
    以上、よろしくお願いいたします。

  7. SiSO より:

    PSコントローラ、いいですよー。
    で、今回試したHORIのコントローラは、DualShock2というものだと思います。モードは、藤田氏のドキュメント中の「アナログコントローラ(アナログモード:赤LED点灯)」を使用しています。これは、前回、「DualShock2ラベル無しアナログスティック付きコントローラ」でも使えました。
    たぶん、もうちょっと探すと、各ボタンのアナログ入力なんてのもあったような、なかったような感じですが、未確認です。

  8. 織田 より:

    こんにちは
     とりあえず、コントローラの読み取りプログラムが出来ました。
     それほど、悩まずにさくっとできました。ワイヤレスコントローラに付け替えようと思います。

  9. SiSO より:

    織田さん、こんばんは!
    同期シリアルとI/Oポート叩くの、どちら使われました?RoboShellだと、I/O叩くほうでしょうか。
    うちでやったのは、専用にマイコンを用意していますのでこれまた簡単でしたが、RoboShellに組み込まれるんですよね?とすると、ちょっと難易度アップでしょうか。楽しみです。

  10. 織田 より:

    I/Oポートをたたいています。RoboShellには組み込みました。(と言うより、RoboShellでテストした。)
    次はバイブ機能を使いたいと思っています。ワイヤレスコントローラだと系が独立になるので良いかな?と…。

  11. SiSO より:

    了解です。さすがですねー。基本のやり取りが出来てしまえばバイブも簡単だと思います。RoboShellでどうI/F(関数の)を実装されるか楽しみにしています。自分なら、何種類かのコントローラを想定して、どれでもそれっぽく扱えるようなI/Fを考えますが、織田さんはどうされますか?

  12. 織田 より:

    どうもです。
    >自分なら、何種類かのコントローラを想定して、
    >どれでもそれっぽく扱えるようなI/Fを考えますが、織田さんはどうされますか?
    インターフェイスの一番下の部分(実際にラインをドライブする部分)は
    フレームワークに入ってしまうところだと思います。
    この部分を仮想化するのは確かに実装的にかっこいいのですが、「労を多くして実少なし」のような気がします。
    例えば、CMDなどをきれいに配列に収めて、それぞれのコマンドを一発で出せるようにする。などです。
    今回のアプローチはその後、動作部分を共通化しています。
    具体的には
    OnL1ButtonDown()
    OnL1ButtonUp()
    みたいな感じです。
    上記は make/break が発生したときにコールされます。Windowsのプログラミングと同じような感じです。
    ユーザはこの部分に所望の動作を記述するわけです。
    今はべた書きなので、関数ポインタを使ってちゃんとした dispatcher として実装します。
    では

  13. SiSO より:

    こんばんは!
    うちだと、イベントハンドリング的な実装ではなく、アプリ側から読み取る形でインプリしています。というのも、操作によってイベントを起こす、というケースが少ないからです。
    確かにモーションスタート、という使い方だけを考えるとイベントがふさわしい感じですが、実際にはほとんどモーションを実行しているわけで、次のモーションをスタートさせるタイミングというのは限られてきます。たとえば、仮に次の操作が入ったところで、片足上げた状態でいきなり次のモーションに切り替えることは無く、両足がそろったところで切り替えるわけで、結局はモーション動作側から見ないと切り替えていいかどうかの判断がつきません。
    って、うまく伝わりますでしょうか?

  14. 織田 より:

    どうもです。
    -引用開始-
    確かにモーションスタート、という使い方だけを考えるとイベントがふさわしい感じですが、
    中略
    片足上げた状態でいきなり次のモーションに切り替えることは無く、両足がそろったところで切り替えるわけで、結局はモーション動作側から見ないと切り替えていいかどうかの判断がつきません。
    -引用終了-
    イベントドリブンにしたのは考え方として、わかりやすいからです。ボタンからの動作のディスパッチャはバックグランドタスクとして実装されています。
    モーション側での判断はもちろん入っています。
    実行中のモーションの最小粒度の実行までブロックされるようになっています。これはフレームワークに記述されていますので、あまり意識しなくても良いようになっています。
    後はタスクの優先順位によって、現在実行中の動作(モーションに限らず)をキャンセルするかどうかって感じです。
    現在は優先順位のあるタスクはいれてありませんが、そのうち加速度センサの入力を利用した「起き上がりタスク」などを入れようと思っています。

  15. SiSO より:

    こんばんは!
    EZ-SERVOも届きましたので、がしっと気合入れてコード読ませていただきます。自分とはいろいろと思想が違うので楽しみです。ひょっとしたら新しい世界が待っているかも!なんてわくわくしています。
    ほんと、H8TINYの時は、隙間をどんどん使っていくような設計をせざるを得なかったので、いろいろと勉強になることが多そうです。

  16. 織田 より:

    こんにちは
     ワイヤレスのコントローラも使えるようになりました。ゲームテック製ですが、純正品とビットの出方が違います。PS2では両方使えるはずなので、俺のソフトがタコなんだとおもいますが、対症療法で切り抜けました。
    >EZ-SERVOも届きましたので、がしっと気合入れてコード読ませていただきます。
    >自分とはいろいろと思想が違うので楽しみです。
    >ひょっとしたら新しい世界が待っているかも!なんてわくわくしています。
    赤面の至りですが、よろしくお願いいたします。
    なんとか、良いものにしていきたいと思います。
    では

  17. SiSO より:

    EZ-SERVO、とりあえず動作確認までできました。
    ワイヤレスのコントローラでも、ロジクールは読めてもホリが読めなかったという方もあったみたいなので、タイムアウトとか信号タイミングの取り方がメーカーによって微妙に違うかもしれません。今度、ホリのやつを買って試してみようと思います。
    ぼちぼちっとやってきますので、よろしくお願いします。

Your Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

PAGE TOP ↑