前回、Playstation Classicにつないだプレイステーションコントローラーの振動機能を使えるようにしました。そうなると今度は、Nintendo64のコントローラーの振動機能が気になってきました。
N64の振動機能はコントローラーに振動パックという周辺機を装着することで機能するようになっています。プレイステーションコントローラーのように簡単には制御出来ないかもしれませんが、せっかくなので利用したいものです。
N64コントローラーと振動パックはどちらも昔ハードオフで購入しました。でもNintendo64本体は持っていないので、振動パックは一度も動かしたことはありません。
振動パックのコントロール方法は見当も付きませんが、N64コントローラーをArduinoで利用するためのスケッチは世の中に出回っています。かなり昔にこのスケッチを利用してN64コントローラーをPro Microにつなげたことがあるので、まずはスケッチを確認して振動方法を探りました。しかし、振動パックの処理ルーチンらしきものは見つかりません。
そこで、ネットで調べてみると海外のサイトに情報がありました。振動パックのようにコントローラーに装着するメモリパックがあり、そこにデータを書き込む時のコマンドを利用するようです。振動パックに対して書き込み先アドレスを特定の値にして、振動ONまたはOFFの数値を書き込んで制御するようです。
早速、スケッチを書き換えて試してみましたが動きません。複数のサイトで確認したので制御のコマンドは間違っていないはずです。ネットで配布されてるスケッチは多少の違いはあっても、全てほぼ一緒のものだったのでスケッチに問題はないと思うのですが。
振動パックを直接制御しているスケッチが全く見つからないのも気になります。でも、ドリームキャストのコントローラーをN64コントローラーに見せかけてNintendo64につなげるためのスケッチはあって、ここにNintendo64本体からの振動コマンドを受け付けるルーチンがありました。そこでこれを参考にしてスケッチを書き換えてみたのですが、それでも振動しませんでした。
Nintendo64本体がないので、振動パックが壊れているのか、スケッチに問題があるのかさっぱり分かりません。そこで振動パックを分解しモーターを取り外して乾電池(振動パックは乾電池が2本必要)につないでみると、ちゃんと動きました。モーターの問題ではないようです。しかし、これ以上は何も出来す完全にお手上げ状態です。
もうどうしようもないので、振動パックの制御はあきらめました。そのかわり自前で回路をつくってモーターを動かすことにしました。ネットで調べてみると振動パックのモーターは使用電圧が2.0~4.5V、電流は60~120mAとのことでした。Pro MicroのATmega32U4は最大消費電流が200mA(通常は50mAくらいか?)なので、モーターに直に100mA前後の電流を供給するのは負担ですし、モーターの突入電流も危険です。なので振動パックと同様に乾電池3Vを外部電源にして、トランジスタでスイッチングすることにしました。
トランジスタは手持ちの2SC1815(GR)を使い、モーターには100mAの電流を流すことにしました。トランジスタのコレクタ損失が400mWなので、25℃で3Vのとき133mAまで流せますが、安全のため普通はこの半分くらいの電流に収まるように設計するそうです。そうなると100mAは流しすぎですが、コントローラーの振動機能はモーターが常に回っているわけではないので多分大丈夫でしょう。
それと2SC1815はGRなので直流電流増幅率を200と仮定しましたが、コレクタ電流が100mAくらいになると増幅率がかなり下がるので、増幅率を半分に見積もってベース電流は1mAとしました。使用するPro Microが3.3V動作なのでベースの抵抗は2.3kΩとなります。そこで、手持ちの抵抗で一番近い2kΩを使うことにしました。
これらを踏まえて作成した回路は次のようになります。
ダイオード(1N4148を使用)はモーターの逆起電圧を逃がすのに必要です。乾電池からの20Ωは電流が流れすぎないように一応入れておきました。
部品点数が少ないので、パターンをカットして回路を作るこの基板を使ってみました。線をはんだ付けしないですんだので、小さくスッキリ仕上がりました。
電源近くの20Ωは金属皮膜抵抗1W10Ω✕2にしました。ずいぶん前に秋月電子で購入したもので、本当は誤差±1なのにカラーコードが誤差±5と間違っている訳あり品です。100本100円でした。
続いて振動パックの方ですが、基板は取り除いてモーターだけ残します。モーターの電源の線はコントローラー取扱時にじゃまにならないようにしました。
最後に電池とモーターを基板に接続して、トランジスタのベースと回路のGNDをPro Microにつなぎます。
ハードウェアは以上で完成です。
次にモーターの動作テストを行いますが、長くなったのでまた次回に。
最新の画像[もっと見る]
- ラスベリーパイのベアメタル環境でLVGLを使う 6日前
- ラスベリーパイのベアメタル環境でLVGLを使う 6日前
- ラスベリーパイのベアメタル環境でLVGLを使う 6日前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
※コメント投稿者のブログIDはブログ作成者のみに通知されます