Vorwort
Als Erweiterung für unseren Raspberry Pi, den wir im Unterricht nutzen, haben wir ein kleines Modul gebaut, welches zwei Taster für die Eingabe und drei LEDs für die Statusanzeige hat.
Jedes Bauteil soll mit einem eigenen GPIO Pin verbunden und angestuert werden können.
Als Spannungsversorgung dient die 3,3V des Raspberry Pi.
Planung
Bei geöffneten Taster Kontakt, ist der GPIO Port über den Pulldownwiderstand (R5 oder R6 = 10kΩ) auf Masse gelegt und damit liegt low Potential am Eingang des GPIO Pins.
Bei geschlossenen Taster Kontakt, wird die 3,3V Spannung, über den Spannungsteiler bestehend aus R1/R5 und R1/R6 an den GPIO Pin gelegt und somit liegt high Potential am Eingang des GPIO Pins.
Die Planung des Bestückungsplans wurde zunächst in Einzelarbeit vorgenommen. Damit aber jeder Schüler am Ende des Projektes das selbe Layout verwendet, haben wir mit dem Bestückungsplan des Lehrers weitergearbeitet.
Den Schaltplan sowie den Bestückungsplan kann man in Digitaler Form als fritzing Format hier herunterladen.
Schaltplan/Bestückungsplan
Berechnung der Widerstände
R1 = 1kΩ
R5/6 = 10kΩ
Bestandteil des Spannungsteiler der Taster
R2/3/4 = 2,1V/20mA = 105Ω
Umax = 2.8V
Imax = 20mA
Annahme: UGPIO = 3.3V / U = 2.1V / I = 8mA
Bestückungsliste
Bauteil | Anzahl |
---|---|
Stripboard | 1x |
7er Male Pin Reihe | 1x |
150Ω Widerstände | 3x |
1kΩ Widerstände | 1x |
10kΩ Widerstände | 2x |
20mA LEDs | 3x |
Taster | 2x |
Brücken/ Draht | 3x |
Jumperwire (female auf female) | 7x |
Anschluss
Für die Inbetriebnahme des Moduls, müssen die Pins der Anschlussleiste mit den richtigen Pins des Raspberry Pi verbunden werden. Die Pinbelegung des Raspberry Pi Model zwei findet man hier. Bei der Programmierung muss unbedingt darauf geachtet werden, dass die Taster als INPUT und die LEDs als OUTPUT deklariert werden!
Typ | geeignete GPIO Nummer |
---|---|
3,3V | 1/17 |
GND | 6/9/14/20/25/30/39 |
GPIO Pin | 7/11/12/13/15/16/18/22/29-33/35-38/40 |
Es sollten KEINE I2C GPIOs verwendet werden, da diese integrierte Pull-UP Widerstände besitzen und somit die Schaltung verfälschen!
Beispiel Programme
Damit die Programme auch bei einem selbst funktionieren, solltet Ihr bitte vorher den Quelltext lesen. Im oberen Bereich befinden sind immer Variablen für die GPIO Port Nummern.
Das Skript kann mit “python <scriptname>.py“ gestartet werden.
Das erste Programm testet zuerst einmal die LEDs.
Das Programm macht die LEDs zu einem Lauflicht. (siehe GIF).
""" @BESCHREIBUNG: Ein Test Script fuer ein E/A Modul @REVIEW: 14.10.2016 """ # Importierung der Python Libraries, RPi ist die Schnittstelle für die GPIO Pins import RPi.GPIO as GPIO import time # Definierung der GPIO PIN Nummern in Variabeln PIN_LED1 = 33 PIN_LED2 = 35 PIN_LED3 = 37 INTERRUPT = 0.2 # Pause zwischen GPIO.setmode(GPIO.BOARD) # Die LED PINs werden als Output definiert GPIO.setup(PIN_LED1, GPIO.OUT) GPIO.setup(PIN_LED2, GPIO.OUT) GPIO.setup(PIN_LED3, GPIO.OUT) try: while True: # Main Loop des Haupt Programms GPIO.output(PIN_LED1, GPIO.HIGH) time.sleep(INTERRUPT) # Programm für X Sekunden pausieren GPIO.output(PIN_LED2, GPIO.HIGH) time.sleep(INTERRUPT) GPIO.output(PIN_LED3, GPIO.HIGH) time.sleep(INTERRUPT) GPIO.output(PIN_LED1, GPIO.LOW) time.sleep(INTERRUPT) GPIO.output(PIN_LED2, GPIO.LOW) time.sleep(INTERRUPT) GPIO.output(PIN_LED3, GPIO.LOW) time.sleep(INTERRUPT) except (KeyboardInterrupt, SystemExit): # sollte das Programm unterbrochen werden, so wird ein Cleanup der GPIO Ports durchgeführt GPIO.cleanup()
Im zweiten Programm werden die Taster mit eingebunden. Wird der 1. Taster betätigt, so geht die 1. LED an – wird der 2. Taster betätigt so geht die 3. LED an – werden beide Taster gleichzeitig betätigt so gehen alle 3 LEDs an.
""" @AUTOR: Niklas "Gurkengewuerz" @BESCHREIBUNG: Ein Test Script fuer ein E/A Modul @REVIEW: 14.10.2016 """ # Importierung der Python Libraries, RPi ist die Schnittstelle für die GPIO Pins import RPi.GPIO as GPIO import time # Definierung der GPIO PIN Nummern in Variabeln PIN_TASTER1 = 29 PIN_TASTER2 = 31 PIN_LED1 = 33 PIN_LED2 = 35 PIN_LED3 = 37 GPIO.setmode(GPIO.BOARD) # Die LED PINs werden als Output definiert und die Taster als Input GPIO.setup(PIN_TASTER1, GPIO.IN) GPIO.setup(PIN_TASTER2, GPIO.IN) GPIO.setup(PIN_LED1, GPIO.OUT) GPIO.setup(PIN_LED2, GPIO.OUT) GPIO.setup(PIN_LED3, GPIO.OUT) # Reset Methode um die LEDs alls aus zu schalten (Don’t repeat yourself) def reset(): GPIO.output(PIN_LED1, GPIO.LOW) GPIO.output(PIN_LED2, GPIO.LOW) GPIO.output(PIN_LED3, GPIO.LOW) try: while True: # Main Loop des Haupt Programms while GPIO.input(PIN_TASTER1) and GPIO.input(PIN_TASTER2): # Solange Beide Taster betätigt sind gehen alle drei LEDs an GPIO.output(PIN_LED1, GPIO.HIGH) GPIO.output(PIN_LED2, GPIO.HIGH) GPIO.output(PIN_LED3, GPIO.HIGH) reset() while GPIO.input(PIN_TASTER1): # Solange nur Taster 1 betätigt ist geht nur die 1. LED an GPIO.output(PIN_LED1, GPIO.HIGH) reset() while GPIO.input(PIN_TASTER2): # Solange nur Taster 2 betätigt ist geht nur die 2. LED an GPIO.output(PIN_LED3, GPIO.HIGH) reset() time.sleep(0.1) # Kurzer Interrupt except (KeyboardInterrupt, SystemExit): # sollte das Programm unterbrochen werden, so wird ein Cleanup der GPIO Ports durchgeführt GPIO.cleanup()