E/A Modul für den Raspberry Pi

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()

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.