Raspberry Pi 4B – gesteuerter Lüfter

Wie ich in meinem Beitrag zum Pi4 als Desktop bereits ausgeführt habe, wir das aktive Kühlen beim Pi4 quasi zur Pflicht, wenn er nicht nur irgendwo in der Ecke steht und die allermeiste Zeit im „idle“ ist. Im Desktop-Betrieb mit LibreOffice oder Youtube per Webseite geht recht schnell die Temperatur hoch und der Lüfter muss laufen.

Ich hatte den 5V-Lüfter an einen 3,3V-Pin angeschlossen und die Masseleitung des Lüfters mit einer Drahtbrücke vom Steckbrett nach außen verlängert und dann bei Bedarf einfach die Brücke an die Masse am USB-Port gehängt. Das funktionierte prima, bis ich nun den Pi in einer Umräumaktion unter den Schreibtisch verlagert habe.

Hardware

Nun musste also was automatisches her und ich suchte aus der Bastelkiste einen Widerstand (4,7k) und einen Transistor (BC547). Für die Verbindung habe ich in Ermangelung einer Buchsenleiste 3 Steckbrücken geopfert.

Beim Anschluss habe ich wieder den 3.3V-Pin genommen (5V geht natürlich auch, ist aber deutlich lauter beim Lüften). Für die Ansteuerung habe ich GPIO2 (Pin3) genommen. Der liegt nach dem Boot auf HIGH und der Lüfter läuft ohne Steuerskript dauerhaft, was ich erstmal als „failsave“ betrachte.

Der GPIO2 geht nun über den 4,7k-Widerstand an die Basis vom Transistor. Die Masse wird auf den Emitter am Transistor geführt und geht von dort über den Kollektor weiter zum Lüfter. Die Verdrahtung ist mit Steckbrücken gebaut, so dass die Schaltung einfach zwischen den Lüfter und den GPIO gesteckt werden kann. Isoliert ist das ganze mit Schrumpfschlauch.

Software

Ich bin ein Freund von Python und daher kam für mich auch nix anderes in Frage. Das Skript wird einmalig gestartet und überwacht fortan die CPU-Temperatur. Ich habe mich dabei für einen Intervall von 5 Sekunden entschieden, weil ich glaube, dass das ausreichend sein sollte.

Beim Überschreiten der Schwelle von 70°C wird der Lüfter eingeschaltet und es wird „laut“ unter dem Schreibtisch. Beim Absinken der Temperatur unter 50°C wird der Lüfter wieder abgeschaltet und es herrscht wieder Ruhe.

cpu_cool.py
#!/usr/bin/python3

import RPi.GPIO as GPIO
from gpiozero import CPUTemperature
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)

GPIO.output(2, GPIO.LOW)
cooler = 0

while True:
	ctemp = CPUTemperature().value * 100

	if ctemp > 70 and cooler == 0:
		GPIO.output(2, GPIO.HIGH)
		cooler = 1
	elif ctemp < 50 and cooler == 1:
		GPIO.output(2, GPIO.LOW)
		cooler = 0
	else:
		# wir lassen es so
		pass

	print('Temp:',round(ctemp,2),'Cooler:',cooler)
	time.sleep(5)

 

Grundlage

Tutorial im Raspi-Forum
https://forum-raspberrypi.de/forum/thread/774-lueftersteuerung-per-temperatur-einbauanleitung/