PC Fan Control and RPM Reading w/ Arduino

After my first fan controller was competed and working, I was pretty happy with it. But as I learned more, experimented more, and became familiar with more hardware, I realized much more could be done with the controller.

With the previous controller, I used the Attiny85, which was perfect for the job it was given, but everything was hard coded; if I wanted to change any variable, I’d have to pull the chip, program it, then toss it back into the board for testing. This was a bit cumbersome, so I decided I would try a new controller with a serial interface, where I could update the code, and manipulate the controller on the fly, while keeping it in its environment. I also had been experimenting with reading the hall effect sensors that are present on three wire 12 volt computer fans, so there was also the idea to build in a measurement apparatus for rotational speed.

For this project I decided to upgrade from the Attiny85 to the TQFP version of the Atmega328p a much faster and more powerful microcontroller. I would also use a CH340g for the USB to serial communication. I decided to continue powering the controller with a 5v USB connection, so I would also continue to use the MC34063 buck/boost regulator to power the 12v fans. I would however use the SOP version, instead of the DIP-8 to reduce the footprint. To power the fans, I decided to use a combination of NPN and PNP transistors instead of just a single transistor design. This would allow me to filter out some of the PWM signal from the microcontroller that seemed to be creating noise pollution when reading from the Hall Effect Sensors. I also decided to add a large over-ride switch to control the fans independently. To top it off, I added an I2C header for a display to view some output.


I set out to putting together the schematic and board with Kicad, checked everything over twice, and then again.(you almost always get something wrong the first time) I submitted the design to PCBway for fabrication and waited. When the boards came, they looked beautiful, as usual. PCBway has not let me down. I populated the boards with components and was happy when the microcontroller flashed on first try. The boost converter was outputting the correct voltage, and everything was going to plan, until I hooked up two fans. The load was too much, and the USB voltage dropped below what the switching regulator was expecting, this cause it to output a voltage far less than desired, and had the added affect of consuming a huge amount of current, even when no load was connected, which translated into the boost converter chip getting very hot. Bad, I had pushed the power limits of what USB 2.0 devices could handle. Looking back, the layout of the board could have been done better, perhaps even enabling the use of a more efficient boost converter. I decided a new version was going to be necessary. In the previous design, the fans and circuit power consumption was less demanding, however, I didn’t want to be limited to a low power fan controller. The next design would be powered without a boost converter, I decided. Stay Tuned for version 3!


Because there have been revisions after this board, and I no longer have the code for this specific board, I will post the controllers source code in a future post.

Leave a Reply

Your email address will not be published. Required fields are marked *