DIY2Dモーションレーシングシミュレーター
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 2 |
必要なツールとマシン
> ![]() |
|
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて
SimToolsは、Arduinoを含む複数のハードウェアインターフェイスを制御できる汎用モーションシミュレータソフトウェアです。この組み合わせは、ビデオで紹介されているプロジェクトで使用されています。ハードウェア部分は、ArduinoNanoマイクロコントローラーと2つの安価なSG90マイクロサーボモーターのみで構成されています。以下のコードをアップロードするだけです。
SimToolsソフトウェアを使用して必要なゲームデータは、シリアルポートを介してArduinoに送信されます。次に、Arduinoは、それに応じてシミュレーションプラットフォームを動かすサーボモーターをアクティブにします。これは、2軸シミュレータの小規模です。実際のシミュレーターを作成するには、モータードライバーと大型サーボモーターを追加する必要があります。
<図>
「https://www.xsimulator.net/」ページには、このようなDIYシミュレーターの例や、構造図やヒントが多数あります。 SimToolsのセットアップ手順はビデオで説明されていますが、PDFユーザーマニュアルはhttps://simtools.us/wp-content/uploads/2019/06/SimToolsUserManual-v2.4.pdf
からダウンロードすることもできます。 <図>
SimToolsは、有効なライセンスが登録されるまで「デモ」モードで実行されます。 Live for Speedのプラグインは、SimToolsがデモモードのときにテスト用に完全に機能します。 (Live for Speedのデモは、SimToolsのテストにも使用できます。)詳細については、https://www.lfs.net/downloads
でLiveforSpeedをダウンロードしてください。SimToolsダウンロードリンク:
https://www.xsimulator.net/community/marketplace/motion-simulation-software-simtools.63/
コード
- コード
コード C / C ++
// ********************************************* *********************************************** // RCモデルサーボ//元のコードEAOROBBIE(Robert Lindsay)による// aarondcによる完全なマングル// Sim Tool MotionSoftwareの無料使用// ******************** ************************************************** **********************#include//#define DEBUG 1 //この行をコメントアウトして、debuggin Serial.print linesconst intkActuatorCountを削除します=2; //処理しているアクチュエータの数//各アクチュエータを識別するためにSimToolsから送信される文字(「名前」)//注:ここでの文字の順序によって、残りの定数kPinsおよびkActuatorScaleconst char kActuatorName [kActuatorCount]の順序が決まります。 ={'R'、 'L'}; const int kPins [kActuatorCount] ={4、5}; //アクチュエータが接続されているピンconstint kActuatorScale [kActuatorCount] [2] ={{0、179}、//右側のアクチュエータのスケーリング{179、0} //左側のアクチュエータのスケーリング}; const char kEOL ='〜'; //行の終わり-acutator値の区切り文字constint kMaxCharCount =3; //いくつかの保険...サーボacturatorSet [kActuatorCount]; // ActuatorsintacturatorPositionの配列[kActuatorCount] ={90、90}; //現在のアクチュエータの位置。90intに初期化されていますcurrentActuator; //シリアルポートから読み込まれている現在のアクチュエータを追跡しますintvalueCharCount =0; //読み取った値の文字数(kMaxCharCount未満である必要があります!! //ステートマシンにいくつかの状態を設定します// psReadActuator =シリアルポートの次の文字はアクチュエータを示します// psReadValue =シリアルポートの次の3文字値を示しますTPortState {psReadActuator、psReadValue}; TPortState currentState =psReadActuator; void setup(){//アクチュエータをピンに接続します(int i =0; i 0).void serialEvent(){char tmpChar; int tmpValue; while(Serial.available()){// ifアクチュエータの名前を待っています。ここで取得しますif(currentState ==psReadActuator){tmpChar =Serial.re広告(); //設定したアクチュエータ名の配列でアクチュエータを探します#ifdefDEBUG Serial.print( "read in"); Serial.println(tmpChar); #endif for(int i =0; i 9))tmpValue =0;アクチュエータ位置[currentActuator] =アクチュエータ位置[currentActuator] * 10 + tmpValue; valueCharCount ++; } else break; } //値の区切り文字を読み取った場合は、アクチュエータを更新し、次のアクチュエータ名の検索を開始しますif(tmpValue ==kEOL || valueCharCount ==kMaxCharCount){#ifdef DEBUG Serial.print( "read in"); Serial.println(actuatorPosition [currentActuator]); #endif //値が0〜179になるように新しい位置をスケーリングしますactorPosition [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; }}}} //現在のアクチュエータの位置を渡されたアクチュエータに書き込みますvoidupdateActuator(int thisActuator){actuatorSet [thisActuator] .write(actuatorPosition [thisActuator]);}
回路図

製造プロセス