Lüftersteuerung Raspberry Pi

Hallo zusammen,

heute wollen wir Ihnen den ersten Beitrag von einem unserer neuen Autoren vorstellen - Wilfried Klaas.
Wilfried Klaas wird uns von nun an mit interessanten Projekten begleiten!

Viel Spaß beim Lesen!


Bei meiner Raspberry Pi NAS Lösung mit OpenMediaVault kam ich auf das Problem, dass der im Gehäuse eingebaute Lüfter Tag und Nacht durchläuft. Der Lüfter ist ein kleiner 30mm 5V DC Lüfter, aber dafür schon recht laut und er pfeift recht hochfrequent. Also muss eine Temperatursteuerung her. Die Temperatur der CPU im Raspberry Pi kann man direkt auslesen. Ein eigener Temperatursensor ist somit überflüssig. Man müsste…


Der Plan

Man müsste den Lüfter mit Hilfe von einem kleinen Stück Software über einen GPIO Pin direkt schalten. Das Programm liest also die CPU Temperatur aus und schaltet dann den Lüfter ein und auch wieder aus. Das Betriebssystem soll dann periodisch das Programm starten.

Benötigte Hardware

Hardwareliste (neben dem Raspberry Pi und dem Gehäuse mit Lüfter):

Anzahl Bauteil Anmerkung
1 Transistor Typ BC547 B
1 Widerstand 4k7 Ohm
1 Kleines Stück Platine
5 Pinheader
Ein paar Breadboardkabel


Der Aufbau 

Die GPIO Pins des Raspberry Pi haben 3V3 Logik und können die Leistung selbst eines so kleinen Lüfters nicht direkt schalten. Deshalb muss ein Schaltverstärker her. Der ist zum Glück recht einfach mit einem NPN-Transistor vom Typ BC547 B zu realisieren.


Zum Testen kann man das Ganze auch erst einmal auf dem Breadboard aufbauen. Rot geht zu +5V (Pin 4) am GPIO. Schwarz (GND oder Masse) geht nach Pin 6 und orange, das ist die Steuerleitung, geht an Pin 8 (GPIO14). Auf der Lüfterseite geht das rote Kabel vom Lüfter direkt auf die +5V und das schwarze geht an den Pin 1 vom Transistor.


Zum Testen, ob der Aufbau funktioniert, legt man die orange Leitung statt an den Pin 8 (GPIO 14) direkt an +5V. Jetzt sollte der Lüfter starten. Steckt man die gleiche Leitung an die Masse, sollte der Lüfter sicher stoppen. Was passiert, wenn die Leitung offen bleibt, ist nicht definiert. Die kleine Schaltung kann man dann schnell auf Lochraster aufbauen und an den Raspberry Pi stecken.



Soweit die Hardware.

Die Software

Da Python bereits auf dem aktuellen Raspbian Betriebssystem-Image für den Raspberry Pi installiert ist und ebenso auch auf dem OMV Image, ist es sinnvoll, das Programm in Python zu schreiben. Ressourcen und Anleitungen gibt es dazu im Internet genügend. Das Programm stammt im Ursprung von hier: alexbloggt/lueftersteuerung/. Ich habe nur auf Python3 aktualisiert, ein paar Kommentare hinzugefügt und die Zeiten meinen Bedürfnissen angepasst.

#!/usr/bin/python
import os
import time
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.OUT)

#funktion: Temperatur mit Hilfe von vcgencmd auslesen und als Text zurückliefern
def getCPUtemperature():
    res = os.popen('vcgencmd measure_temp').readline()
    return(res.replace("temp=","").replace("'C\n",""))

# Temperatur lesen und in einen Float wandeln
temp_float = float(getCPUtemperature())

try:
    # temperatur > 47, dann Lüfter an
    if (temp_float > 47):
        print(temp_float)
        print("power on fan...")
        # ein
        GPIO.output(14, True)
        # und jetzt 58 Sekunden laufen lassen. (Das passt dann gut mit dem Minuten Timer)
        time.sleep(58)
        print("power off fan...")
        # aus
        GPIO.output(14, False)
        print(float(getCPUtemperature()))
    else:
        print(temp_float)
        print("temp low")

# Wird das Programm abgebrochen, dann den Lüfter wieder ausschalten
except KeyboardInterrupt:
    print(float(getCPUtemperature()))
    print("power off fan...")
    GPIO.output(14, False)
    print("cancelling...")

In der aktuellen Version von Raspbian ist das Modul RPi.GPIO Bestandteil des Images. Sofern Sie eine Fehlermeldung erhalten, z.B. bei der Lite-Version, können Sie RPi.GPIO wie folgt im Terminal installieren:

sudo apt-get update
sudo apt-get install python3-rpi.gpio

Test

Wie eingangs schon erwähnt, läuft auf meinem Raspberry Pi eine NAS Lösung mit OpenMediaVault (OMV). Deswegen beschreibe ich hier, wie man die Lüftersteuerung in diesem Umfeld betreibt.

Um sich mit einem Terminal mit dem Raspberry Pi verbinden zu können, muss erst einmal ssh (secure shell) aktiviert werden. Das geht über die Oberfläche von OMV unter Dienste/SSH.


Dann muss dem User pi (wenn nicht schon getan) die Gruppe ssh hinzugefügt werden.


Jetzt kann man sich im Raspberry per SSH einloggen. Ich verwende dafür unter Windows den Putty Falls die Anmeldung nicht funktionieren sollte, wäre jetzt ein günstiger Zeitpunkt, den Raspberry einmal neu zu starten. Ab hier funktionieren die Schritte auch auf einem normalen Raspbian Image.

Zur Anmeldung im Putty wird der User pi mit dem Passwort, das man selbst vorher in der OMV Oberfläche vergeben hat, benutzt. (Natürlich kann man auch einen anderen User benutzen, dann müssen aber an den verschiedenen Stellen die entsprechenden Rechte gesetzt werden, damit das Ganze funktioniert.)

Jetzt probieren Sie erst einmal aus, ob die Voraussetzungen für das Programm funktionieren. Also zunächst versuchen Sie die Temperatur auszulesen. Geben Sie dazu bitte Folgendes ein:

vcgencmd measure_temp

pi@omv:~ $ vcgencmd measure_temp
temp=45.1'C
pi@omv:~ $

Das sieht schon mal gut aus. Jetzt die Python-Anbindung. Zunächst starten Sie Python mit.

sudo python


Und jetzt versuchen Sie den Lüfter zu starten mit:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.OUT)
GPIO.output(14, True)

Der Lüfter sollte jetzt laufen.

Mit GPIO.output(14, False) schalten Sie ihn wieder aus.


Den Python-Interpreter im Terminal verlässt man mit exit()oder CTRL-D. Wenn alles funktioniert hat, können Sie das Programm installieren und automatisch starten lassen.

Installation

Zunächst erzeugen Sie ein neues Verzeichnis. Dazu gehen Sie in das /home Verzeichnis zurück, erzeugen dort ein fan Verzeichnis und wechseln dann dort hinein.

cd /home mkdir fan cd fan

Dort wird dann das Programm erzeugt. Mit

sudo nano fancontrol.py

startet der Editor. Jetzt das Programm von oben hinein kopieren, abspeichern (CTRL + s) und den Editor verlassen (CTRL + x). Mit

sudo chmod +x fancontrol.py

wird das Programm ausführbar gemacht.

sudo python fancontrol.py startet das Programm. Wahlweise muss auch direkt /home/fan/fancontrol.py funktionieren.

So weit so gut, jetzt muss noch das Programm automatisch gestartet werden und zwar einmal pro Minute. Dazu muss die crontab editiert werden:

sudo crontab -e

Die folgenden Zeilen schreiben Sie bitte in die Datei

# starting the fan every minute
*/1 * * * * /home/fan/fancontrol.py

Speichern nicht vergessen und danach einen Reboot.

sudo reboot

Und schon sind Sie fertig. Jede Minute wird nun das Python Script gestartet. Das schaut nach der Temperatur und wenn diese zu hoch ist, wird der Lüfter für 58 Sekunden gestartet.

Zuletzt

Der Raspberry tut nun fast ohne Geräusche seinen Dienst. Nur selten springt der Lüfter an, meistens nur, wenn gerade ein Backup meines Servers läuft. Ziel erreicht. Dieses Python-Programm im Hintergrund eignet sich mit wenigen Anpassungen auch für den Raspberry Pi 4, der aufgrund seiner höheren Taktfrequenz wärmer wird und deshalb häufig mit einem Gehäuselüfter ausgestattet wird.

Viel Spaß beim Nachbau.
Ich hoffe, dieser kleine Blog hat Ihnen gefallen.

Bis zum nächsten Mal!

Wilfried Klaas


12 Kommentare

Bernd

Bernd

Ich mag ja solche Spielereien. Aber…

Das Teil soll ja neben dem Spaß einfach nur produktiv und leise sein. Warum überhaupt einen Lüfter?
Es gibt inzwischen wirklich tolle Gehäuse aus Metall, die die Wärme direkt an der CPU über das Gehäuse nach außen leiten. Ein Kandidat wäre z.B. das “Flirc Case” (Suchmaschine nutzen!).
Auch gibt es eine Firma, die Aluminiumgehäuse fräst (CNC) und diese Teile über die Website und ebay verkauft. In allen Fällen kostet ein solches Gehäuse 20 Euro.

Bei mir laufen 3 Raspberrys (2, 3 und ein 4er). Alle in einem solchen Metallgehäuse. Den Pi3 und Pi4 habe ich mal testweise über eine Stunde auf Volldampf gequält. Mehr als 62 Grad hat er nicht erreicht. Die 80 bzw. 85 Grad, wo er runtertaktet, erreicht er nicht mal ansatzweise.

Und was soll ich sagen. Alles ohne Lüfter.

Aber wie schon eingangs erwähnt, die Lüftersteuerung ist schon cool.

Wilfried Klaas

Wilfried Klaas

Hallo Jörg,

Schau mal auf den Transistor ob da wirklich BC547 B drauf steht. C wäre auch ok, beim A könnte es Probleme geben. Wenn du noch einen 10K hast, schalte die beiden Widerstände doch parallel. Der Wert ist relativ unkritisch, da wir den Transistor als Schalter betreiben, aber 10k könnten echt schon zuviel sein.

Jörg

Jörg

Hallo,
habe wohl irgendeinen Fehler in meiner Schaltung … jedenfalls funktioniert das Starten des Lüfters nicht.
Habe allerdings statt des 4,7k Ohm einen 10k Ohm Widerstand genommen, weil ich den hier liegen hatte. Kann es daran liegen?
Ansonsten finde ich die Blogs für Anfänger sehr interessant…

Gruß
Jörg

Jürgen

Jürgen

Ja, es gibt auch fertige Geräte z.B. Laptop oder Handy, da muss man nicht löten und keinen Lüfter einbauen ;-)
Da ich Phyton nicht kenne, habe ich nicht erkannt, dass “nur” ein/aus geschaltet wird.
Also, ganz laut/leise. PWM könnte Zwischenstufen machen, da Lüfter bei ca. 75% noch fast leise sind.

An meinem AnetA8 (China-3-Drucker) habe ich zwei Lüfter geopfert, weil ich nur 10% Lüftung eingestellt hatte. Die Lüfter sind nicht richtig rund gelaufen und abgeraucht.
Dann habe ich am ESP32, mit PWM den kleinen China-Lüfter getestet.
Nun glaube ich zu verstehen, langsam drehen und geringe Frequenzen sind bei Lüfter-PWM-Schaltung nicht gut (mit LED geht es). Die PWM-Einschaltflanke am Lüfter ist steil (=viel Strom.. induktiv). Die abfallende Flanke sinkt “langsamer” (bei meinen China-Lüftern… ). Das Testen mit den langsamen PWM-Signalen, um es auf dem Osi zu sehen, hat noch einen Lüfter abgeraucht.
Darum meine Anmerkungen: Einschalten mit ca. 100% Lüfterleistung (= laut also “Hörtest”), z.B. 5-10 Sek, dann reduzieren bis leise genug. Damit ist die Wärme schon mal aus dem Gehäuse raus und der Lüfter bewegt sich.
Ich habe nur 12V Lüfter (China und alte PC-Lüfter), die teilweise bei 5V am Labornetzteil nicht anlaufen, aber schon Strom ziehen, sich aber dann … nicht sicher selber kühlen würden ;-)

Ja, ich würde es auch begrüssen wenn AZ-Delivery Bauteile führen würde.
Bauteile die CE-, VDE-Norm usw. entsprechen wären mein Wunsch.
Gruß
Jürgen

Dirk Willner

Dirk Willner

Also für 10€ bekomme ich einen Temperaturgesteuerten Lüfter.
Wozu das Rad neu erfinden?

teena

teena

Hallo AZ-Delivery… mal eine andere Frage: Es gibt ja so manches, da bin ich eigentlich zu faul.
Das hier ist sowas:
Bitte bietet doch zu den Blogartikeln einfach gleich was fertiges an. Zumindest die Bauteile. Muss ja nicht auf Lager sein. So muss ich jetzt bei Conrad bestellen ?! und ggf noch löten.
Schade.

Wilfried Klaas

Wilfried Klaas

Freilaufdiode, Ja, Nein, vielleicht. In den Lüftern sind üblicherweise brüstenlose Motor mit entsprechenden Controllern verbaut. Damit kann die Freilaufdiode eigentlich entfallen. Denn die Induktivität des Motors liegt ja nicht direkt am Transistor an, sondern erst einmal an dem internen Controller und wird dort kurzgeschlossen. Schaden tut Sie natürlich auch nicht. Wer möchte kann eine Freilaufdiode hinzufügen. Für den hier benutzen Lüfter reicht eine 1N4148. Katode an die +5V, Anode an den Transistor, wo auch der Lüfter angeschlossen wird. Sollen größere Lüfter verwendet werden, muss die Diode natürlich angepasst werden. Schottky ist nicht von Nöten, da hier ja kein PWM verwendet wird. Hier wird der Lüfter nur simpel ein/aus geschaltet.

Peter

Peter

Je nach Standort und Last genügt auch der merklich geräuschärmere Betrieb des Lüfters an 3,3V

Jürgen

Jürgen

Hallo Wilfied,
Gute Idee. Ich habe es noch nie mit Phyton am Raspi ausprobiert.
Eine Leerlaufdiode am Lüfter wäre noch sinnvoll. Die sollte dann die induktiven Spitzen die an der absteigenden Flanke entstehen “kurzschliessen”.
Der Lüfter sollte auch nicht “sehr langsam” drehen, dann stirbt die Elektronik im Lüfter schon mal. Unter ca. 20% sind mir schon Lüfter gestorben. Die steile Einschaltflanke zieht “viel” Strom, wenn der Lüfter zu langsam dreht (oder der Takt zu kurz ist), das macht warm, brummt oder pfeift.
Evtl. eine Lösung: ca. 5- 15 Sek mit höher Drehzahl beginnen, dann ist schon mal etwas Wärmestau weg und dann runterregeln. So kann der Lüfter kurzfristig auf Drehzahl kommen (das Lager dreht sich frei ;-). Dann langsamer werden, bis deutlich über Stillstand (je nach Lüfter min. 20%).
Das sind meine Erfahrungen mit PWM-ESP-Lüfter-Steuerung.

Gruß
Jürgen

Torsten Damerow

Torsten Damerow

Hallo Zusammen,

leider fehlt in der Schaltung eine Freilaufdiode zu Schutz des Transistors vor der umgekehrt gepolten Induktionsspannung des Lüfters.

Viele Grüße
Torsten Damerow

Gerd

Gerd

Hallo Wilfried,
Klasse Blog, besonders für Anfänger. Weiter so. Ich würde noch eine Diode (z.B. 1N4148) in Sperrrichtung vom Kollektor des Transistors nach 5 Volt + schalten, der die Rückschlagspannung, hervorgerufen durch die Induktivität des klassischen Motors, kurzschließt, wie dies bei Relais üblich ist.
Damit kann jeder Motor verwendet werden.
Beste Grüße
Gerd

Andreas

Andreas

Ich hatte das Problem auch. Mir war der Lüfter auch einfach zu laut.
Ich bin die Sache aber pragmatischer angegangen.
Ein 10K NTC Widerstand von +5V auf die Basis eines 2n2222. Den Colector habe ich auch direkt auf +5V gelegt und den kleinen Ventilator habe ich zwischen Emitter(rot) und 0V(schwarz) geschaltet. Fertig!
Der Kopf vom diesem NTC war nicht größer als ein Stecknadelkopf. Da konnte ich ein Zahn vom Kühlkörper rausbrechen und den NTC dort montieren (Heißklebepistole). Die Anschlüsse habe ich mit dünnen Schrumpfschlauch isoliert.
Es funktioniert sehr gut. Ich brauche nur 10 Sekunden die Lüftungsschlitze abdecken und man merkt direckt wie die Drehzahl in die Höhe geht.

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert