Ein Lauflicht, bei dem mehrere Lämpchen nacheinander ein- und ausgehen, dürfte zu den
beliebtesten Anfänger-Experimenten gehören. Im Internet findet man unzählige Lauflichter mit
noch mehr Varianten, wie diese Aufgabe zu realisieren wäre. In unserem Beispiel kommt das
Mikrocontroller-Board Arduino, das längst zum wichtigen Bestandteil vieler
Hobby-Elektronik-Projekte geworden ist, zum Einsatz.
Aufbau
Da wir die Hauptsteuerung mit einem Programm erledigen, bleibt uns nur wenig
Verdrahtungsarbeit übrig. Auch die Anzahl der Komponenten ist mehr als überschaubar.
Neben einem Arduino-Board (ich verwende Arduino Mega2560) benötigen wir
- 10 Leuchtdioden (Die Anzahl der Kanäle kann man natürlich selbst frei bestimmen)
- 10 Widerstände (Ich verwende hier 470 Ω Widerstände. Damit belaste ich die Arduino-Ausgänge
mit einem Strom von ca. I=U/R = 5V/470Ω = 10mA. Möchte man die Leuchtdioden noch heller
aufleuchten lassen, so kann man einen noch geringeren Widerstand einsetzen).
- 1 Poti (z.B. 1 kΩ)
- 1 Taster
- und Verbindungsbrücken.
Nachdem alles aufgebaut wurde, sieht unsere Steckplatine ungefähr so aus:
Bild 1. - Lauflicht mit Arduino (Versuchsaufbau)
Die Dioden habe ich absichtlich in einem Kreis aufgebaut. Damit kann man besser
die Funktionalität unseres Lauflichtes beobachten. Für den Schalter habe ich den Pin 32
vorgesehen, für die Dioden die Pins 34 bis 43. Mein Poti ist an den analogen Pin A0
angeschlossen. Die Pins kann man natürlich frei wählen, je nachdem welches gerade frei ist,
oder welches Mikrocontroller-Board man zur Verfügung hat. Das Schema für den Aufbau sieht
dann folgendermaßen aus:
Bild 2. - Lauflicht mit Arduino (Verbindungsschema).
Programm 1 (Richtung konstant)
Die Aufgabe ist mit relativ kleinem Programmierungsaufbau zu bewältigen. Mit
SwitchPin bestimme ich den PIN 32 als Eingang für den Ein/Aus-Taster. Der Start erfolgt mit
der ersten Diode, die an Pin 34 angeschlossen ist. Der Wert 33 dient hier als Startwert, der
beim Programmstart um 1 auf 34 erhöht wird. Die Variable LedAktuell ändert im Laufe des
Programms ihren Wert. Mit PotiPin werden wir dann den aktuellen Wert an dem analogen Eingang
A0 auslesen. Mit DelayTime können wir mit Hilfe von Poti die Geschwindigkeit unseres
Lichtlaufes bestimmen.
In Setup - das ist die Sequenz des Programms, die nur beim Programmstart ausgeführt wird -
bestimmen wir die Funktionalität der Pins. Pin 32 (SwitchPin) wird zum Eingang für unseren
Taster, Pin A0 (PotiPin) ist der analoge Eingang für das Poti. Die Pins 34 bis 43 fungieren
schließlich als Ausgänge für unsere Dioden.
Der eigentliche Ablauf spielt sich im loop ab.
Sobald der Taster gedrückt wird, wird die Diode mit der Nummer LedAktuell ausgeschaltet, die nächste
Diode LedAktuell +1 dagegen eingeschaltet. Dann wartet das Programm bis die Wartezeit
abgelaufen ist und wiederholt den Vorgang. Das alles passiert solange, wie der Taster gedrückt
bleibt.
Der Wert LedAktuell bleibt auch dann erhalten, wenn wir den Start-Taster loslassen. Das
bewirkt, dass bei erneutem Drücken des Tasters das Lauflicht mit der nächsten Diode fortgesetzt
wird. Die Diode, die gerade angesteuert wird, bleibt beim Loslassen des Tasters auch an. So
kann man das Fortsetzungs-Verhalten unseres Lauflichtes deutlicher erkennen. Bei Bedarf kann
man diese Diode beim Loslassen des Tasters mit ausgehen lassen.
Für die zeitliche Verzögerung wird der Poti-Wert direkt übernommen. Der maximale Wert kann hier
den Wert 1023 erreichen. Die Anweisung delay interpretiert den in Klammern stehenden Wert als
Millisekunden. Damit erreichen wir eine Taktfrequenz unseres Lauflichtes von ca. 1 sek. (1023 ~
1000 ms ~ 1 sek.).
Das Programm (In Andruino-Welt als Sketch bezeichnet):
// ----------------------------------------------------------
// Lauflicht mit Arduino 1 (Dezember 2017)
// Start/Stop, Fortsetzung, konstante Richtung
int SwitchPin = 32;
int PotiPin = 0;
int DelayTime = 0;
int LedAktuell = 33;
Mit der gleichen Verschaltung ist es einfach, das Programm etwas zu erweitern.
Jetzt wollen wir, dass nach jedem Tastendruck die Laufrichtung geändert wird.
Um das zu erreichen, führe ich zwei neue Variablen ein. Bis jetzt wurde unsere Variable LedAktuell
stets um die konstante Zahl 1 erhöht. Da wir jetzt mit zwei Richtungen verfahren wollen, werden
wir unsere Zählvariable mal um 1, mal um -1 ändern. Die Variable nenne ich "Summand" und
definiere sie im Kopf des Programms. "Summand" kann abwechselnd die Werte 1 oder -1 annehmen.
Die zweite Variable, einen Merker, brauchen wir, um während des Laufes die Richtung festzuhalten.
Diese Variable nenne ich "Halten". „Halten“ wird beim Drücken der Start-Taste einmal abgefragt
und sofort zurückgesetzt. Gleichzeitig wird die Richtung gewechselt. Die Richtung bleibt dann
konstant, bis man die Taste wieder loslässt. Dann wird „Halten“ wieder gesetzt (freigegeben)
und die Richtung kann erneut gewechselt werden. Der restliche Ablauf des Programms bleibt
unverändert.
Der neue Sketch:
// ----------------------------------------------------------
// Lauflicht mit Arduino 2 (Dezember 2017)
// Start/Stop, Fortsetzung, Richtung abwechselnd
int SwitchPin = 32;
int PotiPin = 0;
int DelayTime = 0;
int LedAktuell = 33;
int Summand = 1;
bool Halten = LOW;