Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Taster und Schalter

In diesem Kapitel beschäftigen wir uns mit Tastern und Schaltern und wie man sie unter Python3 anspricht. Dazu benutzen wir eine Bibliotheksdatei pigpio, die das Lesen und Schreiben von GPIOS unterstützt; dabei werden die Pins des Raspi über die Broadcom-Bezeichner angesprochen.

Vorbereitung des Raspberry Pi

Über PyPi wird die Programmbibliothek pigpio mit

  • pip install pigpio

installiert. Ist das erfolgt, wird im Konsolefenster mit

  • sudo pigpiod

der pigpio-Dämon gestartet.

Welche Befehle stellt die Bibliotheksdatei pigpio.py bereit?

Die Datei pigpio.py befindet sich nach erfolgreicher Installation im Verzeichnis

  • /usr/lib/python3/dist-packages/

Öffne die Datei und hole dir dort alle Informationen, die du benötigst, um ein erstes Programm zu schreiben. Ein Pythonprogramm muss am Anfang immer die Bibliothek pigpio importieren und eine oder mehrere Instanzen der Klasse pigpio.pi erzeugen.

Mit

  • pi = pigpio.pi()

lassen sich dann über pi alle lokalen GPIOs ansprechen.

  • pi.write(2,0)

setzt den lokalen GPIO 2 auf LOW, während

  • pi.write(2,1)

GPIO 3 ihn auf HIGH zieht.

Mit

  • pi.read(18)

wird der Zustand des GPIO18 ausgelesen und kann mit einem Vergleichsoperator ausgewertet werden.

  • set_pull_up_down(GPIO, pigpio.PUD_OFF/PUD_UP/PUD_DOWN)

setzt bzw. löscht den zugehörigen GPIO pull-up/-down Widerstand (GPIO:= 0..53). Dieser kleine Auszug soll reichen, um ein erstes Programm für Übung 1 zu schreiben.

Übung 1 - Taster schaltet LED ein/aus

Übung 1 - Taster schaltet LED ein/aus
Material
  • 1x Raspberry Pi3, anschlussfertig
  • 1x Steckbrett
  • 1x Taster
  • 1x LED, rot
  • 1x Widerstand, 220 Ohm
  • 4x Steckdraht
Aufgaben
  • Baue die Schaltung nach Schaltskizze auf einem Steckbrett auf.
  • Übertrage das Programm ra_taster_led.py in den Editor und speichere es ab.
  • Starte das Programm und überprüfe, ob die LED angeht, solange die Taste gedrückt bleibt.
  • Erweiterte Aufgabe: Sobald der Taster gedrückt wird, soll die LED anfangen im Sekundentakt zu blinken.

Schaltskizze und Schaltungsaufbau

 

 

 

 

 

 

 

 

Abb. 1 - Die rote LED wird an GPIO3 (Pin 3)  angeschlossen. Sobald der Taster gedrückt wird, wird der Ausgang GPIO3 auf HIGH gezogen und die LED geht an. Um die Leuchtstärke der LED zu erhöhen, kann der Vorwiderstand auf 220 Ohm zurückgesetzt werden.

Taster T1 ist an GPIO18 (Pin12) angeschlossen. In der Zeichnung ist nicht der Pullup-Widerstand eingezeichnet, der softwaremäßig hinzugeschaltet wird. Wird die Programmzeile "pi.set_pull_up_down ..." im Programm vergessen, kann dies zur Zerstörung des RaPi führen.

Das Programm ra_taster_led.py

Wie arbeitet das Programm ra_taster_led.py?

In der Endlosschleife

  • WHILE … IF … ELSE …

wird überprüft, ob an GPIO18 der Pegel auf HIGH steht oder anders gesagt, ob der Taster nicht gedrückt ist. Ist das der Fall, wird der Pegel am Ausgang GPIO2 auf LOW gesetzt und eine kleine Pause eingelegt.

Ist der Pegel an GPIO18 auf LOW, der Taster also gedrückt, wird im ELSE-Zweig der Entscheidungsbefehls der Ausgang GPIO2 auf HIGH gesetzt. Die LED geht an.

Übung 2 - LED blinkt bei gedrücktem Taster

Mit dem Schaltungsaufbau aus Übung 1 lässt sich auch eine Schaltung programmieren, die eine LED blinken lässt, solange der Taster gedrückt wird. Das nachfolgende Python-Programm zeigt eine mögliche Lösung.

Das Programm ra_taster_blinker.py

Übung 3 - Umschalter

Bei gleichem Schaltungsaufbau wie in Übung 1 lässt sich eine Schaltung programmieren, die eine LED bei jedem Tastendruck umschaltet. Leuchtet die LED am Anfang nicht, dann wird mit dem ersten Tastendruck die LED eingeschaltet; ein zweiter Tastendruck schaltet sie wieder aus. Eine Softwarelösung zeigt das folgende Programm.

Das Programm ra_taster_umschalter.py

Wie arbeitet das Programm taster_blinker.py?

Nach der Instantierung der pigpio-Klasse und dem Einschalten des eingebauten Pull-Up-Widerstandes wird die LED ausgeschaltet. Neu ist in der Endlosschleife WHILE(True), die Funktion

  • wait_for_edge(GPIO, Edge)

GPIO kann alle Werte von 0 ... 31 annehmen

Edge kann RISING_EDGE, FALLING_EDGE oder EITHER_EDGE sein.

Bei jedem Tastendruck liegt eine fallende Flanke vor (GPIO18 wird auf LOW gezogen). Liegt an GPIO2 ein LOW-Pegel an, wird dieser auf HIGH geändert und die LED fängt an zu leuchten. Ist das nicht der Fall, wird GPIO2 auf LOW gezogen.

Übung 4 - Zeitschalter

In dieser Übung soll die LED erst dann anfangen zu leuchten, wenn der Taster ca. 5s gedrückt wird.

Das Programm ra_zeitschalter_led.py

Übung 5 - Ein kleines LED Lichtspiel

Variante 1:

Vier LEDs sollen gleichzeitig auf HIGH gezogen werden, sobald man einen Taster betätigt. Damit stellen wir die Funktionsfähigkeit der Schaltung für die Varianten 2 und 3 erst einmal sicher.

 

Variante 2:

Es wird eine Zeit T vorgegeben; sobald der Taster gedrückt wird, leuchtet eine der vier LEDs zufallsgesteuert auf. Das Lichtspiel erlischt nach T Sekunden.

 

Variante 3:

In einer dritten Variante wird eine Zeit T vorgegeben; sobald dann der Taster gedrückt wird, leuchtet eines der möglichen Muster (bei 4 LEDs) zufallsgesteuert auf. Das Lichtspiel erlischt nach T Sekunden.

In allen drei Varianten wird mit GPIO Zero gearbeitet, dass im neuesten Raspbian-Image (>= 7.2019) bereits installiert ist.

Die maximale Belastung der I/O Ports

Ganz allgemein sollte die Belastung pro Pin bei maximal 15mA liegen. Alle Pins zusammen vertragen nicht mehr als 50mA. Der maximale Spannungswert von 3,3V darf an den I/O Ports des Raspberry Pi nicht überschritten werden.

Die in diesem Versuch angeschlossenen roten LEDs werden mit einem Vorwiderstand an Ausgänge des RasPi angeschlossen. Die Flussspannung einer roten LED liegt bei ca. 1,7 V. Damit lässt sich schnell nach dem Ohmschen Gesetz abschätzen, welcher Strom pro Pin und welcher Gesamtstrom fließt.

In jedem Fall müssen die Grenzwerte eingehalten werden, um den RasPi nicht zu zerstören. Das gilt in dieser Übung besonders für Variante 3.

Übung 5 - Ein kleines LED Lichtspiel - Variante 1

Bei der ersten Variante geht es "nur" darum, festzustellen, ob alle LEDs und der Taster richtig angeschlossen sind und ob die LEDs auf Tastendruck reagieren und funktionieren.

Kleines LED Lichtspiel - Variante 1

Aufgabe

  • Baue die Schaltung nach Schaltskizze auf einem Steckbrett auf.
  • Übertrage das Programm Lichtspiel_1 in den Python-Editor und speichere es ab.
  • Starte das Programm und überprüfe, ob es so reagiert, wie gefordert.
  • Versuche jeden Programmschritt selbst nachzuvollziehen und erkläre mit eigenen Worten, was jede Programmzeile bewirkt.

Material

  • 1x  RasPi 2.0 oder höher (Basisset)
  • 1x  T-Cobbler (optional)
  • 1x  Steckbrett
  • 4x  LED rot
  • 4x  Widerstand, 470 Ohm
  • 1x  Kurzhubtaster
  • div. Steckdraht

Schaltskizze

Schaltungsaufbau

Das Programm

Am Ende dieser Übung wissen wir, dass alle aufgebauten LEDs und der Taster richtig beschaltet sind und funktionieren ;-))

Übung 5 - Ein kleines LED Lichtspiel - Variante 2

In der zweiten Variante dieser Übung geht es darum, zufallsgesteuert jeweils eine der vier LEDs für eine bestimmte Zeit aufleuchten zu lassen. Wer möchte, kann natürlich die Anzahl der LEDs erhöhen und/oder andere Farben wählen, um den Lichtspieleffekt deutlicher sichtbar zu machen.

Kleines LED Lichtspiel - Variante 2

Aufgabe

  • Übernimm die Schaltung aus Übung 5 - Teil 1.
  • Übertrage das Programm Lichtspiel_2 in den Python-Editor und speichere es ab.
  • Starte das Programm und überprüfe, ob es so reagiert, wie gefordert.
  • Versuche jeden Programmschritt selbst nachzuvollziehen und erkläre mit eigenen Worten, was jede Programmzeile bewirkt.

Material

  • 1x  RasPi 2.0 oder höher (Basisset)
  • 1x  T-Cobbler (optional)
  • 1x  Steckbrett
  • 4x  LED rot und/oder gelb u/o grün u/o blau, Anzahl ist optional
  • 4x  Widerstand, 470 Ohm
  • 1x  Kurzhubtaster
  • div. Steckdraht

Versuchsaufbau

 

Der Versuchsaufbau aus Übung 5 - Variante 1 wird übernommen.

 

Das Programm Lichtspiel_2.py

Das auskommentierte Programm erklärt jeden Programmschritt.

Übung 5 - Ein kleines LED Lichtspiel - Variante 3

Vorüberlegung

Bei der dritten Variante dieser Übung geht es darum, wie man ein zufallsgesteuertes Lichtspielmuster auf vier LEDs abbilden kann oder mit anderen Worten, wieviele Möglichkeiten gibt es, bei vier LEDs, unterschiedliche Leuchtmuster zu erzeugen?

 

Man kommt sehr schnell darauf, dass es bei 4 LEDs genau

  • 2^4 = 16 Möglichkeiten

sind. Erhöht man die Zahl der LEDs zum Beispiel auf 10, dann gibt es

  • 2^10 = 1024 Möglichkeiten.

Zurück zu unseren vier LEDs. Klären wir als erstes, wie denn die 16 verschiedenen Leuchtmuster aussehen. Ein kleines Raster hilft dabei.

 

 

 

 

 

 

 

Abb. 1

In der obersten Zeile stehen die Stellenwerte des Zweiersystems, darunter in der zweiten Zeile sind die Pinanschlüsse der anzusteuernden LEDs für diese Übung eingetragen. Eine „1“ steht für „Die LED leuchtet“, eine „0“ für „Die LED leuchtet nicht“. Andere Bitmuster als die aufgeführten gibt es nicht.

Die Idee ist es nun, eine Zufallszahl zwischen 0 und 15 zu erzeugen und das zugehörige binäre Bitmuster auf den LEDs abzubilden.

In der Sprache Python gibt es da eine einfache Möglichkeit, die wir uns gleich anschauen werden.

Kleines LED Lichtspiel - Variante 3

Aufgabe

  • Baue die Schaltung nach Schaltskizze auf einem Steckbrett auf.
  • Übertrage das Programm Lichtspiel_3a in den Python-Editor und speichere es ab.
  • Starte das Programm und überprüfe, ob es so reagiert, wie gefordert.
  • Versuche jeden Programmschritt selbst nachzuvollziehen und erkläre mit eigenen Worten, was jede Programmzeile bewirkt.

Material

  • 1x  RasPi 2.0 oder höher (Basisset)
  • 1x  T-Cobbler (optional)
  • 1x  Steckbrett
  • 4x  LED rot
  • 4x  Widerstand, 470 Ohm
  • 1x  Kurzhubtaster
  • div. Steckdraht

Versuchsaufbau

Der Versuchsaufbau ist mit denen aus Variante 1 und 2 identisch.

Das Programm Lichtspiel_3a.py

Programmzeilen 43 - 81

In dieser Endlosschleife werden die Darstellungsmuster für die LEDs über eine IF-Anweisung an die LEDs übertragen, so wie in Abb. 1 dargestellt. Jedem Zeichen zwischen 0 und 15 entspricht das binäre Bitmuster.

Programmzeilen 83 - 90

Nachdem das Bitmuster an die LEDs übertragen wurde, wird eine Pause von 1 Sekunde eingelegt und die interne Zeitmarke an t1 übergeben. Solange die abgelaufene Zeit (t1 - t0) die eingebene Wunschlaufzeit im Speicher sekunden noch nicht überschritten hat, wird die Endlosschleife weiter durchlaufen.

Programmzeilen 92

Wurde die Laufzeit überschritten, wird die Schleife beendet und alle LEDs auf LOW oder 0 gesetzt.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf