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.

Taster mit Beinchen links und rechts[1]

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:

Taster auf Steckplatine[2]

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:

Taster mit GPIO verbunden ohne pulldown[3]

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:

Schaltbild mit Taster und LED[4]

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:

  1. LED leuchtet dauerhaft
  2. LED sendet "SOS"
  3. 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

X

Fehler melden

X

Suche