Intro: Spin Down Noisy Laptop Fan
I bought myself an acer aspire V3-772G with a quad core i74702 CPU as a desktop replacement. This is a powerful yet cool laptop, but under linux the fan is always heavily running - without any need, as it just blows out cool air.
Unfortunately the fan cannot be controlled via SW under linux. Still the CPU temperatures can be read, so I did the best I can to make that laptop not only cool but silent.
Step 1: Get Access to the Fan Wireing
Search on youtube for "acer aspire disassembly" to get instructions on how to open up the laptop. Then cut the red wire, extend the open ends and lead them to the outside of the laptop.
You don't have to attach to the yellow cable. That one sends fan rotation speed data to the computer. I initially thought I have to manipulate that one too, but it turned out that this is not necessary.
Also connect one wire to the black (ground) wire. It is not shown in the picture, as I was not aware of it by that time.
Step 2: Build the Circuit
Have a connector to these 3 wires. Now you can shortcut the pins 1 and 2, and have a rest before starting the electronics step, while using the laptop as before.
Attach an electronics as shown in the picture. The idea behind this design is to prohibit any laptop damage. Therefore, if that circuit is not connected to the arduino (or if the cable to the arduino ripps off) the fan works nearly as if there was no change to it at all. To accomplish this, we need reliable access to ground (not via USB or so). This is why we had to lead the ground line o the outside too.
The degree, by which the fan is spin down, can be controlled by a PWM signal. The reason for the 10 uF capacity is to smooth the PWM. The diodes are to shift the working point of the transistor. (Actually a FET should be more suitable for that circuit, but I haven't made it that way, however.)
Step 3: Connect an Arduino With That Given SW
Here is a arduino SW, that receives commands via USB.
It translates comman like "P 70" to a PWM signal at the designated fan pin, that is 70 % high and 30% low. This signal is emitted for 1.2 seconds. After this, the signal goes low again. Then all but the latest command is thrown away and the last (freshest) command is executed. This way no outdated commands can pool up.
The idea behind that "for 1.2 seconds" is, that if no further commands come in via USB (for whatever reasons), again the fan will work nearly as if there was no change to the system at all.
Step 4: Run a Program on the Laptop
Connect the arduino the your laptop and run the given perl script.
The script reads the CPU temperature and translates it into a "percentage", how much the fan should be spun down. This percentage is send to the arduino once per second.
If the script stops working, or if the USB is detached, the fan works as original, so there is not much risk in damaging the laptop. Anyway, I give no garantee at all - it is all on your own risk!