I'm trying to build a fan controller based on Arduino. It will be (at least I hope so) possible to either control with pure PWM or voltage regulator based on buck converter. Now what I'm trying to do is:

build a circuit that will allow me to choose, if I want to power the fan with full 12V (for PWM fans) or buck converter output (for 3-pin fans).

Selection should be possible with Arduino digital output (either LOW or HIGH). I to google some solutions and tried to simulate some circuits based on diodes or transistors, but it wouldn't work as I envisioned. I lack knowledge to fully design what I want. I would like to get i either:

  • sample circuit (if possible simple and cheap)
  • phrases to google (I'm not native english speaker and maybe I'm not looking for the right thing)
  • some insight if my "vision" is achievable and makes sense

Thank you!

EDIT. According to "pure PWM" or "12 V".


4-pin fans use 12V supply all the time with additional cable to control via PWM. 3-pin fans on the other hands should be controlled by varying input voltage.

This is conceptual image of what I'm trying to do:


Input voltage to buck converter is 12V.

Thank you for tag suggest!

  • \$\begingroup\$ I suggest that you change the term "Arduino" here to eg "microcontroller" if you want the expertise of generally electronics capable people (which I think you do), or leave it as is if you want the Arduino community to look at it. Left as is it may get migrated to the Arduino list - which I think is less desirable. There are some people here who see the word Arduino and can't rest until they have moved the question on, no matter how EE relevant it is. Your choice. \$\endgroup\$ – Russell McMahon Mar 7 '15 at 9:56
  • \$\begingroup\$ Try adding a link to a block diagram - or paste an image URL and someone will convert it to a visible image. The requirement sounds "easy enough" but a slight;y better idea of what you want would be useful. Even a circuit of what you tried that did not work would be a good start. \$\endgroup\$ – Russell McMahon Mar 7 '15 at 9:59
  • \$\begingroup\$ You say "pure PWM fans" and "full 12V" as if they were the same thing. Why is unclear. How is PWM applied when 12V is used? If you use a buck converter controlled by a microcontroller, what is the max voltage input to the buck converter? \$\endgroup\$ – Russell McMahon Mar 7 '15 at 10:01
  • \$\begingroup\$ I edited original post to give more informations. Thank you for your input! \$\endgroup\$ – Pawel Mar 7 '15 at 12:13

As a simple and largely unbreakable device try using a device called a relay. Pick one that has a changeover contact. In effect it is a mechanical switch controlled by an electromagnet.

The electromagnet (coil) would be activated by the microcontroller via a transistor.

  • \$\begingroup\$ I think "changeover contact" is the phrase I was looking for the whole time. Solution worth considering, I'm just just worried about the cost as I would need 4 or 5 of them. Any cheap, wildly available products? \$\endgroup\$ – Pawel Mar 7 '15 at 12:10

If you want either

  • Output from buck converter


  • 12V

applied to the fan then you can use diodes from both sources and enable one at a time.
This is not ideal as you have a diode drop in each case but should work well enough n most cases.

Use Schottky diodes for minimum voltage drop.

Once we understand the requirement better we can show you how to use transistors to do the switching.


First, to make things simple I would pick a fan for the design like the first option (12V, GND, Tach).

Next you will want to protect your Arduino, the fan and the power supply. I would recommend looking at Texas Instruments website for a fan or motor controller demonstration board and drive the PWM signal to it from your arduino, which in turn will PWM the actual motor for the fan. This has several benefits

  1. The problem of control/feedback has been solved/built for you (in a demo board)
  2. If you choose the right part, there is motor stall/overcurrent protection built in, so you won't need to worry about cooking your motor (or the driver circuitry)
  3. It will take the control/feedback signals that the arduino can support.

Alternately, there is a motor shield for arduino that will get you where you want to go like this one here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.