Ampel­schal­tung mit einem LED-Stick

Lese­zeit: 6 Minu­ten

Lösung
Seite als PDF

Der LED-Stick besteht aus meh­re­ren mit­ein­an­der ver­bun­de­nen RGB-LEDs. Jede besitzt einen eige­nen Con­trol­ler und kann ein­zeln ange­steu­ert wer­den. Der LED-Stick benö­tigt nur einen digi­ta­len Eingang.

RGB ist eine Mischung der Far­ben Rot, Grün und Blau. Jede Far­be kann von 0 bis 255 gesetzt wer­den, die Wer­te wer­den durch Kom­ma­ta getrennt.

 Hier fin­dest du einen Über­blick über die 🔗RGB-Farb­codes (exter­ner Link abge­ru­fen am 19.02.24).

Die Ampel soll nach einem fest­ge­leg­ten Takt geschal­tet werden:

rotrot-gelbgrüngelb
5 Sekun­den1 Sekun­de3 Sekun­den1 Sekun­de
LEDs 8, 7, 6
LEDs 8, 7, 6, 5, 4LEDs 3, 2, 1LEDs 5, 4

Benö­tig­te Bauteile:

  • LED-Stick
  • Lei­tungs­dräh­te

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Ach­te auf die Polung. Sie kann bei den LED-Sticks ver­schie­de­ner Her­stel­ler unter­schied­lich sein.

Benö­tig­te Bibliothek:

oder: Sketch -> Biblio­thek ein­bin­den -> Biblio­the­ken verwalten

Jedem Befehl muss der Name des LED-Sticks vor­an­ge­stellt werden.

Direkt wei­ter zur ➨ Pro­gram­mie­rung

Funk­tio­nen der Biblio­thek Adafruit_NeoPixel (Aus­wahl)

Schlüs­sel­wortAkti­on
begin()LED-Ring star­ten
num­Pi­xels()Anzahl der LEDs lesen
show()LED-Ring ein­schal­ten
clear()LED-Ring aus­schal­ten
setPixelColor(LED-Nummer, rot, grün, blau)Far­be einer LED setzen
LED-Nummer
rot -> 0 - 255
grün -> 0 - 255
blau -> 0 - 255
set­Bright­ness()Hel­lig­keit set­zen (0−255)
Color(rot, grün, blau)Far­be für alle LEDs setzen
rot -> 0 - 255
grün -> 0 - 255
blau -> 0 - 255

Bei­spiel rot:
int Far­be = LEDStreifen.Color(255, 0, 0);

Bei­spiel grün:
int Far­be = LEDStreifen.Color(0, 255, 0);

Bei­spiel blau:
int Far­be = LEDStreifen.Color(0, 0, 255);
fill(Farbe, Start, Ende)Far­be für die mit Start und Ende bezeich­ne­ten Pixel setzen

Das Bei­spiel nutzt eini­ge Funk­tio­nen der Bibliothek:

Das dazu­ge­hö­ri­ge Pro­gramm. Beach­te die Kommentare.

# include "Adafruit_NeoPixel.h"

// digitaler Pin des LED-Sticks
int PinLEDStick = 7;

// Anzahl der LEDs
# define AnzahlLED 8

/*
  Initialisierung des LED-Sticks
  Parameter:
  LEDStick -> Name des LED-Sticks
  AnzahlLED -> Anzahl der LEDs
  PinLEDStick -> verwendeter Pin
  NEO_GRB + NEO_KHZ800 -> Typ des verwendeten LED-Sticks
*/
Adafruit_NeoPixel LEDStick = Adafruit_NeoPixel(AnzahlLED, PinLEDStick, NEO_GRB + NEO_KHZ800);

void setup()
{
  // NeoPixel Bibliothek initialisieren
  LEDStick.begin();

  // setBrightness(0..255)
  LEDStick.setBrightness(200);
}

void loop()
{
  // Farbe rot schrittweise von 0 bis 255 aufhellen
  for (int i = 0; i < 255; i++)
  {
    // alle LEDs mit der Leuchtstärke i zum Leuchten bringen 
    for (int LEDNummer = 0; LEDNummer < LEDStick.numPixels();    LEDNummer++)
    {
      LEDStick.setPixelColor(LEDNummer, LEDStick.Color(i, 0, 0));
      LEDStick.show();
    }
  }

  // LEDs von der maximalen Leuchtstärke 255 auf 0 abdunkeln
  for (int i = 255; i > 0; i--)
  {
    for (int LEDNummer = 0; LEDNummer < LEDStick.numPixels(); LEDNummer++)
    {
      LEDStick.setPixelColor(LEDNummer, LEDStick.Color(i, 0, 0));
      LEDStick.show();
    }
  }

  // LED aus, kurze Pause
  LEDStick.clear();
  delay(1000);
 
  // Farbe grün schrittweise von 0 bis 255 aufhellen
  for (int i = 0; i < 255; i++)
  {
    for (int LEDNummer = 0; LEDNummer < LEDStick.numPixels(); LEDNummer++)
    {
      LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, i, 0));
      LEDStick.show();
    }
  }

  // LEDs von der maximalen Leuchtstärke 255 auf 0 abdunkeln
  for (int i = 255; i > 0; i--)
  {
    for (int LEDNummer = 0; LEDNummer < LEDStick.numPixels(); LEDNummer++)
    {
      LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, i, 0));
      LEDStick.show();
    }
  }

  // LED aus, kurze Pause
  LEDStick.clear();
  delay(1000);

  // Farbe blau schrittweise von 0 bis 255 aufhellen
  for (int i = 0; i < 255; i++)
  {
    for (int LEDNummer = 0; LEDNummer < LEDStick.numPixels(); LEDNummer++)
    {
      LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, 0, i));
      LEDStick.show();
    }
  }

  // LEDs von der maximalen Leuchtstärke 255 auf 0 abdunkeln
  for (int i = 255; i > 0; i--)
  {
    for (int LEDNummer = 0; LEDNummer < LEDStick.numPixels(); LEDNummer++)
    {
      LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, 0, i));
      LEDStick.show();
    }
  }

  // LED aus, kurze Pause
  LEDStick.clear();
  delay(1000);

  // vorwärts mit rot
  for (int LEDNummer = 0; LEDNummer < LEDStick.numPixels(); LEDNummer++)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(255, 0, 0));
    LEDStick.show();
    delay(100);
  }

  // rückwärts mit grün
  for (int LEDNummer = LEDStick.numPixels(); LEDNummer >= 0 ; LEDNummer--)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, 255, 0));
    LEDStick.show();
    delay(100);
  }

  // LED aus, kurze Pause
  LEDStick.clear();
  delay(1000);

  // vorwärts mit blau
  for (int LEDNummer = 0; LEDNummer < LEDStick.numPixels(); LEDNummer++)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, 0, 255));
    LEDStick.show();
    delay(100);
  }

  // rückwärts mit gelb
  for (int LEDNummer = LEDStick.numPixels(); LEDNummer >= 0 ; LEDNummer--)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(255, 255, 0));
    LEDStick.show();
    delay(100);
  }

  // LED aus, kurze Pause
  LEDStick.clear();
  delay(1000);
}

Die Pro­gram­mie­rung der Ampel:

Der zeit­li­che Ablauf:

Bin­de die benö­tig­te Biblio­thek ein und defi­nie­re die Variablen.

include "Adafruit_NeoPixel.h"

int PinLEDStick = 7;

int AnzahlLED = 8;

/*
  Initialisierung des LED-Sticks
  Parameter:
  LEDStick -> Name des LED-Sticks
  AnzahlLED -> Anzahl der LEDs
  PinLEDStick -> verwendeter Pin
  NEO_GRB + NEO_KHZ800 -> Typ des verwendeten LED-Sticks
*/
Adafruit_NeoPixel LEDStick = Adafruit_NeoPixel(AnzahlLED, PinLEDStick, NEO_GRB + NEO_KHZ800);

Der set­up-Teil:

void setup()
{
  // NeoPixel Bibliothek initialisieren
  LEDStick.begin();

  // setBrightness(0..255)
  LEDStick.setBrightness(200);
}

Der loop-Teil. Beach­te die Kommentare.

void loop()
{
  // Zählung beginnt oben am LED-Stick
  // rot ein
  for (int LEDNummer = AnzahlLED; LEDNummer > 4; LEDNummer--)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(255, 0, 0));
    LEDStick.show();
  }
  delay(3000);

  // gelb an
  for (int LEDNummer = 4; LEDNummer > 2; LEDNummer--)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(255, 255, 0));
    LEDStick.show();
  }
  delay(1000);

  // rot aus
  for (int LEDNummer = AnzahlLED; LEDNummer > 4; LEDNummer--)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, 0, 0));
    LEDStick.show();
  }

  // gelb aus
  for (int LEDNummer = 4; LEDNummer > 2; LEDNummer--)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, 0, 0));
    LEDStick.show();
  }

  // grün an
  for (int LEDNummer = 2; LEDNummer >= 0; LEDNummer--)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, 255, 0));
    LEDStick.show();
  }
  delay(3000);

  // grün aus
  for (int LEDNummer = 2; LEDNummer >= 0; LEDNummer--)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, 0, 0));
    LEDStick.show();
  }

  // gelb an
  for (int LEDNummer = 4; LEDNummer > 2; LEDNummer--)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(255, 255, 0));
    LEDStick.show();
  }
  delay(1000);

  // gelb aus
  for (int LEDNummer = 4; LEDNummer > 2; LEDNummer--)
  {
    LEDStick.setPixelColor(LEDNummer, LEDStick.Color(0, 0, 0));
    LEDStick.show();
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 14. Mrz 2024 @ 0:06