Build a Flutter Demo and Predict Vibration Frequency

Feel aeroelasticity with a homemade wing in front of a fan

High School Aeroelasticity 3–4 weeks
Last reviewed: March 2026

Overview

Flutter is one of the most dangerous phenomena in aerospace engineering. When airflow over a wing excites the structure at just the right frequency, vibrations grow explosively — and in the worst cases, the wing tears itself apart in seconds. The Tacoma Narrows Bridge collapse is the most famous example of wind-induced vibration, but every aircraft must be certified against flutter before it can fly with passengers.

In this project, you'll build a simple cantilever wing — a flat beam clamped at one end — from cardboard, balsa wood, or a ruler. Mount it in front of a household fan, and use your phone's built-in accelerometer (via the free Phyphox app) to measure how it vibrates at different wind speeds. You'll see the vibration frequency change as wind speed increases — and at a certain speed, the vibrations will suddenly get much larger. That's the onset of flutter.

After collecting data, you'll use Python and scikit-learn to fit a regression model that predicts vibration frequency from wind speed. This is a micro version of the same analysis that flutter engineers perform using multi-million-dollar wind tunnel tests and finite element models — but you can do it with $5 of materials and a phone.

What You'll Learn

  • Build a physical wing model and understand cantilever beam vibration
  • Use a smartphone accelerometer to measure vibration frequency
  • Perform FFT (Fast Fourier Transform) analysis to extract frequency from time-series data
  • Fit a regression model to experimental data and evaluate its accuracy
  • Understand the concept of aeroelastic flutter and why it matters for aircraft safety

Step-by-Step Guide

1

Build the Cantilever Wing

Cut a wing shape from stiff cardboard or balsa wood: approximately 30 cm span, 8 cm chord, 2–3 mm thick. Clamp one end firmly to a table edge using a C-clamp or heavy books — this is the "root" of your wing. The free end (the "tip") should extend out over open space so it can vibrate freely.

Build 2–3 wings of different stiffness: a thin cardboard wing (flexible), a thick cardboard wing (stiffer), and a balsa wood wing (different material). These different configurations will give you more data points and let you see how stiffness affects the results.

2

Set Up the Accelerometer

Download the Phyphox app (free, iOS and Android) on your phone. Open the "Acceleration (without g)" experiment — this gives you acceleration in m/s2 on all three axes at roughly 100 samples per second. Tape your phone firmly to the wing tip with the accelerometer axis perpendicular to the wing surface.

Test with no wind: flick the wing tip and check that Phyphox records a clean oscillation. You should see a decaying sinusoid — the wing vibrating at its natural frequency and gradually stopping due to damping. Export this data as CSV to confirm your pipeline works.

3

Collect Data at Different Wind Speeds

Position a household fan at 3 distances from the wing: far (low speed), medium, and close (high speed). If you have a multi-speed fan, even better — use all speed settings at a fixed distance. For each configuration, record 10 seconds of accelerometer data while the wing vibrates in the airflow.

Measure the wind speed at the wing using a simple anemometer (you can buy one for ~$10 or estimate from fan specifications). Log each test: wing type, fan distance, estimated wind speed, and the exported CSV filename. Aim for at least 10–15 data points across different speeds and wing types.

4

Extract Frequency with FFT

Load each CSV file into Python using pandas. Apply a Fast Fourier Transform (FFT) using numpy.fft.rfft() to convert the time-domain acceleration signal into its frequency components. The dominant peak in the FFT corresponds to the wing's vibration frequency at that wind speed.

Plot the FFT spectrum for several tests — you'll see a clear peak that shifts position as wind speed changes. Use numpy.argmax() to find the peak frequency automatically. Create a table of (wind_speed, wing_type, measured_frequency) data points.

5

Fit a Regression Model

Use scikit-learn's LinearRegression to fit vibration frequency as a function of wind speed. Plot the data points and the fitted line. Does the relationship look linear, or does frequency change non-linearly with speed? Try PolynomialFeatures(degree=2) to see if a quadratic fit is better.

For the multi-wing dataset, add wing stiffness as a second feature (you can estimate relative stiffness by how far the wing deflects under a known weight). Train a multi-variable regression: frequency = f(wind_speed, stiffness). This is your first physics-aware ML model — it captures the real relationship between structural properties, airflow, and vibration.

6

Interpret and Present Results

Create a final poster or slide deck showing your experimental setup (photos!), raw data samples, FFT spectra, and the regression model results. Discuss: did stiffer wings vibrate at higher frequencies (they should, based on beam theory)? Did vibration amplitude grow dramatically at any speed (flutter onset)?

Connect your results to real aircraft: explain that engineers use sophisticated computational models (finite element + aerodynamic coupling) to predict flutter, but the underlying physics is exactly what you observed — airflow exciting structural vibration modes. Every new aircraft must demonstrate flutter-free operation up to 1.15 times its maximum dive speed.

Go Further

  • Add mass to the wing tip — tape a coin to the tip and measure how the added mass changes the frequency; this simulates wing-tip fuel tanks or stores
  • 3D-print airfoil shapes — replace the flat plate wing with a proper airfoil cross-section and see how aerodynamic shape affects the vibration behavior
  • Build a wind tunnel — construct a simple cardboard wind tunnel with a fan for more controlled and repeatable experiments
  • Compare with beam theory — calculate the predicted natural frequency using Euler-Bernoulli beam theory and compare with your measured values