Arduino NanoとSG90サーボで作るDIY 2軸モーションレーシングシミュレータ
部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | 小型マイコンボード |
| SG90 マイクロサーボ | 2 | ピッチ・ロール軸駆動用 |
必要な工具
- はんだごて(汎用)
使用アプリ・オンラインサービス
- Arduino IDE
- SimTools(モーションシミュレータソフトウェア)
- Live for Speed(レーシングシミュレータゲーム、デモ版で動作確認可能)
プロジェクト概要
SimToolsは、Arduinoを含む複数のハードウェアインターフェースを制御できる汎用モーションシミュレータソフトウェアです。本プロジェクトでは、Arduino Nanoと安価なSG90マイクロサーボ2個のみで、2軸(ピッチ・ロール)の小型モーションプラットフォームを構築します。
動作原理
- シミュレーションゲーム(Live for Speed等)が車両の挙動データを出力
- SimToolsがゲームデータを取得し、シリアルポート経由でArduinoへ送信
- Arduinoが受信データを解析し、2つのサーボを駆動してプラットフォームを傾斜
これは実物大シミュレータの縮小版です。実用サイズにするには、モータドライバと大型サーボ/ステッピングモータが必要です。


SimTools設定
- SimToolsはライセンス登録まで「デモモード」で動作
- Live for Speedプラグインはデモモードでも完全動作(LFSデモ版も利用可能)
- SimToolsダウンロード:xsimulator.net
- Live for Speedダウンロード:lfs.net
- ユーザーマニュアル:PDF
DIYシミュレータの豊富な事例・図面・ノウハウは xsimulator.net を参照。
Arduinoスケッチ(SimTools連携用)
元コードはEAOROBBIE氏(Robert Lindsay)作、aarondc氏がSimTools用に改変。パブリックドメイン。
主な仕様
- アクチュエータ2軸(Right='R', Left='L')
- ピン割当:D4(Right)、D5(Left)
- 角度スケーリング:Right 0→179°、Left 179→0°(逆相対称)
- シリアルプロトコル:アクチュエータ識別子(1文字)+ 3桁値(0-255)+ 区切り文字'~'
- ステートマシンでパース:識別子待ち→値読取→区切りで確定→サーボ更新
- 受信値0-255を
map()で各アクチュエータの角度範囲へ変換
完全スケッチ
//********************************************************************************************
// RC Model Servo for SimTools Motion Software
// Original by EAOROBBIE (Robert Lindsay), Modified by aarondc
//********************************************************************************************
#include
//#define DEBUG 1 // デバッグ出力有効化時はコメント解除
const int kActuatorCount = 2;
const char kActuatorName[kActuatorCount] = { 'R', 'L' };
const int kPins[kActuatorCount] = { 4, 5 };
const int kActuatorScale[kActuatorCount][2] = {
{ 0, 179 }, // Right
{ 179, 0 } // Left (反転)
};
const char kEOL = '~';
const int kMaxCharCount = 3;
Servo actuatorSet[kActuatorCount];
int actuatorPosition[kActuatorCount] = { 90, 90 };
int currentActuator;
int valueCharCount = 0;
enum TPortState { psReadActuator, psReadValue };
TPortState currentState = psReadActuator;
void setup() {
for (int i = 0; i < kActuatorCount; i++) actuatorSet[i].attach(kPins[i]);
for (int i = 0; i < kActuatorCount; i++) updateActuator(i);
Serial.begin(9600);
}
void loop() { /* serialEventで処理 */ }
void serialEvent() {
char tmpChar;
int tmpValue;
while (Serial.available()) {
if (currentState == psReadActuator) {
tmpChar = Serial.read();
#ifdef DEBUG
Serial.print("read in "); Serial.println(tmpChar);
#endif
for (int i = 0; i < kActuatorCount; i++) {
if (tmpChar == kActuatorName[i]) {
#ifdef DEBUG
Serial.print("which is actuator "); Serial.println(i);
#endif
currentActuator = i;
currentState = psReadValue;
actuatorPosition[currentActuator] = 0;
valueCharCount = 0;
break;
}
}
}
if (currentState == psReadValue) {
while ((valueCharCount < kMaxCharCount) && Serial.available()) {
tmpValue = Serial.read();
if (tmpValue != kEOL) {
tmpValue = tmpValue - 48; // ASCII to数値
if ((tmpValue < 0) || (tmpValue > 9)) tmpValue = 0;
actuatorPosition[currentActuator] = actuatorPosition[currentActuator] * 10 + tmpValue;
valueCharCount++;
} else break;
}
if (tmpValue == kEOL || valueCharCount == kMaxCharCount) {
#ifdef DEBUG
Serial.print("read in "); Serial.println(actuatorPosition[currentActuator]);
#endif
actuatorPosition[currentActuator] = map(actuatorPosition[currentActuator], 0, 255,
kActuatorScale[currentActuator][0],
kActuatorScale[currentActuator][1]);
#ifdef DEBUG
Serial.print("scaled to "); Serial.println(actuatorPosition[currentActuator]);
#endif
updateActuator(currentActuator);
currentState = psReadActuator;
}
}
}
}
void updateActuator(int thisActuator) {
actuatorSet[thisActuator].write(actuatorPosition[thisActuator]);
}
回路図

Arduino NanoのD4/D5にサーボ信号線、VCC/GNDを共通電源(外部5V推奨)から供給。USBでPCと接続し、SimToolsからシリアル通信。
まとめ
わずかArduino NanoとSG90サーボ2個(総額数千円)で、PCレーシングシミュレータと連動する2軸モーションプラットフォームが作れます。SimToolsという強力なミドルウェアがゲームデータ抽出・プロトコル変換を担うため、Arduino側はシンプルなシリアルパースとサーボ制御のみで済みます。初めてモーションシミュレータを自作する方の入門に最適なプロジェクトです。本格化する際は、サーボを大型化し、モータドライバ経由で駆動電流を確保し、フレーム剛性を高めるのが次のステップになります。
製造プロセス
- Raspberry Pi用DIY赤外線モーションセンサー構築 - ステップバイステップガイド
- 自作LUMAZOID:Arduino音楽ビジュアライザーDIYガイド
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- Arduino、Google Cardboard、Bluetoothで作るDIY VRスケートボード
- Arduino Nanoで作るスマートな動体検知水鉄砲
- DIY ArduinoラジオニクスEMR治療デバイスの構築
- Arduinoで作るポータブルRFIDドアロック - ステップバイステップガイド
- DIY 3軸CNCフライス盤:精密加工機を自作する
- Arduino NanoとGY-906で作る非接触赤外線温度計
- フライトシミュレーター用ラダーペダル自作ガイド:ステップバイステップDIY
- DIY Arduino身長測定デバイス:正確で簡単に作れる