This implementation of Arduino based PWM Fan Controller is simple circuit that allows controlling fan speed by varying the duty cycle of the output signal. For PIC16F684 version click here. I’ve tested with Deepcool 120mm fan and it works OK, however you’ll need to adjust the lowest PWM value according to a specific fan you are using otherwise the fan can stall. Current design does not read the actual fan speed, it just sends 3 constant PWM values: High, Medium and Low. I’ve originally planned to use an LCD display to show 3 fan speed values, however in order to further simplify this circuit I’ve decided to completely remove it. PWM Fan Controller sketch can be downloaded here. Design schematic diagram is shown next.
I/O Pin 9 on the Arduino board is directly connected to fan control input and by reading the state of 3 push buttons on pins 2,3,4 different PWM values are sent to the fan. The blue LED seen on the prototype board is just for verifying correct circuit operation and also can be removed.
This design can be further simplified by removing 2 of the speed setting buttons and controlling the fan with only one, one click – Low speed, 2 clicks – Medium and 3 for High speed fan operation. In this case some modification to the sketch are needed.