Raspberry Pi LED per GPIO anschließen und steuern/blinken lassen mit Python + Vorwiderstand berechnen (Ohmisches Gesetz)

Als Video ansehen
Bereitgestellt über YouTube

Raspberry Pi LED per GPIO anschließen und steuern/blinken lassen mit Python + Vorwiderstand berechnen (Ohmisches Gesetz)

Eine LED anzuschließen und mit einem kleinen Programm blinken zu lassen, ist eine klassische Einstiegsaufgabe für die GPIO-Pins des Raspberry Pi: Man benötigt nur wenige, einfache Bauteile. Die Verkabelung ist nicht zu komplex und man kann erste Erfahrungen mit Python oder einer anderen Programmiersprache sammeln. In diesem Beitrag werden wir einen passenden Vorwiderstand für die LED berechnen sowie beides an den Raspberry Pi anschließen, um die Leuchtdiode mit einem kleinen Python-Skript blinken zu lassen.

Für Einsteiger empfehle ich zuvor diesen Beitrag, der auf verschiedene Grundlagen für die GPIO-Pins des Raspberry Pis eingeht. Neben Besonderheiten die es zu beachten gilt findet ihr dort auch alle benötigten Bauteile.

Vorwiderstand der LED berechnen

Elektronische Grundlagen

Leuchtdioden sind empfindliche Bauteile, die nur einen geringen Spannungsbereich erlauben. Im Datenblatt oder der Beschreibung findet sich die Spannung (Vorwärtsspannung, kurz VF oder UF) und Stromstärke (Vorwärtsstrom IF) der LED:

Auszug aus dem Datenblatt einer „Kingbright Low Current LED“, 5mm in grün

Bei dieser LED sind 2,2 – 2,5V bei einer Stromstärke von 20mA zulässig. Somit brauchen wir einen Vorwiderstand – wie bei den meisten LEDs, da diese üblicherweise mit weniger als 3,3V gespeist werden. Der Raspberry Pi liefert uns nur 3,3V oder alternativ 5V, beides würde das Limit von maximal 2,5V der LED deutlich überschreiten. Berechnen lässt er sich mit dem Ohmischen Gesetzt mit der Formel U = R * I. Dies ist auch als „URI-Dreieck“ bekannt:

U ist die Spannung in Volt (V): Wenn ein Potentialunterschied vorhanden ist (d.H. Elektronenüberschuss am Plus-Pol und Elektronenmangel am Minus-Pol), fließt Strom, um diese unterschiedlichen Ladungen auszugleichen.

Ein Widerstand R (Ohm Ω) ist grundsätzlich jeder Verbraucher, da dieser den Stromfluss hemmt. Streng genommen haben sogar Bauteile wie z.B. Kabel einen Eigenwiderstand – der jedoch bei unserer Schaltung vernachlässigt werden kann. Gemeint ist in der Formel der Widerstand als elektrisches Bauteil: Er soll den Stromfluss bewusst begrenzen, weil dieser ansonsten für eine Schaltung zu hoch wäre. In unserem konkreten Fall ist das die Leuchtdiode.

I steht für die Stromstärke (A/mA). Sie gibt an, wie viele Elektronen sich in einem bestimmten Zeitraum durch den Verbraucher bewegen. Bei großen/starken Verbrauchern wie einem Staubsauger fließt eine höhere Stromstärke, als beispielsweise bei einer kleinen LED.

Berechnung des Vorwiderstandes für die LED

Um den Widerstand zu berechnen, muss die Formel zunächst nach R umgestellt werden: R = U / I
Mit U ist hierbei die Spannung gemeint, die am Widerstand „verbraucht“ im Sinne von „zerstört“ werden soll. Also die Differenz zwischen der Spannung des Pi und der LED: 3,3V – 2,4V = 0,9V. Wobei 2,4V bei dieser LED im Bereich 2,2V – 2,5V frei wählbar ist. Je höher die Spannung, um so heller die Leuchtdiode.

Die Stromstärke ist im Datenblatt mit 20mA angegeben. Da wir die LED am Pi direkt betreiben, würde ich auf maximal 16 mA reduzieren. Multiplizieren wir das Ergebnis mit dem Faktor 1000, bekommt man den Wiederstandswert in Ohm:

0,9 V / 16 mA = 0,05625
0,05625 * 1000 = 56 Ohm (Ω)

Da es Widerstände auch in Sets nur mit Abstufungen gibt, nimmt man entweder den nächst größeren oder kleineren. Als Faustformel meist den nächsten größeren, um Schäden an den Bauteilen zu vermeiden. Es macht (vor allem bei kleineren Widerständen) Sinn, mit dessen konkreten Wert Gegenzuprüfen. Bei Größeren ist das Risiko überschaubar: Im schlimmsten Falle ist der Strom so klein, dass die LED nicht leuchtet.

Zur Gegenprüfung stellt man die Formel nach I um. Im Beispiel nehmen wir einen deutlich höheren Widerstand von 82 Ohm:

I = U / R
I = 0,9V / 82
I = 0,1098 A | * 1000
I = 10,98 mA

Welchen Widerstandswert hat mein Bauteil (wirklich)?

Wer den Wert eines vorliegenden Widerstandes in Form eines Bauteiles nicht kennt, der kann diesen anhand der Farbringe berechnen. Oder man nutzt einen Farbcode-Rechner aus dem Internet, beispielsweise diesen hier. Dort gibt man die Anzahl und Farben der Ringe an. Dies wird zur Kontrolle grafisch dargestellt, sodass man es noch mal mit dem Bauteil vergleichen kann. Aus diesen Angaben berechnet die Seite den Wert. Dies kann nützlich sein, wenn man lose Widerstände besitzt oder Sets, bei denen mehrere Werte zusammen in einer Tüte gebündelt wurden.

Generell ist zu empfehlen, sich nicht blind auf die Angaben aus einem Set zu verlassen, sondern mit dieser Methode nachzuprüfen. So wird ausgeschlossen, dass es zu irgend einer Verwechslung kam und man versehentlich einen anderen Widerstand nutzt als berechnet – wodurch es ggf. zu Beschädigungen von Bauteilen kommen könnte.

Anschluss der LED mit Vorwiderstand an den Raspberry Pi

Leichtdioden müssen korrekt gepolt angeschlossen werden. Es gibt mehrere Merkmale, an denen man die Anschlüsse erkennen kann:

  • Das kürzere Beinchen ist die Kathode (Minus/Masse)
  • An der Seite des Minus-Poles ist die ansonsten runde LED etwas abgeflacht
  • Im Inneren der Leichtdiode befindet sich über dem Minus-Pol ein deutlich breiterer Kontakt als beim Plus-Pol

Den Minus-Pol der LED verbinden wir mit einem der schwarz gekennzeichneten Masse-Pins des Raspberry Pi. Es gibt mehrere, welcher davon spielt keine Rolle – ich nutze im folgenden Schaltplan den Pin 34. An den Plus-Pol wird der zuvor berechnete Widerstand angeschlossen, dessen Ende wiederum mit einem GPIO-Pin. Auch dieser ist frei wählbar, um Komplikationen zu vermeiden sollte dieser aber keine TXD-Doppelfunktion besitzen. Ich nutze Pin 3 (GPIO 2).

Ansteuerung mit Python

Die GPIO-Pins können mit verschiedenen Programmiersprachen angesteuert werden. Im folgenden nutzen wir Python: Die Skriptsprache gilt als Anfängerfreundlich und ist daher vor allem in der Raspberry Pi Welt recht verbreitet.

import RPi.GPIO as GPIO
import time

led_pin = 3
wait_seconds = 1
running = True

GPIO.setmode(GPIO.BOARD)
GPIO.setup(led_pin, GPIO.OUT)

try:
    while running:
        print("LED an")
        GPIO.output(led_pin, True)
        time.sleep(wait_seconds)

        print("LED aus")
        GPIO.output(led_pin, False)
        time.sleep(wait_seconds)
except KeyboardInterrupt:
        GPIO.cleanup()
        running = False
  • Zuerst importieren wir die Python-Bibliothek, um auf die GPIO-Pins zugreifen zu können. Time wird benötigt, um später mit time.sleep() das Programm für den Blink-Effekt zu pausieren.
  • Es folgen drei Variablen für den verwendeten Pin, die Wartezeit zwischen den Ein- Ausschaltvorgängen und eine Statusvariable running, dazu später mehr.
  • GPIO.setmode gibt an, nach welcher Nummerierung wir den Pin übergeben. Board und BMC stehen zur Verfügung, die Unterschiede hatte ich im GPIO-Grundlagenteil bereits erläutert. Die her verwendete Board-Nummerierung zählt schlichtweg jeden Pin des Steckers durch.
  • Mit GPIO.setup() wird festgelegt, ob der Pin als Eingang (z.B. Signal eines Tasters) oder Ausgang genutzt werden soll. Da wir die LED mit Strom versorgen möchten, haben wir ein Ausgangssignal.
  • while running ist eine Schleife, die sich so lange wiederholt, wie die Variable running auf True steht. Diese Schleife befindet sich in einem Try-Except Block, um auf STRG + C reagieren zu können. In diesem Fall wird die GPIO-Bibliothek sauber beendet und wir setzen running = False, damit die Schleife sich nicht mehr wiederholt und das Skript somit endet.
  • GPIO.output() setzt einen Pin auf High (True, es fließt Stom) oder Low (False, kein Strom). Um einen Blink-Effekt zu erzielen, wird die LED eingeschaltet, dann warten wir mit time.sleep() die angegebene Zeit (1 Sekunde) und schalten sie wieder aus. Anschließend erneut die Wartezeit, damit vor dem erneuten Einschalten durch die Schleife die gleiche Wartezeit besteht. Ansonsten würde die LED so schnell aus- und wieder eingeschaltet werden, dass wir es kaum sehen können.

Das Skript wird in einer frei wählbaren Datei abgelegt, ich habe sie led.py genannt. Und kann danach mit Python gestartet werden:

python led.py

Um es zu beenden, wie oben erwähnt, die Tastenkombination STRG + C drücken.

Andere Wege und Möglichkeiten zur GPIO-Ansteuerung

Python ist wohl der bekannteste, aber wie anfangs erwähnt, kann man nahezu alle gängigen Programmiersprachen verwenden: C#, Java, C/C++ um nur einige Beispiele zu nennen. Das direkte Ansteuern aus der Shell heraus ist ebenfalls möglich. Aus diesen vielfältigen Möglichkeiten ergibt sich viel Potenzial für mögliche Szenarien. Beispielsweise könnte man ein Programm schreiben, dass Daten von einer bestimmten Quelle abfragt. Im Falle eines bestimmten Ereignisses leuchtet die LED oder blinkt. Das könnte z.B. der Fall sein, wenn Aktualisierungen vorliegen. Oder bestimmte Daten in einer Datenbank vorhanden sind. Das hier gezeigte Szenario ist somit eher als Grundlage zu verstehen, auf dessen Basis man interessante Systeme verwirklichen kann.

Leave a Reply