Simulated Dashboard For A Simulated Race

Simulators might have lost their cool for a lot of gamers, but [Fergo] is trying for a comeback. He built an electronic dashboard for a car racing simulator.

[Fergo] spends most of his track time on iRacing, an MMO racing simulator. Possibly due to a little bit of influence from Formula 1 steering wheels, he wanted to add to his dashboard that included Microsoft racing wheel. The dashboard includes RPM lights, a gear indicator, five general buttons, a rotary encoder, and a pit limiter, rev limiter and low fuel indicators.

The build is powered a VB.NET app that connects the iRacing API to an Arduino. To get all those buttons and LEDs talking to the Arduino, [Fergo] used an IO expander that communicates over an I2C bus. It’s a surprisingly simple design that should scale well if [Fergo] ever decides to expand his cockpit. We’re not sure if it could handle controlling a 737, but it would be more than sufficient for a Cessna 172 or Mercury capsule.

Check out [Fergo] tearing around the track with his buttonbox dashboard after the break.

[youtube=http://www.youtube.com/watch?v=HZp3mMatO1w&w=470]

18 thoughts on “Simulated Dashboard For A Simulated Race

  1. buddy of mine took a Grand AM dash and made a duino drive all the gauges.

    Problem is all the racing sims are crap at giving real data, he had to simulate Temp, volts, etc based on throttle position and time racing.

    he wishes someone would write a real racing sim instead of the kids toy software out there.

  2. @Satiagraha You can do the same as some game “trainers” do. Disassemble the game and find out where interesting variables (acceleration, break etc..) are located in the stack. Then inject a loader into the game executable and use it as an external interface to the in-game variables.

    1. i dont know much about “injecting” code into an executable, but i do know (IN THEORY aka DOS) how to hack into running programs (IN THEORY aka DOS)
      and watch the memory change as its working…

      like in The Matrix, spit it out over a serial, scratch that, HIGH-SPEED port and onto a 2ndcomputer, maybe with an external IDE port
      http://eds.dyndns.org/~ircjunk/tutorials/elex/ata2isp/main.html

      you need to write software to analyse in real time the TOTAL memory used by the game

      as well as write software to “read”/”scrape” the GUIscreen/dashboard

      main problem it seems to me, would be one program accessing another program’s memory… in windoze… ugh. it would probably set off win’s “illegal instruction” or anti-virus…

      once u have written those two then write a script that monitors the scraped/OCR’d RPM and “spots” the concurrently-timed change of the value in memory, dont look for the same value, it could/would be stored differently, just look for a data that change AT THE SAME TIME as the RPM. might want to start by examining ONLY memory that doesnt change AT ALL while the RPM is idling but car moving… CAN I GET A NETURAL GEAR??? lol :)

      then all you have to do is tell the difference between the keyboard (reason car RPM going up) and the actual RPM (they change same time)

      one will be on\off and the other will vary over a range, 7 bits i think in my racing game:
      00 up to ” 64(6bit) < 79 < 128(7bit) "

      PS: the keyboard gas pedal might be only one bit, but the RPM will be at least a nibble(half-byte) maybe even a byte, mmm now im hungry

      PPS: and again, in dos i would have already done this, but in windoze… its not bad enough im hacking a program with the connotation of the word "hack" sounding bad and all, but the word "ILLEGAL-INSTRUCTION" have to make it sound so much more "UNDESIRABLE FOR SOCIETEY"
      -insert rage and anger here-
      -end of post-

      1. It’s perfectly possible in Windows without tripping antivirus, and even if it tripped antivirus you can make an exception.

        Also, using “Windoze” makes you come across like a 12 year old who fancies himself a unique snowflake.

    2. Yes this is a good approach. I’ve done it on a few games using C++ and you can access in-game variables directly from their memory address using things like int* accel = *(int*)0xDEADBEEF or whatever. Well it was years ago so the syntax is probably wrong lol anyway here is to get started:

      http://www.codeproject.com/Articles/4610/Three-Ways-to-Inject-Your-Code-into-Another-Proces

      I recommend the CreateRemoteThread + LoadLibrary method because you can put all your code in a nice DLL and access all the game’s memory good luck =)

  3. I have the old joystick-port style version of this controller. The force feedback works fantastically well – in Windows ’95/98.

    It works okay as a steering wheel in XP/Win7, but it seems there’s no support for the force-feedback for it anymore.

    Anyone have any ideas what I can do with it?

Leave a Reply to DocMAMECancel reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.