RC Viper ACR - Aerodynamics
In this part RC Viper ACR Technologies & Systems - Aerodynamics!
Aerodynamics is science dealing with the air flow and his interaction with objects. In general, lower aerodynamic drag means higher maximum speed. In motorsport is important to find the ideal ratio between aerodynamic drag and downforce to keep the vehicle better on the road, especially when it is passing turns. The magnitude of the aerodynamic drag is characterized by the coefficient of resistance cx. This value is a reflection of the shape of the vehicle in terms of the airflow around body. In modern cars this value is around 0.3, Formula 1 cars are up to 1.3.
From SRT tests for Dodge we know, how the air acts around the car at specific speeds. The rear wing of the Viper provided up to 2 tons of downforce. Our model would develop less pressure, but it would still exceed the limit of rear axle suspension. That’s why we’ve focused on sliping this wing at higher speeds, reducing rear axle pressure and reducing aerodynamic drag. We also focused on adjusting aerodynamics at speeds ranging from 30 to 100 km/h in which the model is mostly used. Our aerodynamic research was based on the SRT tests. We passed them to a 1:10 scale, and made changes according to the changes on model, we also verified the results in Autodesk’s Project Falcon and Flow Design simulation programs.
We created a 3D model matching the real model, which we used for the tests. Our final drag coefficient is 0.79 at speed 35m/s (126km/h) and average pressure on the body is 304Pa (30.98kg on square meter). Under braking from that speed drag coefficient increase to 4.04 and the pressure on the rear wing is more than 100kg on square meter. Thats theoretical, in facts, the wing does not go up at that pressure, it is imposible for servo mechanism, but we are braking also with motor and MGU-K, and when we reach a point, when servo pressure is higher than air pressure, the wing goes up.
Adjustable aerodynamic parts
We used 3 adjustable aerodynamics parts in our model. They are set by the current speed or can be set manually. This is specifically the adjustment of the height of the rear wing, the inclination of the rear wing, and the adjustment of the air flow between the front grill and hood.
We adjusted the rear wing to match with the real vehicle, then we built a swing and tilt system that we mounted with two servos and fitted into the model. The height of the wing is between 1-4cm, tilt 0-90 degrees. The entire wing is inserted into the rear of the model along with the tilt servo, which is connected with the wing through the rod. In automatic mode, we control the height of the wing and tilt in the range of 0-15 degrees, making a uniform pressure at the rear at each speed. The tilt servo also serves as an air brake, and when we are braking the wing is rotated to 90 degrees, the aerodynamic drag increases and the vehicle slows down.
At the front of the model, we installed a servo, which controls the air flow between the front grill and the hood. This controls the amount of air flowing to the electronics along with the front axle pressure. When braking, this servo adjusts, increasing the pressure on the front axle, so that we have better grip in the turns. Similar systems can be found on the Pagani Huayra, where two flaps are located on the body, and in the turns they put pressure on a particular side of the vehicle.
The constant air supply to the electronics is provided by two air suctions on the front of the body, and one main on the hood. At the center of the model a vacuum is created to keep the body in place, the air flows further through the heat recovery and goes out in the back of the model.
On some modern cars we can see how they are kept on the road with a vacuum under the vehicle. It was not possible with this model, so we decided to use a flat chassis, which is basically a lexan shell, which is placed between the vehicle chassis and the bodywork.
Active aerodynamics adjusts the aerodynamic elements according to the current vehicle speed, creating uniform pressure at different speeds. We set the aerodynamics so that the wing is extended and started working at 10km/h.
With gradual acceleration, the wing advances slowly, front airflow mechanism sloping slowly to reduce the pressure produced by the aerodynamic elements, what equals the air pressure on the bodywork, so that the resulting pressure is approximately constant throughout the acceleration time.
This goes that way up to a speed of 75 km/h when the air begins to swing to the rear of the body, the rear wing gets from the air bag and produces excess pressure. That’s why the wing will slide completely between this speed and the 100km/h speed. From that moment, the car will be lifted by the air flowing uder it. To prevent this undesirable phenomenon, we slowly change the angle of the wing and also the front mechanism to equal the forces on the car.
From the speed of 150 km / h this aerodynamic elements produce too much pressure so we adjust them until the wing is in flat position and the front mechanism fully open. From now, the car is maintained on the ground only by a pressure acting on the body. The maximum measured speed of the model is 184km/h, but from a theoretical point of view it should be stable up to ~220km/h. The only thing that limits us are the body mounts, which might not survive any more air pressure.
As in telemetry, in auto.py is while loop, which is repeating when auto mode is set. In it, the engine RPM is checked first, in this case we needed them more often than in telemetry, so for a time of 0.1 second. Of these, the current speed is calculated. If the difference between the last speed and the now measured speed is greater than 5, this is the fuse to does not necessarily adjust a servo to a few tenths of a millimeter at each measurement, we will approach the servo setting. Depending on the current speed, the servo angle is calculated. The real angle is not identical to the servo angle, so these values differ from what we really see on the model. Subsequently, the individual servos are rotated, the write is the same as in the Alpha versions, except that we used the variable timing of the servos.
When we compared the last speed to the current speed, we saved the result in the variable angledifference. Depending on the difference, we know how much the servo has to move from the previous position, so we can also adjust the length of the PWM signal.
We have divided the angledifference variable by ten to obtain the time in milliseconds, if this time is greater than 0.5 seconds, we change the angledifference to 0.5, which is the time required to turn the servos between the end positions. As a result, the servo signal is only released for the time required to rotate it, what is called the variable timing of the servos.
Manual aerodynamic adjustment
There are times when we want to set the aerodynamics on our own, so we’ve created a part of the app in which we select the aerodynamic mode. Switching modes is ensured by a classic checkbox with changed design, which, when clicked, sends its status to remote.py, which is a sub-program auto.py.
If auto mode is selected, auto.py runs a while loop running the active aerodynamics. If we select the manual mode, the remote.py program sets the last values from the manual mode and turns the servos. The last values are stored in the firstload.info file or temporarily stored in start.py. At the same time we will be able to control the aerodynamic elements.
Servo control is provided with noUIsliders that work similarly to volume control. We will show it on the tilt of the wing. We have slider and input here, their design is stored in controllers.css. Slider again sends data, input controls slider. This slider is adjustable up to two decimal places, so the setting is more accurate than at the volume we set per percent.
Additionally, when we move the slider, we see real-time change in the controlled aerodynamic element on the right. These are 3 pictures - a car preview, a wingspan and a rear wing. By setuping the wing by sliding the slider, we rotate the wing image. At the height of the wing by sliding the slider, we change the distance of the wings and wing mechanics from the top of the page, which acts as a slide. When sliding the slider, an arrow next to the appropriate aerodynamic element is shown in the figure showing how the element can be adjusted. So we can see how the selected aerodynamic element will change, when the slider is released, when the data is sent, so at a distance we know what the actual setting looks like.
The datas are sent to the remote.py file, where the servo angle is calculated, since the real tilt shown in the application does not match to the servo tilt. For example, when the servo is mounted down by the head, and we want to rotate the servo to 45 degrees, the angle we need to use for the servo turn is 135 degrees. In addition to the angle we also calculate the difference of the last set angle with the new angle, which we use for variable timing as in the automatic mode, then we can set the servo to position and save the new angle to the variable.
When we switch from manual mode to automatic mode, the servo values are stored, the channels receiving the data from the sliders are disconnected and the active aerodynamic setting is started. When the manual mode is switched on, the channels are re-connected and, as in the beginning, the last known values are set to the servos.
In the aerodynamic control section, we also created the airbrake control button available in both aerodynamic modes. Again, this is a checkbox with changed design, so writing and sending messages is the same as for other checkboxes. After clicking the checkbox, it changes its appearance and sends its status to remote.py. In it the checkbox value saves in the airbrake_status variable.
As in the Aplha version, we track GPIO pin 36, when the model starts braking, the brake module switches the opto-coupler, which gives GPIO pin 36 a logical 1. Then we check that the airbrake_status equals “on”. If so, we adjust the wing tilt to 90 degrees to increase aerodynamic drag and the model starts to decelerate, while changing the airflow in the front of the car, increasing the front axle pressure to get better grip in turns. In this way, the air brake is switched on in both aerodynamic modes.
The air brake switch to off is different for each mode. When the program records a logical 0 in manual mode on GPIO pin, it sets the servos to the last known values. In automatic mode, the servos set the nearest auto.py program to measure RPM. During braking, the while loop in auto.py is suspended until the remote.py program, when logic 0 is captured, sets the variable brake to “off” to start the loop again.
There are so many things to talk about, but this article is long enough for today. You should notice that here was screenshots only from Viper 1.0, whose second part is next on the list. Then we coming to the final - Viper 2.0. Stay tuned and have a nice day!