Active Control Windmill

Introduction: Active Control Windmill

This instructable was created in fulfillment of the project requirement of the Makecourse at the University of South Florida (

I got to choose a project to design and build from the ground up. I decided I wanted to try and build a windmill that sensed the wind direction and actively faced it, without needing a vane or tail. As my focus in this project was on the sensor and PID control combination, the windmill does nothing with the energy that spins the blades. Feel free to modify the design to be more useful!

What follows is not the only way to build this. I had to solve several unforeseen problems along the way and it led to me using different materials or tools. Several times I made do with parts on hand or scavenged from old appliances or tech. So again, feel free to zig where I zagged.

In order to fully document this project, I would have to effectively destroy my project in order to provide pictures of each build step. I am unwilling to do that. Instead I have provided the 3d models, materials list, and provided helpful hints I learned the hard way along the way.


I have included the Arduino code and the Autodesk files. You will also need the following:


-Small pipe cutter
-Soldering iron, solder, flux
-Screw drivers
-Razor or boxcutter or exacto knife
-Hot glue gun
-(optional) heat gun


-24 inches of .25 inch diameter aluminum tubing (I got mine from Mcmaster-Carr)
-Arduino Uno
-28BYJ48 Stepper
-ULN2003 stepper controller
-(option 1) Gravity motor shield and hall effect sensor from DfRobot
-(option 2) any other analog rotational sensor
-3+ lead slipring or pancake ring
-project box
-bearings for the nose assembly
-Wood for a platform
-Batteries (I use a 9v for the board and power the stepper with a 7.8 Li-Po)
-RC plane push rods (any stiff small diameter wire will do.)

Step 1: Model the Windmill

I used Autodesk Inventor Student edition to model this windmill project. I have included the stl files in this Instructable. If I were to do this again, I would drastically increase the surface area of my blades so they would work better at this scale.

Things to keep in mind while modeling your project is the scale of your parts vs the resolution/tolerances of your available printer. Make sure you scale your model so it will fit any required sensors or other onboard equipment.

Also I found that the strength concerns led me to use per-manufactured items, like the aluminum tubing, for structural parts. I bought my bearings from Mcmaster-Carr and they had a 3d model of them that I used to make a mount the fit them very well.

I found that drawing parts before I attempted to model them helped the process go faster as well as lessened the amount of adjustments I needed to make to get the parts to work together.

Step 2: Assemble the Prints.

Knock off any burrs on bearing surfaces; sand them as well if needed.

I used a heat (carefully!) to straighten a couple of the blades that bent while cooling.

Go slow when inserting hardware into their mounting slots/holes.

Once the structure is assembled, add your sensors and electronics. I hotglued the electronics into position within the project box and used the soldering iron to "weld" the sensor mount into its mounting slot within the body.

Step 3: Assemble the Electronics

Ensure you have good connections to everything. No exposed wire; no potential short circuits.

Ensure your sensor is solidly mounted.

Reference the code in order to identify which pins are plugged where. (i.e. the stepper motor wires or the sensor analog wire.)

I powered the motor with an external source rather than through the Arduino board. I didn't want to damage the board if the motor drew to much current.

Step 4: Program the Arduino

The program and closed loop control scheme is the core of this
project. I've attached the Arduino code and it is fully commented. When tuning the PID, I found that I had an easier time if I did the following: 1) Set all PID gains to zero. 2) Increase the P value until the response to error is a steady oscillation. 3) Increase the D value until the the oscillations resolve. 4) Repeat steps 2 and 3 until you can gain no further improvement.

5) Set P and D to the last stable values. 6) Increase the I value until it returns to the setpoint with no steady state error.

Because of the mechanical design I created a deadzone function to cut power to the motor when the windmill is correctly oriented. This drastically cuts down on the heat in the stepper motor. Before this I ran it and it got hot enough to warp the tower platform and fall out of it's mount.

The blade assembly isn't perfectly balanced and it's heavy enough to cause the pivot assembly to wobble. The wobble essentially gives spurious sensor info to the PID process and adds noise causing excess movement and thus heat.

Step 5: Be an Engineer!

Once everything is assembled and programmed, find a fan or a tropical storm and test out your creation! Part of the fun for building this was figuring out how to solve the problems that popped up. This Instructable is light on detail for that reason.

Additionally, if you attempt to build this and figure out better solutions then I did, please share them.We can all learn from each other.

Be the First to Share


    • Raspberry Pi Contest

      Raspberry Pi Contest
    • New Year, New Skill Student Design Challenge

      New Year, New Skill Student Design Challenge
    • Fix It Speed Challenge

      Fix It Speed Challenge