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

So steuern Sie individuell adressierbare WS2812B-LEDs mit Arduino

In diesem Tutorial lernen wir, wie man einzeln adressierbare RGB-LEDs oder einen WS2812B-LED-Streifen mit Arduino steuert. Sie können sich das folgende Video ansehen oder das schriftliche Tutorial unten lesen, um weitere Einzelheiten zu erfahren.

Übersicht

Zuerst erklären wir das Funktionsprinzip anhand einiger grundlegender Beispiele und werfen dann einen Blick auf das wirklich coole Arduino-Projekt mit diesen LEDs, einem interaktiven LED-Couchtisch zum Selbermachen. Der Couchtisch verfügt über WS2812B-LEDs, Infrarot-Näherungssensoren zur Erkennung von Objekten und ein HC-05-Bluetooth-Modul zur Steuerung der Farben über eine speziell entwickelte Android-App. Dieses Projekt ist eigentlich eine Zusammenarbeit zwischen mir und Marija vom YouTube-Kanal Creativity Hero.

Wie WS2812B-LEDs funktionieren

Beginnen wir mit einem genaueren Blick auf den LED-Streifen. Es besteht aus RGB-LEDs vom Typ 5050, in denen der sehr kompakte LED-Treiber-IC WS2812B integriert ist.

Abhängig von der Intensität der drei einzelnen roten, grünen und blauen LEDs können wir jede gewünschte Farbe simulieren.

Das Tolle an diesen LEDs ist, dass wir sogar den gesamten LED-Streifen mit nur einem einzigen Pin von unserem Arduino-Board steuern können. Jede LED hat an jedem Ende drei Anschlüsse, zwei für die Stromversorgung und einen für die Daten. Der Pfeil zeigt die Datenflussrichtung an. Das Datenausgangspad der vorherigen LED ist mit dem Dateneingangspad der nächsten LED verbunden. Wir können den Streifen auf jede gewünschte Größe zuschneiden und die LEDs mit einigen Drähten distanzieren.

Was die Stromversorgung betrifft, arbeiten sie mit 5 V und jede rote, grüne und blaue LED zieht etwa 20 mA, oder das sind insgesamt 60 mA für jede LED bei voller Helligkeit. Beachten Sie, dass der 5-V-Pin bei Stromversorgung des Arduino über USB nur etwa 400 mA verarbeiten kann und bei Stromversorgung über den Barrel-Stromanschluss etwa 900 mA verarbeiten kann.

Wenn Sie mehr LEDs verwenden und die Strommenge, die sie ziehen würden, die oben genannten Grenzwerte überschreitet, müssen Sie ein separates 5-V-Netzteil verwenden. In einem solchen Fall müssen Sie auch die beiden Masseleitungen miteinander verbinden. Zusätzlich wird empfohlen, einen Widerstand von etwa 330 Ohm zwischen dem Arduino und dem Datenpin des LED-Streifens zu verwenden, um das Rauschen auf dieser Leitung zu reduzieren, sowie einen Kondensator von etwa 100 uF über 5 V und Masse, um die Stromversorgung zu glätten .

Beispiele für Arduino- und WS2812B-LEDs

Beispiel 1

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

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

  • WS2812B LED-Streifen  ………………….. 
  • Arduino-Board ……………………………
  • 5 V 6 A-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); } Codesprache:Arduino (arduino)

Beschreibung:  Also müssen wir zuerst die FastLED-Bibliothek einbinden, den Pin definieren, mit dem die LED-Streifendaten verbunden sind, die Anzahl der LEDs definieren sowie ein Array vom Typ CRGB definieren. Dieser Typ enthält die LEDs mit drei Ein-Byte-Datenelementen für jeden der drei Farbkanäle Rot, Grün und Blau.

Im Setup-Bereich müssen wir nur die FastLED mit den oben definierten Parametern initialisieren. Jetzt ist es die Hauptschleife, die wir unsere LEDs steuern können, wie wir wollen. Mit der CRGB-Funktion können wir jede LED auf jede Farbe einstellen, indem wir drei Parameter für die Farbe Rot, Grün und Blau verwenden. Um die Änderung an den LEDs vorzunehmen, müssen wir die Funktion FastLED.show() aufrufen.

Beispiel 2

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

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);
  }
} Codesprache:Arduino (arduino) 

Hier lässt die erste „for“-Schleife alle 20 LEDs blau leuchten, von der ersten bis zur letzten LED mit 40 Millisekunden Verzögerung. Die nächste „for“-Schleife lässt wieder alle 20 LEDs leuchten, diesmal jedoch in roter Farbe und in umgekehrter Reihenfolge, von der letzten zur ersten LED.

Die FastLED-Bibliothek bietet viele weitere Funktionen, mit denen Sie wirklich interessante Animationen und Lichtshows erstellen können. Es liegt also nur an Ihrer Fantasie, Ihr nächstes LED-Projekt zum Strahlen zu bringen.

Interaktiver LED-Couchtisch mit den WS2812B-LEDs

Werfen wir nun einen Blick auf das eingangs erwähnte DIY-Projekt für interaktive LED-Couchtische. Das war also ein Gemeinschaftsprojekt zwischen mir und Marija von Creativity Hero.

Sie können ihren Website-Artikel lesen, in dem sie den gesamten Prozess der Herstellung des Tisches erklärt, angefangen vom Schneiden und Zusammenbauen der Holzkonstruktion bis hin zum Löten und Verbinden aller elektronischen Teile. Hier werde ich erklären, wie der Elektronikteil funktioniert, wie die benutzerdefinierte Android-Anwendung erstellt und das Arduino-Board programmiert wird.

Hier ist der vollständige Schaltplan dieses Projekts.

Der Tisch besteht also aus 45 adressierbaren LEDs, 45 Infrarot-Näherungssensoren und einem HC-05-Bluetooth-Modul, die alle mit einem Arduino Mega-Board verbunden sind. Die Schaltung wird mit einem 5V 6A Netzteil betrieben.

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

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

Siehe auch:So verwenden Sie eine RGB-LED mit Arduino | Anleitung

Quellcodes

Hier ist der Arduino-Code für dieses Projekt, und wenn wir die Bluetooth-Farbsteuerungsfunktion ausschließen, können wir feststellen, dass der Code eigentlich sehr einfach ist.

#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 bluee
    }
  }
  FastLED.show(); // Update the LEDs
  delay(20);
} Codesprache:Arduino (arduino) 

Beschreibung: Zuerst müssen wir die grundlegenden Parameter wie zuvor erklärt definieren und die 45 Pins der Näherungssensoren als Eingänge festlegen.

In der Hauptschleife stellen wir mit einer einzigen „for“-Schleife alle LEDs auf eine bestimmte Farbe und prüfen auch, ob der Näherungssensor ein Objekt erkannt hat. Wenn das wahr ist, oder in diesem Fall ein logischer Zustand LOW, wird die bestimmte reaktive Farbe auf die bestimmte LED eingestellt. Am Ende aktualisieren wir mit der Funktion FastLED.show() die Farben der LEDs.

Um die Bluetooth-Farbsteuerungsfunktion einzubeziehen, müssen wir einige weitere Codezeilen hinzufügen und die Android-App erstellen. Ich habe bereits separate Tutorials zur Verwendung des HC-05-Bluetooth-Moduls mit Arduino und zur Erstellung Ihrer eigenen Android-Anwendung mit der Online-Anwendung MIT App Inventor, sodass Sie dort jederzeit nach weiteren Einzelheiten suchen können.

So funktioniert die Android-App. Es besteht aus einem Farbpalettenbild, aus dem wir Farben aufnehmen können, zwei Kontrollkästchen, mit denen wir auswählen können, ob die gewählte Farbe auf die reaktiven oder die Hintergrund-LEDs angewendet wird, und einem Schieberegler zum Anpassen der Helligkeit.

Wenn wir uns die Blöcke der App ansehen, können wir sehen, was passiert, wenn wir die Leinwand berühren, auf der das Farbpalettenbild platziert ist. Mit den .GetPixelColor-Blöcken erhalten wir die Rot-, Grün- und Blauwerte für die aufgenommene Farbe und mit dem Bluetooth-SendText-Block senden wir diese Informationen in Form von Text an den Arduino.

Je nach aktiviertem Kontrollkästchen senden wir einen anderen Anfangsbuchstaben oder Marker, der beim Empfang des Textes am Arduino hilft. Das gleiche passiert, wenn wir die Position des Schiebereglers ändern, ein Wert von 10 bis 100 wird in Form von Text an den Arduino gesendet, mit dem Marker „3“ davor.

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

DIY_Reactive_LED_Table_Control

1 Datei(en) 0,00 KB Herunterladen

DIY_Reactive_LED_Table_Control MIT App Inventor-Projektdatei

1 Datei(en) 208,06 KB Herunterladen

Hier ist der Arduino-Code:

#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);
} Codesprache:Arduino (arduino) 

Beschreibung: Zuerst müssen wir die serielle Kommunikation zwischen dem Arduino und dem HC-05 Bluetooth-Modul oder die Pins definieren, an denen das Modul angeschlossen ist. Im Setup-Bereich müssen wir die Baudrate einstellen, mit der dieses Modul arbeitet. Dann prüfen wir in der Hauptschleife mit der Funktion Bluetooth.available(), ob Daten vom Smartphone eingehen. Wenn das stimmt, erhalten wir mit der Funktion Bluetooth.readString() die Daten als String. Dann prüfen wir mit der Funktion .startsWith() das erste Zeichen oder die Markierung und wissen so, ob wir die reaktive Farbe, den Hintergrund oder die Helligkeit ändern wollen.

Mit der Funktion .substring() extrahieren wir die Rot-, Grün- und Blauwerte aus dem empfangenen Text und wandeln sie in ganze Zahlen um. Diese Werte werden dann in der „for“-Schleife unten verwendet, die die Farbe einstellt und die LEDs wie zuvor erklärt zum Leuchten bringt. Auf die gleiche Weise stellen wir die Helligkeit der LEDs ein.

Das ist also alles für dieses Tutorial. Fühlen Sie sich frei, Fragen im Kommentarbereich unten zu stellen.


Herstellungsprozess

  1. Wie man IR-Fernbedienungen hackt
  2. Universelle Fernbedienung mit Arduino, 1Sheeld und Android
  3. Arduino-Kontrollzentrum
  4. Einsatz des IoT zur Fernsteuerung eines Roboterarms
  5. Arduino mit Bluetooth zur Steuerung einer LED!
  6. Steuern Sie Arduino Rover mit Firmata und Xbox One-Controller
  7. So misst man die Masse der Erde mit Arduino
  8. Arduino-Vierbeiner
  9. Steuerung der LED-Helligkeit mit Bolt und Arduino
  10. So erstellen Sie einen Kompass mit Arduino und Processing IDE