Lüftersteuerung zur besseren Übertaktung des Raspberry Pi

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.

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.

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:

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:

 

Ü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).

21 Kommentare

  1. 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 🙂

    Antworten
    • 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.

      Antworten
  2. 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?

    Antworten
    • 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.

      Antworten
    • 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ß

      Antworten
      • Wie viel Strom braucht dein Lüfter denn? Mehr als 5V und ~100-200mA kann der Raspberry Pi nicht liefern.

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

    Antworten
    • 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).

      Antworten
  4. 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?

    Antworten
  5. 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.

    Antworten
    • 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.

      Antworten
      • 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.

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

    Antworten
  7. 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)

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!