Raspberry Pi Ampelschaltung mit GPIO Teil 2

Weiter geht es also mit dem zweiten Teil und der eigentlichen Ampelschaltung. Schauen wir und erst einmal die verschiedenen Ampelphasen auf Wikipedia an. Diese wollen wir auf Tastendruck nachbauen.

(Quelle: Wikipedia)

Zu erst einmal bauen wir die Schaltung auf:

 ampel2_Steckplatine

Wir haben also die folgenden Phasen:

  1. kein Tastendruck – dauerhaft rot (gelb und grün aus)
  2. Taster wird gedrückt – rot und gelb leuchten (grün aus), Dauer: 3 Sekunden
  3. Wechsel auf grün (rot und gelb aus), Dauer: 15 Sekunden
  4. Wechsel auf gelb (rot und grün aus), Dauer: 3 Sekunden
  5. Zurück zu Schritt 1.

Diese gilt es nun in Code umzusetzen. Ich habe dazu beispielhaft ein Skript erstellt:

sudo nano ampel_skript2.py

Dieses Mal nehme ich anstelle der Pin-Nummern die GPIO Belegunsgsnummern.

Aufgerufen wird es wieder mit

sudo python ampel_skript2.py

Die rote LED leuchtet auf und bei Drücken des Tasters wird die Funktion aufgerufen und die Ampeln gewechselt. Die Ausführung des Skrips mit STRG + C beendet.

Die Funktionen können umgeändert und erweitert werden. Hier noch ein Bild meiner Schaltung.

20140325_210311

30 Kommentare

  1. Moin Moin,

    vielen Dank für dieses Tutorial. Ich habe den Aufbau und das Script nach Vorbild eingebaut, allerdings erhalte ich bei der Ausführung des Scriptes:

    File „ampel_skript2.py“, line 53
    umschalten()
    ^
    IndentationError: expected an indented block

    Antworten
      • Hallo, tolle Seite für Anfänger wie mich, wie sehen die letzten beiden Zeilen des skripts dann richtig aus ?

      • Hatte es mal so geändert, „if (tasterStatus): umschalten()“ läuft auch.
        Hab dann mal die Zeiten geändert und debuggt, läuft auch.
        Dann werde ich mal ans nächste wagen, digitale Sensoren und AD-Wandler.
        Also Deine Seite ist für Einsteiger echt Klasse ! Super erklärt, weiter so !!!

  2. hi Felix,
    vielen Dank für deine ausführlichen skripts, aber wäre es nicht schön mit einem GPIO.cleanup() zu beenden?
    VG Wolfgang

    Antworten
  3. Wie lautet der Programmcode wenn ich mit dem drücken des Tasters eine Fußgängerampel anschalten möchte?

    Antworten
    • Dazu musst du zwei weitere GPIOs für die Fußgängerampel definieren (Rot & Grün, Definition äquivalent). Du bräuchtest dann noch zwei Übergangsphase, in der beide Ampeln rot sind (bevor Autoampel grün wird und bevor die Fußgängerampel grün wird).

      Antworten
  4. Hallo,

    ich habe mit der Schaltung ein Phänomen dass ich nicht nachvollziehen kann:
    – in Grundstellung leuchtet Rot und Grün (etwas schwächer)
    – nach betätigen des Tasters leuchten alle drei
    – dann gehen alle aus (eigentlich die Grünphase)
    – Dann Grün und orange
    – dann wieder Rot und Grün (etwas schwächer)

    Irgendwas scheint mit dem grünen LED oder Ausgang nicht zu stimmen.
    Ich hab den Pi 3 und habe entsprechend die Pins belegt. Verdrahtung finde ich auch keinen Fehler.

    Jemand ne Idee?

    Antworten
  5. Hi, hab die Schaltung nachgebaut.
    Läuft so wie beschrieben.

    Aber wieso verbraucht das Scipt beim Ausführen kanppe 34% CPU Last?

    Antworten
  6. Moin zusammen , ich habe das ähnlich Phänomen dass das Script in „Wartephase“ ca. 30% CPU-Load hat. ich denke es liegt an der „Endlosschleife“, gibt es hier „Optimierungspotential“ ?

    Gruß
    Jan

    Antworten
  7. Hallo zusammen,

    ich habe es genau so aufgebaut wie auf der Zeinchnung. Und das skript kopiert.
    In der Zeichnung ist ein fehler drin.
    Wenn LED + zum NPN soll, müssen die rote und schwarzen stecker im Breadboard getauscht werden, und dann auch beim Taster.
    Stromrückfluss über Ground Pin 6, Strom + 3,3 volt Pin 1

    Welches Programm wurde für die Zeichnung benutzt. Möchte später meine Erfahrungen auch gerne mitteilen.

    Antworten
  8. Hallo Felix,
    herzlichen Dank für deine tollen Tutorials. Für Anfänger wie mich ist das ein super Einstieg. Die Ampelschaltung hat auch auf Anhieb funktioniert. Allerdings hab ich bei der Schleife ein Verständnisproblem.
    Hinter einer while Schleife erwarte ich eigentlich eine Bedingung. Im Skript steht nur
    while True… aber was muss True sein damit Zeile 46-48 ausgeführt wird?

    Ebenso in Zeile 52
    if (tasterStatus):
    Ist hier der default Wert „True“?
    Also könnte dort auch stehen
    if (tasterStatus) == True:
    dann führe die umschalten Funktion aus?

    Wäre dir sehr dankbar wenn du hier Aufklärung schaffst.

    Freue schon darauf die weiteren Tutorials durchzuprobieren

    Antworten
  9. Wozu genau hast du jetzt nochmal die Transistoren da drin? Also ich habe die LED’s und den Schalter jetzt so wie in deiner Einführungsreihe zum Programmieren angeschlossen und die Ampelschaltung programmiert – klappt gut. Erst dann hab ich den Beitrag hier gesehen und wundere mich jetzt wofür die Transistoren gebraucht werden? In dem „Einführungskurs“ sind die LED ja auch nur mit Widerständen angeschlossen?

    Antworten
    • Wenn die LEDs mehr Strom bräuchten, kannst du sie nicht mehr direkt mit den GPIOs versorgen (das sollte man sowieso nicht). Mit den Transistoren kann man auch größere Ströme schalten, trotz niedriger Spannung.

      Antworten
      • Achso. Aber mit LED’s funktioniert es ja noch, da die nicht so viel Strom brauchen? Mit anderen Verbrauchern dann nicht mehr, das ist klar

      • Genau, ich wollte aber direkt von anfang an darauf hinweisen, nicht dass man sich später ggf. wundert 🙂

  10. Moin, wollte Mal wissen ob man mit der gleichen Programmiersprache die für die Ampel genutzt wurde auch
    CPLD Chips oder andere programmieren kann.

    Antworten
    • Hallo,
      das dürfte schwierig werden. Da Python den größten Teil der Prozessorleistung verbraucht, bleibt für die eigentliche Anwendung leider nicht mehr viel übrig!
      Die CPU kocht und es kommen trotzdem maximal 70 Herz aus den GPIO´s raus.
      Und bei vielen GPIO´s kann das Programm ganz einfrieren.
      Lerne gleich eine Programmiersprache, die ein kompiliertes Programm ausgibt. Dann schaltest Du alle GPIO mit Megaherz Geschwindigkeit bei 2 – 5 % CPU – Auslastung und kannst staunen was aus dem Winzling alles raus zu holen ist. Du musst nur wissen, was Du an die CPLD Chips senden must.
      C läuft direkt auf dem Raspi und es gibt viele Beispiele für fast alle Anwendungsgebiete.
      Wenn Dir C zu schwierig ist, dann versuch es doch mal mit LAZARUS. Es basiert auf Pascal – ist also sehr leicht zu lernen, läuft gut auf dem Raspi, und erzeugt sehr effizienten Maschinencode.

      Antworten
  11. Hey,
    tolle Anleitung. Super beschrieben. Jedoch habe ich eine kleine Verständnisfrage. Warum werden die Transistoren eingesetzt? Welchen Vorteil hat dies gegenüber der Möglichkeit den Ausgangspin direkt mit der LED zu verbinden?

    Antworten
    • Hallo,
      weil die GPIO´s nur Steuerausgänge sind und keine Leistungsstufen.
      Es währe viel zu teuer CPU´s zu bauen an die man ordentliche Lasten anschließen könnte.
      Deshalb muß derjenige, der Lasten treiben will selbst für eine Treiberstufe sorgen.

      Antworten
  12. ich habe eine schaltung erstellt, die wenn ich den knopf drücke, die nächste schaltverbindung zeigt und bleibt, bis ich den knopf erneut drücke

    Antworten
  13. Hallo,
    vielen Dank für dieses Tutorial. Ich habe den Aufbau und das Script nach Vorbild aufgebaut und zum Laufen gebracht :). Hierducht wurde mein Eifer geweckt. Nun Versuche ich eine Fußgängerschaltung zu erweitern.
    Aktuell sieht es bei mir so aus, dass die „normale“ Ampelschaltung in einer Endlosschleife Läuft. Wenn ich nun den Taster zum Richtigen Zeitpunkt betätige (ende der Schleife), Kommt meine Fusgängerschaltung zum Einsatz.
    Da ich ein absoluter Anfänger auf diesem Gebiet bin, möchte ich Fragen ,ob es möglich ist den Tastendruck „zwischenzuspeichern“ bis das Ende der Standardschleife erreicht ist.

    Antworten
  14. Hallo wir machen diese Schaltung als Schulprojekt. Aber es funktionirt nicht ganz der befahl von Taster wird nicht angenommen und die schaltun bigint sofort wenn man des Programm startet. Könnten hilfe gebrauchen.

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

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