Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Leuchtdiode (LED)

Übung 1 - Eine LED Schaltung testen

Material
  • 1x Arduino UNO oder NANO ESP32
  • 1x LED rot
  • 1x 470 W Widerstand (gelb-violett-braun)
  • 1x USB Verbindungskabel
Aufgabe
  • Baue die Schaltung nach Abbildung 1 auf und überprüfe die LED auf Funktionstüchtigkeit. Verbinde den Widerstand einmal mit GND und in einem zweiten Versuch mit dem Anschluss 5V. Notiere deine Beobachtungen.

Schaltskizze und Schaltungsaufbau

Abbildung 1 - Einen LED Schaltkreis testen

In dieser Übung haben wir gesehen, dass sich eine LED durch unterschiedliches Verkabeln ein- und ausschalten lässt. Dazu musste die Verbindung zwischen LED und der Spannungsversorgung jeweils neu gesteckt werden.

In der folgenden Schaltung übergeben wir das mechanische Umstecken des Drahtes an den Arduino. Er soll elektronisch dafür sorgen, dass die LED ein- und ausgeschaltet wird und uns entlasten, jedesmal einen oder mehrere Drähte umstecken zu müssen. Wie das geht, zeigt die folgende Schaltung.

Übung 2 - Eine LED blinkt im Sekundentakt

Etwas Hintergrundwissen zu Leuchtdioden findest du im Register BASIC Stamp (BS) im Kapitel über Leuchtdioden und im Register Propeller Kontroller im Kapitel Blinklichter.

Material
  • 1x Arduino UNO oder NANO ESP32
  • 1x Steckernetzteil
  • 1x LED
  • 1x 470 Ohm Widerstand (gelb-violett-braun)
  • 1x USB-Verbindungskabel
Aufgaben
  • Baue die Schaltung nach Vorlage auf.
  • Gib das Programm LED_Blinker_01 ein und speichere es ab.
  • Überprüfe, ob die LED im Sekundentakt aufleuchtet.
  • Erhöhe die Blinkfrequenz so lange, bis das Ein- und Ausschalten mit bloßem Auge nicht mehr wahrgenommen werden kann. Wann ist das der Fall? Notiere deine Beobachtung.

Schaltskizze und Schaltungsaufbau

 

 

 

 

 

 

 

 

 

 

Abb. 3b - Arduino NANO ESP32 (Teilbild)

Im oben gezeigten Programmbeispiel LED_Blinker_01.ino wird auf die eingebaute LED auf dem Arduino NANO ESP32 zugegriffen.

Programm LED_Blinker_01.ino

#define LED_Pin D13

int LED_Status = LOW;

 

void setup() {

  pinMode(LED_Pin, OUTPUT);

}

 

void loop() {

    if (LED_Status == LOW) {

      LED_Status = HIGH;

    } else {

      LED_Status = LOW;

    }

  digitalWrite(LED_Pin, LED_Status);

  delay(500);

}

Wie arbeitet Programm LED1.ino?

In der Methode setup() werden die Ein- und Ausgänge definiert; LED_Pin wird als  Ausgang definiert.

LED_Pin entspricht in diesem Beispiel D13 (siehe erste Programmzeile), der die LED mit dem Arduino verbindet. Die define-Direktive mit vorangestelltem Hashtag (#) ended immer ohne Semikolon!

Die Methode loop() startet mit einer WENN-DANN-Schleife:

Ist der abgefragte LED_Status LOW, wird er auf HIGH gesetzt und umgekehrt. Der Befehl

 

  • digitalWrite(LED_Pin,LED_Status); 
    
    

zieht Pin D13 entsprechend auf HIGH oder LOW und die angeschlossene LED leuchtet auf oder geht aus.

  • delay(500)   
    
    

lässt den Arduino für 500ms verschnaufen, um anschließend die loop-Schleife erneut zu durchlaufen.

HIGH oder 1 und LOW oder 0

Statt HIGH im Argument des Befehls digitalWrite erkennt der Compiler auch das Schlüsselwort 1; statt LOW entsprechend 0. Probiere es aus.

 

Programm oder Sketch?

Beim Arduino werden Programme als Sketche bezeichnet. Ich schließe mich dieser Bezeichnung nicht an, um nicht neue Begriffe für Altbekanntes einzuführen. Das belastet nur unnötig.

 

Nach der Pinbelegung der fest verdrahteten LED  (siehe dazu im Datenblatt des verwendeten Controllers) kann statt

  • #define LED_Pin D13                              auch
  • const int LED_Pin = D13;                        oder
  • const int LED_Pin = LED_BUILTIN;   
  •  

in der Programmzeile 1 stehen.

Übung 3 - Zwei LEDs blinken mit unterschiedlicher Frequenz

// =========================================

// Benutzte Hardware:     Arduino NANO ESP32

// =========================================

 

const int LED_Pin_1 = LED_BUILTIN;

const int LED_Pin_2 = D5;

int LED_Status_y = LOW;

int LED_Status_g = LOW;

unsigned long millis_alt_y = 0;

unsigned long millis_g_alt = 0;

const long delta_T_y = 500;

const long delta_T_g = 250;

 

void setup() {

  pinMode(LED_Pin_1, OUTPUT);

  pinMode(LED_Pin_2, OUTPUT);

}

 

void loop() {

  unsigned long millis_y_neu = millis();

  unsigned long millis_g_neu = millis();

 

  if (millis_y_neu - millis_y_alt >= delta_T_y) {

    millis_y_alt = millis_y_neu;

    if (LED_Status_y == LOW) {

      LED_Status_y = HIGH;

    } else {

      LED_Status_y = LOW;

    }

  digitalWrite(LED_Pin_1, LED_Status_y);

  }

 

  if (millis_g_neu - millis_g_alt >= delta_T_g) {

    millis_g_alt = millis_g_neu;

    if (LED_Status_g == LOW) {

      LED_Status_g = HIGH;

    } else {

      LED_Status_g = LOW;

    }

  digitalWrite(LED_Pin_2, LED_Status_g);

  }

}

 

Abb. 3c - Programm LED_Blinker_02.ino

 

 

 

 

 

 

 

 

 

Abb. 3b

Bildausschnitt vom Arduino NANO ESP32 mit Schaltungsaufbau zum Programm LED_Blnker_02.ino.

Die rote LED an Pin D6 blinkt doppelt so schnell wie die fest verdrahtete LED.

Sollen zwei LEDs unterschiedlich schnell aufleuchten und in einem bestimmten Zeitverhältnis zueinander stehen, hilft die Funktion delay() nicht mehr weiter. Es gibt mindestens zwei Möglichkeiten, das Problem zu lösen.

  • Aufruf einer ISR (Interrupt Service Routine)
  • Aufruf der Funktion millis()

Wie die Funktion millis() arbeitet und wie man sie einsetzt, erfährst du hier.

Übung 4 - Die Duo-LED

Material
  • 1x Arduino UNO oder NANO ESP32
  • 1x  Schaltnetzteil
  • 1x  Duo-LED
  • 1x  Widerstand 470 Ohm (gelb-violett-braun)
  • 1x  USB-Kabel
Aufgaben
  • Baue die Schaltung nach Abbildung 3 auf.
  • Informiere dich im Internet über den Aufbau und die Wirkungsweise einer Duo-LED.
  • Schreibe ein Programm, das eine Duo-LED folgenden Zyklus in einer Endlosschleife durchlaufen lässt: rot 2s, grün 3s danach LED aus 1s. Hilfestellung gibt der Pseudocode weiter unten.
Abbildung 4 - Schaltungsaufbau mit Duo-LED an P10 und P11

Pseudocode

Lege alle Ein- und Ausgabeports in der Methode setup() fest.

Alle Wiederholungsvorgänge platziere in der Methode loop().

     Setze Pin 10 der LED auf 0

     Setze Pin 11 der LED auf 1 (Durchlassrichtung für rote LED)

     Pause von 2 Sekunden

     Setze Pin 10 der LED auf 1

     Setze Pin 11 der LED auf 0 (Durchlassrichtung für grüne LED)

     Pause von 5 Sekunden

     Setze Pin 10 der LED auf 0 (beide LED in Sperrichtung)

5 - Countdown

Material
  • 1x Arduino UNO oder NANO ESP32
  • 1x  Steckernetzteil
  • 1x  Duo-LED,
  • 1x  gelbe LED
  • 2x  470 Ohm Widerstand (gelb-violett-braun)
  • 1x  USB Kabel
Aufgaben
  • Baue mit einer gelben LED und einer DUO LED eine Schaltung nach Vorlage auf, die einen Countdown von 10 Sekunden ausführt. Die DUO LED soll die ersten drei Sekunden rot aufleuchten. Danach schaltet sie auf grün um. Sobald die DUO LED auf grün umschaltet, geht die gelbe LED über einen Zeitraum von 10 Sekunden einmal pro Sekunde an und aus (Countdown läuft). Am Ende des Countdown – nach 10 Sekunden – schaltet die DUO LED auf rot zurück. Speicher das fertige Programm unter dem Namen LED3.ino ab.
  • Anschlussbelegungen: DUO-LED an P11 und P10
  • Gelbe LED an P12

Schaltskizze und Schaltungsaufbau

Abbildung 5 - Schaltungsaufbau mit Duo-LED an P10 und P11 und einer gelben LED an P12

Pseudocode

Bei der Programmentwicklung soll dir der Pseudocode eine Hilfe sein.

 

Lege alle Ein- und Ausgabeports in der Methode setup() fest.

Alle Wiederholungsvorgänge platziere in der Methode loop().

     Setze Pin 10 der DUO-LED auf 0

     Setze Pin 11 der DUO-LED auf 1

     Pause von 3 Sekunden

     Setze Pin 10 der DUO-LED auf 1

     Setze Pin 11 der DUO-LED auf 0

     Wiederhole 10 mal

            Setze Pin 12 der LED gelb auf 1

           Pause von 0,5 Sekunden

           Setze Pin 12 der LED gelb auf 0

           Pause von 0,5 Sekunden

Eine mögliche Programmumsetzung siehst du im folgenden Bild. Sie kann von deinem Programm abweichen. Hauptsache, die LEDs machen das, was von ihnen in der Aufgabenstellung verlangt wurde.

Übung 6 - Was ist eigentlich ein Tastverhältnis?

In den vorherigen Übungen waren die Ein- und Auszeiten der LED ziemlich lang und ihre  jeweiligen Zeitanteile gleich lang.

Was passiert eigentlich, wenn Ein- und Ausschaltzeiten einer LED deutlich voneinander abweichen und diese Wechsel sehr schnell erfolgen? Das werden wir jetzt untersuchen. Bevor das geschieht, hast du vielleicht schon eine Vermutung?

In den beiden folgenden Darstellungen sind die Ein- und Ausschaltzeiten für zwei LEDs dargestellt. Die obere Darstellung zeigt deutlich, dass die LED fast dreimal so lange eingeschaltet ist wie die in der unteren Darstellung.

Abb. 6 - Puls-Weiten-Modulation

Das Zahlenverhältnis aus tein zur Periodenzeit T wird auch Tastverhältnis genannt. Es ist ein reiner Zahlenwert der zwischen 0 und 1 liegt. Wir werden gleich bei der Beschreibung des Befehls analogWrite sehen, dass das Tastverhältnis auch mit einem Zahlenbereich zwischen 0 und 255 angegeben werden kann.

Die Veränderung von ON und OFF Zeiten bei konstanter Periodendauer wird auch als Puls-Weiten-Modulation (PWM) bezeichnet. In den Abschnitten BASIC Stamp (BS) - Standardservo und Propeller Kontroller - Servos erfährst du mehr darüber.

Übung 7 - Eine LED dimmen

Wir wissen jetzt, was Puls-Weiten-Modulation bedeutet und werden diese auf eine LED anwenden. Dazu stellt die Sprache Arduino-C den Befehl analogWrite bereit.

analogWrite()

Syntax

  • analogWrite(pin, wert)
    

Parameter

  • pin:   PWM Output-Pin am Arduino
    
    wert:   int wert des Tastverhältnisses liegt zwischen 0 (immer ON) bis 255 (immer OFF)
    

Bemerkung

Das PWM Signal hat eine Frequenz von

  • 490Hz (UNO R3 an den Pin D3, D9, D10, D11) und
  • 980Hz (UNO R3 an den Pin D5 und D6)
  • 976 Hz (UNO WiFi R2 an den Pin D3, D5, D6, D9, D10)

Die Funktion kann nur über die Pin eingesetzt werden, die mit einer Tilde (~) gekennzeichnet sind. Bei einem UNO sind das P3, 5, 6, 9, 10 und 11.

Aufgabe
  • Baue die Schaltung nach Abb. 2 auf.
  • Übertrage den Sketch LED_PWM_UNO_WiFi_R2_v2.ino in den Editor und speichere es ab.
  • Starte das Programm und beobachte die LED. Sie sollte ihre Helligkeit ständig verändern.
Abbildung 7 - LED mit PWM Modulation

Das Programm LED_PWM_UNO_WiFi_R2_v2.ino

Wie arbeitet das Programm LED_PWM_UNO_WiFi_R2_v2.ino?

Im fixen Teil des Programms wird der Variablen ledPin der Wert 10 zugewiesen; die benutzte LED ist an D10~ angeschlossen.

Im Methodenblock setup wird D10~ auf OUTPUT gesetzt und anschließend die Methode loop aufgerufen.

Die for...- Schleife ist neu. Eine Kurzbeschreibung findest du unter Mikrocontroller - Arduino UNO.

In einer kurzen Filmsequenz wird hier das Verhalten der LED an D10 gezeigt und gleichzeitig das Oszillogramm vom Ausgang D10.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf