Drosseln 100µH


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Lauflicht mit Arduino

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:

Lauflicht mit Arduino (Versuchsaufbau)

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:

Lauflicht mit Arduino - E-Plan

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;

  void setup() {
    for (int i=34; i<43; i++) {
      pinMode(i, OUTPUT);
    }
    pinMode (PotiPin, INPUT);
    pinMode (SwitchPin, INPUT_PULLUP);
  }

  void loop() {
    DelayTime = analogRead (PotiPin);
    if (digitalRead (SwitchPin) == LOW) {
      if (LedAktuell > 33) { digitalWrite (LedAktuell, LOW); }
      LedAktuell = LedAktuell + 1;
      if (LedAktuell > 43) { LedAktuell = 34; }
      digitalWrite (LedAktuell, HIGH);
      delay (DelayTime);
    }
  }

  // ----------------------------------------------------------

Lauflicht mit Arduino (konstante Richtung)

Programm 2 (Richtung abwechselnd)

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;

  void setup() {
    for (int i=34; i<43; i++) {
      pinMode(i, OUTPUT);
    }
    pinMode (PotiPin, INPUT);
    pinMode (SwitchPin, INPUT_PULLUP);
  }

  void loop() {
    DelayTime = analogRead (PotiPin);
    if (digitalRead (SwitchPin) == LOW) {
      if (LedAktuell > 33) { digitalWrite (LedAktuell, LOW); }
      if (Halten == HIGH) { Halten = LOW; Summand = -1 * Summand; }
      LedAktuell = LedAktuell + Summand;
      if (LedAktuell > 43) { LedAktuell = 34; }
      if (LedAktuell < 34) { LedAktuell = 43; }
      digitalWrite (LedAktuell, HIGH);
      delay (DelayTime);
    }
    if (digitalRead (SwitchPin) == HIGH) {
      if (Halten == LOW) { Halten = HIGH; }
    }
  }

  // ----------------------------------------------------------

Lauflicht mit Arduino (Richtung abwechselnd)


Weitere Themen:


Arduino-Versuche


Google-Suche auf MEINE-SCHALTUNG.de :


Relais Schrack 12V

Home Impressum Datenschutz