Engineering the Perfect Breeze: Advanced Thermal Control
Modern gaming rigs and data servers generate massive heat, often exceeding the capabilities of standard motherboard fan headers. The PC Chassis Fan Controller is a high-fidelity DIY solution designed to drive industrial-grade 4000 RPM fans with surgical precision. By using an Arduino Nano as the brain and a dedicated 12-bit PWM controller, this system eliminates the "stepped" speed jumps of basic controllers, providing a perfectly smooth airflow curve.
Professional Driving: PCA9685 and Opto-Isolation
Controlling high-speed fans requires careful electrical management:
- 12-Bit PWM Resolution: Instead of the standard 8-bit PWM (0-255) found on Arduinos, this project uses the PCA9685 driver. This provides 4,096 levels of speed control, allowing you to fine-tune the fan speed to the exact RPM needed for noise-vibration balance.
- Tachometer Safety: The "FG" (RPM signal) from fans can be noisy or prone to back-EMF. To protect the Arduino, the developer used PC817 Optocouplers. This ensures the high-speed pulse data is transmitted via light, physically isolating the fan's electrical noise from the microcontroller's logic.
Smart Logic: Manual vs. Automatic Modes
The system offers a versatile control interface toggled via an SPDT switch:
- Manual Mastery: Using two Rotary Encoders, users can set the front and rear fan speeds independently. A unique "increment selector" (controlled by the encoder push-buttons) allows you to jump speed in steps of 1, 10, or 100 values. The final speeds are saved to the EEPROM, so the fans remember their settings even after a power cycle.
- Thermo-Dynamic Mapping: In Auto Mode, an NTC Thermistor monitors internal case air. Using a mathematical function derived in Desmos, the Arduino calculates a "Cooling Curve" based on a user-set target temperature (adjusted via a 10k potentiometer). As temps rise between 20°C and 40°C, the fans accelerate proportionally to maintain thermal equilibrium.
The Dashboard: HD44780 Feedback
All real-time telemetry is displayed on an I2C-enabled 16x2 LCD:
- Header Line: Displays the current PWM duty cycle values for both fans.
- Status Line: Shows the live temperature (in Celsius) alongside the "Target Set Point," giving the user an immediate view of the thermal performance.
This project is a masterclass in I2C communication, Opto-isolation, and EEPROM management, making it an essential build for any PC enthusiast looking to take their cooling to the professional level.
This project is about driving 2x120mm brush less Fans using Arduino Nano, 12 bit PWM module PCA9685, LCD HD44780+I2C module, 2 Rotary Encoders, Temperature Sensor NTC MF 52-103 and optocouplers.
To driving Fan I used 12 bit resolution PWM module PCA9685. Connected it over I2C port to Nano. To read the RPM of Fans I isolated the inputs with PC817 Optocouplers. The FG signal provides 2 pulses every 1 period.