Working Principle
An anemometer measures wind speed. The most common type for embedded systems is the cup anemometer: three or four hemispherical cups mounted on a vertical rotor shaft. Wind pushes the cups, spinning the rotor at a speed proportional to wind velocity. A reed switch or Hall-effect sensor inside the shaft generates one pulse per revolution, allowing the MCU to calculate wind speed from the pulse frequency.
Other types include: Vane anemometers (rotating propeller), hot-wire anemometers (cooling rate of a heated wire), and ultrasonic anemometers (transit time of ultrasonic pulses between transducers).
Electrical Characteristics
| Parameter | Typical Cup Anemometer |
|---|---|
| Wind Speed Range | 0.3–70 m/s (0.7–157 mph) |
| Starting Threshold | ~0.3 m/s (very light breeze) |
| Output Signal | Open-collector pulse (reed switch or Hall effect) |
| Pulses per Revolution | 1 or 2 (model dependent) |
| Calibration Factor | ~2.4 km/h per Hz (model specific) |
| Supply (for Hall-effect type) | 3.3–5 V |
| Operating Temperature | -40 to +65 °C |
| Mounting | M8/M10 threaded mast mount |
Interfacing with an MCU
Connect one pulse wire to an MCU interrupt-capable GPIO with a 10 kΩ pull-up resistor (the output is typically open-collector/drain). Count pulses over a fixed time window (1–3 seconds) and apply the calibration factor: wind_speed = pulse_frequency × calibration_factor.
Calibration
- Manufacturer factor: Use the datasheet calibration constant (e.g., wind_speed_mph = frequency × 1.492). If unavailable, calibrate against a reference meter
- Wind tunnel: Professional calibration uses a wind tunnel with known air velocity
- Field comparison: Mount alongside a known calibrated anemometer and develop a linear correction curve
- Averaging: Wind is gusty — average over 2–10 second windows. Report both sustained speed and gust (peak speed in measurement interval)
Code Example
/*
* Cup Anemometer — Wind Speed (Arduino)
* Wiring: Pulse wire → D2 (interrupt), 10kΩ pull-up to VCC
* Other wire → GND
*/
#define ANEMO_PIN 2
#define CAL_FACTOR 2.4 /* km/h per Hz (adjust per model) */
#define MEASURE_MS 3000 /* 3-second measurement window */
volatile unsigned long pulseCount = 0;
void anemoPulse() {
pulseCount++;
}
void setup() {
Serial.begin(9600);
pinMode(ANEMO_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(ANEMO_PIN),
anemoPulse, FALLING);
Serial.println("Anemometer Ready");
}
void loop() {
pulseCount = 0;
delay(MEASURE_MS);
noInterrupts();
unsigned long count = pulseCount;
interrupts();
float freq = (float)count / (MEASURE_MS / 1000.0);
float speed_kmh = freq * CAL_FACTOR;
float speed_ms = speed_kmh / 3.6;
Serial.print("Pulses: "); Serial.print(count);
Serial.print(" Freq: "); Serial.print(freq, 1);
Serial.print(" Hz Speed: ");
Serial.print(speed_kmh, 1); Serial.print(" km/h (");
Serial.print(speed_ms, 1); Serial.println(" m/s)");
}
Real-World Applications
Weather Stations, Wind Farms & HVAC Systems
Anemometers are used in professional and DIY weather stations, wind turbine siting surveys, construction crane safety (auto-lockout above wind threshold), airport wind monitoring, sailing performance systems, HVAC air flow measurement, drone flight planning, and agricultural frost warning systems (wind speed affects frost formation).
Limitations
- Starting threshold: Cup anemometers cannot measure very calm winds (<0.3 m/s); cups need minimum force to overcome friction.
- Overspecification in gusts: Cup anemometers slightly over-read during rapid deceleration; they speed up faster than they slow down.
- Maintenance: Bearings wear out in harsh environments; annual maintenance needed for accuracy.
- No direction: A cup anemometer only measures speed, not direction; pair with a wind vane for full vector measurement.
- Icing: In freezing conditions, ice on the cups stops rotation; heated anemometers exist for polar/mountain installations.