VR 人気記事
まだデータがありません
はじめに:座ったまま、VR世界を自由に歩く
長時間VRをプレイしていると、どうしても座りたくなります。しかし、座ったままコントローラーで移動すると、没入感が削がれ、VR酔いの原因になることも。もし、座ったまま、手ぶらで、体重を少し動かすだけで自然に歩き回れたら…?
この記事では、そんな夢を叶える「着座重心移動インターフェース」の作り方を、電子工作の初歩から解説します。身近なオフィスチェアが、最高のVR歩行デバイスに生まれ変わります!
準備するもの
ハードウェア
- オフィスチェア: キャスター付きの一般的なものでOK。
- Arduino Leonardo または Arduino Micro: PCからゲームパッドとして認識させられる、頭脳となるマイコンボードです。(※Arduino Unoは不可)
- 感圧抵抗(FSR)センサー: 圧力を検知するセンサー。今回は4つ使います。(例: Square FSR, 1.5-inch)
- 抵抗 (10kΩ): 4つ。FSRセンサーの値を読み取るために使います。
- ブレッドボードとジャンパーワイヤー: はんだ付け不要で回路を組むための道具一式。
- USBケーブル: ArduinoをPCに接続するためのもの。
ソフトウェア
- Arduino IDE: 公式サイトから無料でダウンロードできます。
STEP1: 回路を組もう
まず、FSRセンサーの圧力変化をArduinoが読み取れるように、簡単な電気回路を組みます。FSRは圧力がかかると抵抗値が下がるセンサーなので、固定抵抗と組み合わせて「分圧回路」を作ります。
(ここに、FSRと10kΩ抵抗を使い、Arduinoの5V、GND、アナログ入力ピン(A0)に接続する簡単な回路図のイメージが入ります)
この回路を、4つのFSRセンサーそれぞれについて作り、Arduino LeonardoのA0, A1, A2, A3ピンに接続してください。
- A0: 背中用センサー
- A1: 腿(前傾)用センサー
- A2: 尻(左)用センサー
- A3: 尻(右)用センサー
STEP2: Arduinoのプログラミング環境を整える
- PCにArduino IDEをインストールし、起動します。
- メニューの「ツール > ボード」から「Arduino Leonardo」を選択します。
- 次に、Arduinoをゲームパッドとして機能させるためのライブラリをインストールします。メニューの「ツール > ライブラリを管理」を開き、検索ボックスに
Joystick
と入力します。Joystick by Matthew Heironimus
を見つけてインストールしてください。
STEP3: 重心を判定するコードを書こう
いよいよプログラミングです。以下のコードをArduino IDEにコピー&ペーストしてください。このコードは、椅子の圧力変化を検知し、仮想的なジョイスティックの入力に変換します。
#include <Joystick.h>
// Joystickライブラリを初期化
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD,
0, 0, // Button Count, Hat Switch Count
true, true, false, // X, Y, Z Axis
false, false, false, // Rx, Ry, Rz Axis
false, false, // Rudder, Throttle
false, false, false); // Accel, Brake, Steering
// センサーを接続したピン
const int PIN_BACK = A0; // 背中
const int PIN_FRONT = A1; // 腿(前傾)
const int PIN_LEFT = A2; // 尻(左)
const int PIN_RIGHT = A3; // 尻(右)
// 平常時のセンサー値(キャリブレーション用)
int base_back, base_front, base_left, base_right;
// 移動判定の閾値(この値は後で調整します)
const int THRESHOLD = 100;
void setup() {
// ジョイスティックを開始
Joystick.begin();
// 起動時に5秒間の平均値を平常値としてキャリブレーション
Serial.begin(9600);
Serial.println("キャリブレーション開始... 椅子に普通に座ってください");
long sum_back = 0, sum_front = 0, sum_left = 0, sum_right = 0;
for (int i = 0; i < 50; i++) {
sum_back += analogRead(PIN_BACK);
sum_front += analogRead(PIN_FRONT);
sum_left += analogRead(PIN_LEFT);
sum_right += analogRead(PIN_RIGHT);
delay(100);
}
base_back = sum_back / 50;
base_front = sum_front / 50;
base_left = sum_left / 50;
base_right = sum_right / 50;
Serial.println("キャリブレーション完了!");
}
void loop() {
// 現在のセンサー値を読み取る
int val_back = analogRead(PIN_BACK);
int val_front = analogRead(PIN_FRONT);
int val_left = analogRead(PIN_LEFT);
int val_right = analogRead(PIN_RIGHT);
// 平常時からの変化量を計算
int delta_back = val_back - base_back;
int delta_front = val_front - base_front;
int delta_left = val_left - base_left;
int delta_right = val_right - base_right;
// 前後移動の判定
if (delta_front > THRESHOLD && delta_back < -THRESHOLD/2) {
// 前傾姿勢 = 前進
Joystick.setYAxis(127);
} else if (delta_back > THRESHOLD) {
// 後傾姿勢 = 後退/ブレーキ
Joystick.setYAxis(-127);
} else {
// 中立
Joystick.setYAxis(0);
}
// 左右旋回の判定
int turn = delta_right - delta_left;
int mapped_turn = map(constrain(turn, -200, 200), -200, 200, -127, 127);
Joystick.setXAxis(mapped_turn);
delay(10);
}
STEP4: センサーを椅子に設置しよう
Arduinoにコードを書き込んだら、センサーを椅子に配置します。布テープや養生テープで、クッションの下やカバーの裏に貼り付けましょう。
- 背中用(A0): 寄りかかった時に一番圧力がかかる、背もたれの中央あたり。
- 腿用(A1): 前傾姿勢になった時に圧力がかかる、座面の先端中央。
- 尻用(A2, A3): 左右のお尻(坐骨)が当たる位置にそれぞれ配置。
STEP5: ゲームで動かしてみよう!
- ArduinoをUSBケーブルでPCに接続します。PCは自動的に新しいゲームコントローラーとして認識します。(Windowsなら「デバイス マネージャー」の「ヒューマン インターフェイス デバイス」で確認できます)
- SteamVR対応のゲームを起動し、移動設定を「スムーズ移動」「ジョイスティック/ゲームパッドでの移動」などに変更します。
- 椅子に座って体重を移動させてみましょう!前に傾けば前進、後ろに寄りかかれば後退、お尻を左右にずらせば旋回するはずです。
うまく動かない場合は、Arduino IDEの「シリアルモニタ」を開いてセンサー値の変化を確認し、コード内の THRESHOLD
の値を調整してみてください。
おわりに
お疲れ様でした!これであなただけの着座VR歩行デバイスが完成です。座ったまま、手ぶらで、直感的な体重移動だけでVR世界を散策する体験は、これまでのVRの常識を覆すほど快適で、没入感の高いものになるはずです。
ここからさらに、圧力の強さで移動速度を変えたり、特定の動作(例:素早くお尻を浮かせる)でジャンプしたりと、アイデア次第でカスタマイズは無限に広がります。ぜひ、あなただけの「VR歩行の極限」を追求してみてください!