Home Lab Vibes — Cooling Controller
5-channel PWM fan controller with touchscreen interface for Home Lab cooling management.
- 5 independent PWM channels — control up to 5 fans individually
- Real-time RPM monitoring — TACH signal reading with smoothing algorithm
- 3.5" TFT touchscreen — intuitive UI with +/- buttons for each fan
- Persistent settings — fan speeds saved to EEPROM, restored on boot
- Standalone operation — powered via 12V MOLEX, no USB required
| Component | Description |
|---|---|
| MCU | RP2040 (Raspberry Pi Pico or compatible) |
| Display | 3.5" TFT 320x480 (ILI9488 + FT6206 touch) |
| Power | DC-DC buck converter (12V → 5V) |
| Fans | 4-pin PWM fans (12V) |
| GPIO | Function | Description |
|---|---|---|
| 15 | LCD_CS | Display chip select |
| 16 | LCD_RST | Display reset |
| 17 | LCD_RS | Display data/command (DC) |
| 18 | SCK | SPI clock |
| 19 | SDI (MOSI) | SPI data in |
| 20 | CTP_SDA | Touch I2C data |
| 21 | CTP_SCL | Touch I2C clock |
| — | CTP_RST | Touch reset → 3.3V_EN |
| — | LED | Backlight → VCC |
| — | SDO (MISO) | Not connected |
| GPIO | Function | Description |
|---|---|---|
| 2 | PWM_1 | Fan 1 PWM signal |
| 3 | TACH_1 | Fan 1 tachometer |
| 4 | PWM_2 | Fan 2 PWM signal |
| 5 | TACH_2 | Fan 2 tachometer |
| 6 | PWM_3 | Fan 3 PWM signal |
| 7 | TACH_3 | Fan 3 tachometer |
| 8 | PWM_4 | Fan 4 PWM signal |
| 9 | TACH_4 | Fan 4 tachometer |
| 10 | PWM_5 | Fan 5 PWM signal |
| 11 | TACH_5 | Fan 5 tachometer |
Configure TFT_eSPI
User_Setup.hwith these SPI pins
MOLEX 12V ──┬──► Fan power (12V direct)
│
└──► DC-DC input
│
▼
DC-DC output (5V) ──► Pico VBUS
│
3.3V ──► TFT display
│
GND (common for all)
⚠️ Common ground between 12V and 3.3V is required for correct TACH signal reading.
Install via Arduino Library Manager:
- TFT_eSPI — display driver
- Adafruit_FT6206 — capacitive touch controller
- Configure
User_Setup.hin TFT_eSPI library for your display - Add
#define TOUCH_CS -1to suppress touch warning (we use I2C touch) - Select board: Raspberry Pi Pico (or your RP2040 board)
- Upload sketch
| Parameter | Value | Location |
|---|---|---|
| Baud rate | 115200 | Serial Monitor |
| Min fan speed | 10% | Hardcoded |
| Max fan speed | 100% | Hardcoded |
| Speed step | 10% | Per button press |
| EEPROM save delay | 2 seconds | Anti-spam protection |
- Power on via MOLEX connector
- UI displays 5 fan blocks with current speed (%) and RPM
- Tap − or + buttons to adjust fan speed (10% steps)
- Settings auto-save after 2 seconds of inactivity
HLV_CoolingController/
├── HLV_CoolingController.ino # Main sketch
├── FanController.h # Fan class header
├── FanController.cpp # Fan class implementation
├── LICENSE # MIT License
└── README.md # This file
- 5-channel PWM control
- RPM monitoring with smoothing
- Touchscreen UI
- EEPROM persistence
- Standalone 12V power
- Temperature sensors (DS18B20)
- Auto fan curves based on temperature
- WiFi monitoring (optional)
MIT License — feel free to use, modify, and share!
Part of the Home Lab Vibes collection — stay tuned for more cool projects! 🚀
YouTube: @HomeLabVibes