Projektteil: LED Skalenbeleuchtung mit einem Arduino Aufgaben: - Ein Taster schaltet die LED-Beleuchtung ein - Nach Ablauf einer im Programm hinterlegten Zeit schaltet sich die Beleuchtung von selbst wieder aus. - Alternativ kann die Beleuchtung durch nochmaliges drücken des Tasters jederzeit ausgeschaltet werden. - Die Helligkeit der Beleuchtung kann über einen Potentiometer eingestellt werden. - Bei Nullstellung des Potentiometers ist die Beleuchtung nicht dunkel sondern leuchtet mit sehr geringer Intensität. Spannungs- / Stromversorgung Arduino Board 7-12V -> gewählt 9V Diese kann von einem einfachen Spannungsregler (z.b Typ 7809) auch aus einer Autobatterie erzeugt werden. Die Verlustleistung an den LED-Vorwiderständen ist geringer. LED (Jumbo LED rot) gemessen: 2,00 V / 20 ma 2,10 V / 25 ma 2,20 V / 33 ma [Jb / 21.02.2016] Stromverbrauch LED s: Auslegung: 3 Skalen á 3 LED s = ca. 180 ma gesamt Anmerkung: Für jeden Pin des Arduino Boards werden 20mA empfohlen, maximal sind 40 ma pro pin zulässig. Als maximaler Ausgangs-Strom für das Gesamte Board sind 200 ma angegeben. Um nicht für jede LED einen pin zu verbrauchen und um Reserven zu haben sowie das Board sicher nicht zu überlasten müssen die LED s mit einem Verstärker geschaltet werden. Ein Relais kann nicht verwendet werden, da dies nicht für eine PWM (Puls Weiten Modulation) für die Helligkeitsregulierung geeignet ist. Gewählt wird als Leistungsschalter ein MOSFET der direkt vom Arduino angesteuert werden kann, Typ IRL540 Quelle: https://arduinodiy.wordpress.com/2012/05/02/using-mosfets-with-ttl-levels/ Um die LED s an der gewählten 9V Versorgungsspannung zu betreiben zu können ist ein Vorwiderstand erforderlich: Variante 1: jede LED mit einem Vorwiderstand von 340 Ω, 1/4W versehen. (Siehe LED Berechnung Variante 1 im Anhang) Nachteil: Viele Bauteile (Widerstände) erforderlich und 340 Ω sind nicht zur Hand. Diese müssten also jeweils durch eine Widerstands-Reihenschaltungen aufgebaut werden was für den Versuch noch mehr Bauteile erforderlich macht. 1
Variante 2: Alternativ könnten die jeweils 3 LED s einer Skalenbeleuchtung mit nur einem Vorwiderstand betrieben werden. Gemäß der LED Berechnung Variante 2 im Anhang ergibt sich dann folgender Wert: 1 Stück Vorwiderstand von 113 Ω, 1/2 W Dieser wird durch eine Reihenschaltung von Widerständen aufgebaut die für Versuche zur Hand sind: 2 Stück á 51 Ω und ein Stück 10 Ω, jeweils 1/4 Watt. Test-Aufbauten Analogeingänge Belegung Arduino Board (Um die Digitaleingänge für spätere Versuche mit dem Schrittmotor freizuhalten werden auch die Taster auch auf die Analogeingänge gelegt) A0 Potentiometer 10 kω A1 Taster 1 grün A2 Taster 2 gelb (Taster 2 als Reserve für weitere Versuche, wird hier nicht verwendet) Digitalausgänge Pin 12 Pin 11 für Schaltversuche (ein / aus) für Helligkeitsregelung (PWM) 2
Versuch 1: Funktion des Leistungsschalters testen. Anschlüsse und Schaltschema: MOSFET IRL 540 N Schaltung: Anmerkung: Die hier und im Folgenden angegebenen Wert für Spannung (blau) und Strom (rot) sind die im Versuchsaufbau gemessenen Werte. 3
Versuch 2: Schaltung und Ansteuerung der LED s gemäß o.g. Variante 2 mit MOSFET testen. Spannungen und Strom ermitteln. Versuch 3: Schaltung wie Versuch 2, aber den 3.Widerstand (10 Ω) weglassen. Ergebnisse: - Schaltung funktioniert. - MOSFET schaltet sicher durch. - Helligkeitsregelung über PWM (Puls Weiten Modulation) funktioniert. - Messwerte Spannungen und Strom zeigen das 10 Ω nicht notwendig ist. Leistungen an den Widerständen: U x I = 0,244W, d.h. ¼ Watt Type lässt sich verwenden - Bei Ausfall einer LED (R = Ω) steigen der Strom und die Spannung nur geringfügig an. D.h. die Bauteile (auch die restlichen LED s) werden nicht gefährdet. 4
Foto Versuchsaufbau Gesamtansicht LCD-Display (für andere Versuche) Schaltung gemäß Versuch 3 Potentiometer Arduino Microcontroller Board Taster Helligkeits-Regelung Wie eingangs beschrieben soll die Helligkeit der Beleuchtung über den am Analogeingang angeschlossenen Potentiometer eingestellt werden. Bei Nullstellung des Potentiometers soll die Beleuchtung nicht aus sein sondern mit einer geringen Intensität leuchten. Grundlagen: Der Potentiometer erzeugt am Analogeingang A0 je nach Stellung eine Spannung zwischen 0 und 5V. Diese wird vom im Arduino integrierten 10-bit analog / digital Wandler in ein Signal von 0 bis 1023 umgewandelt. Der Digital-Ausgang Pin 11 generiert beim Programm-Befehl analogwrite ein PWM-Signal bei 490 Hz. Die zulässigen Werte sind 0 bis 255. 5
Damit ergibt sich grundsätzlich folgender Zusammenhang zwischen dem Eingang und dem Ausgang (blau gestrichelte Linie): Bei Berücksichtigung einer minimalen Beleuchtung in Potentiometer-Stellung 0 entspricht das Verhältnis Eingang zu Ausgang der blauen durgezogenen Linie. Dadurch ergibt sich folgende - vom Programm durchzuführende - Berechnung für den Ausgangswert Y in Abhängigkeit vom Eingangswert X: Die Praktischen Versuche mit Schaltung Versuch 3, (siehe oben) haben jedoch ergeben, dass die deutlich wahrnehmbare minimale Beleuchtungs-Intensität bei einem Ausgangswert von 5 liegt und maximale wahrnehmbare Helligkeit bereits bei einem Wert von 195 erreicht wird. Dadurch ergibt sich folgender Verlauf bzw. folgende angepasste Berechnungsformel: 6
Diese Werte ( 190, 5 ) sind im Programm hinterlegt und können von einem eingewiesenen Benutzer bei Bedarf sehr leicht verändert und den Bedürfnissen angepasst werden. Zeitsteuerung: Nach Ablauf einer im Programm hinterlegten Zeit soll die Beleuchtung auf jeden Fall ausgeschaltet werden. Dazu wird der im Arduino integrierte Milli-Sekunden-Timer verwendet so dass hierfür keine weiteren Hardware-Baugruppen hierfür erforderlich sind. Der Timer startet nach dem Einschalten oder nach einem Reset des Boards bei 0 und hat einen Wertebereich von 0 bis ca. 4,2 * 10 9 (keine negativen Werte). Achtung! Der Überlauf des Timers findet nach ca. 49 Tagen statt und löst bei mathematischen Operationen ( =, >, < ) Probleme aus bzw. lässt sich programmtechnisch nicht sicher erfassen. Das es aber nicht vorgesehen ist dass die Steuerung ununterbrochen über diesen Zeitraum in Betrieb ist kann dieses Problem vernachlässigt werden. 7
Anhang LED Berechnungen Variante 1: jede LED mit einem Vorwiderstand versehen. Variante 2: 3 LED s gemeinsam mit nur einem Vorwiderstand betrieben 8
Programm Test-Programm für Sternwarte Überlingen mit einer Ausschaltzeit von 5 Sekunden Datei: LED_Programm_Rev2.ino Erstellt: 06.03.2016 / Jungbluth Anmerkung: die gelb markierten Werte sind im Programm hinterlegte Variable die von einem eingewiesenen Benutzer sehr leicht verändert und den Bedürfnissen angepasst werden können. // LED mit Taster als Flip-Flop ein-/ausschalten // aber nach Ablauf einer Zeit "Einschaltdauer" immer ausschalten // LED Helligkeit mit Poti steuern unter Berücksichtigung einer min. und max.-intensität, siehe -> "Berechnungen LED Ausgang etc.xlsx" // // Potentiometer -> pin A0 (Analogeingang A0) // Taster T1 -> pin A1 (Analogeingang A1) // LEDs bzw. MOSFET -> pin 11 (Digital PWM-Ausgang) // // Anteuerung LED: max. Wert 195, min. Wert 5 // Jb / Rev.2 / 06.03.2016 - läuft!!!! unsigned long Einschaltdauer = 5000; // Setzt die Zeit für die Einschaltdauer in Millisekunden unsigned long Ausschaltzeit = 0; byte Merker = 0; int LED_Status = -1; float val = 0.0; // Deklariert die Variable "Ausschaltzeit" // Deklariert die Variable "Merker" für die Flip_Flop- Funktion als byte(0-255) mit Wert 0 // Deklariert die Variable "LED-Status" als Integer (-32.767 bis 32.768) ->-1 = Aus / +1 = Ein // Variable für Berechnung LED Helligkeit void setup() { pinmode(11, OUTPUT); } // LED pin 11 als Ausgang definieren void loop() { if (analogread(a1) > 500) { delay(100); Merker = 1; } // wenn Taster gedrückt,d.h pin2 =high // dann 100 Millisekunden warten um den Taster zu entprellen und Merker auf 1 setzten if (Merker == 1 && analogread(a1)< 500) // wenn Merker = 1 und Taster wieder losgelasse... { LED_Status = LED_Status *-1; // dann LED Status toggeln Merker = 0; delay(150); // Merker auf 0 zurücksetzen und 150 Millisekunden warten um den Taster zu entprellen } if (LED_Status > 0) // Bei Tastendruck "LED an" Ausschaltzeit setzten (aktuelle Zeit + Einschaltdauer) { Ausschaltzeit = millis() + Einschaltdauer; } if (millis()> Ausschaltzeit) { LED_Status = -1;} // Wenn Timer (aktuelle Zeit) > Ausschaltzeit dann LED aus 9
if (LED_Status > 0) { val = analogread(a0); val = val*(190.0 / 1023.0)+5.0; analogwrite(11, val); } // Wert Analogeingang A0 an die Variable "val" übergeben // Ausgabewert berechnen (min./ max. Helligkeit) // Ausgabewert an pin11 ausgeben ->LED an } if (LED_Status < 0) {analogwrite(11, 0);} // LED ganz aus 10