Tinkercad Übung 11 - LED dimmen

LED Helligkeit einstellen

In dieser Übung lässt du eine LED pulsieren. Die Helligkeit und Geschwindigkeit des Pulsierens wird mit Tastern eingestellt.
  • Empfohlenes Vorwissen: Bedienung Tinkercad Circuits, pinMode(), digitalWrite(), Schleifen, Verzweigungen
  • Neue Inhalte: analogWrite()

Schritt 1 - Demo-Entwurf öffnen und inspizieren

Bisher hast du LEDs entweder ein- oder ausgeschaltet. Das sind nur 2 mögliche Zustände:
  1. 5V, eingeschaltet, HIGH
  2. 0V, ausgeschalter, LOW
Kann ein Signal nur festgelegte Zustände annehmen, ist es digital.

Jetzt wollen wir die LED pulsieren lassen wie in Abbildung 1 gezeigt:

Abbildung 1 - pulsierende LED

Dafür muss die Helligkeit der LED stufenlos einstellbar sein. Das wäre ein analoges Signal.


Abbildgung 2 - analog vs. digital

Abbildung 2 zeigt den Unterschied zwischen analogen und digitalen Signalen am Beispiel einer Sinuskurve. Das analoge Signal kann alle Möglichen Werte annehmen und bleibt immer sinusförmig egal wie nah man "heranzoomt". Zoomt man bei dem digitalen Signal hinein, sieht es sehr schnell "pixelig" aus, je nachdem wie gut die Auflösung ist. Das dargestellte digitale Signal kann die Sinuskurve nur mit 6 Unterschiedlichen Werten darstellen, hat also eine Auflösung von 6. Würde man die Auflösung erhöhen, sähe auch die digitale Sinuskurve wieder etwas weichgezeichneter aus. Sobald man hineinzoomt, fällt allerdings wieder auf, dass sie nicht rund, sondern aus Einzelstufen zusammengesetzt ist.

Wie du gleich sehen wirst, können wir mit dem Arduino kein echtes analoges Signal erzeugen. Aber wir können eins faken.

Auch werden wir keine Sinuskurve erzeugen, sondern langsam die LED heller und danach wieder dunkler dimmen (linear), was ein Dreiecks-Signal erzeugt:
Abbildung 3 - Dreiecksignal

Kopiere diesen Demo-Entwurf:
https://www.tinkercad.com/things/2TGVgjIlm9I-kkg-robotik-ubung-11-starter
Anstatt einer LED habe ich eine Glühbirne verwendet, da die unterschiedlichen Helligkeiten in der Simulation nicht so gut sichtbar sind. Wie es in echt aussehen könnte, siehst du in Abbildung 1 oben. Die zwei Messgeräte heißen "Oszilloskop" und "Multimeter".
Abbildung 3 - Demo-Entwurf

Der Entwurf beinhaltet 4 Taster, mit denen du später die Helligkeit und die Geschwindigkeit des Pulsierens einstellen kannst. Anstatt einer LED mit Vorwiderstand ist eine Glühbirne verbaut. Außerdem sind 2 Messgeräte angeschlossen:
  1. Ein Oszilloskop
  2. und ein Multimeter.
Abbildung 4 zeigt ein echtes Oszilloskop:
Abbildung 4 - Oszilloskop

Ein Oszilloskop zeigt unter Anderem den Signalverlauf über die Zeit an. An der abgebildeten Sinuskurve kann man also ablesen wie schnell sie sich verändert (z.B. welche Periode sie hat) und welche die Maximal- und Minimalwerte sind (welche Amplitude sie hat). Mit einem Oszilloskop misst man meistens die Spannung.

Starte die Simulation und schaue, was das Oszilloskop in der Simulation anzeigt.

Abbildung 5 zeigt ein echtes Multimeter.
Abbildung 5 - Multimeter

Ein Multimeter kann man unter Anderem Spannung, Strom und Widerstand messen, aber nur den jetzigen Wert (Momentanwert) oder einen Durchschnittswert. Will man wissen wie sich das Signal über die Zeit verändert, muss ein Oszilloskop für die Messung verwendet werden.

Starte die Simulation und schaue, was das Multimeter in der Simulation anzeigt.

Öffne den "Code"-Editor und inspiziere das Programm.
Unser LED-Ersatz (die Glühbirne) ist an Pin 3 angeschlossen. Dieser wird als Ausgang konfiguriert (Übung 5). Danach kommt der Befehl, der das Rechtecksignal im Oszilloskop erzeugt.

Schritt 2 - LED dimmen

Wenn du genau hinschaust, fällt dir auf, dass das Oszilloskop und das Multimeter genauso angeschlossen sind wie die Glühbirne:
  • Ein Anschluss an Pin 3 am Arduino
  • und ein Anschluss an GND (Minus-Pol).
Schalten wir Pin 3 ein, liegt zwischen den beiden Anschlüssen 5V an, ein Strom fließt und die Leuchte leuchtet. Diese 5V messen auch die beiden Messgeräte.

Das Oszilloskop zeigt ein Rechtecksignal, d.h. die Leuchte wird immer wieder eingeschaltet für eine kurze Zeit und dann wieder ausgeschaltet.
Abbildung 6 - Rechtecksignal

Probiere mal aus was passiert, wenn du die analogWrite-Zeile folgendermaßen abänderst:

analogWrite(3, 0);

oder so:

analogWrite(3, 255);

Beim 1. Versuch ist die Leuchte die ganze Zeit ausgeschaltet und das Multimeter zeigt Null Volt. Das ist also genau dasselbe wie digitalWrite(3, LOW) (Übung 5). Beim 2. Versuch ist die Leuchte die ganze Zeit eingeschaltet und das Multimeter zeigt (komischerweise) ca. 2,5 V (sollte 5V zeigen). Das entspräche digitalWrite(3, HIGH).

Probiere andere Werte zwischen 0 und 255 aus und beobachte die Helligkeit der Leuchte.

Du siehst, mit analogWrite() kann die Helligkeit der Leuchte eingestellt werden - sie kann gedimmt werden.

Schau dir doch mal was die Arduino-Referenz zu dem Befehl zu sagen hat:
https://www.arduino.cc/reference/de/language/functions/analog-io/analogwrite/

Bei etwa 50% Helligkeit (Wert 127) misst das Multimeter nur die Hälfte von 2,5V. Wie uns das Oszilloskop beweist, handelt es sich aber nicht um ein konstantes 2,5V-Signal, sondern in Wirklichkeit wird es die ganze Zeit ein- und ausgeschaltet. Das passiert mehrere Tausend Mal in der Sekunde. Das Multimeter ist zu träge und zeigt uns stattdessen den Mittelwert. Auch unser Auge ist zu träge das schnelle Ein- und Ausschalten der Leuchte wahrzunehmen. Deswegen kann man auch aus vielen schnell nacheinander angezeigten Einzelbildern einen flüssigen Kinofilm darstellen. In der Zeitlupe würde man das schnelle Ein- und Ausschalten der LED allerdings sichtbar machen können. Solch ein Signal wird auch verwendet, um die Geschwindigkeit von Motoren zu steuern, denn auch die Motoren sind zu träge, um den schnellen An-/Aus-Wechseln zu folgen und drehen dann mit der gemittelten Geschwindigkeit.

Warum uns die Leuchte manchmal heller und manchmal dunkler erscheint, liegt an dem Verhältnis zwischen der Zeit, die die Leuchte an und der Zeit, die die Leuchte aus ist. Das nennt man das Tastverhältnis.
  • Bei 50% Helligkeit ist die Leuchte 50% der Zeit an,
  • bei 100% Helligkeit zu 100% und
  • bei 0% Helligkeit zu 0%.
Diese Art Rechtecksignal nennt man pulsweitenmoduliertes Signal (PWM-Signal), weil die Breite (Weite) des Pulses (Zeit zwischen Ein- und Ausschalten) verändert werden kann.

Alle Pins am Arduino, die mit einer Tilde (~) gekennzeichnet sind, können so ein Signal erzeugen und somit ein analoges Ausgangssignal simulieren. Das sind beim Arduino Uno die Pins 3, 5, 6, 9, 10 und 11. Alle anderen Pins können nur langweilig ein- und ausgeschaltet werden. Die PWM-Pins können natürlich auch ganz normal digitalWrite().

Ein PWM-Signal kann aber auch selbst mit jedem Pin programmiert werden:

digitalWrite(3, HIGH);  // Start des Pulses
delay(1);               // 1/1000 Sekunde verzögern
digitalWrite(3, LOW);   // Ende des Pulses
delay(1);               // 1/1000 Sekunde verzögern
// nächster Puls...

Schritt 3 - Animation

Schreibe nun ein Programm, welches das PWM-Tastverhältnis in einer Schleife erhöht und danach in einer Schleife wieder verringert. (Schleifen hast du in Übung 9 kennen gelernt.) In den Schleifen muss eine Verzögerung eingebaut werden, damit die Simulation nicht zu langsam wird. Das Tastverhältnis können Zahlen zwischen 0 (ausgeschaltet) und 255 (eingeschaltet) sein.

analogWrite(3127);

Lösungsvorschlag: https://www.tinkercad.com/things/luyxKVMeapK-kkg-robotik-ubung-11-dimmen
Abbildung 7 - Tastverhältnis langsam erhöhen und verringern

Schritt 4 - Helligkeit mit Taster einstellen

Erweitere das Programm so, dass die maximale Helligkeit (das maximale Tastverhältnis) mit 2 Tastern eingestellt werden kann. Dafür wird analogWrite() nicht mehr mit einem festen Wert parametriert, sondern mit einer Variablen. Diese Variable wird bei Taster-Druck geändert:
  • Taster an Pin 13 gedrückt: maximales Tastverhältnis 127
  • Taster an Pin 12 gedrückt: maximales Tastverhältnis 255
(Taster auslesen: Übung 6, Verzweigungen & Variablen: Übung 8)
Abbildung 8 - Maximale Helligkeit mit Taster einstellen

Schritt 5 - Geschwindigkeit einstellen

Erweitere das Program so, dass die Geschwindigkeit mit 2 Tastern eingestellt werden kann. Dafür wird delay() nicht mehr mit einem festen Wert parametriert, sondern mit einer Variablen. Diese Variable wird bei Taster-Druck geändert:
  • Taster an Pin 11 gedrückt: Verzögerung 5 Millisekunden
  • Taster an Pin 10 gedrückt: Verzögerung 1 Millisekunde
Lösungsvorschlag: https://www.tinkercad.com/things/4TuTpjPEftM-kkg-robotik-ubung-11-geschwindigkeit
Abbildung 9 - Geschwindigkeit mit Taster einstellen

Zusammenfassung

In dieser Übung hast mit Hilfe eines PWM-Signals ein pseudo-analoges Signal erzeugt und damit die Helligkeit einer Glühbirne gesteuert. Du weißt, dass das PWM-Signal eigentlich ein Rechtecksignal ist und nur durch z.B. Trägheit unserer Augen als analoges Signal wahrgenommen wird.



Kommentare

Beliebte Posts aus diesem Blog

Tinkercad Übung 6 - LED mit Taster ansteuern

Tinkercad Übung 15 - Ultraschallsensor auslesen