REVISED & UPDATED:
Actually I'm using the Arduino (plus some external transistors/capacitors) to dampen down the noise profile (and the blinding LED light show) of the four stock LED 2-wire dumb fans that comes with my Antec 902 case. The Arduino holds a minimum power output profile for each fan to keep it from stalling, revving them up only enough to meet the cooling needs as read by open hardware monitor. The critical fans like CPU (Corsair H60), GPU and PSU are still factory controlled as a safety measure.
However, fan tach signals and 4-wire pwm fans are easy enough to do. The tricky bit is that the IBM spec for fan tach signals are two ground pulse triggers per rotation, thats easy for the arduino to handle, the hard part is if you desire reporting that signal to the 12volt tach pin on the motherboard or not. For this there is three possible solutions.
1. Is a transistor to signal the motherboard tach pin with the ground pulse.
2. Or, for about 4 bucks an NTE2018 could be used handle up to 8 of them by converting the 5v Arduino pwm outputs to ground only signals that the motherboard can see.
3. Just skip sending signals to the motherboard. (However the CPU header still needs a signal, else it may refuse to boot up.)
Using a 5volt Arduino to control a 3.3v pwm lead on a 4-pin, you can get by just fine using two resistors to make a simple voltage divider.
ie. Ground>3.3kOhm>fanPwmLead>1.7kOhm>'5volt Arduino pwmPin' And tada! Instant speed control.
That way the fan's pwm lead only sees 0~3.3volts depending on the Arduino 0~5volt output.
From there the Arduino only needs to be setup with an interrupt routine for each tach wire to monitor speed.
Info for the spectators: (Rule of thumb mini-guide.)
For the rest of you DIY people following along and thinking about making one, consider the following:
How many tach signals will you need to monitor? 0, 1, 4, 20? Different Arduino models have different amounts of interrupts. (read: tach signal inputs).
Most Arduino models = up to 2 (5volt)
Except the following models:
Leonardo = up to 4 (5volt)
Mega2560 = up to 6 (5volt)
Due = up to 70 (3.3volt)
If your wondering what the difference is between a 5volt vs a 3.3volt Arduino. The 3.3v Arduino can plug straight into the pwm wire of any standard 4-wire fan and control it (or them) directly.
Tach signal is just a hall effect sensor that makes/breaks connection to the fan's ground lead. The tach pin on the motherboard fan header is pulled up to 12v by a 10k'ish resistor. So if your arduino intends on reporting a tach signal to the main board you'll need a transistor to handle sending a ground to that high of voltage.
Are your fans 2,3, or 4 wire fans?
2-wire dumb fans only need to have their input power modulated. Using and external transistor to toggle the ground wire will work nicely. An optional capacitor in parallel will mute any PWM noises the fan will make as a result.
3-wire fans are tricky if you intend to use all three wires, as the tach signal relies on the ground wire always being connected. Most suitable transistors work by interrupting this ground wire the fan (and thus tachometer) uses. Here your only functional option is to manipulate the power lead, that's a little bit more difficult in electronics. You'll need to research "high-side switching" circuits. Perhaps an LTC1155 can help. It just converts the Arduino's 3.3 or 5 volt output signals into 12v signals needed to toggle a high-side mosfet on/off.
4-wire fans, now your talking! The tach wire is totally usable. The pwm wire is 3.3v = off, 0v = on. So if you have a 3.3volt Arduino you can plug in directly. A 5volt Arduino will need just a little extra help getting the voltage right.
Can you use a 5volt Arduino to control a 4-wire pwm fan directly? Yes/No, if your courageous (read: foolish) you MIGHT
be able to get away with it. It depends on the fan, it might tolerate it well, it might zap the fan's control circuit, it might short out and fry the Arduino. If you have money to burn and like doing things over, give it a try.
If anybody else is interested in building one let me know, maybe we can type up some howto's of the subject. Also, I could post the code for my setup, a 4-channel, 2-wire fan controller (with 10-segment temperature responsive RGB LED light strip control).
Best of luck,