Eingabe über GPIO
Wir wollen in diesem Abschnitt versuchen, einen Taster zu verwenden, um ein Eingangssignal an den RasPi zu senden. Die LED bleibt unser Ausganggsignal. Gesteuert wird das Ganze dann über ein Python-Programm.
Kurze Taster-Kunde
Taster und Schalter sind beides Bedienelemente, die Kontakte schließen. Während ein Schalter in seinem Zustand stabil bleibt (also der Kontakt z.B. geschlossen bleibt, bis er erneut betätigt wird) kehrt ein Taster nach dem Drücken wieder in die Ausgangslage zurück.
Für die Verwendung des Tasters ist folgendes wichtig zu wissen: Wenn du den Taster so vor dich hinlegst, dass du die Beinchen links und rechts wegbiegen könntest, dann sind die Beinchen 1 und 2 dauerhaft miteinander verbunden, auch ohne dass du die Taste betätigst. Ebenso sind die Beinchen 3 und 4 dauerhaft miteinander verbunden.
Wenn du die Taste betätigst, dann wird die obere Beinchenreihe (1-2) mit der unteren Beinchenreihe (3-4) verbunden.
Verwende für das folgende Experiment den Taster immer so, dass jeweils die Beinchen 1-2 und 3-4 in einer Zeile des Steckbretts liegen und dass der Taster den mittleren Steg überbrückt. Das könnte dann folgendermaßen aussehen:
Aufgabe
Nenne verschiedene Beispiele für Taster und Schalter aus dem Alltag.
Eingangssignal auf GPIO
Wir wollen nun dafür sorgen, dass auf Tastendruck Spannung auf Pin 22 liegt und wenn man die Taste wieder loslässt keine Spannung mehr anliegt. Wir müssen also quasi Pin 1 mit Pin 22 verbinden und zwischendrin noch den Taster schalten. Da wir keinen Verbraucher haben benötigen wir einen Widerstand - wir verwenden einen 1kΩ-Widerstand.
Man könnte nun meinen, dass das zugehörige Schaltbild so aussieht:
Leider genügt das noch nicht ganz. Wir benötigen noch einen Pulldown-Widerstand, damit das Eingangssignal einen definierten Zustand hat. Das gesamte Schaltbild sieht nun so aus:
Aufgabe
Recherchiere im Internet zu Pulldown- und Pullup-Widerstände, erkläre die Unterschiede und Funktionsweisen. Überprüfe, ob für unsere Situation auch ein Pullup-Widerstand möglich wäre.
Die Programmierung
Für unser Testprogramm erzeugen wir noch zusätzlich eine Ausgabe in der Shell:
import RPi.GPIO as GPIO ## Importieren der GPIO Bibliothek
from time import sleep
GPIO.setmode(GPIO.BOARD) ## Verwende die Nummerierung der Pins
GPIO.setup(15, GPIO.OUT) ## Setze GPIO Pin 15 auf Ausgangssignal (LED)
GPIO.setup(22, GPIO.IN) ## Setze GPIO Pin 22 auf Eingangssignal (Taster)
try: ## Ausnahmebehandlung
while True: ## Endlosschleife bis Strg+C
if GPIO.input(22): ## Pin 22 empfängt 1 (True)
print("LED an")
GPIO.output(15,True) ## Setze GPIO Pin 15 auf "True"
else:
print("LED aus")
GPIO.output(15,False) ## Setze GPIO Pin 15 auf "False"
sleep(0.1)
finally: ## Dieser Block wird auf jeden Fall ausgeführt
GPIO.cleanup() ## Immer schön hinter dir aufräumen!
Aufgabe
Begründe die Notwendigkeit der Anweisung sleep(0.1).
Übungen
Aufgabe 1
Reduziere die Anzeigen in der Shell auf ein notwendiges Minum:
In der Shell soll nur etwas geschrieben werden, wenn sich auch der Zustand ändert.
Aufgabe 2
Simuliere einen Schalter:
Immer wenn der Taster gedrückt wird, soll sich der aktuelle Zustand ändern aber dann beibehalten werden, bis der Taster das nächste Mal gedrückt wird.
Aufgabe 3
Erweitere die Lösung zur Aufgabe 2, so dass es drei Zustände gibt:
- LED leuchtet dauerhaft
- LED sendet "SOS"
- LED ist aus
Aufgabe 4
Ergänze deine Schaltung um zwei weitere LEDs und simuliere eine Verkehrsampel, die weitergeschaltet wird, wenn der Taster gedrückt wird.
Aufgabe 5
Verwende die drei LEDs aus Aufgabe 4, um per Tastendruck digital zu "würfeln" und das Ergebnis binär mit Hilfe der 3 LEDs anzuzeigen.
Aufgabe 6 (für Experten)
Zeichne das Drücken und das Loslassen des Tasters auf, wie bei ein Oszilloskop. Durch die dargestellte Linie soll auch im Nachhinein nachvollzogen werden können, wann der Taster gedrückt wurde und wann er losgelassen wurde.
Du kannst dir auf dieser Seite auch die graphische Aufzeichnung des Tranceiver-Programms anschauen und dich dadurch inspirieren lassen...
Quellen
- [1]: Taster - Urheber: JOM - Lizenz: inf-schule.de
- [2]: Taster auf Steckplatine - Urheber: Fritzing - Lizenz: Creative Commons BY-SA 3.0 International
- [3]: Taster ohne Pulldown - Urheber: Fritzing - Lizenz: Creative Commons BY-SA 3.0 International
- [4]: Schaltbild komplett - Urheber: Fritzing - Lizenz: Creative Commons BY-SA 3.0 International