Temeraturgesteuerter Lüfter für den RaspberryPi

Ich habe meinen RaspberryPi im Einsatz für die Hausautomation und als Datencenter. Damit er und die Zusatzkomponenten (Netzteil, Relaiskarte…) nicht “rumliegen” habe ich alles in ein Gehäuse gesetzt. Dieses habe ich sehr kompakt gehalten. Allerdings gibt es dabei einen Nachteil: Die Hitze von Netzteil und Pi stauen sich darin (trotz Lüftungsöffnungen). Da ich dies vorhergesehen habe kaufte ich gleich noch einen Lüfter um diesen automatisiert einzusetzen – d.h. immer wenn die CPU-Temperatur des RaspberryPi über 50°C steigt, wird der Lüfter für 15 Sekunden aktiviert, dann erfolgt eine neue Abfrage der Temperatur, falls diese < 50°C ausfällt, schaltet der Lüfter aus und wartet bis zum nächsten Temperaturanstieg.

Die Hardware dazu ist simpel. Am Pi hängt ein PicoBorg und dahinter ein günstiger 5V-Lüfter von Amazon. Wesentlich interessanter ist ist die Software-Seite. Ich habe herumprobiert mit einem Shell-Script, dieses stürze aber oft nach einigen Minuten ab (und der Lüfter blieb an…). Deshalb versuchte ich es mit Python und war erfolgreich. Das Script sieht nun so aus:

import RPi.GPIO as GPIO
import time
import os
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT) 

def getCPUtemperature():
res = os.popen(‘vcgencmd measure_temp’).readline()
return(res.replace(“temp=”,””).replace(“‘Cn”,””))

SOLL_temp = “50.0” 

while 1:
if (getCPUtemperature() >= SOLL_temp):
GPIO.output(18, True) 
time.sleep(15) 
continue
else:
GPIO.output(18, False) 
time.sleep(20)

In meinem Fall wird GPIO 18 verwendet – das müsste man anpassen, wenn ein anderer PIN verwendet werden soll. Ich habe das Script als “status.py” in “/home/pi/lueftersteuerung/” abgelegt und per sudo chmod +x status.py ausführbar gemacht. Wenn man nun noch in “/etc/rc.local” vor dem “exit 0″ folgendes einträgt wird der Script automatisch beim Start geladen: “sudo python /home/pi/lueftersteuerung/status.py”.

7 Kommentare

  1. Danke für das Tutorial, allerdings habe ich ein Problem:
    root@raspberrypi:/home/pi/lueftersteuerung# python /home/pi/lueftersteuerung/status.py
    File “/home/pi/lueftersteuerung/status.py”, line 9
    res = os.popen(.vcgencmd measure_temp.).readline()
    ^
    IndentationError: expected an indented block
    Wäre nett wenn du´s dir mal anschauen könntest.
    Danke im vorraus
    Philipp

  2. Python definiert zugehörige Codeblöcke über die Texteinrückung (“indent”).
    In diesem Fall muss der Inhalt jeder Funktion gleich eingerückt sein.
    Die While-, If-, Else-Schleife auch…du solltest ein wenig über Python nachlesen, sonst wirst du gleich auf den nächsten Error stoßen.

  3. Meine Idee zur Ansteuerung des Lüfters(5V/0,2A) mittels zweier Transistoren und zwei unterschiedlicher Transistoren (Lüfter aus, langsam und schnell)
    import RPi.GPIO as GPIO
    import time
    import os
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(11, GPIO.OUT)
    GPIO.setup(13, GPIO.OUT)
    def getCPUtemperature():
    res = os.popen(‘vcgencmd measure_temp’).readline()
    return(res.replace(“temp=”,””).replace(“‘Cn”,””))
    SOLL_temp = “45.0?
    HIGH_temp = “55.0?
    var = 0
    while 1:
    if (getCPUtemperature() >= SOLL_temp):
    if var == 0
    GPIO.output(11, True)
    time.sleep(2)
    continue
    GPIO.output(11, False)
    GPIO.output(13, True)
    var = 1
    else:
    if (getCPUtemperature() >= SOLL_temp):
    if var == 1
    GPIO.output(11, False)
    GPIO.output(13, True)
    else:
    if (getCPUtemperature() >= HIGH_temp):
    GPIO.output(13, False)
    GPIO.output(11, True)
    time.sleep(15)
    continue
    else:
    GPIO.output(11, False)
    GPIO.output(13, False)
    var = 0
    time.sleep(15)

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.