Controls and monitors up to 4 PC-like fans based on the readings of an NTC temperature sensor.
The device can be used in two fashions:
-
As a standalone module. In this case, it will need to be connected to a computer via USB port only to perform the initial configuration.
-
"Online". The module is connected to a USB port, allowing the temperature, PWM duty cycle and fan speed to be monitored and the configuration to be changed at any time.
4 4-pin fan connections. Each fan speed is monitored individually. 2 configurable PWM channels (1 channel for each 2 fans). 1 NTC temperature sensor.
Each PWM channel have two temperature thresholds (low and high) and two values for the PWM duty cycle (minimum and maximum). The controller will set the duty cycle as follows:
- Temperature < low temperature threshold -> Minimum PWM duty cycle
- Temperature > high temperature threshold -> Maximum PWM duty cycle
- Other cases -> PWM duty cycle varies linearly according to the temperature
Connect the controller to a USB port. It should show on the computer as a serial port.
Access the controller's serial port using a terminal program (9600bps, 8-bits, no parity, 1 stop bit)
Type until the message bellow shows up:
Press "c" to change the configuration or "m" to monitor
Press "c" to enter the configuration menu.
Note: you must configure all the parameters before using the controller for the first time!
Configuration
NTC temperature sensor:
(a) Resistance at 25 C..........: 46800 Ohm
(b) B factor....................: 3950
PWM channel 1 (fans 1 and 2):
(c) Low temperature threshold...: 40 C
(d) High temperature threshold..: 55 C
(e) Minimum PWM duty cycle......: 40 %
(f) Maximum PWM duty cycle......: 100 %
PWM channel 2 (fans 3 and 4):
(g) Low temperature threshold...: 40 C
(h) High temperature threshold..: 55 C
(i) Minimum PWM duty cycle......: 40 %
(j) Maximum PWM duty cycle......: 100 %
(z) Save and exit
Type the letter corresponding to the parameter you want to change. Type the new value and press .
Once you finish configuring the controller, type "z" to save your changes.
Be sure to exit the configuration menu when you are done as the temperature will not be monitored when the controller is in configuration mode!
Press "m" on the initial screen. The controller will show the temperature read by the NTC sensor, the PWM duty cycle for both channels (PWM1 controls fans 1 and 2, and PWM2 controls fans 3 and 4) and the speed reading (in RPM) for all fans. Press any key to return to the initial screen.
Real-time monitor. Press any key to exit.
Temp(C) PWM1(%) PWM2(%) RPM1 RPM2 RPM3 RPM4
26.81 40 40 210 0 5475 0
26.81 40 40 210 0 5475 0
26.83 40 40 210 0 5460 0
26.83 40 40 210 0 5460 0
26.85 40 40 210 0 5475 0
26.85 40 40 210 0 5475 0
26.86 40 40 210 0 5475 0
26.86 40 40 210 0 5475 0
26.89 40 40 210 0 5475 0
26.89 40 40 210 0 5475 0
Temp(C) PWM1(%) PWM2(%) RPM1 RPM2 RPM3 RPM4
26.92 40 40 210 0 5475 0
26.92 40 40 210 0 5475 0
26.94 40 40 210 0 5475 0
26.94 40 40 210 0 5475 0
For standalone usage, close the jumper P7, so the controller can get power from the power supply cable and work with no USB connection. In this case, you may omit all the zener diodes and replace all 150Ohm resistors with wire jumpers, as those components are intended to protect the computer's USB port from (unlikely) damages caused by fan failures.
For "online" usage, remove the jumper P7. This way, the controller will be powered via the USB port, preventing the 5V from the power supply from being fed back to the computer's USB port.
Also for "online" usage, if your PC does not has an internal type-A USB port, you can make a USB-mini to USB-internal-header cable by cutting an USB-mini cable and installing a 5-pin (or 4-pin) "DuPont" connector on the other end. The wires on USB cables are usually color-coded:
| Wire color | Function | DuPont connector pin |
|---|---|---|
| Red | +5V | 1 |
| White | Data + | 2 |
| Green | Data - | 3 |
| Black | GND | 4 |
| (shielding braid) | Chassis ground | 5 (optional) |
The cable should look like this:
| Qty. | Description | Reference Part Number | Designators |
|---|---|---|---|
| 1 | Arduino Nano board | Arduino Nano R3 | U1 |
| 4 | 4-pin PC FAN PCB Header; Male | Molex KK254-47053 | P1, P2, P3, P4 |
| 1 | 4-pin PC accessory PCB Header; Male | Molex 8981 Series | P5 |
| 1 | 2-pin JST-XH type PCB Header; Male | JST-XH B2B-XH-A | P6 |
| 4 | Zener Diode; 5,1V; 1/2W | OnSemi 1N751A | D1, D2, D3, D4 |
| 8 | Carbon Resistor; 150 Ohm; 1/8W | (generic) | R1, R2, R3, R4, R5, R6, R10, R11 |
| 4 | Carbon Resistor; 3,9 KOhm; 1/8W | (generic) | R7, R8, R9, R12 |
| 1 | Carbon Resistor; 22 KOhm; 1/8W | (generic) | R13 |
| 4 | Polyester Capacitor; 100nf; 63V | (generic) | C1, C2, C3, C4 |
You will also need a NTC temperature sensor with a female JST-XH connector and nominal resistence between 10KOhm and 100Khm at 25˚C. NTCs with other resistences may require R13 (and the value of REFERENCE_RESISTANCE on the source code) to be changed in order to obtain more precise temperature readings.

