Zeige Quelltext
Übersetzungen dieser Seite:

Lüftersteuerung Raspberry

Bei meiner Raspberry NAS Lösung mit OpenMediaVault kam ich auf das Problem, das der im Gehäuse eingebaute Lüfter doch recht laut ist. Und leider ist der Lüfter nicht Temperatur abhängig geschaltet, sonder läuft Tag und Nacht durch. Der Lüfter ist ein kleiner 30mm 5V DC Lüfter, aber dafür schon recht laut und pfeift recht hochfrequent. Also muss eine Temperatursteuerung her. Im Raspberry kann man direkt die CPU Temperatur auslesen. Ein eigener Temperatursensor ist somit überflüssig. Man müsste…

Der Plan

Man müsste den Lüfter mit Hilfe von einen kleinen Stück Software über einen GPIO Pin direkt schalten. Die Software ließt also die CPU Temperatur aus und schaltet dann den Lüfter ein und auch wieder aus. Das ganze soll natürlich dann im System als Dienst laufen, der periodisch das Programm startet.

Hardware

Leider haben die GPIO Pins nur 3V3 Logik und natürlich können Sie die Leistung eh nicht schalten. Deshalb muss da ein Schaltverstärker her. Doch der ist recht einfach.

Was brauchen wir also:

  • einen Transistor Typ BC547 B
  • einen Widerstand 4k7 Ohm
  • ein bisschen Breadboardkabel
  • ein kleines Stück Platine
  • 5 Pinheader

Zum Testen kann man das ganze auch erst einmal auf dem Breadboard aufbauen. Rot geht zu 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 get das rote Kabel vom Lüfter direkt auf die +5V und das schwarze geht an den Pin 1 vom Transistor.

Die kleine Schaltung kann man dann schnell auf Lochraster aufbauen und an den Raspberry stecken.

Soweit die Hardware.

Software

Da Python bereits auf dem aktuellen Image für den Raspberry installiert ist, ist es sinnvoll, das Programm in Python zu schreiben. Resourcen und Anleitungen gibt es dazu im Internet genügend. Das Programm stammt im Ursprung von hier: alexbloggt/lueftersteuerung/. Ich hab nur ein paar Kommentare hinzugefügt und die Zeiten für meine Bedürfnisse 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 too 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..."

Test

Im OMV müssen wir erst einmal ssh aktivieren.

und dann dem User pi (wenn nicht schon getan) die Gruppe ssh hinzufügen.

Jetzt können wir uns im Raspberry per SSH einloggen. (Oder starten eine Console/Terminal) Falls das nicht funktionieren sollte, wäre jetzt ein günstiger Zeitpunkt den Raspberry einmal neu zu starten. Bei OMV benutzt wir nun den User `pi`. Passwort habt ihr in der OMV Oberfläche selber vergeben. (Natürlich könnt ihr auch einen anderen User benutzen, dann müsst ihr aber an den verschiedenen Stellen, die entsprechenden Rechte setzten, damit das ganze funktioniert.)

Jetzt probieren wir erst einmal, ob alles funktioniert. Also zunächst die Temperatur auslesen. Gebt dazu bitte folgendes ein:

vcgencmd measure_temp

Das sieht schon mal gut aus. Jetzt die Pythonanbindung. Zunächst starten wir Python mit

sudo python

Und jetzt versuchen wir 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 wir ihn wieder aus.

Wenn alles funktioniert hat, können wir das Programm installieren und automatisch starten lassen.

Installation

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

cd /home
mkdir fan
cd fan

Jetzt legen wir das Program darin ab. Mit

sudo nano fancontrol.py

startet der Editor. Jetzt das Programm von oben hinein kopieren, abspeichern (CTRL + s) und den Editor verlassen (CTRL + x). Jetzt manchen wir das Programm ausführbar.

sudo chmod +x fancontrol.py

Mit `sudo python fancontrol.py` sollte das Programm jetzt auch starten. Wahlweise muss auch `/home/fan/fancontrol.py` funktionieren.

So weit so gut, jetzt müssen wir noch das Programm automatisch starten lassen und zwar einmal pro Minute. Dazu starten wir

sudo crontab -e

und benutzen wieder den Nano (oder irgend einen anderen Editor) um folgendes in die Datei zu schreiben

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

Speichern nicht vergessen und danach einen Reboot.

sudo reboot

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

Viel Spass beim Nachbau.

blog/lueftersteuerung_raspberry.txt · Zuletzt geändert: 2020/02/04 21:55 (Externe Bearbeitung)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0