Introduction: PWM Fan Controller

You can see the PWM Fan Controller project here.

The heart of the PWM Fan Controller is a PIC 12F675 microcontroller. This microcontroller is reading the analog output of a LM35 temperature sensor using a ADC (analog to digital converter) . The resulting digital value is converted to a temperature and a fan is powered proportionally to how hot the sensor is. The sensor is mounted against the hard drive chassis so it is measuring the actual drive temperature and not just the air temperature inside the housing.

Step 1: PWM Fan Controller - Parts

Step 2: PWM Fan Controller - LM35 Sensor Overview

The LM35 temperature sensor package being used is the TO-92, it is small enough for this project and is leaded so that we can easily connect it to some wires. It is also nice since we can extend it by simply plugging it into a 0.1 inch female wire harness. This is a Celsius device and since the output is 10mV per degree it is very simple to calculate the temperature. It is even nice and simple to directly view the temperature on a multimeter as can be seen in the video.

Step 3: PWM Fan Controller - Reading Data With the Microcontroller

The LM35 outputs 10mV per degree Celsius, this can be read very easily on the meter but unfortunately is isn’t quite that simple to read it within the microcontroller. The output of the LM35 is connected to an ADC (analog to digital converter) so that we can get a usable reading from it, but first we need to do a small calculation.

The analog input has a range of 0 to 5 volts and the digital resolution is 10 bits. This means that the 0 to 5 volt range will be represented by a number from 0 to 1023 in the microcontroller. If we divide 5 volts by 1024 we get the number of volts per digital increment. In this case it is 0.004883 volts per increment. So if the voltage was 1 volt on the microcontroller pin we would expect to have a reading of around 204 as the digital number (1/0.004883).

To convert the digital value to a degrees Celsius number we need to do a bit of math. If we take the digital result and multiply it by 49 then divide it by 100 we will get a result that is very close to the correct result. The calculation looks a bit weird since we are working with integer math. With integer math the information after the decimal is lost. For example 25/3 would be 8 (not 8.333).

Here is a full example. If we have a temperature of 15 degrees Celsius the voltage out of the LM35 would be around 10mV * 15 = 0.15V we know that each 0.004883 volts is one count for the digital side of the ADC therefore 0.15V / 0.004883 V = 30.73 this would provide a value of simple 30. Finally if we use the formula 30 * 49 / 100 = 14.7 but it would be stored as 14.


Step 4: PWM Fan Controller - PWM Control Setup

The intent of this project is to keep the fan off when the drive is cool and since the drive spins down after about 5 minutes of inactivity the drive is allowed to naturally cool down. Also when the temperature is moderate the fan speed should be slow which will be as quiet as it can be. To come up with the temperature range of just running slow to running at full fan speed I used the data from the Google hard drive failure report.

Step 5: PWM Fan Controller - Completion

The final circuit was built onto a perf board. The circuit had to be kept quite small so that it would fit in the small area beside the fans in the fan enclosure. A piece of a business card was attached to the bottom of the perf board to prevent the circuit from shorting out to the metal case of the hard drive enclosure. Hot glue was used to isolate some parts of the circuit as well as providing some strain relief in other areas. Hot glue isn’t conductive which makes it perfect for these quick and dirty applications.


aporgatorio (author)2014-06-24

is this also possible for a commercial desk fan??? I want to make use of lm35 as temperature sensor to vary the speed of an AC MOTOR...

can you possibly help me?

profpat (author)2011-02-12

this is great, i do have a hard disk double fan cooler that runs at full speed regardless of the temperature, with your design, it would be controlled according to the temperature..thanks for your contribution..

Thereyouhaveit (author)2011-02-04

So how do i modify it for 12v usage ?

abbtech (author)Thereyouhaveit2011-02-04

In this circuit the fan is operating from 12 volts but the controller is running from 5 volts. If you want to operate it from a 12 volt power supply you would need to make the 5 volt supply using some electronics. Do a Google search for 7805 voltage regulator and you will find many examples on how to convert 12 volts DC into a nicely regulated 5 volt DC output.

Thereyouhaveit (author)abbtech2011-02-04

Oh , the 7805 , okay , i know everything else :)

Dragonhen (author)2010-09-02

Thanks for explaining so clearly how to assemble this project. ^_^.. Greetings from Chile.

abbtech (author)Dragonhen2011-02-04


abbtech (author)Dragonhen2010-09-02

Thanks. :)

jimyopkins (author)2011-01-06

thanks a lot , I would like the schematic diagram if possible
I didn't find it here

abbtech (author)jimyopkins2011-02-04

Hi Jimyopkins,

Click on the first link in the article and you will see the schematic. I didn't post it here since the Instructables resolution would make it non-readable.

kelseymh (author)2010-08-15

This is great! Having a complete kit available for users who don't want to source their own is a good idea. We appreciate that you included the parts list; you might think about moving it up to the beginning (intro or before Step 1), but that's not critical. Rated and channel-featured.

abbtech (author)kelseymh2010-08-15

Thanks for the tip. You are right it flows much better this way.

About This Instructable




Bio: You can see my blog here: and my personal site here:
More by abbtech:Halloween Orange Laser Etched into a Glowing Mini PumpkinPWM Fan ControllerIR Remote Control Jammer
Add instructable to: