Easy DIY wind simulator for Assetto Corsa

Do you want to feel the wind blowing when you drive your open wheeler in Assetto Corsa? Now you can!

In short: ACFan sends speed of car in AC to Arduino Uno R3, which controls PWM fan(s). No PWM whine. Hardly any CPU load.

Scythe GlideStream 120 PWM SC (silent)

Delta AFB1212SH fans (more wind, noisier)

Sanyo San Ace 120 9SG1212P1G03 (only one fan, loud!)
I needed to clamp the fan to the desk or it would fly away :laugh:.
Don't mind the driving, I'm not used to an Xbox controller.

Thermalright TY 143 140 mm fans (no video)
Dsc01897.jpg

(pen for size)

I would like to present my little project: a wind simulator for Assetto Corsa. Most wind simulators use an Arduino combined with a separate motor controller, which can be expensive if you use larger fans. My project also uses an Arduino, but with standard PWM PC case fans. A PWM fan has a motor controller built into the fan. The Arduino just sends a PWM signal to the fan and this will control the speed of the fan. This way there are less parts needed and the project is kept simple.

Credits
It’s not an original idea of me, I just combined two ideas: using an Arduino to control a PWM fan and using an existing interface between Assetto Corsa and the Arduino. There is no PWM whine coming from the fan because a 25 KHz PWM signal is used.

I would like to thank afremont for his PWM logic, see https://forum.arduino.cc/index.php?topic=155089.45

I would like to thank mongo56 for his ‘ACFan’ executable and source code, see https://www.reddit.com/r/oculus/comments/2b8d3m/assetto_corsa_fan_control/

ACFan
The program ACFan is the interface between Assetto Corsa and an Arduino. ACFan reads the shared memory of AC: the speed of the car and the steering input. When the car is idle, it sends value 30 to the Arduino. As soon as the cars starts rolling, it sends between 61 and 100 to the Arduino, depending on the speed of the car. ACFan also varies the values a bit when you are steering to simulate wind direction changes.

Arduino
I have modified the sketch (program) mongo56 made for the Arduino, it now uses PWM to control the speed of the fan. It has a startup sequence built in which speeds up the fan in a few seconds so you know the Arduino is doing its job. After that it continuously translates the values sent by ACFan to a usable PWM value, between 0 and 79.
Remark: when there is no PWM signal sent to the fan, it will run at top speed.

Fans to use
Most fans cannot stop completely, even with a PWM signal at zero. The Scythe GlideStream 120 PWM SC fans I chose have a speed of 300 to 1500 RPM. This means there will always be some wind blowing when the car stops (= 300 RPM). At best you can use fans with a broad RPM range: a low minimum and high maximum RPM value. This way the fan will produce a higher wind speed difference at high and low car speed.
The Delta and Sanyo have a minimum RPM of 0. The Thermalright fans have a 600 RPM minimum, but you can hardly feel anything at this speed (so no problem).
The Sanyo fan will only start after reaching a higher minimum PWM threshold, but still has a fairly low minimum RPM.

You need as much air flow as you can get, this is the CFM (Cubic Feet per Minute) value of the fan: a higher CFM value means more air flow. The Scythe fan produces 85 CFM, the Delta AFB1212SH fan produces 113 CFM and the Thermalright TY 143 fan produces 130 CFM. There are PWM fans which can produce 260 CFM like the Sanyo San Ace 120 9SG1212P1G03, but they produce a lot of noise! Check the dB value of the fan to see how much noise it produces: 29.5 dB for the Scythe fan, 45 dB for the Thermalright TY 143 fan, 46.5 dB for the Delta fan and a whopping 64 dB for the Sanyo fan (that’s LOUD, see video above). A small fan with a high RPM value will also make a lot of noise. A larger fan is recommended: lower noise and a wider air flow (but see the addendum below).
My current recommendation is to use the Thermalright TY 143 140 mm fans: more wind (130 CFM), not too loud (45 dB).

Power
A high CFM fan needs more power. The Scythe fan I chose draws 0.22 Amps at 12V. If you use two of them you need a 12V power adapter which can deliver at least 0.5 Amps (0.22 x 2).
Power supply.jpg

The Delta AFB1212SH fan draws 0.83 Amps maximum, if you use two of them you need a 2 Amps power adapter (0.83 x 2).
The Thermalright TY 143 fans draw 0.6 Amps each, so 1.2 Amps if you use two of them.
The 260 CFM Sanyo fan I mentioned draws 4 Amps, so if you use that one you need a much bigger power adapter: 4 Amps or 8 Amps if you use two fans (but then the neighbors will complain about the noise :D).

To avoid damaging the Arduino the power to the fans in my project is connected directly to the power adapter, it is not running through the Arduino. The Arduino is only controlling the speed.

More fans
You can use as much fans as you want: by connecting the PWM signal from the Arduino to each fan the speed will be controlled of all fans. Do check if you need a bigger power adapter.

I’m using two fans as shown in this picture:
Two fans.jpg


The fans are tie wrapped together with a piece of tube in the middle, so you can angle the fans a bit inward.

What do you need?
I have added the price I paid for it.
  • Arduino Uno R3 (clone), 13 euro
  • Arduino Uno frame (mini case) is recommended, 5 euro
  • USB cable type B, 0.50 euro
  • 12V power adapter of at least 0.5A (2A recommended), 5 euro
  • Multicolored Dupont wires (a kit of male / male, male / female, female / female is handy), about 6 euro
  • Two Scythe GlideStream 120 PWM SC (SY1225HB12MS-RKP) fans (or just one), 8.79 euro each
    or
    two Delta AFB1212SH fans (eBay), about 10 euro each
    or
    two Thermalright TY 143 fans, 13.43 euro each.
    I do not recommend the Sanyo fans: too loud.
  • 3 pin tumbler switch, 0.75 euro. Alternative: use a power socket with a switch in which you plug the adapter
  • 4-pin PWM fan splitter cable (Y-cable) if you use more than one fan: build it yourself or buy this one
  • Pin header, 0.25 euro
Total costs: 48.09 euro (50.51 euro when Delta fans are used, 57.36 euro when Thermalright fans are used). Shipping costs excluded.

Programming
  • Download the Arduino IDE (programming environment) at https://www.arduino.cc/en/Main/Software and install it.
  • Connect the Arduino to your PC using the USB cable.
  • Check Windows’ device manager to see which COM port the Arduino is using.
Start the Arduino IDE and
  • click on Tools – Board and select Arduino Uno
  • click on Tools – Port and select the COM port you found in the device manager
  • click on Tools – Programmer and select USBasp
Delete all shown source code in the IDE (all text) and paste my sketch into the IDE:
Code:
// Arduino UNO sketch
// Insert Coin
// Version 1.0: April 1, 2017
// Version 1.1: May 26, 2018
//
// Thanks to afremont for his PWM logic,
// see https://forum.arduino.cc/index.php?topic=155089.45
//
// Thanks to mongo56 for his idea ACFan and source code,
// see https://www.reddit.com/r/oculus/comments/2b8d3m/assetto_corsa_fan_control/
//
// Version 1.1: higher minimum speed of the fans while driving slowly
// Maximum speed of the fans now set at 250 km/h
//

String incomingValue;
int myval;
unsigned int x;

const int PWMPin = 3;

void setup() {
  myval = 0;
  Serial.begin(9600);
 
  // generate 25kHz PWM pulse rate on Pin 3
  pinMode(PWMPin, OUTPUT);   // OCR2B sets duty cycle
  // Set up Fast PWM on Pin 3
  TCCR2A = 0x23;     // COM2B1, WGM21, WGM20
  // Set prescaler  
  TCCR2B = 0x0A;   // WGM21, Prescaler = /8
  // Set TOP and initialize duty cycle to zero(0)
  OCR2A = 79;    // TOP DO NOT CHANGE, SETS PWM PULSE RATE

  // start-up sequence: let the user know we are working OK
  // start fan at lowest speed
  OCR2B = 0;   // duty cycle for Pin 3 (0-79) generates 1 500nS pulse even when 0 :(
  // wait for the fan to power down
  delay(1000);
  // ramp up fan speed by increasing duty cycle every 50mS, takes 4 seconds
  for(x = 0; x < 80; x++) {
    OCR2B = x;    // set duty cycle
    delay(50);
  }  

  // wait a bit
  delay(3000);
  // set fan to lowest speed
  OCR2B = 40;   // duty cycle for Pin 3 (0-79) generates 1 500nS pulse even when 0 :(
}

void loop() {

  // waiting for data coming from ACFan.exe
  // which retrieves the speed from Assetto Corsa,
  // converts it to a string and sends it to the Arduino
  if(Serial.available() > 0)
  {
    char ch = Serial.read();
    // check for new line and add the char if it isn't
    if (ch != 10){
      incomingValue += ch;
    }
    else
    {
      // Serial.println(incomingString);
      int val = incomingValue.toInt();
     
      // Text copied from ACFan.cpp:
      // ESC value between 30 and 180 (30 = initial startup)
      // adjust this to fit your ESC/motor and liking
      // 61 was the value my motor started running
      // 350 was my max speed in Assetto Corsa (in kmh)
      // 50 was an arbitary multiplier to normalise the output values between ~61-100
      // also added a bit of variance with steerAngle so that when you turn in you get a little less "wind"
     
      if (val > -1 && val < 181)
      {

       // Version 1.1, another approach: about 30% low speed boost
       if (val < 63)
       {
        myval = 0;  // fans to 0% when the car isn't moving
       }
       else {
        myval = (val - 35) * 1.25;
        // To get a variance between 0 and 79 instead of 61 and 100.
        // 1.25 = max speed around 250 km/h, decrease this value for faster cars.
        // Higher minimum speed of the fans.
       }
       
       // check if out of bounds
       if (myval < 0) {
        myval = 0;
       }
       if (myval > 79) {
        myval = 79;
       }


       // set the fan speed (duty cycle)
       OCR2B = myval;
      }
      // clear the input string that came from ACFan
      incomingValue = "";
    }
  }

}

Click on the icon with the arrow pointing right, this will compile the sketch and send it to the Arduino. If there are no errors shown in red you can now close the IDE.

Connecting the fans
Connect the power adapter and the fans like this:

Schema.jpg


Dsc01412.jpg


Dsc01415.jpg


Dsc01414.jpg


Dsc01413.jpg




Pin 3 of the Arduino is connected to the PWM pin of the fan (the orange wire on the fan).
The GND of the power adapter is connected to the GND of the Arduino and the black wire of the fan.
The + of the power adapter is connected to the red wire of the fan. A switch in this wire is handy to power off the fans after racing.
My son (thanks man!) did all the soldering and made a Y-cable which splits the power and PWM signal to both fans, but you can buy a ready made.

Dsc01419.jpg


Testing the hardware
Plug in the power adapter and switch it on. The fans should start running.
Press the reset button on the Arduino, this will initiate the startup sequence: the fans will run faster and faster and drop to the lowest speed in about 4 seconds time.

Connecting to Assetto Corsa
Download the program ACFan.exe which you can find in the binary folder here: https://drive.google.com/drive/folders/0B-23DIE-A8sUYXowYTlXXzBpR00
Save ACFan.exe in a folder, for example in C:\AC.
Create a shortcut to C:\AC\ACFan.exe on your desktop.
Right click the shortcut, go to Properties and add the COM port to the target, for example “C:\AC\ACFan.exe” com5 and click on OK.
Start Assetto Corsa and start a practice run. Tip: keep Assetto Corsa running in a small window so you can see the game and the output ACFan at the same time. While driving you should see numbers between 61 and 100; 30 when your car doesn’t move.
The fans should blow accordingly.
Note: when you run the game as administrator, you may need to run ACFan as administrator as well.

Addendum: airflow straightener
It is a good idea to mount an airflow straightener to the fans. As the name implies the airflow will be straightened ('combed', 'directed') when it leaves the fan. This results in a 20 - 25% higher airflow and the wind doesn't 'flutter' around. You really can feel the difference with and without it. Highly recommended.

I was looking for a ready made airflow straightener, but couldn't find one, so I built one myself. What you need: thick straws, super glue, scissors and some tape.
I bought 200 1.1 cm STANNY straws at Jysk.
I cut all yellow straws into 3 cm pieces. For a 140 mm fan you need 133 pieces, so that's 266 for two fans. Glue the pieces together with super glue so you get a nice 'pancake'. Let them dry for at least 48 hours or you will get a headache from the glue when the fans are blowing in your face!
Tape the 'pancakes' to the fan with sealing tape for cardboard boxes.

The result looks like this (yes, I'm driving in VR only):
Dsc01913.jpg


The flexible gooseneck and clip is a Bresser BR-12 (40 cm).

More photos in the comments below as I cannot post more in this article.

I hope you will be blown away :D. Let me know what you think. Feel free to ask.

Insert Coin
 
Last edited:
I also have two Thermalright TY 143 140 mm fans, one placed either side of my wheel, held in place by heavy duty velcro, but controlled by a board from Symprojects, based in Cambridge, UK. https://www.symprojects.com/categor...her-controllers-fan-controller/fan-controller. This can take up to 4 fans. Together with the SimDash software, it works in most racing sims, and you can adjust the min and max of the fan speed to different cars, with saved profiles. I am currently using in Assetto Corsa, DiRT Rally and Project Cars 2.

As with Insert Coin's system, great for adding a bit of immersion (although I am rarely very aware of the fan when racing) and, more importantly, keeping you cool.

I like the idea of the straws (although not sure about the colour).

@Mr Latte my friend, I'm not convinced there is a need for directional flow control. In an open wheel car, the main air stream will be coming from the front of the car, which is always directly in front of the driver. In a closed cockpit car, the airflow will be coming from the vents, which will also always be in the same position, usually in front of the driver.

Your likely right and not much need or limitations to what can be done here.
I was just playing with ideas but more thinking on an open cockpit based car, if such had ever been tried with stereo wind channels. You guys using or having already experimented with such know from experience more what/how it performs. So thanks for the responses.

Example Scenario
Catching a car in front at increasing speed down a long straight, pulling in behind it from the right to then draft that car temporarily and then overtake it on the right hand side.


What your saying is we cannot have a right then left cut off for the airflow, to then when behind the car have reduced or no airflow. Then as pulling out to overtake that car have airflow on the right then left again.

I presume the airflow is based on "car speed" like "wind noise" in Simvibe and we cannot even implement drafting?
 
Upvote 0
Thanks @Insert Coin I hadn't realised you'd posted this guide up here too!

I've gone for your approach hook line and sinker including the Thermalright fans, it's all arriving over the next couple of days. I'm new to the Arduino but not to programming so might have a tinker seen as your guide also links to source code for everything.

I've also bought the £30 Sim projects board just because it's simple and easy to use. I'll solder one of the splitter cables to the Arduino so I can keep the plug on the end of the fans and just switch between the Ardiono and Sim projects board.

Thanks again for posting the guide. It's very easy to follow.
 
Upvote 0
Version 1.1 of the Arduino code uploaded in the OP. Now with a higher minimum speed of the fan (and a flatter fan curve), but still 0% fan speed when the car doesn't move:
if (val < 63)
{
myval = 0; // fans to 0% when the car isn't moving
}
else {
myval = (val - 35) * 1.25;
// To get a variance between 0 and 79 instead of 61 and 100.
// 1.25 = max speed around 250 km/h, decrease this value for faster cars.
// Higher minimum speed of the fans.
}
Higher minimum, flatter curve.png

This provides more wind at low speed of the car. Fans operate at 100% at 250 km/h.
 
Last edited:
Upvote 0
I've been working on the Windows side of things.

I'm trying to have it just kind of run itself and look after things while I'm in VR, although there are settings you can change if you want.

The basic idea is it keeps a track of the highest speed recorded by any car and uses that as a base calculation with the highest speed of the current car to send relative values to the Arduino.

The net result is it will adapt to whatever car you're using so that you always get the full range of the fans in the range of speed specific to the car.

I'll keep testing and post something once I'm confident it's working.
 
Upvote 0
Please add a 'fixed / manual' setting as well. I'm driving cars that reach 300 km/h or more, but have the fans reach 100% already at 250 km/h. That's my preference, because often you drive 300 km/h or faster for just a very short time. I like to have more wind at lower speeds.
 
Upvote 0
Here's an idea of where it's at.
fans.jpg


The 'highest top speed' box contains the highest speed recorded for any car while the app has been running.

The 'Speed' on the left is current speed of the car, high is the highest speed recorded in this session.

The 'Mx' box over on the right is a multiplier which is given a default value of 1. The multiplier is stored per car, so each car has its own mx value.

Send value is the PWN value currently being sent to the fans, high is the highest value sent this session.

So the calculation for the PWM value is currently

fanSpeed = ((int)((speed / highSpeed) * 79 - (3 * Math.Abs(steerAngle)))*mx);

So current speed / highest speed recorded for this car in this session * 79 (the max PWM value) with the steering variance, then * the multiplier.

I wanted all the values to be dynamic so they could be changed wither manually or automatically.

The app will automatically calculate a suggested multiplier that will result in fans blowing on full when the car reaches its top speed. This can be set to automatically apply itself after a lap or two, to allow a decent top speed to be recorded.

In the screenshot above the multiplier hasn't been applied so the highest value sent to the Arduino is not the max PWM value.

I've only been testing this with touring cars really so far so the highest recorded speed is comparatively low.

The Arduino script is relatively simple now, just receive the value and apply it.

I'll keep testing.
 
Upvote 0
PS - Liked your idea about boosting the lower range.

I think they way I'd look at doing that is make that 79 max PWM value dynamic and accessible on the form. If you change that to, say 59 and add the difference between 79 and 59 on to the final value that should have the effect of reducing the range of values available, boosting the lower end in a similar fashion to your graph.

(That bit is in my head, I haven't actually tried it yet - it may be way out - maths isn't my strong suit!)
 
Upvote 0
Following with interest but what is the best way to have it
Each car max out the actual fans used or each cars speed relate to fan output %?

If car A B C do 100 150 and 200 mph respectively. Should all have the same max rpm from the fan(s) with each of their own top speeds?

Or to have it, that car A will only be able to achieve 50% of actual wind factor from the fan(s) of car C and 75% of car B?

Id like to hear more on this from tests as having a max wind factor applied @150mph may suit a lot of cars and speeds over this have no increase to the flow.

If you can you treat this in a way that another fan (set/group) kicks in at a specific speed or % of max velocity? For example the 130-150mph range, will relate to a lot of cars and then potentially extend the felt wind flow with primary fans that are already then maxed at the 150mph but for these additional "boost fans" operate right upto the cars own max velocity eg 220 mph.

I dont know if any of the current solutions work in this way using a secondary set of fans for additional boost or specifically positioned for additional immersion? Just seeking thoughts on creativity or possibilities.
 
Last edited:
Upvote 0
The mindset I'm in are my fans are way underpowered. Most will be. Even at full whack they represent a very small percentage of the amount of wind you'd really feel if you were really in that car, really on that track.

So my preference is to adapt for each car for each track, so that for any given car, for any given track, the max speed at the end of the longest straight will produce the maximum fan power.

That's the way I've set it up to behave automatically, but all the values can be set to non-dynamic and changed in the app, and saved per car, so hopefully it'll suit most requirements.
 
Upvote 0
The most powerful PWM fans I have seen (listed) are these with 3000RPM and 158.2 CFM
Comparisons here User tests or comparisons of these with the current recommended choice would be interesting.

Is it possible with such software creation to incorporate a secondary pair of fans?
I ask as I tested in Simvibe quite some time ago with engine speed/effects and when we have the Hz range on one particular set of units being maxed, it was possible to use a secondary model (via EM channel) to then come in (at set speed %) continuing but it starting with its own additional energy. This extended the tactile sensation. The question is can we try or apply this as effectively with fans/wind?

Surely we can extend the felt wind energy by applying a second set of fans?
Yet I ask as who has experimented with such in such method?
Fan hubs are not expensive neither but I am curious to the potential what may be possible over just using 1 or 2 fans and improved or more wind factor?
 
Last edited:
Upvote 0
The most powerful PWM fans I have seen (listed) are these with 3000RPM and 158.2 CFM
Comparisons here User tests or comparisons of these with the current recommended choice would be interesting.

Is it possible with such software creation to incorporate a secondary pair of fans?
Please read my project page. There are much more powerful PWM fans available (260 CFM), but they make a LOT of noise. You can put more fans in parallel for more wind if you want.
 
Upvote 0
PS - Liked your idea about boosting the lower range.

I think they way I'd look at doing that is make that 79 max PWM value dynamic and accessible on the form. If you change that to, say 59 and add the difference between 79 and 59 on to the final value that should have the effect of reducing the range of values available, boosting the lower end in a similar fashion to your graph.

(That bit is in my head, I haven't actually tried it yet - it may be way out - maths isn't my strong suit!)
I'm terrible at maths too :p. Should work, but I think you'll get spinning fans when standing still. Maybe use my formula & if-construction when your solution doesn't work?
 
Upvote 0
Please read my project page. There are much more powerful PWM fans available (260 CFM), but they make a LOT of noise. You can put more fans in parallel for more wind if you want.

Sorry, the idea I was querying was with using more fans with lower or reasonable noise but potentially maximizing the airflow.
 
Upvote 0
Sorry, the idea I was querying was with using more fans with lower or reasonable noise but potentially maximizing the airflow.
You can connect 10 or more fans if you want, as long the power supply can deliver the required Amps. But I think 10 low noise fans will be equally loud as 2 powerful fans. My guess is the air pressure will not be higher with 10 fans, it's only spread out more.
 
Upvote 0
to be really realistic why not get a set of car doors and a sun roof with electric windows then when you lower the windows or open the sun roof have wind comming from what evers open:laugh:
windscreen, windscreen washers, rain and real headlights comming to a room near you
 
Upvote 0
The mindset I'm in are my fans are way underpowered. Most will be. Even at full whack they represent a very small percentage of the amount of wind you'd really feel if you were really in that car, really on that track.

So my preference is to adapt for each car for each track, so that for any given car, for any given track, the max speed at the end of the longest straight will produce the maximum fan power.

That's the way I've set it up to behave automatically, but all the values can be set to non-dynamic and changed in the app, and saved per car, so hopefully it'll suit most requirements.
Is your program still in progress?
 
Upvote 0
Is your program still in progress?

Hi! Yeah the program kind of is, I just haven't been sim racing at all of late - the rig is taken down, so I have nothing to test it on.

The program is almost working, I was using it when I raced and I was pretty happy with it.

The only thing was I didn't think, when everything was on automatic, that it was using the full range of values, so wasn't quite hitting top fan speed at top car speed.

Might me an idea for me to make a copy of it as it is available if anyone wants to test it, then I'll have a look at any reported issues.

My next step was going to be to put remote debugging tools on the sim racing PC so I could debug the program 'live' but sim racing had to take a back seat, so I never got around to it.
 
Upvote 0
Hi, I really enjoyed your program so I tried to improve it by adding support for other sims with a little interface to adjust settings.
I saw @ears is working on a similar solution but I already started my project and have been using it for some time now so I thought I might as well share my code.
Please note it starts minimized to systray.

WindSimulator.png


This program is based on an idea by "Insert Coin" and uses the same hardware setup described here:
https://www.racedepartment.com/threads/easy-diy-wind-simulator-for-assetto-corsa.133999/

Quick guide:

1/ Load the WindSimulator.ino code to your Arduino.
This is a modified version of "Insert Coin" code since the fans speed calculation is managed by WindSimulator.exe

2/ Launch WindSimulator.exe
If the programs complains about missing DLLs you should install Microsoft Visual C++ Redistributable Package: https://go.microsoft.com/fwlink/?LinkId=746572
The program will start minimized in the systray with a fan icon.
You may want to start it automatically by copying WindSimulator.exe in the shell:startup folder.

3/ Click on the fan icon in the systray to adjust your preferences.
The "Port" value must be set to your Arduino port. WindSimulator will then automatically connect to your Arduino when you plug it in.
The "Speed OFF" value is the speed of the fans when no simulator are running or if you are in the game menus. This is usefull to keep cool when not racing.
The "Speed MIN" value is the minimum speed of the fans when the car is not moving. If you set it below 0, the fans will not turn or idle until you reach some speed in the car.
The "Speed MAX" value is the maximum speed of the fans when the car is at full speed. If you set it above 79, the fans will turn at their maximum speed before you reach the car full speed.
The blue line in the chart shows the fans speed curve relative to the car speed. The X axis is the car speed and the Y axis is the fans speed.
The red line in the chart shows the history of the fans speeds that were actually computed.
The preferences will be saved to the %APPDATA% folder when you close WindSimulator.exe

4/ Launch your favorite simulator
Currently WindSimulator supports the following simulators: Assetto Corsa, Project Cars 2 and RaceRoom Racing Experience.
WindSimulator will detect when a new car/track combo is used and observe the maximum speed the car reached during the session.
So the fans will blow air according to the car maximum speed on the track, but will need you to reach the full speed of the car before it makes sense.
You can see some debugging information in the console of WindSimulator (detected cars/tracks and observed maximum car speeds in km/h).
Currently WindSimulator has no database so it will forget about the car/track combo when you use a new one.

WindSimulator.zip (Executable and Source)
 
Upvote 0
Hi, I really enjoyed your program so I tried to improve it by adding support for other sims with a little interface to adjust settings.
I saw @ears is working on a similar solution but I already started my project and have been using it for some time now so I thought I might as well share my code.
Please note it starts minimized to systray.

View attachment 261261

This program is based on an idea by "Insert Coin" and uses the same hardware setup described here:
https://www.racedepartment.com/threads/easy-diy-wind-simulator-for-assetto-corsa.133999/

Quick guide:

1/ Load the WindSimulator.ino code to your Arduino.
This is a modified version of "Insert Coin" code since the fans speed calculation is managed by WindSimulator.exe

2/ Launch WindSimulator.exe
If the programs complains about missing DLLs you should install Microsoft Visual C++ Redistributable Package: https://go.microsoft.com/fwlink/?LinkId=746572
The program will start minimized in the systray with a fan icon.
You may want to start it automatically by copying WindSimulator.exe in the shell:startup folder.

3/ Click on the fan icon in the systray to adjust your preferences.
The "Port" value must be set to your Arduino port. WindSimulator will then automatically connect to your Arduino when you plug it in.
The "Speed OFF" value is the speed of the fans when no simulator are running or if you are in the game menus. This is usefull to keep cool when not racing.
The "Speed MIN" value is the minimum speed of the fans when the car is not moving. If you set it below 0, the fans will not turn or idle until you reach some speed in the car.
The "Speed MAX" value is the maximum speed of the fans when the car is at full speed. If you set it above 79, the fans will turn at their maximum speed before you reach the car full speed.
The blue line in the chart shows the fans speed curve relative to the car speed. The X axis is the car speed and the Y axis is the fans speed.
The red line in the chart shows the history of the fans speeds that were actually computed.
The preferences will be saved to the %APPDATA% folder when you close WindSimulator.exe

4/ Launch your favorite simulator
Currently WindSimulator supports the following simulators: Assetto Corsa, Project Cars 2 and RaceRoom Racing Experience.
WindSimulator will detect when a new car/track combo is used and observe the maximum speed the car reached during the session.
So the fans will blow air according to the car maximum speed on the track, but will need you to reach the full speed of the car before it makes sense.
You can see some debugging information in the console of WindSimulator (detected cars/tracks and observed maximum car speeds in km/h).
Currently WindSimulator has no database so it will forget about the car/track combo when you use a new one.

WindSimulator.zip (Executable and Source)

Thank you very much for sharing this, it really looks great.

As soon as I get my rig back up again I'll be havnig a go with it!
 
Upvote 0

Latest News

Are you buying car setups?

  • Yes

  • No


Results are only viewable after voting.
Back
Top