PWM Lüftersteuerung mit BASH

  • Hallo, ich habefolgendes kleines Skript zusammengeschrieben um den Transistor des Lüfters zu schalten:

    Der Lüfter wird bei 40°C eingeschaltet und bei 35°C wieder aus.

    Jetzt würde ich aber ganz gerne den Lüfter per PWM steuern.
    Was ich da so im Netz gefunden habe ist alles nicht so eindeutig...
    Der Raspi hat PWM nur am GPIO18 soweit ich das gelesen habe.
    Nur wie man das aktiviert, finde ich nirgends. Vor allem würde ich es ganz gerne ohne WiringPi machen.
    die Lib bcm2835 habe ich schon drauf, habe auch das Beispiel versucht, aber da dreht sich nix...

    Würde mich freuen wenn mir da einer Helfen kann!

  • PWM ausschliesslich mit der bash - das geht nicht. Wenn Du es mit C# hinbekommen hast, könntest Du ja dort auch gleich die Schleife und die Abfragen mit einbauen - was spräche dagegen?

    Gruß, mmi

  • @mmi: Wieso sollte das nicht gehen? Man legt einfach nur ein paar Werte zwischen 0 und 1023 fest und stellt GPIO18 dann entsprechend ein - sehe da kein Problem :huh:

    Allerdings kann dies Probleme bereiten wenn man den 3.5mm Audio-Jack zur Wiedergabe verwendet, denn darüber sind genau genommen 2 HW PWM Pins beschaltet, nur ist einer am 3.5mm Audio-Jack "versteckt" und somit bleibt für Anfänger nur GPIO18. Wenn aber Audio über HDMI ausgegeben wird sollte das problemlos funktionieren ;)

    Mit wiringPI wäre zudem eine Software-PWM Lösung für ALLE gpio Pins möglich - da der PI aber auch einen einzigen PWM pin hat kann man das auch Hardware-PWM nutzen sofern der Pin noch unbenutzt ist.
    Allerdings wäre die Konfiguration dieses einen HW-PWM Pins mithilfe wiringPI einfacher:

    Code
    gpio -g mode 18 pwm
    gpio -g pwm 18 512 #half brightness

    Abgesehen von wiringPI kann man aber auch mithilfe von dem RPi.GPIO python Module ein Softwareseitiges PWM mit jedem Pin realisieren. Siehe dazu > hier <
    (für diejenigen die nicht an einen Pin gebunden sein möchten)


    Für PWM in C gäb es hier ein Beispiel: http://www.rpiblog.com/2012/11/pwm-on-raspberry-pi.html
    (oder wiringPi.h and softPwm.h vom wiringPI Paket)
    Oder auf folgendem Link nach ' pwm ' suchen: http://www.netzmafia.de/skripten/hardw…sPi_GPIO_C.html (da stehen auch noch weitere Programmierbeispiele bezgl. gpio)
    Es gibt auch ein PWM Kernel Module über welches PWM für alle GPIO Pins realisiert werden kann, aber dann eben auch Software-PWM: http://www.raspihub.com/go/deede42ac84…949c1349e74f4de

    Eine weitere Möglichkeit noch mehr Hardware-PWM Pins hinzuzufügen wäre über zusätzliche Hardware über die SPI oder I2C Schnittstellen


    Unterschied Software-PWM Vs. Hardware-PWM:
    Software-PWM ist langsamer und verbraucht mehr Resourcen (CPU+RAM). Hardware-PWM ist in real-time also ohne Verzögerung und auch Resourcenschonender


  • @mmi: Wieso sollte das nicht gehen? Man legt einfach nur ein paar Werte zwischen 0 und 1023 fest und stellt GPIO18 dann entsprechend ein - sehe da kein Problem :huh:


    meigrafd:
    Wenn es so einfach ist und man auf den "Klinkensound" verzichten kann :thumbs1:
    Habe jetzt nicht gesucht - vielleicht hast Du schon ein reines Bash-Beispiel dafür, wohin man was "echoed"? ;)
    Denn für schnell mal zwischendurch will ich das auch haben! :danke_ATDE:

    Gruß, mmi

  • Naja sowas lässt dich mit wiringPI ja recht schnell umsetzen - für pures Bash, also ohne wiringPI, hab ich so aber auch nix...

    Es gibt hier im Forum aber bereits ein paar gute Scripts zum Beispiel > dieses von Bagheera < oder > dieses von mir < ;)

    Ich würde da einfach so vorgehen dass man für bestimmte Temperaturwerte ein PWM Wert festlegt, also zum Beispiel 1023 wenn die Temperatur sehr hoch ist damit der Lüfter vollepulle dreht, oder ein PWM Wert von 512 wenn die Temperatur zwischen MIN_TEMP und MAX_TEMP liegt und wenn die Temperatur auf bzw unter MIN_TEMP liegt wird PWM auf 0 gestellt.

    Das Script wird dann zB jede Minute via crontab ausgeführt und prüft die Temperaturwerte.
    Liegt der Wert über MAX_TEMP -> PWM_MAX .. Liegt der Wert zwischen MIN_TEMP & MAX_TEMP -> PWM_NORM .. Liegt der Wert unter MIN_TEMP -> PWM_OFF

    Soll ichs für euch umschreiben? :D

  • Du brauchst nix umschreiben, sondern Du sagst ja - gegensätzlich zu mir - daß es mit einem einfachen Bashscript funktionieren soll.
    Vorstellen kann ich mir das durchaus, wenn es vom Kernel unterstützt wird - andernfalls kommt man da aus meiner Sicht über ein *reines* bashscript nicht ran - und das war ja der Wunsch des TE.

    Zu Deinen Scriptbeispielen: Wir sprechen von *PWM* Steuerung und nicht mehr von einfachen Ein-/Auschaltvorgängen. ;)

    Gruß, mmi

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!