Lüftersteuerung per Temperatur + Einbauanleitung

  • Hallo,


    ich wurde von einem User gebeten ein Tutorial zu machen, wie ich den bei mir installierten Lüfter abhängig von der Temperatur steuere.


    (django hat aufbauend auf meinem Tutorial ein Script geschrieben, welches es ermöglicht den Lüfter ohne Python anzusteuern, ist euch überlassen, mir was ihr lieber arbeitet, ich verlinkte dieses mal hier)


    [hr]
    Inhalt:
    1. Hardware
    1.1 Lüfter ins Gehäuse bauen / befestigen
    1.2 Transistor verlöten
    2. Software
    2.1 GPIO Steuerung per Python
    2.1.1 Grundinstallation
    2.1.2 Lüfter spezifisches Script
    2.2 Temperaturüberwachung per Bash
    2.3 Automatisierung des Scripts
    3. Extras
    [hr]


    1. Hardware
    1.1 Lüfter ins Gehäuse bauen / befestigen


    Ich habe mir von einer sehr alten Grafikkarte einen kleinen Lüfter abgeschraubt, welcher perfekt in das Standardgehäuse vom Raspberry passt.
    Ihr könnt aber gerne auch jeden anderen beliebigen Lüfter nehmen, solange dieser 5V benötigt.


    Einfach herumtüfeln, sodass der Lüfter frei läuft und nirgends anstößt.
    Bei mir ist der Lüfter am Standardgehäuse vom Raspberry befestigt, ich habe einfach mit einem kleinen Gravurset oben ein paar Löscher rein geschnitten und dann den Lüfter mit 4 Schrauben befestigt.


    1.2 Transistor verlöten
    Ihr benötigt folgendes:

    • 1x ~6,8k Ohm Widerstand
    • 1x Transistor BC547

    Weil ich bei mir keinen 6,8k Ohm Widerstand hatte, habe ich bei mir 3x 15K Ohm genommen und diese Parallel zusammen gelötet, sodass diese am Ende einen Widerstand von 5k Ohm darstellen.

    Quote


    Zitat von orb:
    damit der Transistor sauber schaltet solltest der Widerstand nicht größer als 6,8k sein, lieber kleiner 4,7k oder 3,3k sind auch ok. Unter 1,2k sollte der aber nicht haben.



    So habe ich das bei mir Verlötet:
    Wie ein ehem. Prof mal sagte: Paint, das beste Grafiktool für Programmierer.

    Man kann nicht so viel erkennen, weil ich es mit Heiskleber umschlossen und befestigt habe, aber hier trotzdem mal ein Bild von meinem:


    [hr]


    2. Software
    2.1 GPIO Steuerung per Python
    2.1.1 Grundinstallation


    Zur Steuerung der GPIO Pins habe ich ein einfaches Python Script aus dem Internet genommen.


    Nachzulesen auf dieser Seite: http://lwk.mjhosting.co.uk/?p=343


    Ich schreibe hier kurz raus, was ich gemacht habe
    Mich als Pi angemeldet und folgendes eingeben:


    Code
    wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.1.0.tar.gz
    tar zxf RPi.GPIO-0.1.0.tar.gz
    cd RPi.GPIO-0.1.0
    sudo python setup.py install


    Damit ist es nun Möglich alle GPIO Pins per einfachem Pythonscript zu steuern.


    2.1.2 Lüfter spezifisches Script


    Nachdem man den Lüfter nun zusammengebaut hat und erfolgreich mit dem Transistor und dem Widerstand verlötet hat, schließen wir den Lüfter wie im Punkt 1.2 auf dem Bild zu sehen an unseren Pi an.


    Danach erstellen wir folgendes Script um den GPIO Pin 14 an und aus zu schalten.


    Code
    sudo mkdir /home/luefterscript
    cd /home/luefterscript


    $ sudo nano gpio14on.py

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


    $ sudo nano gpio14off.py

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


    Danach

    Code
    sudo chmod +x gpio14on.py
    sudo chmod +x gpio14off.py


    Um zu testen ob alles funktioniert hat, starten wir den Lüfter mal:
    Dazu benutzen wir das Kommando

    Code
    Lüfter anschalten:
    sudo python gpio14on.py
    
    
    Lüfter ausschalten:
    sudo python gpio14off.py


    2.2 Temperaturüberwachung per Bash
    Wenn es bis hier keine Fehler gegeben hat und die manuelle Lüftersteuerung funktioniert, führt folgende Schritte aus:


    Erstellt diese Datei und schreibt eine 0 hinein:

    Code
    sudo nano /home/luefterscript/luefterstatus.txt
    -> eine 0 reinschreiben


    Danach das hier:


    Code
    sudo nano /home/luefterscript/temperaturscript.sh


    Code
    Kopiert euch bitte das Script aus dem Anhang, ich konnte es irgendwie hier nicht so posten:
    [attach=301,'none','2'][/attach]
    (Am besten per Copy+Paste, weil ich hier keine sh Datei hoch laden konnte.


    Damit das Script funktioniert noch:

    Code
    sudo chmod +x /home/luefterscript/temperaturscript.sh


    Wenn wir das Script nun mit

    Code
    /home/luefterscript/temperaturscript.sh


    aufrufen, bekomme wir zwar keine Ausgabe, jedoch sieht man die aktuelle Temperatur alle 10 Sekunden in dieser Datei
    /home/luefterscript/temperatur.txt


    und ob der Lüfter an / aus in dieser
    /home/luefterscript/luefterstatus.txt


    diese beiden Dateien könnt ihr auch nutzen um sie in andere Programme einzubinden, ich habe mir z.B. eine dynamische motd geschrieben, welche mir die aktuelle Temperatur und den Lüfterstatus anzeigt.


    2.3 Automatisierung des Scripts


    So, zu guter letzt müssen wir das Script noch im Autostrat verknüpfen, damit dieses immer läuft:


    Dazu ändern wir die /etc/inittab mit:

    Code
    sudo nano /etc/inittab


    schreibt nur am Ende der Datei diese beiden Zeilen rein, verändert sonst nichts:

    Code
    L1:0123456:respawnudo /home/luefterscript/temperaturscript.sh
    L2:0123456ysinitudo python /home/luefterscript/gpio14off.py


    Zur Erklärung:
    L1 -> Startet das Script beim Systemstart und überwacht es, falls es abstürzt, wird es automatisch neu gestartet.
    L2 -> Schaltet den Lüfter nach einem Neustart aus.
    Der Grund dafür ist, dass der Lüfter/GPIO 14 beim Starten angeschaltet wird. Nun steht in der luefterstatus.txt eine 0 für aus und der Lüfter ist an. Somit würde der Lüfter durchgehend laufen. Um dies zu verhindern schalten wir den Lüfter nach dem Neustart aus.


    So sieht das Ganze dann am Ende aus, zumindest bei mir:


    [hr]
    3. Extras
    Bei dem Script schaltet der Lüfter sich für 60 Sekunden bei einer Temperatur von 45°C ein.
    Falls ihr andere Werte haben wollt, dann ändert in der "temperaturscript.sh" diese Werte:

    Code
    Zeile 4:
    Max_Temp=45000; (45000 = 45°C; z.B. 51000 = 51°C)
    
    
    Zeile 20:
    sleep 60 (Schaltet das Script für 60 Sekunden in den "Schlafmodus" wodurch der Lüfter 60 Sekunden durchläuft=



    [hr]


    So viel Spaß damit, ich hoffe ihr kommt klar, mit dem ganzen was ich geschrieben habe, für fragen stehe ich gerne zur Verfügung.
    Verbesserungsvorschläge etc. auch gerne gesehen.


    Ich möchte noch Orb, Fr34k und b-r danken, für die Hilfe, bei den Problemen, welche ich bei der "Entwicklung" hatte.
    Falls es jemanden Interessiert, hier mein Thema:
    http://www.forum-raspberrypi.de/Thread-lüfter-automatisch-an-und-ausschalten?pid=3243




    Mfg.
    Logan517

  • Gefällt mir, aber ein paar Anmerkungen:
    - sudo brauchst Du nur bei Befehlen, die Du nur als root ausführen dürftest.
    wenn Du für Dich eine Datei bearbeiten willst reicht ein 'nano datei'
    - Eine Datei anlegen und '0' reinschreiben:

    Code
    echo '0' > /home/luefterscript/luefterstatus.txt


    - um einen Port zu schalten brauchst Du kein Python. Schau Dir mal die Script-Schnipsel an, die ich in den Hardwarebasteleien drin hab, die reichen.
    Also ein

    Code
    sudo chmod 666 /sys/class/gpio/gpio17/value && sudo chmod 666 /sys/class/gpio/gpio17/direction
    sudo echo "17" > /sys/class/gpio/export
    sudo echo "out" > /sys/class/gpio/gpio17/direction


    in die /etc/rc.local vor 'exit 0' kopieren und dann mit

    Code
    echo "1" > /sys/class/gpio/gpio17/value


    ein und mit

    Code
    echo "0" > /sys/class/gpio/gpio17/value


    ausschalten.
    Mit

    Code
    cat /sys/class/gpio/gpio17/value


    kannst Du den Zustand auch abfragen und Dir so die Hilfdatei Lüfterstatus sparen.


    - Du solltest nicht GPIO14 benutzen. Der gehört zur seriellen Schnittstelle und wird vom Raspbian benutzt.

    Edited once, last by orb ().

  • Sehr gutes tut finde ich werde es mal testen habe aber gerade nur 22k ohm widerstände hier deswegen muss ich noch warten

    Raspberry Pi Rev. 2 512mb


  • kann man machen werde mir aber einfach ein paar bestellen kann man ja immer mal gebrauchen und da ich bei reichelt eh noch was bestellen wollte kann ich die paar tage auch warten

    Raspberry Pi Rev. 2 512mb


  • Hi!


    Ich habe mal versucht ein Lüfterscript in Python zu schreiben. Scheint auch soweit zu funktionieren. ;)
    Jetzt fehlt mir nur noch der Lüfter. Wäre es nicht sinnvoll eine Freilaufdiode in den Schaltplan einzubauen (parallel zum Motor?)?
    Scriptteile aus anderen Threads kopiert. Danke an diejenigen! ;)


    Vielleicht habt ihr noch Verbesserungen zum Script:


    Edited once, last by thosch ().

  • Ich finde das Tutorial sehr interessant.
    Allerdings habe ich mich gefragt, wozu man für den Raspberry überhaupt einen Lüfter braucht? Könnte es passieren, dass die CPU ohne Lüfter zu heiss wird oder arbeitet sie bei niedrigeren Temperaturen besser?

  • Ich würde gerne einen solchen Lüfter einbauen ;) habe nur Angst mir das Teil zu zerstören ^^ hat jemand lust mir einen Lüfter zu basteln gegen Entgeld? PM pls ;)

    Edited once, last by tiCeR ().

  • Daaaaniel
    also ich denke mal nicht, dass es zwingend notwendig ist, dass der pi ein Lüfter braucht, aber ich denke schon, dass es besser wäre, wenn ein kleiner Lüfter dran ist.


    @tiCeR
    was willst du denn zerstören, das Plastikgehäuse?
    Meins hat (ich glaube) 5,6€ gekostet, da würdest du doch alleine schon an Versandkosten bezahlen, denn du das verschickst.

    Edited once, last by logan517 ().

  • Ich meine mir so nen Lüfter machen.. Dann mach ich da beim löten nix kaputt am Lüfter :) wäre wer so lieb? :D

  • Ich habe meinen Lüfter ferit.


    Kann mir bitte wer weiter helfen ?






    Danke

  • Hallo,


    ja hier der ganze Auszug.