Skip to content

TilmanGriesel/WindScape

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

45 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

WindScape Title

WindScape

A Homeβ€―Assistant / ESPHome project that turns everyday PWM‑controlled PC fans into remarkably natural indoor wind simulators.

WindScape delivers authentic, location‑inspired airflow, from a gentle Mediterranean whisper to a brisk Alpine surge, creating a natural, immersive atmosphere for your workspace, gaming setup, or sim‑racing cockpit. It’s a versatile wind simulator ready to elevate any project you come up with.

noctua_nv_fs1_1

Tableβ€―ofβ€―Contents

  1. Features
  2. Operatingβ€―Modes
  3. Demo
  4. Build Guides
  5. Software Setup
  6. Preset Library
  7. Troubleshooting
  8. Tips for Best Experience
  9. Technical Notes
  10. Roadmap
  11. How WindScape Works
  12. Links

Features

  • Realistic Wind Physics Smart turbulence modeling and thermal effects that create natural-feeling wind patterns, just like you'd experience outdoors.

  • Nature-Inspired Environment Presets Five carefully crafted profiles that capture the feel of different outdoor locations – from gentle countryside breezes to powerful ocean winds.

  • Steady or Dynamic Modes Choose between constant airflow or ever-changing wind patterns that respond naturally to the environment you select.

  • External Sensor Support Connect live data feeds (like racing sim speed) and WindScape will automatically adjust airflow in real-time, with smart fallback when the signal drops.

  • Homeβ€―Assistant Integration Control, monitor, and automate entirely over Wi‑Fi.

  • Comprehensive Real-Time Monitoring Deep insight into the simulation engine – weather phases, thermal events, turbulence levels, target tracking, and all physics calculations exposed as sensors.

  • OTA Firmware Updates Built on ESPHome for one‑click wireless upgrades.


Operating Modes

Mode Description
Oscillating (Wind Simulation) Natural, ever‑changing airflow pattern.
Steady (Constant Breeze) Fixed speed, no variability.
External Sensor Maps a Homeβ€―Assistant sensor (e.g. car speed) to live fan speed; auto‑fallback after 60β€―s of silence.

Global Power Control in Homeβ€―Assistant overrides every mode.


Demo

WindScape configuration WindScape dashboard External sensor example Breezer9000


Build Guides

Which build you choose depends on the fan you pair with the project. In general, aβ€―5β€―V fan makes things simpler because it can be powered from any USB‑Aβ€―3.0 or USB‑C port, a power bank, or a low‑wattage wall adapter.

Hardware

  • Microcontroller – Any ESP32 development board with built‑in Wi‑Fi (widely available for about €3).
  • Fan – Any 5β€―V PC case fan that supports PWM (pulse‑width modulation).

Fan Selection

There’s no single β€œrequired” fan, just make sure it supports PWM speed control. A great premium option is the Noctuaβ€―NF‑A12x25β€―5β€―V, which is exceptionally quiet and can run at duty cycles as low asβ€―5β€―%.

When comparing noise levels, remember that the decibel (dB) scale is logarithmic: even small changes in the number can mean a significant audible difference.

5β€―Vβ€―Fan (DIY USB‑Powered & Simple)

Billβ€―ofβ€―Materials & Wiring
Item 5V DIY Build (€)
Noctua NF-A12x25 5V 33.00
Generic ESP32 3.00
General hardware (screws, nuts) 4.00
3‑D printed mount & hardware 5.00
Total Estimated Cost 45.00
Wiring Diagram
+----------------------------+
|     USB Power (5V)         |
|                            |
|   +5V ─────────────┐       |
|                    β–Ό       |
|           +----------------------+
|           |   ESP32 WROOM Board  |
|           |  (AliExpress-style)  |
|           |                      |
|           | 5V/VIN ◄─── 5V from USB
|           | GND    ◄─── GND from USB
|           |                      |
|           | GPIO14 ───┐          |
|           |           └────► PWM (Fan Pin 4, Blue)
|           |                      |
|           | GPIO27 ◄──┬────── TACH (Fan Pin 3, Green)
|           |           β”‚
|           |   [10kΞ© pull-up to 3.3V]
|           |           β”‚
|           |     [3.3kΞ©] in series
|           |           β”‚
|           |   [0.1nF cap to GND] ◄──(RC filter)
|           +----------------------+
|                     β”‚
|                     β–Ό
|           +----------------------+
|           |     Noctua Fan       |
|           |    5V PWM (4-pin)    |
|           |                      |
|           | Pin 1 (Black): GND ◄────── GND
|           | Pin 2 (Red or Yellow):  +5V ◄─── 5V/VIN
|           | Pin 3 (Green): TACH ───► GPIO27 (filtered)
|           | Pin 4 (Blue):   PWM ◄─── GPIO14
|           +----------------------+

Thanks and credit to @mwood77


12β€―Vβ€―Fan (Noctua NV‑FS1 Fan Kit or DIY)

Billβ€―ofβ€―Materials & Wiring
Item Kit Route (€) DIY Route (€)
NV‑FS1 fan kit (inc. PSU) 99.90 β€”
ESP32 (Lolin32β€―Lite) 8.21 8.21
Buck converter 12β€―β†’β€―5β€―V 4.00 4.00
4‑pin fan cable 2.95 2.95
Noctuaβ€―NF‑A12x25β€―PWM β€” 35.50
NV‑AA1‑12 amplifier β€” 14.90
3‑D printed mount & hardware β€” 5.00
12β€―V PSU Included 7.00
Total 116.06 78.56
Wiring Diagram
USB Powered
+-----------------------------+
|      12V Power Supply       |
|                             |
|   +12V ─────────────┐       |
|                     β”‚       |
|                     β–Ό       |
|                 +12V to Fan |
|                             |
|                 GND β”€β”€β”€β”€β”€β”€β”€β”€β”˜
|                             |
+-----------------------------+

           +------------------------+
           |      Lolin32 Lite      |
           |        (ESP32)         |
           |                        |
           | USB ◄──── USB from host (PC/power)
           | GND ◄──── Shared GND with PSU & fan
           |                        |
           | GPIO14 ─────┐          |
           |             └─────► PWM (Fan Pin 4, Blue)
           |                        |
           | GPIO27 ◄────┬──────── TACH (Fan Pin 3, Yellow)
           |             β”‚
           |        [10kΞ© pull-up to 3.3V]
           |             β”‚
           |         [3.3kΞ©] in series
           |             β”‚
           |        [0.1nF cap to GND] ◄──(RC filter)
           +------------------------+
                     β”‚
                     β–Ό
           +------------------------+
           |       Noctua Fan       |
           |         4-pin          |
           |                        |
           | Pin 1 (Black): GND ◄────── Shared GND (PSU + ESP32)
           | Pin 2 (Red):  +12V ◄────── +12V from PSU
           | Pin 3 (Yellow): TACH ─────► GPIO27 (via RC & pull-up)
           | Pin 4 (Blue):   PWM ◄───── GPIO14
           +------------------------+
With Buck Converter
+-----------------------------+
|      12V Power Supply       |
|                             |
|   +12V ─────┬────────────┐  |
|             β”‚            β”‚
|             β–Ό            β”‚
|   [Buck Conv. [LM2596]   β”‚
|    In: 12V   Out: 5V     β”‚
|        β”‚         β”‚       β”‚
|        β–Ό         β–Ό       β”‚
|      GND       +5V       β”‚
|        β”‚         β”‚       β”‚
+--------β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜       β”‚
              β–Ό            β–Ό
       +------------------------+
       |      Lolin32 Lite      |
       |        (ESP32)         |
       |                        |
       | VIN ◄────────────── 5V from buck converter
       | GND ◄────────────── GND from buck converter
       |                        |
       | GPIO14 ─────┐          |
       |             └─────► PWM (Fan Pin 4, Blue)
       |                        |
       | GPIO27 ◄────┬──────── TACH (Fan Pin 3, Yellow)
       |             β”‚
       |        [10kΞ© pull-up to 3.3V]
       |             β”‚
       |         [3.3kΞ©] in series
       |             β”‚
       |        [0.1nF cap to GND] ◄──(RC filter)
       +------------------------+
                     β”‚
                     β–Ό
           +------------------------+
           |       Noctua Fan       |
           |         4-pin          |
           |                        |
           | Pin 1 (Black): GND ◄────── GND from PSU
           | Pin 2 (Red):  +12V ◄────── +12V from PSU
           | Pin 3 (Yellow): TACH ─────► GPIO27 (via RC & pull-up)
           | Pin 4 (Blue):   PWM ◄───── GPIO14
           +------------------------+

Software Setup

  1. Flash the WindScape ESPHome YAML to your ESP32.
  2. Add Wi‑Fi credentials in secrets.yaml.
  3. Rebootβ€”the device will auto‑discover in Homeβ€―Assistant.

Preset Library

# Preset Base Windβ€―Range Gust Style Character
1 OceanΒ (Atlantic Coast) 8–16β€―mph Rolling, 3β€―% @β€―2β€―Γ—β€―speed Energising, constant swell
2 MediterraneanΒ (Italian Coast) 4–10β€―mph Gentle, 1.5β€―% @β€―1.6β€―Γ— Relaxed, great for reading
3 CountrysideΒ (French Fields) 2–8β€―mph Rare, 0.8β€―% @β€―1.4β€―Γ— Whisper‑quiet, ideal for sleep
4 MountainsΒ (Alpine Range) 6–18β€―mph Sharp, 5β€―% @β€―2.3β€―Γ— Crisp, invigorating shifts
5 PlainsΒ (Patagonian Steppes) 10–22β€―mph Sustained, 8β€―% @β€―2.5β€―Γ— Strongest airflow, hot days
6 FjordΒ (Norwegian Fjords) 8–20β€―mph Channeled, 6β€―% @β€―2.4β€―Γ— Dramatic, funnel‑like gusts
7 Manual β€” β€” Direct user control

Configurationβ€―Reference

Control Range / Options Purpose
Windβ€―Intensity 30 – 150β€―% Master power scaler
Gustβ€―Frequency 10 – 90β€―% Probability of gust start
Windβ€―Variability 5 – 40β€―% Overall speed fluctuation
Minβ€―Fanβ€―Speed 0 – 50β€―% Prevent stall
Maxβ€―Fanβ€―Speed 40 – 100β€―% Safety ceiling
Windβ€―Mode 6 presetsβ€―+β€―Manual Select ambience
Restart β€” Reboot ESP32

Advanced Tuning Parameters (for power users via config):

  • Turbulence Detail Level: 30m (how fine-grained the wind texture is)
  • Turbulence Strength: 0.3 (how pronounced the micro-variations are)
  • Thermal Event Rate: 0.025Hz (how often warm air bubbles occur)
  • Thermal Intensity: 1.8Γ— (how strong thermal effects feel)
  • Thermal Coverage: 15m (how wide the thermal influence spreads)

Monitoring & Sensors

WindScape exposes comprehensive real-time data about the wind simulation engine:

Core Wind Metrics

Sensor Unit Description
Wind Speed m/s Current output wind speed
Target Wind Speed m/s Where the simulation is heading
Wind Change Rate m/sΒ² How fast wind is accelerating/decelerating
Fan RPM RPM Actual fan rotation speed

Weather System Status

Sensor Type Description
Current Weather Phase 0-2 Quiet (0), Medium (1), High (2) activity
Weather Phase Description Text Human-readable phase status
Phase Duration Remaining seconds Time until next phase change

Physics Engine Monitoring

Sensor Unit Description
Turbulence Energy J Von KΓ‘rmΓ‘n spectral energy level
Spectral Energy Buffer m/s Real-time turbulence contribution
Gust Active % Current gust progression (0-100%)
Gust Intensity Γ— Active gust strength multiplier
Thermal Bubble Active % Thermal event progression (0-100%)
Current Thermal Contribution m/s Thermal effect on wind speed

System Status Indicators

Sensor Type Description
Wind Simulation Active Binary Physics engine running status
Gust Currently Active Binary Gust event in progress
Thermal Bubble Active Binary Thermal event in progress
External Sensor Mode Binary Using external data feed
Wind Speed Converging Binary Current speed near target
Simulation Status Text Overall engine activity summary
Physics Debug Info Text Technical diagnostic data

These sensors enable:

  • Real-time dashboards showing wind physics in action
  • Advanced automations based on weather phases or thermal events
  • Performance monitoring and troubleshooting
  • Educational visualization of atmospheric modeling

Troubleshooting

Symptom Checks
Fan not spinning Verify PWM pin & 25β€―kHz capability Β· Confirm 5β€―V/12β€―V supply Β· Raise Minβ€―Fanβ€―Speed above stall duty
No RPM feedback Check tach wiring/pull‑up Β· Confirm fan outputs tach Β· Adjust pulse multiplier
No wind simulation Ensure Manual Mode is off Β· Windβ€―Intensity β‰₯β€―30β€―% Β· Windβ€―Variability not 0β€―%
Airflow feels static Increase Windβ€―Variability
Too chaotic Lower Gustβ€―Frequency or choose a calmer preset

Tips for Best Experience

  • Begin with Defaults – Presets are tuned for realism out‑of‑the‑box.
  • Tweak Slowly – Small slider changes have large perceptual impact.
  • Pick the Right Preset – Match airflow to activity: calming Countryside for sleep, energising Plains for heat.

Technical Notes

How the Wind Physics Work: WindScape creates realistic wind by combining several clever techniques:

  • Turbulence Modeling - Uses proven atmospheric science to generate the micro-variations that make wind feel natural instead of robotic
  • Thermal Effects - Simulates warm air rising (like over hot pavement) that creates those gentle gusts you feel in real life
  • Weather Moods - Automatically shifts between calm, moderate, and active periods, just like real weather patterns
  • Smart Gusting - Adds realistic wind bursts that build up naturally, peak, and fade away organically
  • Smooth Transitions - Prevents jarring speed changes by using physics-based momentum

Behind the Scenes:

  • Updates 5 times per second with intelligent randomization
  • Tracks multiple wind frequencies simultaneously for authentic texture
  • Models thermal events that happen every few seconds to minutes
  • Adapts intensity based on the current weather "mood"
  • Uses logarithmic scaling so fan speed changes feel natural to humans

Roadmap

  • Native integration with moodist ambience engine.

How WindScape Works

The Wind Simulation System: WindScape layers multiple systems to create convincing natural wind:

  1. Micro-Turbulence - Constantly adds tiny speed variations (like leaves rustling) by mixing different "frequencies" of wind movement together

  2. Thermal Bubbles - Occasionally creates rising warm air effects that start gentle, build to a peak, then fade away naturally over 8-15 seconds

  3. Weather Moods - Automatically cycles between calm periods (1.5-3.5 min), normal activity (2-5 min), and windy periods (1-2.5 min) with natural transitions

  4. Realistic Movement - All speed changes use momentum and inertia, so the fan never makes sudden jarring jumps

  5. Multiple Time Scales - Fast micro-changes (5x/sec), medium gusts (seconds), and slow mood shifts (minutes) all work together

External Sensor Mode skips all the simulation and directly maps your data (like car speed) to fan speed, with a 60-second safety timeout that switches back to your last preset if the signal is lost.


Links


© 2025β€― WindScape. Licensed under the MITβ€―License unless noted otherwise.