Lüftersteuerung für Raspberry PI 4

- Veröffentlicht unter Makerspace von

(Hinweis: Das ist ein Repost eines älteren Beitrags)

🛒 = Affiliate-Link (Werbung). Wenn du über diesen Link etwas kaufst, erhalte ich eine kleine Provision – für dich bleibt der Preis gleich.

Ich verwende ein älteres Rasperry 4B-Komplettset (heutzutage gibt es mit ähnlichem Gehäuse, aber mehr Leistung u. a. diesen hier🛒) z.B. als NAS und Home Assistant-Zentrale, und da der Lüfter ziemlich laut ist, hatte ich mir eine temperaturabhängige (PWM-)Lüftersteuerung mit etwas Hardware und einem Python-Script gebastelt. Hier noch mal zusammengefasst, wie ich das gemacht habe:


Hardwareliste

  • 1 NPN-Kleintransistor mit genügend Leistung für den Lüfter (z. B. NP2222)
  • 1 Widerstand 1 kΩ
  • Jumperkabel („Dupont“) zum Verbinden (Stecken und Löten)
  • Schrumpfschlauch zum „Einhausen“ der Schaltung
  • Lötkolben

Schaltplan

enter image description here


Montage

  • Raspi von Stromzufuhr und allen anderen Anschlüssen trennen.
  • Lüfteranschlüsse von der Pinleiste abziehen
  • 1 k-Widerstand (zügig, wegen Hitzeentwicklung) an den mittleren Anschluss des Transistors (Basis) löten.
  • An die andere Seite des Widerstands ein einseitig abgeschnittenes und abisoliertes Stück eines weiblichen Dupont-Kabels löten, über das vorher ein ausreichend langes und dickes (siehe nächster Punkt) Stück Schrumpfschlauch geschoben wurde. Die Länge des Kabelabschnitts sollte so gewählt werden, dass das Kabel noch bis zum GPIO (21, Pin 40) reicht, aber keine langen Schleifen bildet.
  • Die andere Seite des Kabels auf Pin 40 (GPIO 21) der Pinleiste des Raspi stecken.
  • Schrumpfschlauchstück vom angelöteten Kabel über den Widerstand bis zum Anschlag (Boden des Transistors) schieben, sodass sowohl das mittlere Beinchen des Transistors als auch der Widerstand mitsamt Anschlussdrähten komplett isoliert sind.
  • Schrumpfschlauch durch Wärmezufuhr (nicht die Spitze des Lötkolbens verwenden!) fixieren und schrumpfen, dabei darauf achten, dass der Transistor nicht überhitzt.
  • Nun wird die Dupont-Steckbuchse am schwarzen Minus-Kabel des Lüfters auf den Kollektor des Transistors (das ist wenn man von vorne auf die flache Seite des Transistors schaut rechts) gesteckt und eventuell mit einem kleinen Lötpunkt fixiert (dabei wieder auf die Hitzeentwicklung achten).
  • Anschließend wird ein Jumperkabel (f/f) passender Länge auf den Emitter des Transistors (links) gesteckt und eventuell auch mit einem Lötpunkt fixiert. Die andere Seite des Kabels wird auf Pin 6 (Masse, GND) der Pinleiste des Raspi gesteckt.
  • Rotes Plus-Kabel des Lüfters auf Pin 2 (5V) der Raspberry-Pinleiste stecken.
  • Transistor mitsamt Anschlüssen und Verbindungen mit einem passenden Stück Schrumpfschlauch „einpacken“ (auch hier nicht den Transistor in den Hitzetod schicken!) und im Gehäuse des Raspberry-Kits verstauen. Wenn sichergestellt ist, dass nichts davon dem Lüfter, einem Kühlkörper, der Luftzirkulation oder ähnlichem in den Weg kommt, kann der Deckel mitsamt Lüfter aufgesetzt werden.

Software

  • Python-Script herunterladen und in den Unterordner "scripts" im Home-Verzeichnis des Users "pi" kopieren und ausführbar machen
  • In den Ordner wechseln und das Script testweise starten (> ./pwmfancontrol.py). (Bei Fehlern hilft bestimmt ChatGpt.)
  • Falls keine Fehler auftreten und das Script seinen aktuellen Zustand alle paar Sekunden schön auf die Konsole schreibt, kann man zum Testen (auf einer weiteren Konsole) die Datei "/tmp/fan_debug" anlegen. Existiert sie, so sollte der Lüfter auf 100% laufen, gibt es sie nicht, sollte er je nach CPU-Temperatur angesteuert werden. "/tmp/fan_debug" wieder löschen! (Auch mit den Tools "stress" bzw. "stress-ng" kann man das Script testen)

Systemdienst

Damit das Script beim Systemstart als Dienst läuft, kann es als systemd-Service eingerichtet werden:

  • systemd-Konfigurationsscript anlegen ("/etc/systemd/system/fancontrol.service") mit folgendem Inhalt:
[Unit]
Description=PWM Fan Control Script
After=multi-user.target

[Service]
ExecStart=/usr/bin/python3 /home/pi/scripts/pwmfancontrol.py
WorkingDirectory=/home/pi/scripts
StandardOutput=journal
StandardError=journal
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

  • Den Dienst einschalten und starten:

>sudo systemctl daemon-reexec && sudo systemctl enable fancontrol && sudo systemctl start fancontrol

Viel Erfolg!