Programmieren lernen am Raspberry Pi – Teil 4: LEDs mit PWM dimmen

Im vierten Teil der Programmierreihe geht es darum die Raspberry Pi GPIO PWM Funktionalität näher kennen zu lernen. Wie wir generell die GPIOs nutzen um einfache Schaltungen zu erstellen, haben wir in vorherigen Teilen bereits gesehen. Allerdings können die GPIOs noch viel mehr als nur an- und ausgeschaltet werden bzw. die anliegende Spannung auslesen. Mit PWM können die GPIOs des Raspberry Pi’s nämlich auch dimmen und Servomotoren steuern.

Daher wird in diesem Artikel erklärt, was PWM eigentlich ist und wie man es mit den GPIOs des Raspberry Pi’s nutzen kann. Damit lassen sich zum Beispiel Servo Motoren oder mehrfarbige bunte RGB LEDs mit dem Raspberry Pi steuern.

 

Raspberry Pi GPIO PWM Zubehör

Für dieses Tutorial nutzen die folgenden Teile:

Übrigens: Mit diesem Tutorial ist es auch möglich RGB LEDs zu steuern und somit mit einer LED jede beliebige Farbe nachzustellen.

All diese Komponenten sind auch in einem Raspberry Pi Starter Kit vorhanden.

Ebenfalls kannst du mit PWM einen Servomotor (oder gleich mehrere?) steuern und so z.B. deinen eigenen Roboterarm fernsteuern. Dazu ist es hilfreich PWM im Allgemeinen zu verstehen.

 

Was ist PWM?

PWM Signal mit Tastgrad von 25% (t1/T). Quelle: Wikipedia

PWM steht für Pulsweitenmodulation (Englisch: Pulse-width modulation) und beschreibt den Vorgang, bei dem ein Signal zwischen zwei Spannungen wechselt. In digitalen Schaltungen gibt es meist nur zwei Pegel – die Raspberry Pi GPIOs können bspw. nur entweder 3.3V oder 0V anliegen haben. Somit ist es bspw. nicht möglich ohne weiteres eine Spannung dazwischen zu generieren.

Nutzt man PWM hat man jedoch eine Alternative: Es gibt nämlich hierbei zwei Parameter: Zum einen die Periodendauer (im Bild ist dies T) und die Impulsdauer (im Bild t1). Teilt man t1 durch T erhält man den sogenannten Tastgrad (englisch: duty cycle). Ein Tastgrad von 1 bzw. 100% wäre somit das selbe, wie wenn man die ganze Zeit die obere Spannung (bspw. 3.3V) anliegen hätte, ebenso würden 0% heißen, dass die ganze Zeit keine Spannung anliegt.

Ist die Periode kurz genug, kann man so auch analoge Spannungen quasi nachstellen, da die Reaktionszeit nicht all zu schnell ist. Normalerweise befindet sich die Periodendauer im Bereich von ~100ms, abhängig vom zu verwendeten Modul. Wichtig ist also der Durchschnitt. Ist in 25% der Zeit die Spannung auf 3.3V und 75% auf 0V, so ergibt sich eine durchschnittliche Spannung von 0,825V.

Bei Servomotoren und dessen Treiberboards wird die Angabe der Periode und des Tastgrads meist im Datenblatt gemacht. Im Beispiel eines MG996R haben wir folgendes vorliegen: Die Periode ist 20ms lang. Außerdem wird ein Tasgrad von zwischen 5% und 10% der Periode erwartet. Somit die die Impulsdauer zwischen 1ms und 2ms. Üblicherweise können Servos zwischen 0 und 180° rotieren. Daher müssen wir die Impulslänge dazwischen anpassen. Eine Länge von 1,5ms (7,5%) ergibt somit einen Winkel von 90°. Und das ganze eben 50x pro Sekunde (50Hz).

 

Wie kann man Raspberry Pi PWM über GPIOs nutzen?

Raspberry Pi GPIO Pin Belegung

Raspberry Pi GPIO Pin Belegung

Nachdem wir nun wissen was die Pulsweitenmodulation / PWM ist, wollen wir diese auch nutzen. Dafür schalten wir in diesem Tutorial zunächst eine LED. Allerdings soll diese nicht wie zuvor einfach nur an- und wieder ausgeschaltet werden, sondern gedimmt werden. Dazu soll sie sich von „Dunkel“ langsam zu komplett „Hell“ ändern.

Starten wir also mit der Verkabelung. Die LED hat zwei unterschiedlich lange Seiten. Das längere Ende kommt an die positive Spannungsquelle (in dem Fall den GPIO) und das kürzere Ende GND (Eselsbrücke: Plus hat zwei Striche -> längeres Ende). Damit die LED geschont wird nehmen wir einen 100Ω Vorwiderstand. Hast du gerade keinen zur Hand, kannst du ggf. auch die Spannung per PWM niedriger regeln. Du kannst jeden beliebigen, programmierbaren GPIO nehmen, der frei ist. Falls du von meinem Aufbau abweichst, musst du das kommende Skript allerdings auch umschreiben. Ich nutze GPIO 23:

Raspberry Pi GPIO PWM - LEDs dimmen

 

PWM Programmierung der GPIOs

Öffne nun deine Python Konsole oder erstelle ein Skript, welches wir ausführen mit folgendem Inhalt:

sudo nano gpio_pwm_test.py

Nach dem Speichern (STRG+O, STRG+X), führe es hiermit aus:

sudo python gpio_pwm_test.py

Um das Skript abzubrechen, kannst du einfach STRG+C drücken.

Vielleicht fragst du dich, wie man nun bunte RGB LEDs damit einstellt: Diese haben vier Anschlüsse, wobei an drei davon jeweils ein GPIO kommt. Der vierte Pin ist GND / Masse und kommt ebenfalls an GND. Die drei Pins stehen für Rot, Grün, Blau. Sobald man die Intensität der drei Kanäle variiert, ändert sich auch die Farbe (weitere Infos).

 

Weitere Raspberry Pi PWM Möglichkeiten

Wie schon erwähnt ist mit PWM noch viel mehr anzustellen, als nur einfache LEDs zu steuern. Eine davon ist eben Servos zu steuern. Damit lassen sich dann Projekte wie der Roboter Arm mit mehreren Servos umsetzen (mit dem PCA9685). Außerdem können Servos auch mit Controllern gesteuert werden, wie ich in dem Video gezeigt habe:

 

Zum Schluss noch die Frage: Welches Thema soll in der „Programmieren für Anfänger“ Reihe im Bezug auf den Raspberry Pi als nächstes behandelt werden?

14 Kommentare

  1. Hey Felix.
    Erstmal, wie immer ein tolles Tutorial.
    Zweitens verstehe ich nicht nicht wo dies „sudo nano gpio_pwm_test.py“ zum einsatz kommt, wenn ich das in die Python Konsole eintrage kommt das danei herraus:
    >>> sudo nano gpio_pwm_test.py
    File „“, line 1
    sudo nano gpio_pwm_test.py
    ^
    SyntaxError: invalid syntax
    >>>

    Ich weiß nich tob das so richtig ist.
    Außerdem schreibe ich gerade meine Facharbeit in Informatik und habe mir dazu das Theama deiner Tutorials zum Roboter bau und Programmierung rausgesucht und da verstehe ich auch nicht wie und wo beispielweise das:
    sudo mkdir RaspberryPi-Robot
    cd RaspberryPi-Robot
    sudo nano l293d.py

    zum einsatz kommt (das ist aus dem ersten Teil des Tutorials), deswegen würde ich mich sehr freuen wenn du mir da helfen könntest.

    Liebe Grüße
    Max

    Antworten
    • mojn max
      um dir ma etwas zu helfen :

      mkdir = make dir .. bedeutet soviel wie erstelle einen Ordner dahinter steht der name des Orners, in diesem fall RaspberryPi-Robot

      cd = change directory … wechel in den ordner …. dahinter den Namen oder Pfad zum Ordner

      nano = text editor …. damit rufst du einen reinen texteditor auf in dem du dein Code oder sonstiges schreiben kannst

      ich sag ma einfa linux kenntnisse sollten da schon reichen da ein bischen einlesen denn ist das selbst erklärend.
      zu dem oberen fehler kann ich dir leider nichst sagen da du eigentlich nur den editor aufrufst vondaher weiss ich nicht wirklich woher der fehler stammen könnte
      das sieht meiner seits ehr so aus als ab du da gerade nano mit python verwechselt hast und wenn es doch python ist liegt da ein syntaxfehler in zeile 1 vor.
      lg

      Antworten
    • Hallo, dieses Sudo band muss du im Terminal eingeben, darin kannst du dann den Videos der datei von der Website schreiben

      Antworten
  2. Ist mir gerade auch augefallen das das mit Windows garnicht geht.
    Muss ich mir erst dran gewöhnen mit zwei systemen zu Arbeiten.

    Trotzdem nochmal vielen Dank björn, Nico und Felix
    Und ich hoffe du machst weiterhin so interessante Tutorials
    LG Max

    Antworten
  3. Hallo Felix…
    Ich meine ein Servo dreht um 360grad (da Kreisbewegung) nicht 180, hat sich da ein Fehler eingeschlichen?
    Oder verwendest du besondere Bauformen?

    Gruß Skipper

    Antworten
  4. Hey Felix ich bin nochmal,
    wie würdest du den Aufbau des Raspberrys beschreiben den du benutzt (ich bräuchte da mal ein paar anregungen für meine Facharbeit), ich würde mich sehr freuen wenn du mir ein paar Ideen zukommenlassen würdest. Natürlich dann wenn du Zeit und Lust hast.
    LG Max

    Antworten
      • Ja das auch aber dazu später was, ich meine aus welchen komponenten er besteht, ich ahbe dazu zwar schon ein bisschen was wäre aber trotzdem sehr nett von dir wenn du mir da helfen könntest.
        Und dann noch was in diesem Tutorial:
        raspberry-pi-roboter-bausatz-zusammenbau Teil 1, da blick ich auch noch nicht ganz so mit der verkabelung durch, ich bin da noch ziemlich noobig was das verkabeln angeht.
        Deswegen würde ich mich sehr freuen wenn du mir auch da helfen würdest und es tut mir leid falls ich in letzter zeit durch meine viele fragerei deine Nerven strapaziere.
        LG Max

      • Aus was der Raspberry Pi besteht? CPU+GPU, Arbeitsspeicher, Widerstände, Transistorem, Kondensatoren, Anschlüssen, etc. nur eben alles auf einer Platine verbaut.
        Die Verkabelung im Roboter Tutorial ist doch schematisch gezeigt, am besteh du beschreibst dein Problem im dortigen Tutorial etwas genauer.

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!