Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

In diesem Tutorial lernen wir, wie man individuell ansteuerbare RGB-LEDs oder einen WS2812B LED-Streifen mit Arduino steuert. Sie können das folgende Video ansehen oder die schriftliche Anleitung unten lesen für weitere Details.

Überblick

Zuerst erklären wir das Funktionsprinzip anhand einiger grundlegender Beispiele und werfen dann einen Blick auf ein wirklich cooles Arduino-Projekt mit diesen LEDs: einen DIY interaktiven LED-Couchtisch. Der Couchtisch verfügt über WS2812B LEDs, Infrarot-Näherungssensoren zur Objekterkennung und ein HC-05 Bluetooth-Modul zur Farbsteuerung über eine benutzerdefinierte Android-App. Dieses Projekt ist tatsächlich eine Zusammenarbeit zwischen mir und Marija vom Creativity Hero YouTube-Kanal.

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

Wie WS2812B LEDs funktionieren

Sehen wir uns den LED-Streifen genauer an. Er besteht aus Typ 5050 RGB-LEDs, in denen der sehr kompakte WS2812B LED-Treiber-IC integriert ist.

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

Je nach Intensität der drei einzelnen Rot-, Grün- und Blau-LEDs können wir jede gewünschte Farbe simulieren.

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

Das Tolle an diesen LEDs ist, dass wir den gesamten LED-Streifen mit nur einem einzigen Pin unseres Arduino-Boards steuern können. Jede LED hat an jedem Ende drei Anschlüsse: zwei für die Stromversorgung und einer für die Daten. Der Pfeil zeigt die Datenflussrichtung. Der Datenausgang der vorherigen LED ist mit dem Dateneingang der nächsten LED verbunden. Wir können den Streifen auf jede gewünschte Größe zuschneiden sowie die LEDs mit Drähten voneinander entfernen.

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

Für die Stromversorgung arbeiten sie mit 5V, und jede rote, grüne und blaue LED zieht ca. 20mA, also insgesamt 60mA pro LED bei voller Helligkeit. Beachten Sie, dass der 5V-Pin des Arduino bei USB-Stromversorgung nur ca. 400mA liefern kann, und bei Stromversorgung über den Barrel-Anschluss ca. 900mA.

Wenn Sie mehr LEDs verwenden und der Strombedarf die oben genannten Grenzen überschreitet, müssen Sie ein separates 5V-Netzteil verwenden. In diesem Fall müssen Sie auch die beiden Ground-Leitungen miteinander verbinden. Zusätzlich wird empfohlen, einen Widerstand von ca. 330 Ohm zwischen dem Arduino und dem Datenpin des LED-Streifens zu verwenden, um Rauschen auf dieser Leitung zu reduzieren, sowie einen Kondensator von ca. 100µF zwischen 5V und Ground, um die Stromversorgung zu glätten.

Arduino und WS2812B LEDs Beispiele

Beispiel 1

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

Als Beispiel verwende ich einen 20 LEDs langen Streifen, der über einen 330-Ohm-Widerstand mit dem Arduino verbunden und mit einem separaten 5V-Netzteil versorgt wird, genau wie oben erklärt. Für die Programmierung des Arduino verwenden wir die FastLED-Bibliothek. Dies ist eine hervorragende und gut dokumentierte Bibliothek, die die einfache Steuerung der WS2812B LEDs ermöglicht.

Sie erhalten die für dieses Beispiel benötigten Komponenten über die Links unten:

  • WS2812B LED Streifen
  • Arduino Board
  • 5V 6A DC Netzteil

Hier ist der Arduino-Quellcode für das erste Beispiel:

#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 20
CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}

void loop() {
  leds[0] = CRGB(255, 0, 0);
  FastLED.show();
  delay(500);
  leds[1] = CRGB(0, 255, 0);
  FastLED.show();
  delay(500);
  leds[2] = CRGB(0, 0, 255);
  FastLED.show();
  delay(500);
  leds[5] = CRGB(150, 0, 255);
  FastLED.show();
  delay(500);
  leds[9] = CRGB(255, 200, 20);
  FastLED.show();
  delay(500);
  leds[14] = CRGB(85, 60, 180);
  FastLED.show();
  delay(500);
  leds[19] = CRGB(50, 255, 20);
  FastLED.show();
  delay(500);
}

Beschreibung: Zuerst binden wir die FastLED-Bibliothek ein, definieren den Pin, an den die LED-Streifen-Daten angeschlossen sind, definieren die Anzahl der LEDs sowie ein Array vom Typ CRGB. Dieser Typ enthält die LEDs mit drei Ein-Byte-Datenmitgliedern für jeden der drei Rot-, Grün- und Blau-Farbkanäle.

Im Setup müssen wir nur FastLED mit den oben definierten Parametern initialisieren. Im Haupt-Loop können wir unsere LEDs beliebig steuern. Mit der CRGB-Funktion können wir jede LED auf jede Farbe mit drei Parametern für Rot, Grün und Blau setzen. Damit die Änderung auf den LEDs wirksam wird, müssen wir die Funktion FastLED.show() aufrufen.

Beispiel 2

Mit einigen „for“-Schleifen können wir einfach Animationen erstellen.

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

Hier ist der Arduino-Quellcode für das zweite Beispiel:

#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 20
CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}

void loop() {
  for (int i = 0; i <= 19; i++) {
    leds[i] = CRGB(0, 0, 255);
    FastLED.show();
    delay(40);
  }
  for (int i = 19; i >= 0; i--) {
    leds[i] = CRGB(255, 0, 0);
    FastLED.show();
    delay(40);
  }
}

Hier beleuchtet die erste „for“-Schleife alle 20 LEDs in Blau, von der ersten zur letzten LED mit 40 Millisekunden Verzögerung. Die nächste „for“-Schleife beleuchtet wieder alle 20 LEDs, aber diesmal in Rot und in umgekehrter Reihenfolge, von der letzten zur ersten LED.

Die FastLED-Bibliothek bietet viele weitere Funktionen, die für wirklich interessante Animationen und Lightshows verwendet werden können – Ihrer Fantasie sind keine Grenzen gesetzt, um Ihr nächstes LED-Projekt zum Leuchten zu bringen.

Interaktiver LED-Couchtisch mit WS2812B LEDs

Sehen wir uns nun das DIY interaktive LED-Couchtisch-Projekt an, das ich am Anfang erwähnt habe. Dies war eine Zusammenarbeit zwischen mir und Marija von Creativity Hero.

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

Sie können ihren Website-Artikel überprüfen, in dem sie den gesamten Prozess der Tischherstellung erklärt – vom Zuschneiden und Zusammenbau der Holzkonstruktion bis zum Löten und Verbinden aller Elektronikteile. Hier erkläre ich, wie der Elektronikteil funktioniert, wie man die benutzerdefinierte Android-Anwendung erstellt und das Arduino-Board programmiert.

Hier ist der vollständige Schaltplan dieses Projekts.

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

Der Tisch besteht aus 45 ansteuerbaren LEDs, 45 Infrarot-Näherungssensoren und einem HC-05 Bluetooth-Modul, alle verbunden mit einem Arduino Mega Board. Der Schaltkreis wird mit einem 5V 6A Netzteil versorgt.

Sie erhalten die für dieses Beispiel benötigten Komponenten über die Links unten:

  • WS2812B LED Streifen
  • IR Näherungssensor
  • HC-05 Bluetooth Modul
  • Arduino Board
  • 5V 6A DC Netzteil

Related: How to use a RGB LED with Arduino | Tutorial

Quellcodes

Hier ist der Arduino-Code für dieses Projekt. Wenn wir die Bluetooth-Farbsteuerungsfunktion ausklammern, ist der Code eigentlich sehr einfach.

#include "FastLED.h"
#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(brightness); // Set the 45 proximity sensors pins as inputs, from digital pin 3 to pin 48
  for (int pinNo = 0 + 3; pinNo <= 45 + 3; pinNo++) {
    pinMode(pinNo, INPUT);
  }
}

void loop() {
  for (int pinNo = 0; pinNo <= NUM_LEDS-1; pinNo++) {
    leds[pinNo] = CRGB(0, 255, 0); // Set all 45 LEDs to green color
    // If an object is detected on top of the particular sensor, turn on the particular led
    if (digitalRead(pinNo + 3) == LOW) {
      leds[pinNo] = CRGB(0, 0, 255); // Set the reactive LED to blue
    }
  }
  FastLED.show(); // Update the LEDs
  delay(20);
}

Beschreibung: Zuerst definieren wir die grundlegenden Parameter wie zuvor erklärt und setzen die 45 Näherungssensor-Pins als Eingänge.

Im Haupt-Loop setzen wir mit einer einzelnen „for“-Schleife alle LEDs auf eine bestimmte Farbe und prüfen gleichzeitig, ob der Näherungssensor ein Objekt erkannt hat. Wenn das der Fall ist (LOW-Logikpegel in diesem Fall), wird die jeweilige Reaktionsfarbe auf die jeweilige LED gesetzt. Am Ende aktualisieren wir mit der FastLED.show()-Funktion die LED-Farben.

Für die Einbindung der Bluetooth-Farbsteuerungsfunktion müssen wir einige weitere Codezeilen hinzufügen sowie die Android-App erstellen. Ich habe bereits separate Tutorials zur Verwendung des HC-05 Bluetooth-Moduls mit Arduino und zur Erstellung einer eigenen Android-Anwendung mit dem MIT App Inventor Online-Tool – Sie können diese für weitere Details überprüfen.

So funktioniert die Android-App: Sie besteht aus einer Farbpalette, von der wir Farben auswählen können, zwei Kontrollkästchen, um auszuwählen, ob die gewählte Farbe auf die reaktiven oder die Hintergrund-LEDs angewendet wird, und einem Schieberegler zur Helligkeitseinstellung.

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

Schauen wir uns die Blöcke der App an: Wenn wir den Canvas berühren, auf dem das Farbpalette-Bild platziert ist, erhalten wir mit den .GetPixelColor-Blöcken die Rot-, Grün- und Blau-Werte der ausgewählten Farbe und senden diese Informationen über den Bluetooth SendText-Block als Text an den Arduino.

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

Je nach ausgewähltem Kontrollkästchen senden wir ein anderes erstes Zeichen (Marker), das beim Empfang des Textes am Arduino hilft. Dasselbe passiert, wenn wir die Position des Schiebereglers ändern: Ein Wert von 10 bis 100 wird als Text an den Arduino gesendet, mit dem Marker „3“ davor.

Sie können die Android-App unten herunterladen, sowie die MIT App Inventor Projektdatei:

WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

DIY_Reactive_LED_Table_Control

1 file(s) 0.00 KB Download WS2812B LED Steuerung mit Arduino meistern – Schritt-für-Schritt-Anleitung

DIY_Reactive_LED_Table_Control MIT App Inventor Project File

1 file(s) 208.06 KB Download

Arduino Code mit Bluetooth

#include <SoftwareSerial.h>
#include "FastLED.h"
#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
SoftwareSerial Bluetooth(53, 52); // Arduino(RX, TX) - Bluetooth (TX, RX)
// Initial background color
int backR = 100;
int backG = 50;
int backB = 10;
// Initial reactive color
int reactiveR = 10;
int reactiveG = 50;
int reactiveB = 100;
int brightness = 50; // Initial brightness
String dataIn = "";

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(brightness);
  Serial.begin(38400);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module
  for (int pinNo = 0 + 3; pinNo <= 45 + 3; pinNo++) {
    pinMode(pinNo, INPUT);
  }
}

void loop() {
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.readString();
    delay(20);
    if (dataIn.startsWith("1")) {
      delay(10);
      String stringR = dataIn.substring(dataIn.indexOf("R") + 1, dataIn.indexOf("G"));
      reactiveR = stringR.toInt();
      String stringG = dataIn.substring(dataIn.indexOf("G") + 1, dataIn.indexOf("B"));
      reactiveG = stringG.toInt();
      String stringB = dataIn.substring(dataIn.indexOf("B") + 1, dataIn.indexOf("E"));
      reactiveB = stringB.toInt();
    }
    else if (dataIn.startsWith("2")) {
      String stringR = dataIn.substring(dataIn.indexOf("R") + 1, dataIn.indexOf("G"));
      backR = stringR.toInt();
      String stringG = dataIn.substring(dataIn.indexOf("G") + 1, dataIn.indexOf("B"));
      backG = stringG.toInt();
      String stringB = dataIn.substring(dataIn.indexOf("B") + 1, dataIn.indexOf("E"));
      backB = stringB.toInt();
    }
    else if (dataIn.startsWith("3")) {
      String stringBrightness = dataIn.substring(dataIn.indexOf("3") + 1, dataIn.length());
      brightness = stringBrightness.toInt();
      FastLED.setBrightness(brightness);
    }
  }
  for (int pinNo = 0; pinNo <= NUM_LEDS-1; pinNo++) {
    leds[pinNo] = CRGB(backR, backG, backB);
    if (digitalRead(pinNo + 3) == LOW) {
      leds[pinNo] = CRGB(reactiveR, reactiveG, reactiveB);
    }
  }
  FastLED.show();
  delay(20);
}

Beschreibung: Zuerst definieren wir die serielle Kommunikation zwischen dem Arduino und dem HC-05 Bluetooth-Modul – also die Pins, an die das Modul angeschlossen ist. Im Setup setzen wir die Baudrate, mit der dieses Modul arbeitet. Im Haupt-Loop prüfen wir mit der Bluetooth.available()-Funktion, ob eingehende Daten vom Smartphone vorliegen. Falls ja, empfangen wir die Daten als String mit der Bluetooth.readString()-Funktion. Dann prüfen wir mit der .startsWith()-Funktion das erste Zeichen (den Marker) und wissen so, ob wir die reaktive Farbe, den Hintergrund oder die Helligkeit ändern wollen.

Mit der .substring()-Funktion extrahieren wir die Rot-, Grün- und Blau-Werte aus dem empfangenen Text und wandeln sie in Integer um. Diese Werte werden dann in der unten stehenden „for“-Schleife verwendet, die die Farbe setzt und die LEDs wie zuvor erklärt aufleuchten lässt. Auf die gleiche Weise passen wir die Helligkeit der LEDs an.

Das war alles für dieses Tutorial. Stellen Sie gerne Fragen im Kommentarbereich unten.

Herstellungsprozess

  1. Universelle IR-Fernbedienung mit Arduino bauen: Schritt-für-Schritt-Anleitung
  2. Universelle Android-Fernbedienung mit Arduino, 1Sheeld & IR-Steuerung
  3. Arduino Power Control Center: N-FET, P-FET, Relais & RTC Kit
  4. Fernsteuerung eines Roboterarms per IoT: Eigenbau mit Arduino MKR1000
  5. LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
  6. Arduino Rover per Firmata & Xbox One Gamepad steuern
  7. Erdmassen-Messung mit Arduino: Schritt-für-Schritt DIY-Anleitung
  8. Intelligenten Arduino-Vierbeiner-Roboter bauen: Schritt-für-Schritt-Anleitung
  9. Stufenlose LED-Helligkeitssteuerung mit Bolt IoT und Arduino UNO
  10. Digitaler Kompass in Echtzeit mit Arduino & Processing bauen