工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ゲーム用カスタムArduinoジョイスティックハンドルの製作

部品と材料

部品数量
Arduino UNO1
ロータリーポテンショメーター(10kΩ)1
ブレッドボード1

必要な工具

使用ソフトウェア

プロジェクト概要

レーシングゲーム用のステアリングコントローラーをArduino UNOで自作しました。市販のハンコンは高価なため、ポテンショメーター1個でステアリング角を検出し、ArduinoをUSBジョイスティック(HIDデバイス)として認識させる方式を採用。SteamでXbox 360コントローラーとして認識させるためにx360ceを併用します。

Arduinoをジョイスティック化する手順

1. UnoJoyライブラリの導入

  1. 最新版のUnoJoyをダウンロード
  2. 同梱のInstallUnoJoyDrivers.batを実行してドライバーインストール
  3. Atmel FLIPツールをインストール(ファームウェア書き込み用)

2. ファームウェア書き込み(DFUモード)

  1. Arduino UNOのUSBコネクタ横、6ピンヘッダーの先端側2ピン(GNDとHWB)をショートさせてDFUモードに入る
  2. TurnIntoAJoystick.batを実行してジョイスティック用ファームウェアを書き込み
  3. Arduinoを再接続すると「USBジョイスティック」として認識される
  4. 元に戻す場合はTurnIntoAnArduino.batを実行

※ この操作は安全かつ可逆的ですが、自己責任で行ってください。

コントローラー回路

ゲーム用カスタムArduinoジョイスティックハンドルの製作

ポテンショメーターをアナログピンA0に接続(VCC-A0-GND)。UnoJoyライブラリのUnoJoy.hをスケッチフォルダにコピーしてインクルードします。

Steamで使用する設定

  1. x360ceをダウンロード(ゲームのビット数に合わせて32bit/64bit版)
  2. ゲームの実行ファイル(.exe)と同じフォルダにx360ce.exeをコピー
  3. x360ce.exeを実行し、USBジョイスティックをXbox 360コントローラーとしてマッピング
  4. Steamでゲームを起動すればハンコンとして認識

ソースコード

/* Arduino USB Joystick HID demo */
/* Author: Darran Hunt, Updated by RICLAMER 25/03/2014 */
/* UNO: 6軸13ボタン、MEGA: 8軸40ボタン対応 */

#undef DEBUG
#define NUM_BUTTONS 40
#define NUM_AXES 8

typedef struct joyReport_t {
  int16_t axis[NUM_AXES];
  uint8_t button[(NUM_BUTTONS + 7) / 8];
} joyReport_t;

joyReport_t joyReport;
uint8_t btn[12];
int fulloff = 0;

void setup() {
  for (int portId = 2; portId < 13; portId++) {
    pinMode(portId, INPUT_PULLUP);
  }
  Serial.begin(115200);
  delay(200);
  for (uint8_t ind = 0; ind < 8; ind++) joyReport.axis[ind] = ind * 1000;
  for (uint8_t ind = 0; ind < sizeof(joyReport.button); ind++) joyReport.button[ind] = 0;
}

void sendJoyReport(struct joyReport_t *report) {
  #ifndef DEBUG
    Serial.write((uint8_t *)report, sizeof(joyReport_t));
  #else
    // デバッグ出力省略
  #endif
}

void setButton(joyReport_t *joy, uint8_t button) {
  uint8_t index = button / 8;
  uint8_t bit = button - 8 * index;
  joy->button[index] |= 1 << bit;
}

void clearButton(joyReport_t *joy, uint8_t button) {
  uint8_t index = button / 8;
  uint8_t bit = button - 8 * index;
  joy->button[index] &= ~(1 << bit);
}

void loop() {
  // ボタン読み取り (Digital 2-13 → Button 17-28)
  for (int bt = 1; bt < 13; bt++) btn[bt] = digitalRead(bt + 1);
  for (int on = 1; on < 13; on++) {
    if (btn[on] == LOW) setButton(&joyReport, on + 16);
    if (btn[on] == HIGH) clearButton(&joyReport, on + 16);
  }

  // アナログ軸読み取り (A0のみ使用: ステアリング = X軸)
  for (uint8_t axis = 0; axis < 2; axis++) {
    joyReport.axis[axis] = map(analogRead(axis), 350, 700, -32768, 32767);
  }
  // 未使用軸は0固定
  joyReport.axis[2] = 0;
  joyReport.axis[3] = 0;
  joyReport.axis[4] = 0;
  joyReport.axis[5] = 0;
  joyReport.axis[6] = 0;
  joyReport.axis[7] = 0;

  sendJoyReport(&joyReport);
  delay(35);
}

CADデータ

レーザーカッター用の筐体設計ファイルです。

回路図

ゲーム用カスタムArduinoジョイスティックハンドルの製作

まとめ

低コストでレーシングハンコンを自作できるプロジェクトです。ポテンショメーター1つという最小構成ながら、UnoJoyとx360ceの組み合わせでSteamゲームで実用的に動作します。筐体設計を工夫すれば、ペダルやシフターの追加も可能です。ご質問や改善案があればYouTubeコメント欄やこちらまでお気軽にどうぞ。

製造プロセス

  1. Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
  2. 古いラジコンカーをXboxコントローラーで操作可能に - ArduinoとUSBホストシールドで実現
  3. Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
  4. Arduinoとジョイスティックでインタラクティブゲーム – LEDフィードバック付き
  5. ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
  6. Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
  7. DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
  8. 非接触温度スクリーニングゲート:Arduino MKR1000で迅速・高精度な検温
  9. Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
  10. ArduinoとTEA5767で作る高性能FMラジオ受信機
  11. Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き