Benutzer-Werkzeuge

Webseiten-Werkzeuge


raspberry:taster

Eingänge und Ausgänge

Folgende Aufgaben sind bei dem folgenden Projekt zu lösen:

  • Den Zustand eines Tasters (betätigt/nicht betätigt) über die GPIO-Schnittstelle abfragen
  • Steuerung einer LED mit dem Taster

LED und Taster

Eine LED wird mithilfe eines Tasters geschaltet. Solange der Taster betätigt wird, leuchtet die Diode.

Schaltung

Stromlaufplan für LED und Taster mit Pull-up-Widerstand

Für dieses Projekt können dieselbe LED und derselbe Vorwiderstand $R_1$ wie im Hallo Welt-Projekt verwendet werden. Weiterhin benötigt man einen Taster. Es eignen sich alle Taster, die man auf ein Breadboard stecken kann. Ich habe meinen Taster aus einer ausgedienten Mikrowelle. Auf der Platine hinter dem Bedienfeld der Mikrowelle waren mehrere geeignete Taster gelötet, die ich mit einem Lötkolben und einer Entlötpumpe entlöten konnte. Neben dem Taster wird ein Pull-up-Widerstand $R_2 \ = \ 10 \ kΩ$ und ein weiterer Sicherheitswiderstand $R_3 \ = \ 1 \ kΩ$ verwendet.

Pin 16 (GPIO 23) dient wird später als Ausgang programmiert, um die LED anzusteuern. Über Pin 18 (GPIO 24) wird der Zustand des Tasters erfasst. Er dient also als Eingang. Der Eingang kann zwischen zwei Zuständen unterscheiden: 0 und 1. Die 0 wird erkannt, wenn der Eingangs-Pin an Masse (Pin 6) gelegt wird. Eine 1 wird erkannt, wenn eine Spannung von 3,3 V (Pin 1) an den Eingang angelegt werden. Im unbetätigten Zustand sind die 3,3 V über den Pull-up-Widerstand $R_2$ mit dem Eingang verbunden. Dadurch, dass ein als Eingang programmierter Pin sehr hochohmig ist, fließt nahezu kein Strom, sodass die 3,3 V auch am Pin 18 zu messen sind. Wird der Taster betätigt, fließt der Strom von Pin 1 zur Masse (Pin 6) über die Widerstände $R_2$ und $R_3$. Die 3,3 V werden dadurch im Verhältnis 10:1 auf die beiden Widerstände aufgeteilt, sodass am Eingangs-Pin nur noch eine sehr kleine Spannung anliegt und somit eine logische 0 erfasst wird. Als Pull-up-Widerstand können auch andere Widerstände verwendet werden, er sollte nur nicht zu klein sein und das Verhältnis zwischen $R_2$ und $R_3$ sollte möglichst groß sein.

Auf den Widerstand $R_3$ kann verzichtet werden, er dient allerdings der Sicherheit. Im Falle, dass der Pin 18 versehentlich als Ausgang programmiert ist und auf 1 (also 3,3 V) geschaltet wird und gleichzeitig der Taster betätigt ist, wären ohne $R_3$ die 3,3 V mit der Masse kurzgeschlossen, was zur Zerstörung des Raspberry Pi führen würde.

Programmierung

Wie im Projekt Hallo Welt wird die RPi.GPIO-Bibliothek (Zeile 2) benötigt. Außerdem wird für die Nummerierung der GPIO-Pins BCM (Zeile 6) verwendet.

LED und Taster: taster.py

#! /usr/bin/env python
import RPi.GPIO as GPIO			# GPIO-Bibliothek

print "Betaetige den Taster"

GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)		# GPIO 23 (Pin 16) als Ausgang
GPIO.setup(24, GPIO.IN)			# GPIO 24 (Pin 18) als Eingang

try:
   while True:
      taster = GPIO.input(24)		# Zustand des Tasters
      GPIO.output(23, not taster) 	# Tasterzustand an LED
except KeyboardInterrupt:
   GPIO.cleanup()

In den Zeilen 7 und 8 wird GPIO 23 (Pin 16) als Ausgang und GPIO 24 (Pin 18) als Eingang definiert. Die Zeilen 10, 14 und 15 bilden eine Ausnahmebehandlung, um ein sauberes Beenden mit [Strg]+[c] zu ermöglichen.

Die Hauptaufgabe wird innerhalb der Endlosschleife (Zeile 11) erledigt. An dem Eingang (GPIO 24) wird mit GPIO.input() ein boolescher Wert ermittelt, der davon abhängt, welche Spannung am entsprechenden Pin anliegt. Durch den Pull-up-Widerstand in der Schaltung wird eine 1 geliefert, wenn der Taster nicht betätigt ist. Durch Betätigung des Tasters gibt Zeile 12 eine 0 zurück und speichert diese in der Variable taster. In Zeile 13 wird der Wert aus der taster-Variable mittels GPIO.output() an den Ausgang (GPIO 23) übergeben. Vorher wird der boolesche Wert durch das not negiert, sodass die LED bei Betätigung des Tasters leuchtet und im unbetätigten Zustand erlischt.

LED und Taster
raspberry/taster.txt · Zuletzt geändert: 2015/11/01 20:48 von gum