🎯 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.


discussion