Raspberry Pi Ampelschaltung mit GPIO Teil 1

In diesem Tutorial geht es um eine einfache Ampelschaltung mittels der programmierbaren GPIO Pins via Python. Im nächsten Tutorial erweitern wir die Schaltung um ein paar Funktionen (u.a. einen Input).

Zubehör

Folgendes brauchen wir dazu:

 

 Vorkehrungen

Zunächst müssen wir die Pakete und Pfade aktualisieren.

sudo apt-get update
sudo apt-get upgrade

Damit die Bibliothek nachher auch richtig funktioniert, brauchen wir python-dev.

sudo apt-get install python-dev

Anschließend laden wir die Python GPIO Bibliothek (die neueste Version gibt es hier, evtl. Version anpassen: https://pypi.python.org/pypi/RPi.GPIO )

sudo wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.6.1.tar.gz

Jetzt noch entpacken

tar zxvf RPi.GPIO-*

und in das Verzeichnis wechseln

cd RPi.GPIO-*

Nun lässt sich die Bibliothek instaliieren.

sudo python setup.py install

Sollte es hier zu Fehlern kommen, schreibt sie in die Kommentare. Die meisten Fehler sind zum Glück recht gut beschrieben.

Aufbau

Der Aufbau der ersten Schaltung sieht wie folgt aus:

ampel1_Steckplatine

Als Tipp: jede LED hat ein längeres und ein kürzeres Ende. Das längere gehört zum Positiven (3,3V), das kürzere zum Negativen (GND). Als Vorwiderstand bekommt die LED 470 Ω.

Ein Transistor funktioniert so, dass sobald auf den mittleren Pin ein Strom kommt, die Leitung von links nach rechts freigegeben wird. Damit der Strom jedoch nicht zu groß ist, schalten wir einen 10k Ω Widerstand.

Bevor du die Kabel ans Pi anschließt, überprüfe noch einmal die Schaltung.

 

Programmierung

Nachdem alles aufgebaut und angeschlossen ist, brauchen wir ein Skript, dass die LED blinken lässt. Wir erstellen ein Skript

sudo nano ampel_skript1.py

mit folgendem Inhalt

Achtung: Hier ist die Nummer des Pins wichtig und nicht die GPIO Nummer. Die Pin-Nummer ist 26, wobei es GPIO Pin 07 ist. Falls die GPIO Nummer angegeben werden soll, muss in Zeile 6 stehen:

GPIO.setmode(GPIO.BCM)

Wir speichern und beenden den Editor (STRG + O, STRG + X) und führen das Skript aus.

sudo python ampel_skript1.py

Um das Skript wieder abzubrechen, drücke STRG + C.

In Teil 2 bauen wir die Phasen einer Ampel ein.

73 Kommentare

  1. Hallo,

    ich habe 2 Fragen bzgl. dem Aufbau der Ampelschaltung:
    1.) Welche Transistor-Typen kann ich statt des BC547 benutzen? BC337, BC546, BC139, BC140, 2N2222, 2N3904, 2N4401, 2N3055?
    2.) Wie befestige ich die Drähte an den GPIO-Pins?
    Liege ich richtig, wenn ich eine Steckverbindung auf die GPIO-Pins stecke und die Drähte oben drauf löte?

    Vielen Dank für Ihre Bemühungen.

    Antworten
    • Hi,
      du musst zwischen PNP und NPN Transistoren unterscheiden.
      Bzgl. GPIOs nimm doch einfach Jumper Kabel dann musst du nichts löten.

      Antworten
  2. Hallo Felix,

    wofür sind die Transistoren überhaupt gut? Reicht es nicht, die LED mit Vorwiderstand direkt an die GPIO Pins zu legen? Zumindest legen die Beispiele auf sunfounder.com das nahe. 🙂

    Viele Grüße
    Michael

    Antworten
    • Hallo Michael,
      der Transistor ist wie eine Art Schalter, der sich durch einen niedrigen Strom an der Basis die Verbindung Emitter-Kollektor öffnet (genaueres dazu auf Wikipedia). Bei den LEDs wäre es möglich sie auch direkt mit einem Vorwiderstand an den GPIOs anzuschließen, aber es ist generell nicht zu empfehlen, auch um die GPIOs vor Spannungsschwankungen zu schützen.
      LG Felix

      Antworten
  3. Hallo
    Ich kenne mich nicht wirklich mit Python aus. Wenn ich das AmpelSkript ausführe Kommt in meinem Terminal die Meldung:
    File „ampel_skript1.py“, line 14
    GPIO.output(26, True)
    ^
    IndentationError: expected an indented block

    Wenn jemand weiß wo mein Fehler liegt wäre ich für eine Antwort dankbar.
    LG Simon

    Antworten
  4. Hey ich hab ein Problem bei „sudo python setup.py install“
    sowie ich dies ausführe kommt bei mir zum Schluss „error: command ´gcc´failed with exit status 1“
    bitte um möglichst schnelle und genaue Hilfe, vielen dank schon mal im vorraus ^^

    Antworten
  5. Hey ich bins nochmal, ich habe erneut einen Fahler, diesmal am Skript. bei mir Taucht ab Line 14 die Fehlermeldung :
    File „ampel_skript1.py“, line 9 (bzw.14)
    ^
    IndentionError: expected an indented block

    kann mir bitte jemand weiterhelfen, habe es schon via root probiert, hat aber auch nicht geklappt…
    vielen Dank im vor raus für die Hilfe.
    Mit Freundlichen Grüßen Julius

    Antworten