DIY 2D Motion Racing Simulator
Componenten en benodigdheden
| × | 1 | ||||
| × | 2 |
Benodigde gereedschappen en machines
|
Apps en online services
|
Over dit project
SimTools is een generieke Motion Simulator-software die meerdere hardware-interfaces kan besturen, waaronder Arduino. Deze combinatie wordt gebruikt in het project dat in de video wordt gepresenteerd. Hardware-onderdeel bestaat alleen uit Arduino Nano-microcontroller en twee goedkope SG90 micro-servomotoren. We hoeven alleen de onderstaande code te uploaden.
De benodigde spelgegevens worden met behulp van de SimTools-software via de seriële poort naar de Arduino verzonden. Vervolgens activeert Arduino servomotoren die het simulatieplatform overeenkomstig bewegen. Dit is een kleine schaal van een twee-assige simulator. Om een echte simulator te maken, moet je motordrivers en grote servomotoren toevoegen.
Op de "https://www.xsimulator.net/"-pagina staan veel voorbeelden van dergelijke doe-het-zelf-simulators, evenals constructietekeningen en tips. De installatieprocedure van SimTools wordt beschreven in de video, maar u kunt ook de PDF-gebruikershandleiding downloaden op:https://simtools.us/wp-content/uploads/2019/06/SimToolsUserManual-v2.4.pdf
SimTools zal in "Demo"-modus werken totdat een geldige licentie is geregistreerd. De plug-in voor Live for Speed is volledig operationeel om te testen terwijl SimTools zich in de demo-modus bevindt. (De demo van Live for Speed werkt ook voor het testen van SimTools.) U kunt meer informatie vinden en Live for Speed downloaden op https://www.lfs.net/downloads
SimTools downloadlink:
https://www.xsimulator.net/community/marketplace/motion-simulation-software-simtools.63/
Code
- Code
CodeC/C++
//********************************************* **********************************************// RC Model Servo// Originele code Door EAROBBIE (Robert Lindsay)// Volledig verminkt door aarondc// Gratis te gebruiken voor Sim Tool Motion Software//******************** ********************************************** *********************#include//#define DEBUG 1 // commentaar op deze regel om debuggin Serial.print linesconst int kActuatorCount te verwijderen =2; // hoeveel actuatoren we verwerken// de letters ("namen") die door Sim Tools zijn verzonden om elke actuator te identificeren// NB:de volgorde van de letters hier bepaalt de volgorde van de resterende constanten kPins en kActuatorScaleconst char kActuatorName[kActuatorCount] ={ 'R', 'L' };const int kPins [kActuatorCount] ={4, 5}; // pinnen waaraan de actuators zijn bevestigdconst int kActuatorScale [kActuatorCount][2] ={ { 0, 179 } , // Right Actuator scaling { 179, 0 } // Linker actuator scaling }; const char kEOL ='~'; // End of Line - het scheidingsteken voor onze acutatorwaarden const int kMaxCharCount =3; // sommige verzekeringen...Servo actuatorSet[kActuatorCount]; // onze reeks Actuatorsint actuatorPosition [kActuatorCount] ={90, 90}; // huidige Actuatorposities, geïnitialiseerd op 90int huidigeActuator; // houd de huidige Actuator bij die wordt ingelezen van seriële portint valueCharCount =0; // hoeveel waardetekens hebben we gelezen (moet kleiner zijn dan kMaxCharCount!!// stel een aantal toestanden in voor onze statusmachine// psReadActuator =het volgende teken van de seriële poort vertelt ons de Actuator// psReadValue =volgende 3 tekens van de seriële poort vertelt ons de waardeenum TPortState {psReadActuator, psReadValue}; TPortState currentState =psReadActuator; void setup () {// bevestig de actuators aan de pinnen voor (int i =0; i 0).void serialEvent() { char tmpChar; int tmpValue; while (Serial.available()) { // if we wachten op een Actuator-naam, pak het hier als (currentState ==psReadActuator) { tmpChar =Serial.read(); // zoek naar onze actuator in de reeks actuatornamen die we hebben ingesteld #ifdef DEBUG Serial.print("inlezen"); Serieel.println(tmpChar); #endif for (int i =0; i 9)) tmpValue =0; actuatorPosition[currentActuator] =actuatorPosition[currentActuator] * 10 + tmpValue; waardeCharCount++; } anders breken; } // als we het waardescheidingsteken hebben gelezen, update dan de Actuator en ga op zoek naar de volgende Actuatornaam if (tmpValue ==kEOL || valueCharCount ==kMaxCharCount) {#ifdef DEBUG Serial.print("inlezen "); Serial.println (actuatorPositie [huidige Actuator]); #endif // schaal de nieuwe positie zodat de waarde tussen 0 en 179 ligt actuatorPosition[currentActuator] =map(actuatorPosition[currentActuator], 0, 255, kActuatorScale[currentActuator][0], kActuatorScale[currentActuator][1]);# ifdef DEBUG Serial.print("geschaald naar "); Serial.println (actuatorPositie [huidige Actuator]); #endif updateActuator(currentActuator); huidigeState =psReadActuator; } } }}// schrijf de huidige actuatorpositie naar de doorgegeven in Actuator void updateActuator (int thisActuator) { actuatorSet [thisActuator].write(actuatorPosition[thisActuator]);}
Schema's
Productieproces
- DIY infrarood bewegingssensorsysteem voor Raspberry Pi
- DIY LUMAZOID Arduino Music Visualiser
- DIY voltmeter met Arduino en smartphone
- DIY Virtual Reality Skateboard
- Bewegingssensor-waterpistool
- DIY Arduino RADIONICS-behandelingsmachine
- DIY-idee met RFID
- DIY 3-assige CNC VMC
- DIY Arduino + GY-906 Infraroodthermometer
- DIY Rudder Pedalen voor Flight Simulator
- DIY Arduino Hoogtemeetmachine