Wie verwendet man einen Transistor, um LED-Strings von GPIO-Pins anzusteuern?

Dies ähnelt dem Verfahren zum Ansteuern einer 20-mA-LED von einem max. 4-mA-GPIO-Pin, außer dass ich etwas mehr Handhaltung benötige, um zu verstehen, was passiert.

Zum Hintergrund: Ich bin Softwareentwickler und weiß derzeit nur genug über Elektronik, um eine 9-V-Batterie mit meiner Zunge erfolgreich zu testen.

Ich habe ein Arduino Uno-Board, das ich so manipuliert habe, dass es 3 LEDs, die in einer Konfiguration vom Typ "Verfolgungslichter" blinken, separat steuern kann. Ich habe jeden GPIO-Pin direkt mit einer LED, einem Widerstand und zurück mit dem +3V-Masse-Pin der Platine verbunden. Die Software tastet die GPIO-Pins in Intervallen ab, um den gewünschten Effekt zu erzielen.

Mit einer verkabelten LED sieht alles toll aus. Beim Hinzufügen einer zweiten LED zu jedem der 3 kleinen Schaltkreise (um meine Kette von Verfolgungslichtern zu "verlängern") dimmen die LEDs erheblich. Mein Plan war, schließlich eine Kette von 10 LEDs für jeden Stromkreis für insgesamt 30 LEDs zu verdrahten. Offensichtlich, wenn ich nicht 2 LEDs leuchten kann, kommt 10 nicht in Frage.

Also dachte ich daran, einen Transistor für jede Schaltung zu verwenden, wobei der GPIO lediglich den "Trigger" zum Aufleuchten des Strangs von 10 LEDs bereitstellt. Ich habe ein paar LEDs, einen Widerstand und den Transistor verdrahtet und alles an eine 9-V-Batterie angeschlossen. Es ist dunkel, wie erwartet. Es gibt nur einen Basisstift am Transistor, also sollte der GPIO-Stift offensichtlich damit verbunden sein , aber wie soll ich die Schaltung zurück zum Arduino-Board korrekt vervollständigen?

Ich experimentierte, indem ich eine 3-V-Batterie nahm und den Minuspol mit dem Emitterstift des Transistors verband und dann den Basisstift als Auslöser berührte, und es schien zu funktionieren, dachte, die LEDs flackerten ein wenig. Das könnte daran liegen, dass meine Hände nicht besonders ruhig waren. Ist dies der richtige Ansatz für die Arbeit mit den GPIO-Pins des Arduino?

Hier sind alle elektrischen Daten für die Komponenten, die ich vor mir habe, weil die Mathematik natürlich zählt.

Arduino GPIO: 5 V LEDs: NTE30143 5 V 25 mA (Dauerdurchlassstrom) Transistor: 2N4401 600 mA

Was ist der "richtige" Weg, um die GPIO-Pins des Arduino zu verwenden, um eine Reihe von 10 LEDs zu beleuchten? Kann es mit den oben genannten Komponenten gemacht werden, oder sollte es wirklich mit einer komplexeren Schaltung gemacht werden?

Ich baue dies als Prototyp für einige Grundschüler zum Selbstbau, und ich möchte die Schaltung lieber so einfach wie möglich machen.

(Bonuspunkte für die Erklärung, wohin die Widerstände gehen müssen, welche Werte sie haben müssen und warum sie überhaupt dort sein müssen :)

AKTUALISIEREN

Ich habe vergessen zu erwähnen, dass ich jede Kette von 10 LEDs in Reihe schalten möchte, nicht parallel. Ich möchte die erforderliche Drahtmenge minimieren. Diese LEDs werden am Ende vielleicht 4-5 Zoll voneinander entfernt sein und die gesamte Kette von 30 LEDs wird eine große Schleife machen, also möchte ich nicht jede LED einzeln anreihen. Ich hätte gerne 3 große Schleifen mit jeweils 10 LEDs mit allen Bedienelementen an einem einzigen Ort.

AKTUALISIEREN

Eine letzte Anforderung (glaube ich): Das muss batteriebetrieben sein. Kein Netzstrom. :)

Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben . Alle erzielten Schlussfolgerungen sollten in die Frage und/oder die Antwort(en) zurückbearbeitet werden.
Nur zu Ihrer Information, 9-V-Batterien sind teuer und haben eine schlechte Kapazität. Wenn Sie Alkalibatterien verwenden möchten, sind AA oder AAA viel besser. Wenn Sie den besten Akku wollen, entscheiden Sie sich für Lithium-Ionen, aber je nach Alter der Kinder könnte das eine schlechte Idee sein und den Ladekreislauf verkomplizieren, also ist NiMH wahrscheinlich die beste Wahl. Wenn Sie LEDs mit Widerständen ansteuern, wird der Temperaturkoeffizient des Widerstands verwendet, um ein thermisches Durchgehen zu verhindern. Daher sollte der Widerstand wahrscheinlich zwischen 1/4 und 1/3 Ihrer Spannung abfallen, aber 9 V sind viel viel mehr als Sie benötigen. 3 AA-Alkalibatterien oder 4 AA-NiMHs sind wahrscheinlich gut.
@KH Danke für den Hinweis zu den Batterien. Ich verwende tatsächlich einen wiederaufladbaren 9-V-NiMH-Akku, der bei voller Ladung tatsächlich ~ 8,5 V liefert. Ich habe keinen Akku für AAs zur Hand, also verwende ich den 9V als praktischen Ersatz. Wenn ich die Dinge nicht mehr als Proof-of-Concept in meinen Händen ausbalanciere, tausche ich die 9 V gegen etwas aus, das näher an 5 V liegt und länger hält (wahrscheinlich 4 x 1,2 V NiMH).
Macht Sinn. Sie können der Schaltung auch einen Spannungsregler hinzufügen, wenn Sie möchten, aber es müsste ein Schaltregler sein, um die Batterielebensdauer zu verlängern. Der beste Weg, LEDs mit Strom zu versorgen, ist mit einem Stromregler, aber das wird wahrscheinlich nicht so nützlich sein, um es zu lehren.
Welchen Spannungsbereich verwenden Sie für LEDs und bei welcher Spannung halten Sie Ihre Batterie für erschöpft?
Die 4-mA-GPIO-Bewertung gilt nur für Standard-Logikpegelspannen bei voller Geschwindigkeit, was hier nicht zutrifft. GPIO auf 3-V-Logik beträgt 25 Ohm, sodass ein Spannungsabfall von 50 mA bei 1 V für LEDs mit 50 mW Wärme pro Port in Ordnung ist.

Antworten (3)

Sie haben schwaches GPIO. Sie möchten 250 mA und Sie möchten (vertrauen Sie mir darauf) Ihren Ausgangstransistor sättigen. Ein 2N4401 benötigt ein Verhältnis von Basisstrom zu Kollektorstrom von 1:10 in der Sättigung. Sie benötigen also 25 mA an der Basis Ihres Ausgangstransistors. Das ist mehr als Ihre schlappen GPIO-Vorräte. Sie brauchen also einen anderen Transistor.

Q1 ist ein Emitterfolger. Die Emitterspannung beträgt 0 V, wenn der GPIO-Pin niedrig ist, und 0,7 V unter der GPIO-Pin-Spannung, wenn der Pin hoch ist. Unter der Annahme , dass die Versorgungsspannung für den Mikroprozessor 5 V beträgt, beträgt die Basis von Q1 4,3 V, wenn der GPIO-Pin hoch ist. Die Basis von Q2 liegt bei etwa 0,7 V, wenn Q2 eingeschaltet ist. Dies lässt 3,6 V übrig, um Strom über R1 zu erzeugen.

Sie benötigen 30 mA an R1 (das sind 25 mA aufgerundet). (3,6 V)/(30 mA) = 120 Ω (Beachten Sie, dass die Einheiten funktionieren - es ist schön, wenn das passiert). Solange Ihr Arduino ein 5-V-Gerät ist, geht es Ihnen gut. Ändere R1 auf 47 Ω wenn es ein 3,3V ist.

LEDs werden nicht gerne von einer Spannungsquelle angesteuert - Sie müssen mit der Spannung beginnen, die Sie liefern, und herausfinden, wie Sie ihnen den angegebenen Strom geben. Ihre LEDs fallen um 3,5 V ab (überprüfen Sie, dass ich aus dem Gedächtnis gehe und faul bin). Angenommen, Sie treiben diese Saite von einer 9-V-Quelle an, können Sie Paare mit einem Strombegrenzungswiderstand in Reihe schalten - das ist der R2, den ich im Diagramm zeige.

Wenn Sie haben N LEDs in einer Kette (zwei bei 9 V, eine bei 5 V), dann

R 2 = v C C N v l e D ICH l e D
Für den Fall, dass Sie 9 V verwenden und 20 mA wollen, ist das R = (9 V - 2 * 3,5 V) / (20 mA) = (2 V) / (20 mA) = 100 Ω .

Beachten Sie, dass Sie Ihre 9V wahrscheinlich nicht von einer "9V" -Batterie erhalten möchten. Eine "9V"-Batterie hat 9 V, ist bei leichter Last voll aufgeladen, und Sie möchten nicht mehr als etwa 50 mA daraus ziehen. Wenn Sie 250 mA (oder sogar 125 mA) ziehen, sollten Sie Ihre Schaltung so gestalten, dass sie bei etwa 6 V noch funktioniert - was bedeutet, dass nur eine LED pro Abschnitt, was doppelt so viel Strom bedeutet, Sie nicht gewinnen können, wenn Sie verlieren usw .

Also - verwenden Sie eine 9-V-Wandwarze und seien Sie glücklich.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Der GPIO-Pin des Arduino ist also mit dem Basis-Pin des Transistors verbunden, aber wie verdrahte ich die gesamte Schaltung wieder mit der Masse des Arduino? Und wo ist die "externe" Stromversorgung mit dem Stromkreis verbunden? Ich bin immer noch zu blöd, um den Schaltplan lesen zu können, den du da hast, leider.
Das kleine Dreieck am unteren Rand bedeutet "Boden". Der Emitter von Q2, die Masse Ihres externen Netzteils und die Arduino-Masse werden also alle miteinander verbunden. Verbinden Sie den + Anschluss der externen Versorgung mit dem Kollektor von Q1 (dem Netz mit der Bezeichnung „Siehe Text“). Wenn es genug Strom liefern kann, können Sie die gleiche Stromversorgung für die Lichter und das Arduino verwenden.
Okay, das ist die Sache, von der ich annahm, dass sie funktionieren würde , aber auch ein wenig besorgt war . Mir war klar, dass der einzige Weg, die Schaltung mit dem GPIO-Pin zu vervollständigen, darin bestand, alles zusammen zu erden, aber ich war ein wenig besorgt, dass ich am Ende einen Teil des Stroms von der externen Stromversorgung zurück in den GPIO leiten könnte.
Mein Stromkreis hat insgesamt 6 LEDs in 3 separaten "Strings". Jede LED ist mit einem Widerstand gekoppelt, und jedes der LED + R-Paare ist parallel zwischen der + externen Quelle und dem Kollektorstift eines Transistors (also 3 Transistoren) verdrahtet. Jeder der 3 GPIO-Pins ist mit dem Basis-Pin eines Transistors (jeweils) verdrahtet. Alle Emitter-Pins sind zusammen mit der "gemeinsamen" Masse sowohl der externen Quelle als auch der GPIO-Masse auf dem Arduino verdrahtet. Der Arduino hat eine 9-V-Batterie, die ihn mit Strom versorgt, und die "externe Quelle" ist eine weitere 9-V-Batterie (zu viel, ich weiß). Alle Lichter sind hell und kein magischer Rauch.
Es hört sich also so an, als müsste ich als Nächstes eine weitere Schleife einrichten, die den GPIO von den Transistoren trennt, indem ein weiterer Transistor zwischen GPIO / vorhandenem Transistor eingefügt wird. Mir geht langsam der Platz auf meinem 30-Spalten-Steckbrett aus :)
Ich hoffe, Sie haben strombegrenzende Transistoren von GPIO bis Transistorbasis - mein Schaltplan hat es nicht, weil Q1 automatisch strombegrenzt ist, da es ein Emitterfolger ist. Wenn Sie einen Transistor direkt von einem GPIO ansteuern, muss er einen Widerstand wie R11 im Schaltplan von @ Electron haben (und er sollte größer als (5 V - 0,7 V) / (4 mA) = 1075 sein Ω , oder 1200 Ω oder so).
Wenn Sie sich vom 2N4401 entfernen möchten, können Sie auch Darlington-Transistoren verwenden (mehr Stromverstärkung), die jedoch in der Sättigung um etwa 1 V abfallen. Oder Sie könnten N-Kanal-MOSFETs mit Logikpegel verwenden, die eher spannungsgesteuert als stromgesteuert sind.
Das wollte ich gerade schreiben... nachdenklicherweise sind in der "Vielfalt-Transistoren-Packung", die ich gekauft habe, einige davon "Darlington-Transistoren" (zB MPSA13). Es hört sich so an, als könnte ich meinen 2N4401 einfach durch einen MPSA13 ersetzen und mehr LEDs unterstützen als mit dem 2N4401, ja?
Betreff: Strombegrenzungstransistoren für GPIO-zu-Basis ... nein, ich habe sie nicht, also werde ich sie hinzufügen. Ich meinte es ernst, als ich sagte, dass sich meine Erfahrung darauf beschränkte, 9-V-Batterien mit meiner Zunge zu simsen.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Die Widerstände R1 bis R10 sind Strombegrenzungswiderstände, für jede LED aus dem Datenblatt beträgt der Durchlassstrom 20 mA bei 3,1 V Durchlassspannung. aus dieser Formel

Geben Sie hier die Bildbeschreibung ein

wobei Vs die Quellenspannung ist, Vf die Durchlassspannung ist und i der Strom ist. wir erhalten R fast gleich 100 (nächster Standardwert). In parallelen LED-Schaltungen müssen Sie für jeden LED-Zweig einen separaten Widerstand hinzufügen, da sie zwar dieselben Spezifikationen aufweisen, ihre Durchlassspannungen jedoch geringfügig voneinander abweichen und dazu führen, dass einige LEDs hell und andere stumpf leuchten. Manchmal brennen sie sogar durch . Daher ist es am besten, in jedem Zweig einen einzelnen Widerstand hinzuzufügen (für einzelne LEDs).

bezüglich Transistorbasisberechnungen

Gesamtzahl der LEDs: 10 je LED-Verbrauch: 20mA

Der Gesamtstrom beträgt also: 20 * 10 = 200 mA ist der Kollektorstrom.

Der aktuelle Verstärkungsfaktor von 2N4401 beträgt 40 bei 500 mA (da er zwar 100 bei 150 mA beträgt, aber wir die Grenze überschritten haben, betrachten wir ihn als 40).

Ic = hfe * Ib (Kollektorstrom = Verstärkung * Basisstrom)

also Ib = 200/40 = 5 mA (dies ist der minimal erforderliche Basisstrom, um 200 mA Kollektorstrom zu erhalten).

HINWEIS: Arduino GPIO kann bis zu 40 mA liefern. Sie können sich also dafür entscheiden. Wenn Sie dies auch mit weniger Basisstrom steuern möchten (basierend auf Ihrer Frage mit 4 mA benötigen Sie einen zusätzlichen Transistor in Darlington-Paar-Konfiguration).

Jetzt wird die Basis über Arduino GPIO (5 V) angesteuert. Die effektive Spannung am Widerstand beträgt = 5 V - Vbe (Basis-Emitter-Spannung) = 5 V - 0,7 V = 4,25 V

Also Ib = V Basiswiderstand / Widerstand => Widerstand = V Basiswiderstand / Ib => 4,25/0,005 => 850 Ohm, sodass der nächste Wert mit einem gewissen Randfaktor 750 Ohm / 820 Ohm beträgt

4 mA an der Basis bringen den Transistor jedoch nicht zuverlässig in die Sättigung - es wird wahrscheinlich die Kollektorspannung auf weniger als 1 V, aber mehr als 0,2 V senken.
@TimWescott Das Problem bei einem "Einzeltransistor" -Ansatz besteht also darin, dass der Basisstift im Verhältnis zur Stromstärke des Kollektors genügend Stromstärke benötigt, um tatsächlich auszulösen?

Dies ist die einfache Johnson-Zählermethode mit 10 Cd ~ 20 Cd 5 mm 5000 k LEDs mit nur 5 mA pro LED, was bei diesen wirklich hell ist.

Mit 30 weiteren Widerständen können Sie die führende LED auf die halbe Intensität blenden

Geben Sie hier die Bildbeschreibung ein

Ein glatterer Effekt verwendet solche Widerstände und Transistoren . Geben Sie hier die Bildbeschreibung ein

Der 50-Ohm-Widerstand steuert die Helligkeit und den durchschnittlichen Strom und kann mit 25 Ohm gekoppelt werden.

Transistor-Emitterfolger-Ansatz

Angenommen 5V GPIO

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Wenn ich falsch angenommen habe und es sich um ein 3.3GPIO handelt, ist ein anderes Design erforderlich. UPDATE aha 3V argh..

Also brauchen wir jetzt einen invertierenden Open-Drain-HEX-Schalter mit niedriger Spannung im DIP-Chip. http://www.ti.com/lit/ds/symlink/cd74ac05.pdf

Bei Vcc=3V bis 5V ist der Schaltwiderstand < 20 Ohm. Dadurch werden alle Eingänge und die LEDs auf eine gemeinsame ANODE von 5,0 V ohne gemeinsamen 50-Ohm-Widerstand invertiert, der jetzt den Open-Drain-Widerstand verwendet.

weitere Berechnungen erforderlich.

Ich schätze hier das "bessere Schaltungsdesign", aber ich wollte verstehen, wie GPIO verwendet wird, um die transistorgeschaltete LED-Kette auszulösen.