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

Arduino NanoとSG90サーボで作るDIY 2軸モーションレーシングシミュレータ

部品と材料

部品数量備考
Arduino Nano R31小型マイコンボード
SG90 マイクロサーボ2ピッチ・ロール軸駆動用

必要な工具

使用アプリ・オンラインサービス

プロジェクト概要

SimToolsは、Arduinoを含む複数のハードウェアインターフェースを制御できる汎用モーションシミュレータソフトウェアです。本プロジェクトでは、Arduino Nanoと安価なSG90マイクロサーボ2個のみで、2軸(ピッチ・ロール)の小型モーションプラットフォームを構築します。

動作原理

  1. シミュレーションゲーム(Live for Speed等)が車両の挙動データを出力
  2. SimToolsがゲームデータを取得し、シリアルポート経由でArduinoへ送信
  3. Arduinoが受信データを解析し、2つのサーボを駆動してプラットフォームを傾斜

これは実物大シミュレータの縮小版です。実用サイズにするには、モータドライバと大型サーボ/ステッピングモータが必要です。

Arduino NanoとSG90サーボで作るDIY 2軸モーションレーシングシミュレータ

Arduino NanoとSG90サーボで作るDIY 2軸モーションレーシングシミュレータ

SimTools設定

DIYシミュレータの豊富な事例・図面・ノウハウは xsimulator.net を参照。

Arduinoスケッチ(SimTools連携用)

元コードはEAOROBBIE氏(Robert Lindsay)作、aarondc氏がSimTools用に改変。パブリックドメイン。

主な仕様

完全スケッチ


//********************************************************************************************
// 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とSG90サーボで作るDIY 2軸モーションレーシングシミュレータ

Arduino NanoのD4/D5にサーボ信号線、VCC/GNDを共通電源(外部5V推奨)から供給。USBでPCと接続し、SimToolsからシリアル通信。

まとめ

わずかArduino NanoとSG90サーボ2個(総額数千円)で、PCレーシングシミュレータと連動する2軸モーションプラットフォームが作れます。SimToolsという強力なミドルウェアがゲームデータ抽出・プロトコル変換を担うため、Arduino側はシンプルなシリアルパースとサーボ制御のみで済みます。初めてモーションシミュレータを自作する方の入門に最適なプロジェクトです。本格化する際は、サーボを大型化し、モータドライバ経由で駆動電流を確保し、フレーム剛性を高めるのが次のステップになります。

製造プロセス

  1. Raspberry Pi用DIY赤外線モーションセンサー構築 - ステップバイステップガイド
  2. 自作LUMAZOID:Arduino音楽ビジュアライザーDIYガイド
  3. Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
  4. Arduino、Google Cardboard、Bluetoothで作るDIY VRスケートボード
  5. Arduino Nanoで作るスマートな動体検知水鉄砲
  6. DIY ArduinoラジオニクスEMR治療デバイスの構築
  7. Arduinoで作るポータブルRFIDドアロック - ステップバイステップガイド
  8. DIY 3軸CNCフライス盤:精密加工機を自作する
  9. Arduino NanoとGY-906で作る非接触赤外線温度計
  10. フライトシミュレーター用ラダーペダル自作ガイド:ステップバイステップDIY
  11. DIY Arduino身長測定デバイス:正確で簡単に作れる