Wer sein RaspberryPi als Server etc. laufen hat, wird schnell feststellen, dass der kleine Riese doch sehr heiß werden kann. Bis zu einem gewissen Grad kann man das sicherlich ignorieren, läuft der Pi jedoch Tag und Nacht sollte auf die Temperatur (besonders in einem Gehäuse) achten. Da ich dieses Problem auch hatte, nahm ich mir als Projekt vor, das Gehäuse und die CPU kühl zu halten.
Eine aktualisierte Version zum Thema wie man am Raspberry Pi 4 einen Lüfter anschließt und entsprechende Gehäuse verwendet, findest du im verlinkten Artikel.
Zubehör
Ich habe einen 5V Lüfter sowie einen DS18B20 Temperatursensor genommen. Als Transistor ist ein BC547 verbaut. Wer keinen Temperatursensor hat oder damit nicht messen will, kann mit einer kleinen Anpassung das Skript trotzdem nutzen.
Aufbau
Als Widerstände habe ich jeweils 4,7k Ohm genommen. Ausgangspin für den Transitor ist Pin 23, wobei auch jeder andere GPIO Pin, der keine zugewiesene Funktion hat, genommen werden kann.
Wichtig: Der Temperatursensor ist an 3.3V angeschlossen, wogegen der Kühler an 5V angeschlossen ist.
Skript
Um die Arbeit so einfach wie möglichst zu machen, habe ich bereits ein Skript vorgefertigt, das du nur noch anpassen musst.
wget https://tutorials-raspberrypi.de/wp-content/uploads/2014/04/cooler_skript.zip
und entpacken:
unzip cooler_skript.zip
Nun, dann bearbeiten wir das Skript:
sudo nano cooler_skript.py
Hierbei sind Zeile 19 bis 23 wichtig und ggf. anpassbar.
19 20 21 22 23 24 |
IMPULS_PIN = 23 SLEEP_TIME = 30 MAX_CPU_TEMP = 40 MAX_SENSOR_TEMP = 30 SENSOR_ID = '' |
Nun gibt IMPULS_PIN einfach den GPIO Pin an, mittels dem der Transistor angesteuert wird.
SLEEP_TIME gibt an, alle wie viel Sekunden die Temperatur überprüft werden soll. Ich empfehle keine all zu kleine Zahl, um dem Pi noch gebug Rechenzeit für andere Anwendungen zu geben.
MAX_CPU_TEMP und MAX_SENSOR_TEMP geben die jeweiligen Temperaturen an, bei denen der Lüfter anfangen soll zu drehen. Dabei spielt es keine Rolle, was zu erst erreicht wird; sobald eines erreicht wurde wird angefangen zu drehen. Soll sich der Kühler immer drehen, setze MAX_CPU_TEMP = 0.
Nun zur Sensor ID: Wie man diese heraus bekommt habe ich bereits hier gezeigt. Wenn du keinen Sensor hast, lass es einfach so stehen. Bei mir ist es z.B. die ID 10-000802b4ba0e:
23 |
SENSOR_ID = '10-000802b4ba0e' |
So weit, so gut. Im Grunde sind wir jetzt bereits fertig. Mit
sudo python cooler_skript.py
lässt sich das Skript bereits starten. Wenn du bei jeder Überprüfung die Werte ausgegeben haben willst, kannst du im Skript in den Zeilen 59 und 60 die # löschen.
Automatisch starten
Falls du das Skript automatisch starten lassen willst, kannst du dir dieses Tutorial einmal anschauen. Optimal verschiebst du das Skript nach /usr/local/bin/
sudo cp cooler_skript.py /usr/local/bin/cooler_skript.py
Dann musst Du lediglich die Namen anpassen, sowie in Zeile 8:
1 |
python /usr/local/bin/cooler_skript.py |
Übertakten
Nachdem nun sichergestellt ist, dass der Pi immer kühl genug ist, können wir auch übertakten:
sudo raspi-config
Unter Punkt 7 Overclock kannst du die Taktrate einstellen. Ich habe bspw. je nach Bedarf Medium oder High eingestellt. Du kannst dies je nach Anwendung anpassen (Bei rechenintensiver Nutzung macht eine höhere Taktung natürlich gleich mehr Sinn und bringt gleichermaßen Schnelligkeit).
24 Kommentare
Hallo,
Kann man mehrere Lüfter (aktuell 3) über ein Raspi steuern? Mein Mainboard hat leider nicht genug anschlüsse für Lüfter. Brauche ich da ne stärkere Stromversorgung? Wäre über Hilfe dankbar 🙂
Klar, das geht. Du hast ja genügend GPIOs, mit denen du die Transistoren der Lüfter steuern kannst. Die üblichen Lüfter brauchen 5V, was das Raspberry Pi liefert.
Wie entpacke ich die Zip datein dabei kommt immer eine fehlermeldung
unzip dateiname.zip
Wir haben das Projekt nachgebaut und wollten jetzt anstatt der CPU temperatur einen anderen Temperatursensor kühlen bekommen das aber nicht im pyton skript umgeschrieben kann einer helfen ? Gruß
http://pastebin.com/DtnkQrLn
Könnte man den Lüfter (wenn er nur 3Volt hat)
auch einfach direkt am GPIO PIN anschließen und dann zurück zum Raspberry GND laufen lassen?
Der Transistor ist ja in diesem Fall nur dafür da, dass man die 5V Stromzuvor an/abschlaten kann oder?
Und wieso muss beim Transistor der Anschluss am GPIOPin mit einem Widerstand ausgestattet werden?
Könnte man, aber es ist nicht empfehlenswert. Die GPIOs liefern nur wenige mA, dahingegen kann von dem 3.3V bzw 5V Pin bis zu 2-300mA gezogen werden. Daher sollte auch ein Lüfter, der nur 3V braucht mit Transistor geschaltet werden. Der Widerstand ist in dem Fall nicht unbedingt nötig.
Danke für die Antwort
Ich besitze den Raspberry Pi 3, und bei mir funktioniert das Skript nicht. Ich bekomme die Temperaturen ausgegeben, der Lüfter wird allerdings nicht angesteuert!? Muss ich da noch etwas beachten?Gruß
Wie viel Strom braucht dein Lüfter denn? Mehr als 5V und ~100-200mA kann der Raspberry Pi nicht liefern.
Ist ein kleiner 5V fan. Wenn ich ihn direkt an den pi schließe, funktioniert er. Wenn ich ihn über den Transistor schalten möchte, klappts nicht… hab alles wie im Tutorial beschrieben angeschlossen und programmiert. Allerdings ohne den Temperatursensor.
An dem Temperatursensor liegt es nicht. Ist evtl. der Transistor kaputt oder du hast ihn falsch angeschlossen? Könnte auch ein PNP statt NPN sein.
Du kansnt auch ein Relais ausprobieren, auch wenn das ein wenig überdimensioniert für 5V ist (nur als Test).
Hallo, ich habe einen kleinen 5 V Lüfter.
Kann ich diesen direkt über einen GPIO z.B 8 Steuern?
Also ohne Widerstand usw? Also nur an und aus?
Ja, aber du brauchst einen Transistor, da ein GPIO keine 5V liefert.
hi. tolles tut. hat alles prima funktioniert. ich möchte jetzt gerne einen 12v lüfter damit steuern und ich habs einfach nicht geschafft den lüfter über den transistor im extra 12v kreis zum laufen zu bringen. können sie bitte erklären wie ich einen 12v lüfter mit der rasppi ein / ausschalten und regeln kann? bitte.
Du brauchst natürlich eine 12V Stromversorgung (Pi liefert nur max. 5V). Ansonsten ist das ähnlich: Nicht vergessen GND von beiden Stromkreisen zu verbinden. Ansonsten kannst du auch Relais und zwei verschiedene Stromkreise verwenden.
hallo nochmal… ich habe deinen ratschlag befolgt und tataaa es hat funktioniert. mein fehler war ganz einfach ich habe die beiden stromkreise (GND) nicht miteinander verbunden. ich bin dir sooo dankbar für die info und sooo glücklich.
Gerne 🙂
Ein system Skript dazu kann so aussehen:
[Unit]
Description = CPU cooler control
DefaultDependencies = no
After = systemd-sysctl.service
Before = sysinit.target
[Service]
Type = simple
ExecStart = /usr/local/bin/cooler_skript.py
[Install]
WantedBy = multi-user.target
Ich habe Zeile 19 bis 23 um weitere Werte erwetítert bzw. die Variabeln verändert.
IMPULS_PIN = 23 #Pin, der zum Transistor fuehrt
SLEEP_TIME = 30 #Alle wie viel Sekunden die Temperatur ueberprueft wird
MAX_CPU_TEMP_ON = 45 #Ab welcher CPU Temperatur der Luefter sich drehen soll
MAX_CPU_TEMP_OFF = 40 #Ab welcher CPU Temperatur der Luefter sich abschalten soll
MAX_SENSOR_TEMP_ON = 30 #Ab welcher Temperatur im Gehaeuse der Luefter sich drehen soll
MAX_SENSOR_TEMP_OFF = 25 #Ab welcher Temperatur im Gehaeuse der Luefter abgeschaltet werden soll
SENSOR_ID = “ #ID des Sonsors, BITTE ANPASSEN, falls kein Sensor vorhanden leer lassen
Grund dazu ist das ich gerne eine Hysterese zwischen Einschlatpunkt und Einschaltspunkt haben will.
Ich habe auch die maximale CPU Temperatur auf 45°C gesetzt, weil meine Raspis bei wenig Belastung gerne mal 41°C haben, was ich nicht sehr viel finde.
Aus MAX_CPU_TEMP wurde MAX_CPU_TEMP_ON. Aus MAX_SENSOR_TEMP wurde MAX_SENSOR_TEMP_ON.
Dazu kamen MAX_CPU_TEMP_OFF und MAX_SENSOR_TEMP_OFF, die den Ausschaltpunkt definieren.
Aus
if cpu_temp >= MAX_CPU_TEMP or sensor_temp >= MAX_SENSOR_TEMP :
GPIO.output(IMPULS_PIN, True)
else:
GPIO.output(IMPULS_PIN, False
wurde
if cpu_temp >= MAX_CPU_TEMP_ON or sensor_temp >= MAX_SENSOR_TEMP_ON :
GPIO.output(IMPULS_PIN, True)
if cpu_temp <= MAX_CPU_TEMP_OFF or sensor_temp <= MAX_SENSOR_TEMP_OFF :
GPIO.output(IMPULS_PIN, False)
Moin zusammen
Gibt es das Skript noch? wenn ich auf den Link geh wird die Seite nicht gefunden
Vielen Dank für das Skript. Hat gut geklappt. Ich habe das Skript ebenfalls mal angepasst. Hier nun ohne Gehäusesensor und mit Kühlung bis 49 Grad. Start bei 56 Grad. Kann natürlich entsprechend angepasst werden.
Hallo,
ich suche so etwas ähnliches: würde gerne mit einer bestehenden PC Wasserkühlung zusätzlich 3 x Raspis anschließen und einer der Raspberrys sollte die Steuerung für Pumpe und Lüftereinstellungen übernehmen, gerne auch mit einem angeschlossenen Display auslesebar.
Via Google und im Forum finde ich immer nur die Anleitungen, den Raspberry Pi-eigenen Lüfter zu steuern.
Kennt vielleicht jemand eine Anleitung, den Raspberry Pi als Lüfter- und Pumpensteuerung für mehrere Geräte einzurichten?
Bin Dankbar für jeden Tipp!
Hallo!
Vielen Dank für das tolle Tutorial. Mein Pi läuft als Homebridge Server und ich möchte eigentlich nur einen „Backup“-Lüfter einbauen, falls es doch mal über die 45°C hinweg geht (ist selten aber mein weiß nie). Daher bräuchte ich den Temperatursensor nicht, da ich bereits ein Skript habe, was die CPU-Temp laufend misst und in der HomeKit App anzeigt. Allerdings verstehe ich nicht ganz, wie ich den Lüfter dann zu verkabeln habe, da dieser ja ebenfalls über den Temp-Sensor mit versorgt wird etc… Wenn ich ihn direkt an die 5V/N Leitung anschließe, läuft er ja dauerhaft, oder?
Schonmal vielen Dank im Voraus!