−Inhaltsverzeichnis
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.