Eliminating Raspberry Pi Fan Noise with Temperature-Based Control
🎯 Problem
My Raspberry Pi (running MPD, Navidrome, and Grafana) had a small 5V case fan connected directly to:
- Red → Pin 4 (5V)
- Black → Pin 6 (GND)
This caused:
- Constant full-speed rotation
- Audible “shhh” fan noise
- Noise louder than the music at low volume
Despite this, CPU temperature was only:
- 25–30°C with fan
- ~47–48°C without fan
The system was massively overcooled.
🔎 Root Cause
The fan was powered directly by 5V, meaning:
- No temperature awareness
- Always running at maximum speed
- Cooling far beyond what the workload required
For lightweight workloads (MPD + Docker services), this level of cooling is unnecessary.
🛠 Solution: Temperature-Based Fan Control
Instead of removing cooling entirely, I implemented fan-on-demand control.
1️⃣ Rewire the Fan
From:
- Red → Pin 4 (5V)
To:
- Red → Pin 8 (GPIO14)
- Black → Pin 6 (GND)
This allows software to control the fan.
2️⃣ Enable gpio-fan Overlay
Edit:
sudo nano /boot/firmware/config.txt
Under [all], add:
dtoverlay=gpio-fan,gpiopin=14,temp=65000,hyst=5000
Meaning:
- Fan ON at 65°C
- Fan OFF at 60°C
- 5°C hysteresis prevents rapid toggling
3️⃣ Reboot
sudo reboot
📊 Result
Under normal workload:
- Temperature: ~47°C
- Fan: OFF
- Noise: Completely silent
The fan now only activates if the CPU reaches 65°C, which is unlikely during music playback.
🧠 Key Insight
Constant cooling is not the same as optimal cooling.
For audio-focused Raspberry Pi use:
- Overcooling adds noise
- Noise defeats the purpose of a jukebox
- Smart thermal thresholds preserve silence
Temperature control became a countermeasure to fan noise, not a thermal necessity.
🎵 Final State
- Silent Raspberry Pi
- No constant mechanical noise
- Automatic thermal protection
- Clean, intentional design
Silence first. Cooling only when required.