Eine LED am Pin ist meist das Erste, was du mit einem Mikrocontroller baust, und später die Statusanzeige jedes Geräts. Sie braucht nur einen Widerstand. Trotzdem steckt in der kleinen Schaltung mehr als „330 Ω, passt schon“: Der Pin selbst hat einen Innenwiderstand, er verträgt nur begrenzt Strom, und an 3,3 V wird eine weiße oder blaue LED zum Glücksspiel.
Hier schließt du eine LED so an einen Arduino Uno oder ESP32 an, dass sie hell genug leuchtet, den Pin schont und bei jedem Exemplar ähnlich hell ist.
Schaltplan
- IC1, ATmega328P: der Mikrocontroller des Arduino Uno. D8 und D9 sind die Pins 14 und 15 im DIP-28-Gehäuse.
- R1, R2, 330 Ω: die Vorwiderstände. Sie legen den Strom fest. Ohne sie bestimmt der Pin den Strom, und das sind schnell 60 mA und mehr.
- LED1, LED2: rote Standard-LEDs, 3 oder 5 mm, Flussspannung um 2,0 V.
- D8 als Quelle: Der Pin liefert bei HIGH Strom, die LED hängt mit der Kathode an Masse.
- D9 als Senke: Die LED hängt mit der Anode an +5 V. Der Pin zieht bei LOW Strom nach Masse, bei HIGH liegen beide Seiten auf 5 V, und die LED ist aus.
So funktioniert die Schaltung
Eine LED ist eine Diode: Unterhalb ihrer Flussspannung fließt kaum Strom, darüber steigt er steil an. Schon 0,1 V mehr können den Strom vervielfachen. Deshalb kann man eine LED nicht an eine Spannung legen, sondern nur einen Strom einstellen. Das übernimmt der Widerstand: Er nimmt die Differenz zwischen Pinspannung und Flussspannung auf, und nach dem ohmschen Gesetz ergibt sich daraus der Strom.
Der Pin ist dabei keine ideale Spannungsquelle. Im Ausgang des ATmega328P sitzen zwei Transistoren, die zusammen wie ein Widerstand von etwa 20 bis 30 Ω wirken. Bei 10 mA liefert ein HIGH-Pin also nicht 5,0 V, sondern rund 4,8 V. Das Datenblatt garantiert bei 20 mA nur noch 4,2 V.
Ob du die LED als Quelle oder Senke anschließt, ist beim ATmega328P fast egal: Er treibt in beide Richtungen etwa gleich stark. Die Senke stammt aus Zeiten, in denen Logikbausteine nach Masse deutlich mehr Strom ziehen als liefern konnten, und ist bei Open-Drain-Ausgängen die einzige Möglichkeit. Die Quelle ist intuitiver: HIGH heißt an. Wichtig bei der Senke: Die Anode gehört an dieselbe Spannung, mit der der Controller läuft.
Dimensionierung
1. Strom festlegen. Moderne LEDs leuchten schon mit 2 bis 5 mA gut sichtbar. 20 mA, der Nennstrom vieler 5-mm-LEDs, sind für eine Statusanzeige zu hell und belasten den Pin unnötig. Ziel hier: etwa 8 mA.
2. Widerstand berechnen. Für die rote LED am Uno mit UF = 2,0 V und UOH ≈ 4,8 V bei diesem Strom:
Aus der E12-Reihe passt 330 Ω. Damit fließen (4,8 V − 2,0 V) / 330 Ω ≈ 8,5 mA.
LED-Vorwiderstand
- Rechnerisch
- 200 Ω
- Nimm (E12)
- 220 Ω
- Strom damit
- 13,6 mA
- Verlustleistung
- 40,9 mW
Belastbarkeit des Widerstands mindestens 1/8 W (doppelte Reserve).
3. Grenzwerte prüfen.
4. Am ESP32. Hier liegt die Pinspannung bei 3,3 V, unter Last eher 3,2 V, und es bleibt viel weniger Spannung für den Widerstand. Für eine rote LED mit 5 mA:
Für eine weiße LED mit UF ≈ 2,9 V bleiben nur 0,3 V: R = 0,3 V / 5 mA = 60 Ω, gewählt 68 Ω, typisch 4,4 mA. Das Problem: Die Flussspannung streut von Exemplar zu Exemplar um ±0,2 V und mehr. Bei 0,3 V Reserve ändert das den Strom drastisch.
Faustregel: Am Widerstand sollte mindestens 1 V abfallen. Weiße, blaue und echte grüne LEDs schaltest du am ESP32 deshalb über einen Transistor aus 5 V, siehe NPN-Transistor als Low-Side-Schalter. Ausführlich zur Rechnung: LED-Vorwiderstand berechnen.
Code
LED1 blinkt, LED2 wird per PWM gedimmt. Weil LED2 als Senke hängt, ist die Logik umgekehrt: 255 heißt aus.
const int LED1 = 8; // Quelle: HIGH = an
const int LED2 = 9; // Senke: LOW = an, PWM-fähig
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
}
void loop() {
digitalWrite(LED1, !digitalRead(LED1)); // umschalten
for (int h = 0; h <= 255; h += 5) {
analogWrite(LED2, 255 - h); // invertiert: 255 = aus
delay(10);
}
}
Auf dem ESP32 funktioniert derselbe Code mit anderen Pinnummern, etwa GPIO 25 und 26; analogWrite nutzt dort den LED-PWM-Baustein des Chips.
Bauteilliste
| Bezeichner | Wert/Typ | Hinweis |
|---|---|---|
| IC1 | ATmega328P (Arduino Uno) | D8 = Pin 14, D9 = Pin 15 |
| R1, R2 | 330 Ω, 0,25 W | am ESP32 mit roter LED: 220 Ω |
| LED1, LED2 | LED rot, 3 mm oder 5 mm | langes Bein = Anode |
Varianten
Mehrere LEDs. Jede LED bekommt ihren eigenen Widerstand. Parallel an einen gemeinsamen Widerstand gelegt, nimmt die LED mit der kleinsten Flussspannung fast den ganzen Strom. Für viele LEDs bieten sich ein Schieberegister 74HC595 oder adressierbare LED-Streifen an.
RGB-LED. Eine RGB-LED sind drei LEDs in einem Gehäuse. Bei gemeinsamer Kathode hängt jede Farbe wie LED1 an einem Pin, bei gemeinsamer Anode wie LED2. Jede Farbe braucht ihren eigenen Widerstand, denn Rot hat rund 2,0 V, Grün und Blau etwa 3,0 V Flussspannung.
Größere Ströme. Ab etwa 20 mA oder bei LEDs an 12 V schaltet ein Transistor: NPN-Transistor als Low-Side-Schalter oder MOSFET als Low-Side-Schalter.
Typische Fehler
- LED verpolt: Sie bleibt dunkel. Das kürzere Bein und die abgeflachte Gehäuseseite markieren die Kathode.
- Widerstand vergessen: Die LED leuchtet grell, der Pin liefert weit über 40 mA. Pin und LED altern schnell oder fallen sofort aus.
- Logik der Senke übersehen: LED2 leuchtet, wenn das Programm „aus“ meint. Bei einer Senke ist LOW an.
- 5-V-LED-Schaltung am ESP32: Hängt die Anode an 5 V und der Pin ist HIGH (3,3 V), fließt über die LED trotzdem Strom in den Pin hinein, und die LED glimmt. Am ESP32 gehört die Anode an 3,3 V.
- Weiße LED am ESP32 unterschiedlich hell: Zu wenig Spannungsreserve am Widerstand, siehe oben. Abhilfe: Transistor und 5 V.
Selbsttest
Welchen Vorwiderstand brauchst du für eine grüne LED mit 3,0 V bei 5 mA an einem 5-V-Pin, der unter Last 4,9 V liefert?
(4,9 V − 3,0 V) / 5 mA = 380 Ω; aus der E12-Reihe 390 Ω, dann fließen 4,9 mA.
Warum genügt die Rechnung mit 5,0 V am Pin nicht ganz?
Der Ausgang hat einen Innenwiderstand von 20 bis 30 Ω. Unter Last sinkt die Pinspannung, bei 20 mA garantiert nur auf 4,2 V.
Darfst du an D8 bis D13 sechs LEDs mit je 20 mA betreiben?
Besser nicht: Zusammen sind es 120 mA, das Datenblatt empfiehlt für diese Pingruppe höchstens 100 mA. Mit 330-Ω-Widerständen und 8,5 mA je LED bleibst du bei 51 mA.
Warum leuchtet eine weiße LED am ESP32 mal hell, mal kaum?
Über dem Widerstand bleiben nur etwa 0,3 V. Schon 0,2 V Streuung der Flussspannung ändern den Strom um zwei Drittel.
Bei welchem Pegel leuchtet eine LED, die von +5 V über einen Widerstand an den Pin geht?
Bei LOW, denn dann fließt Strom von +5 V durch die LED in den Pin.