This is my nearly five foot model wind tunnel. By far the most ambitious project of my career, a few dozen hours worth of modeling, simulation, analysis, coding, and building went into the final product.
Table of Contents
My only criteria was wanting a test section wide enough to fit small model aircraft, and wanting a full build much larger than the common desktop wind tunnels that most people build. Luckily, these two relatively arbitutary criteria would align well per the relationships prescribed in the literature, with a test section of that size neccesitating a large full build. The contraction employs a fifth-order polynomial wall profile matching the now-common quintic curves used by Bell and Mehta. A transformed fifth-order variant proposed by Brassad and Ferchichi was considered for its reported gains in turbulence reduction and flow uniformity, but the standard Bell and Mehta profile was retained to avoid emplyoing a method I do not yet fully understand. The contraction spans 12in over a 12x12in inlet, giving an L/H of 1, which sits comfortably in the 0.667–1.79 range recommended by Bell and Mehta, and lands close to the 2x inlet radius length Durmus identifies. The 12x12in inlet reducing to a 5x5 in test-section throat yields a contraction area ratio of about 6:1, consistent with the moderate-to-high ratios of roughly 6:1 to 10:1 that Bell and Mehta cite as effective for low-speed tunnels. The inlet will feature a honeycomb mesh, followed by two gradually smaller diameter metal meshes to minimize inlet turbulence.
The diffuser runs 36in from the 5x5in test-section exit to a 9x9in outlet, a length-to-small-height ratio of about 7:1, comfortably above the 5x minimum Li and Moradi cite as necessary to avoid reverse flow. However, area ratio is the one figure that departs from the literature. Durmus's diffuser used an area ratio of 2, drawn from the 2 to 2.5 range he traces to Bradshaw and Pankhurst's design rules. Mikel's looser criterion caps area ratio at 2.5 for the same purpose of controlling separation. The finalized diffuser produces an area ratio of about 3.2:1, exceeding the Bradshaw and Pankhurst, Durmus, and Mikel guidelines, albeit narrowly. While area ratio remains the clearest outstanding departure on the drawing, the angle matches the literature well. Measured top-surface to bottom-surface, the total included angle works out to about 6°, matching Durmus's own diffuser angle exactly and sitting inside Mikel's 5° to 7° band as well. Li and Moradi's own square-diffuser simulations back this angle choice quantitatively with a "divergence angle within the 5°–15° range ... suggested as the optimum geometry for a diffuser to achieve the best pressure recovery."
- R. Mikel, Wind Tunnels: Models, Aerodynamics and Applications. Clanrye International, 2015.
- D. Brassard and M. Ferchichi, “Transformation of a Polynomial for a Contraction Wall Profile,” Journal of Fluids Engineering, vol. 127, no. 1, pp. 183–185, Mar. 2005, Accessed: July 29, 2026. [Online]. Available: https://doi.org/10.1115/1.1852492
- Z. Li et al., “Three-Dimensional Simulation of Wind Tunnel Diffuser to Study the Effects of Different Divergence Angles on Speed Uniform Distribution, Pressure in Outlet, and Eddy Flows Formation in the Corners,” Physics of Fluids, vol. 32, p. 052006, 2020, doi: 10.1063/5.0006068.
- P. Bradshaw and R. C. Pankhurst, “The Design of Low-Speed Wind Tunnels,” Progress in Aerospace Sciences, vol. 5, pp. 1–69, Feb. 2003, doi: 10.1016/0376-0421(64)90003-X.
- S. Durmus, “Optimization of Contraction Cone Length in an Open-Circuit Wind Tunnel,” Balıkesir Üniversitesi Fen Bilimleri Enstitüsü Dergisi, vol. 26, pp. 431–440, 2024, doi: 10.25092/baunfbed.1339334.
- J. Bell and R. Mehta, “JOINT INSTITUYE for AERONAUTICS and ACOUSTICS CONTRACTION DESIGN for SMALL LOW-SPEED WIND TUNNELS,” Apr. 1988. Accessed: July 28, 2026. [Online]. Available: https://ntrs.nasa.gov/api/citations/19880012661/downloads/19880012661.pdf
To confirm my design would perform as expected, I validated it with an ANSYS Fluent simulation against three criteria. First, I needed airflow fast enough for the visualization mist to reveal aerodynamic effects over the airfoil, but not so fast that the mist dissipated before it could be observed. Based on rudimentary tests with the mister, I targeted roughly 1 m/s in the test chamber; the simulation yielded an area-weighted average velocity of 1.114 m/s, so I looked for a way to slow the airflow slightly. Second, I wanted the pressure contour to show a smooth gradient: rising pressure through the contraction cone, dropping to a low in the fast-moving test section, then gently recovering to ambient through the diffuser. The simulation confirmed exactly this behavior. Finally, I checked that the contraction cone and test section geometry would produce clean, laminar flow with minimal turbulence. The contraction and test sections were sufficiently calm, though some turbulence accrued toward the end of the diffuser.
The test section was evaluated using ANSYS Fluent surface integrals at the test-section plane. Across the full cross-section, the velocity coefficient of variation was 19.61%, largely driven by the wall boundary layer. Restricting the analysis to the core airflow (the middle 85% of the cross-sectional area) dropped that value to 5.99%, indicating much more uniform flow where the tested airfoil would actually sit. Turbulence intensity followed the same trend, falling from 3.68% across the full plane to 2.48% in the core.
Velocity Contour
Pressure Contour
Turbulence Contour
Drawing
SolidWorks drawing of the design. This document served not just as a display of the design, but as the instructions for construction. The modeling process was a fun challenge, particularly some stubborn lofts for the contraction cone.
The build began with the pull fan. I was learning the electronics as I was wiring them.
Initial "dumb" wiring of fan after disassembly. I rewired the high speed terminal to the wall cord and tested functionality to ensure I understood the wiring.
After the "dumb" wiring, I learned how to integrate a relay and microcontroller for more complex functions via simple on/ off commands.
After fan control, I began to assemble a chamber for an ultrasonic water vapor device that would sit in front of the contraction cone, using the negative pressure near the test section to pull mist through a tube.
After testing a few diameters of PVC, I settled upon 3/4 inch to balance the small size effects of not allowing enough airflow with the large size effects of mist dissipation.
After gaining the basic electronic competancy neccesary for the build, I moved onto parallel construction of the three main sections: the contraction cone, the test section, and the diffuser. Let's begin with the diffuser. I opted for 7/16 inch thick OST. I chose OST for its rigidity, affordability, and weildiness as compared to alternatives such as particle board, cardstock, or sheet metal. I chose 7/16th for its similar balance of price and solidity.
I cut the pieces from the OST sheets with a jigsaw according to the above SolidWorks drawing.
I sanded the pieces down to remove jagged edges, and to smooth the surfaces for less turblent airflow.
I used wood glue to join the pieces, with silicone at the corners to smooth airflow and prevent leakage.
The test section was the easiest to construct of the three sections. The sizing criteria had been validated in the design stage, with the other criteria being maximum visibility.
I opted for 1/25th inch PET sheets. As a low melting temp thermoplastic, I could create a strong bond between the sheets with only hot glue. My selected thickness of the sheets allowed for excellent visibility as well.
The contraction cone brought some difficult manufacturing decisions. I had yet to purchase a 3D printer, so to create the complex quintic polynomial geometry I had three options. Commision a 3D print from a supplier, cut the geometry into styrofoam and strengthen with epoxy, or attempt to create it by hand with a flexible board such as cardstock. Upon reaching out to suppliers, the first two options proved costly, but I was weary of the third given the importance of getting the geometry correct.
I chose to amend the first option. I purchase a 3D printer corner of the cone for a fraction of the price of the full print. I then layered heavyweight 100 GSM printer paper and coats of craft glue onto the print, using it as a mold. This solution balanced budget overrun with maintaining the crutial geometry. The same method was used to join the pieces together.
Upon full assembly of the paper pieces. I installed a one inch deep honeycomb mesh with fine 3/32 inch wide channels to cut turbulence out of the airflow. In the middle of the mesh I drilled a hole for the mist chamber and tube and glued into place. My selected tube length of 8" ended exactly one inch before the test section allowing the mist to enter a laminar air stream.
With the general construction of every section complete, the assembly, refinement, and final touches began.
I joined the test section to the diffuser with high strength adhesive, then joined the legs to the body with wood glue to hold the assembly level. I used silicone to create a flange to rest against the test-section-facing side of the contraction cone to minimize air leakage.
After a coat of paint, I installed the pull fan and routed the wires to the middle of the assembly where the electonics met.
I 3D printed a holder for the Arduino and breadboard, while also installing an LED board for visibility in the test section. Both connected to a power strip such that the whole assembly ran off one cord.
To mount the airfoil AoA servo, I used my new 3D printer, modeling and printing a bracket that secured to the test section through a tight tolerance.
Since I had selected PET for the test section, melting holes for a dowel connected to the servo was easy. The only trouble was a custom servo horn to hold the dowel, which took several iterations of adjusting tolerances.
With all the physical work done, the sole remaining step was writing, debugging, and interating on the code.
Opting for easy control through an IR remote, I wrote code to modulate on/ off through hitting the power button.
Building on this functionality, I added arrow button control of the servo, for intuitive user-concious airfoil AoA actuation.
Now every step of the build process was done. Here is the full code in C++, written by me, refined by Claude.
#include <Arduino.h>
#include <IRremote.hpp>
#include <Servo.h>
Servo myServo;
int irPin = 9;
int servoPin = 8;
int fanPin = 7;
bool fanOn = false;
bool pulseState = LOW;
unsigned long pulseInterval = 500;
unsigned long lastPulseTime = 0;
int minAngle = 0;
int maxAngle = 180;
int angle = 90;
int angleStep = 10;
void setup() {
Serial.begin(9600);
pinMode(fanPin, OUTPUT);
digitalWrite(fanPin, LOW); // known state before anything else runs
IrReceiver.begin(irPin);
myServo.attach(servoPin);
myServo.write(angle);
}
void loop() {
if (IrReceiver.decode()) {
// Ignore repeat frames so a held button doesn't retrigger repeatedly
if (!(IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT)) {
int address = IrReceiver.decodedIRData.address;
int command = IrReceiver.decodedIRData.command;
if (address == 0x0) {
if (command == 0x45) {
fanOn = !fanOn;
if (!fanOn) {
digitalWrite(fanPin, LOW);
pulseState = LOW;
}
} else if (command == 0x7) {
angle = constrain(angle - angleStep, minAngle, maxAngle);
myServo.write(angle);
} else if (command == 0x9) {
angle = constrain(angle + angleStep, minAngle, maxAngle);
myServo.write(angle);
}
}
}
IrReceiver.resume();
}
if (fanOn) {
unsigned long now = millis();
if (now - lastPulseTime >= pulseInterval) {
lastPulseTime = now;
pulseState = !pulseState;
digitalWrite(fanPin, pulseState);
}
}
}
Here is a 2x speed video of a run of the completed model, featuring the visualization mist running over a NACA4412 airfoil I 3D printed.
Testing surfaced a few things I hadn't planned for. Running the fan at 100 percent gave plenty of airflow, but the air moved too fast for the mist to actually show anything useful, visibility was poor because it got swept away before aerodynamic effects were properly visible. Rather than build out proper variable speed control, I devised a system where the "on" state alternates rapidly, essentially cheating into a lower effective CFM. It's not an elegant fix, but it got the visualization usable. The IR remote code also needed refinement since the original setup wasn't triggering reliably during testing, but adjusting the loop in the code to scan for fan on/ off and AoA adjustment in parallel as opposed to series resolved the issue.
Looking ahead to Wind Tunnel v2, I have a list of changes based on what didn't work the first time. The contraction cone will get a hinge system that folds up like the nose of a C-5 Galaxy, sealed with proper o-rings to fix the mist leakage that kept happening despite my hand-cut silicone flange being the best I could manage at the time. I also want to add a couple of mesh layers inside the cone to break up eddies further and get closer to real laminar flow, since I don't think v1 fully achieved that per visual inspection during testing. For visualization, I'm planning to swap the water vapor mist for a glycerin smoke machine, run through multiple tubes so I can generate streamlines at different elevations instead of just one. The cone itself will be fully 3D printed and sanded instead of paper mache. The paper mache version actually performed reasonably well, but the geometry was never as precise as I wanted, and precision is really the point of building a wind tunnel in the first place, so that change is a non-negotiable. I've already started prototyping the 3D printed cone, partly because I'm eager to fix what I got wrong the first time. Finally, the test section will move to thicker PET, since the 1/25 inch material I used was more flexible than I'd like and caused the joints to snap more than once. Moreover, it is something that will be an absolute neccesity to resist the weight of the cone once the hinge mechanism is added. Onto the next one!