1. For downloading SimTools plugins you need a Download Package. Get it with virtual coins that you receive for forum activity or Buy Download Package - We have a zero Spam tolerance so read our forum rules first.

    Buy Now a Download Plan!
  2. Do not try to cheat our system and do not post an unnecessary amount of useless posts only to earn credits here. We have a zero spam tolerance policy and this will cause a ban of your user account. Otherwise we wish you a pleasant stay here! Read the forum rules
  3. We have a few rules which you need to read and accept before posting anything here! Following these rules will keep the forum clean and your stay pleasant. Do not follow these rules can lead to permanent exclusion from this website: Read the forum rules.
    Are you a company? Read our company rules

Showroom Adidyan's 2DOF cheap Simulator

Discussion in 'DIY Motion Simulator Projects' started by adidyan, Apr 10, 2021.

  1. adidyan

    adidyan New Member

    Joined:
    Nov 2, 2020
    Messages:
    3
    Balance:
    141Coins
    Ratings:
    +3 / 0 / -0
    My Motion Simulator:
    2DOF, DC motor, Arduino
    Hello everyone !

    This thread is to present my 2DOF simulator and explain how I built it ! The day I am writing this, the build is over, and what remains is the tuning and software settings.

    First, a picture of the finished rig !
    20210305_202231.jpg


    Quick background :
    I am a guy who loves building stuff and was looking for a new project. I discovered Sim racing a few months back and thought that building a dynamic simulator would make a great project !
    As I am a beginner in this area, I was not looking for the most realistic simulation possible. My goals were to build something fun for as cheap as possible.

    I spent some time getting information from various forums (I will link credits at the end of the post) and decided to build a seat-mover (easiest and cheapest solution)
    I did a quick Sketchup before starting but I did a lot of changes between that and the final build.
    Simrig_assy.png


    I don't like theory and too much planning, and I much prefer to do, and solve problems as they appear, so let's go !

    Base wood panel, with reinforcements :
    20201124_183643.jpg

    20201125_171059.jpg

    Support structure for the seat :
    20201126_183412.jpg

    Now for the universal joint, I chose to use 4 rose bearings with a piece of square (25x25 IIRC) section steel. The first try was not great :
    20201126_183423.jpg

    So I made another one, far much better !
    20201130_173627.jpg

    Now mounted on the rig :
    20201130_192552.jpg

    20201130_192609.jpg

    It took some adjustment to have movement with no friction, but after grinding the holes on the steel plates, I was able to have a nice movement that required almost no effort (important for the motors !)

    Now with the supports for the connecting rods :
    20201204_190806.jpg


    I then started to work with the motors.
    Here again, I wanted to stay on the cheap side, so I chose car wiper motors, that I bought on eBay for 45€ (in 2020, when buying things from the UK for France didn't have import tax, ha)

    Here is one of them :
    20201209_145334.jpg

    As wiper motors are not intended to work in both directions, I had to disassemble them to isolate one of the coils from the ground :

    Open with axis removed :
    20201209_145628.jpg

    Here is the PCB. We can clearly see that one of the mounting hole is mettalic and has no coating : that's the grounding
    20201209_145936.jpg

    I isolated the metallic circle on both sides of the PCB, with electrician tape. But after trying to assemble it again, the coil was still grounded. The reason was that the sides of the hole were plated too, and the screw made contact between the sides and the casing. So I replaced the screw with a nylon (plastic) screw :
    20201209_150526.jpg

    Now, the motors can work in both directions without having 12V on the casing !

    Next step : the motors need to be controlled and for that, we need to know their angular position. After some research it appeared that one way to do it is to drill into the axis of the motor, add a threaded rod that connects to a potentiometer.
    This was a tricky part because I do not own a vertical shop drill, and I had to be very careful to drill straight AND in the middle.

    Motor reductor opened :
    20201213_165410.jpg

    Protection to avoid metal shavings in the gears :
    20201213_165712.jpg

    On 1 motor, I was able to drill 10mm, but on the other, I broke the drilling bit and could not get it out....
    20201213_172858.jpg

    Too bad. I decided to let it like this and see.

    Cold-welding (not sure this is the term in English haha) with epoxy glue :
    20201216_195231.jpg


    Eventually, the most straight axle was in the motor with the broken drill bit. The reason is that as the hole was not very deep, I was able to adjust the leaning of the axle regularly when the epoxy was drying. On the other motor, the hole was deep (and not perfectly straight...) so the axle was a bit leaning. As always, I moved on and decided that it was good enough for now, and I would see during the trials if it was working or not.

    Some people connected the rod directly to the potentiometer, other used gears to improve the precision. I chose the latter. I used 3D printed gears that I found on another forum (linked at the end of this post). Here is the assembly on the rig !
    20201217_192724.jpg

    We can see the 2 gears, and the potentiometer (black component on the left). I chose a multiturn 10K potentiometer to avoid breaking it if the motor goes off-bounds (which it did during the settings... a lot)
    For the cam on the right side, I decided to torque it, as they say in professionnal shops : "a lot". It appears it is enough, I never had problems of the screw getting off.

    2 motors assembled, with the connecting rods to the moving platform :
    20201217_195456.jpg


    Now for the controls of the motors, I saw that a lot of people were using Sabertooth cards, which are probably great, reliable, easy to use... but far too expensive ! As always my cheap side said "let's use a cheap chinese card and if it doesn't work I'll reconsider"
    So I chose a MonsterMoto card that I had laying around from an older project. IIRC the card is 5-10€.

    Here is the beginning of the cable management : I used an old PC PSU connector to connect the potentiometers (+5V, GND, and 2 data pins) :
    20201222_201745.jpg

    Completely unrelated (but I do this post in chronological order [​IMG]) but I got a seat !
    50€ from leboncoin (French craigslist), decent enough condition
    20210106_194832.jpg 20210106_194904.jpg

    I kept the rails under the seat. I did use them to find the perfect position of the gravity center of the assembly "platform + seat + player", and left them in that position.

    Now, the pedals. I chose a Logitech G29 that was in sales during Black Friday.
    I wanted to build a system to adjust the pedals position. So I sawed a slot in the mounting platform, and put a screw through it :
    20210109_160824.jpg
    20210116_105816.jpg

    Now, the "racing support" for the steering wheel and TV... which is basically a homemade table :
    20210116_105745.jpg

    Not good looking, but it does the job.

    For the steering wheel, I used the same adjusting system as the pedals :
    20210116_105809.jpg
    It was a success for the pedals but not the steering wheel. It is difficult to install yourself in the seat wiht the table and the wheel the way they are.... Hmmm, let's say it is "realistic" because getting in and out of race cars is never easy !

    At this point I was able to start some trials !
    First issue : under load, the metal brackets that hold the motors bent a little bit, and sometimes, the gears that spin the potentiometers "missed" a tooth (a gap created between the gears). I tried a quick fix, which later appeared to be very effective : I added a rilsan strap around the motor, around the wood, and added a screw and a nut to be able to tighten or loosen the grip :
    20210116_105830.jpg
    20210116_105835.jpg

    20210116_105853.jpg



    Last change before I move it out of the garage and in the house : this thing is horrific to move, so I added wheels. 2 straight wheels, and 2 rotating wheels (with brakes):
    20210215_192330.jpg
    20210215_192335.jpg

    I will not move this thing often, so initially I thought about removing whe wheels once I moved it. But actually, I tried it with the wheelsand it is stable enough (the 2 front wheels are braked)

    And finally, the sim rig in the house, with the cable management as clean as I care to get it:
    20210305_202231.jpg

    Now, I am off to do the fine tuning on LFS [​IMG]
    The PC I use is my old gaming PC which is fine for the rig (i3 4130, 12GB RAM, and GTX 560). More than enough on LFS, and decent in Dirt Rallye 2.

    After a few trials, I did have some issues. After a while, the seat stopped moving with the game, but it was forcing the position back to 0. That meant that the Arduino and MonsterMoto worked fine, but the connection with the PC was lost.
    After investigation, I found the problem : After 10-15 min use, the MonsterMoto overheats and at that point, SimTools bugs and quits.
    I added a thermal sensor with thermal paste to follow the temperature rise during the use :
    20210410_135740.jpg

    When the thermal sensor shows 55°C (so the IC on the MonsterMoto is hotter), the bug occurs.
    The heat sinks I use are quite small (I got Raspberry Pi heatsinks on ebay for a few €). I will try to add a fan, and if that doesnt do, I will change the heatsinks for bigger one.


    I am aware I did not explain everything I did in the thread but do not hesitate to ask if you want to know more. Check the sources below, it is where I found valuable information, and inspiration.

    French sources :
    One example of simulator build :
    https://www.gamoover.net/Forums/index.php?topic=27617.0

    All the following forum contains a lot of good info. It is also where I found the 3D printed gears :
    https://pcshm-simulateurs-homemade.clicforum.com/index.php

    English sources :
    How to use the HP server PSU :
    https://www.xsimulator.net/community/threads/how-to-modify-a-server-power-supply-for-12v.5774/

    MonsterMoto tutorials :
    https://www.instructables.com/Monster-Motor-Shield-VNH2SP30/
    https://www.xsimulator.net/community/threads/arduino-code-for-4dof-and-1-dirpin-hbridge-board.4614/
    https://www.xsimulator.net/communit...-and-2-pins-direction-hbridge-motomonster.67/
    • Like Like x 1
    • Informative Informative x 1
    Last edited by a moderator: Apr 10, 2021
  2. Ads Master

    Ads Master

    Balance:
    Coins
    Ratings:
    +0 / 0 / -0
  3. adidyan

    adidyan New Member

    Joined:
    Nov 2, 2020
    Messages:
    3
    Balance:
    141Coins
    Ratings:
    +3 / 0 / -0
    My Motion Simulator:
    2DOF, DC motor, Arduino
    I received a free DIY license for this Simulator, thank you so much :)
    I am happy I am able to use SimTools, which use is very easy !

    I was trying a few different settings on my Arduino code, to manage the movements of the motors, and I ended with this configuration :

    Code:
    int brakingDistance=30; //How much distance before the Arduino stops sending the signal to turn the motor. Due to inertia while moving
    int Tol=35; //Tolerance : If the position is within desired position +/- tolerance, motor doesn't move
    #define pwmMax 255 // Max Speed of motor (real speed is then multiplied by one of the 4 values below)
    #define pwmMaxSpeed 255 // Speed when position is far from desired
    #define pwmHiSpeed 235 //Speed when position is not very close from desired
    #define pwmMiSpeed 210 //Speed when position is close from desired
    #define pwmLoSpeed 150 //Speed when position is very close from desired
    const int potMini=150; //Minimal value for potentiometers (not 0, to avoid getting off-range)
    const int potMaxi=850; //Maximum value for potentiometers (not 1023, to avoid getting off-range)
    int DataValueL=500; //Middle position for Left
    int DataValueR=500; //Middle position for Right
    I will continue to play around with the tolerance, speeds, mini and max values, to see if I can improve a bit the simulation