Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Hoe WS2812B individueel adresseerbare LED's te bedienen met behulp van Arduino

In deze tutorial leren we hoe je individueel adresseerbare RGB-LED's of een WS2812B LED-strip kunt besturen met behulp van Arduino. Je kunt de volgende video bekijken of de schriftelijke tutorial hieronder lezen voor meer details.

Overzicht

Eerst zullen we het werkingsprincipe uitleggen aan de hand van enkele basisvoorbeelden en dan een kijkje nemen in het echt coole Arduino Project met behulp van deze LED's, een doe-het-zelf interactieve LED-salontafel. De salontafel is voorzien van WS2812B LED's, infrarood naderingssensoren voor het detecteren van objecten en een HC-05 Bluetooth-module voor het regelen van de kleuren via een op maat gemaakte Android-app. Dit project is eigenlijk een samenwerking tussen mij en Marija van het YouTube-kanaal Creativity Hero.

Hoe WS2812B LED's werken

Laten we beginnen met de ledstrip eens nader te bekijken. Het bestaat uit type 5050 RGB LED's waarin het zeer compacte WS2812B LED driver IC is geïntegreerd.

Afhankelijk van de intensiteit van de drie afzonderlijke rode, groene en blauwe LED's kunnen we elke gewenste kleur simuleren.

Het mooie van deze LED's is dat we zelfs de hele LED-strip kunnen bedienen met slechts een enkele pin van ons Arduino-bord. Elke LED heeft drie connectoren aan elk uiteinde, twee voor de voeding en één voor de data. De pijl geeft de richting van de gegevensstroom aan. Het gegevensuitgangspad van de vorige LED is verbonden met het gegevensinvoerpad van de volgende LED. We kunnen de strip op elke gewenste maat knippen en de LED's op afstand houden met behulp van enkele draden.

Wat betreft de voeding, ze werken op 5V en elke rode, groene en blauwe LED trekt ongeveer 20mA, of dat is in totaal 60mA voor elke LED op volledige helderheid. Merk op dat wanneer de Arduino wordt gevoed via de USB, de 5V-pin slechts ongeveer 400 mA aankan, en wanneer gevoed via de barrel-voedingsconnector, kan de 5V-pin ongeveer 900 mA aan.

Als u meer LED's gebruikt en de hoeveelheid stroom die ze zouden trekken de bovengenoemde limieten overschrijdt, moet u een aparte 5V-voeding gebruiken. In zo'n geval moet je ook de twee Ground-lijnen twee met elkaar verbinden. Daarnaast wordt aanbevolen om een ​​weerstand van ongeveer 330 Ohm te gebruiken tussen de Arduino en de datapin van de LED-strip om de ruis op die lijn te verminderen, evenals een condensator van ongeveer 100uF over de 5V en aarde om de voeding glad te strijken .

Arduino en WS2812B LED's Voorbeelden

Voorbeeld 1

Als voorbeeld zal ik 20 LED's lange strip gebruiken, aangesloten op de Arduino via een weerstand van 330 Ohm en gevoed met een aparte 5V-voeding, net zoals hierboven uitgelegd. Voor het programmeren van de Arduino gebruiken we de FastLED-bibliotheek. Dit is een uitstekende en goed gedocumenteerde bibliotheek die eenvoudige bediening van de WS2812B LED's mogelijk maakt.

U kunt de benodigde componenten voor dit voorbeeld vinden via de onderstaande links:

  • WS2812B LED-strip  ………………….. 
  • Arduino-bord …………………………
  • 5V 6A DC-voeding ……………… 

Hier is de Arduino-broncode voor het eerste voorbeeld:

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

Beschrijving:  Dus eerst moeten we de FastLED-bibliotheek opnemen, de pin definiëren waarop de LED-stripgegevens zijn aangesloten, het aantal LED's definiëren en een array van het type CRGB definiëren. Dit type bevat de LED's, met drie dataleden van één byte voor elk van de drie rode, groene en blauwe kleurkanalen.

In de setup-sectie hoeven we alleen de FastLED te initialiseren met de parameters die hierboven zijn gedefinieerd. Nu het de hoofdlus is, kunnen we onze LED's bedienen hoe we maar willen. Met behulp van de CRGB-functie kunnen we elke LED op elke kleur instellen met behulp van drie parameters:rood, groen en blauw. Om de wijziging op de LED's door te voeren, moeten we de functie FastLED.show() aanroepen.

Voorbeeld 2

Met behulp van enkele "for"-loops kunnen we gemakkelijk enkele animaties maken.

Hier is de Arduino-broncode voor het tweede voorbeeld:

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

Hier licht de eerste "for"-lus alle 20 LED's blauw op, van de eerste tot de laatste LED met een vertraging van 40 milliseconden. De volgende "for"-lus brandt opnieuw alle 20 LED's, maar deze keer in rode kleur en in omgekeerde volgorde, van de laatste tot de eerste LED.

De FastLED-bibliotheek beschikt over vele andere functies die kunnen worden gebruikt voor het maken van echt interessante animaties en lichtshows, dus het is alleen aan uw verbeelding om uw volgende LED-project te laten schitteren.

Interactieve LED-salontafel met de WS2812B LED's

Laten we nu eens kijken naar het doe-het-zelf interactieve LED-salontafelproject dat ik in het begin noemde. Dit was dus een samenwerkingsproject tussen met mij en Marija van Creativity Hero.

Je kunt haar website-artikel bekijken waar ze het hele proces van het maken van de tafel uitlegt, van het snijden en monteren van de houten constructie tot het solderen en verbinden van alle elektronische onderdelen. Hier zal ik uitleggen hoe het elektronicagedeelte werkt, hoe de aangepaste Android-applicatie te bouwen en het Arduino-bord te programmeren.

Hier is het volledige schakelschema van dit project.

De tafel bestaat dus uit 45 adresseerbare LED's, 45 infrarood naderingssensoren en een HC-05 Bluetooth-module, allemaal verbonden met een Arduino Mega-bord. Het circuit wordt gevoed met een 5V 6A voeding.

U kunt de benodigde componenten voor dit voorbeeld vinden via de onderstaande links:

  • WS2812B LED-strip  ………………….. 
  • IR-nabijheidssensor ………………… 
  • HC-05 Bluetooth-module …….…… 
  • Arduino-bord …………………………
  • 5V 6A DC-voeding ……………… 

Gerelateerd: Een RGB-led gebruiken met Arduino | Zelfstudie

Broncodes

Hier is de Arduino-code voor dit project en als we de Bluetooth-kleurcontrolefunctie uitsluiten, kunnen we zien dat de code eigenlijk heel eenvoudig is.

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

Beschrijving: Eerst moeten we de basisparameters definiëren zoals eerder uitgelegd en de 45 pinnen van de naderingssensoren als invoer instellen.

In de hoofdlus stellen we met een enkele "voor"-lus alle LED's in op een bepaalde kleur en controleren ook of de naderingssensor een object heeft gedetecteerd. Als dat waar is, of in dit geval een LAGE logische status, wordt de specifieke reactieve kleur ingesteld op de specifieke LED. Aan het einde gebruiken we de functie FastLED.show() om de kleuren van de LED's bij te werken.

Om de Bluetooth-kleurcontrolefunctie op te nemen, moeten we wat meer regels code toevoegen en de Android-app maken. Ik heb al aparte tutorials over het gebruik van de HC-05 Bluetooth-module met Arduino en hoe je je eigen Android-applicatie kunt maken met de MIT App Inventor online applicatie, dus je kunt ze altijd raadplegen voor meer details.

Zo werkt de Android-app. Het bestaat uit een kleurenpaletafbeelding van waaruit we kleuren kunnen oppikken, twee controleknoppen van waaruit we kunnen selecteren of de gekozen kleur wordt toegepast op de reactieve of de achtergrond-LED's en een schuifregelaar voor het aanpassen van de helderheid.

Als we blokken van de app bekijken, kunnen we zien wat er gebeurt als we het canvas aanraken waar de afbeelding van het kleurenpalet is geplaatst. Met behulp van de .GetPixelColor-blokken krijgen we de rode, groene en blauwe waarden voor de opgepikte kleur en met behulp van het Bluetooth SendText-blok sturen we deze informatie naar de Arduino in de vorm van tekst.

Afhankelijk van het geselecteerde selectievakje, sturen we een ander eerste teken of markering die helpt bij het ontvangen van de tekst op de Arduino. Hetzelfde gebeurt wanneer we de positie van de schuifregelaar wijzigen, een waarde van 10 tot 100 wordt in de vorm van tekst naar de Arduino gestuurd, met de markering "3" ervoor.

U kunt de Android-app hieronder downloaden, evenals het MIT App Inventor-projectbestand:

DIY_Reactive_LED_Table_Control

1 bestand(en) 0,00 KB downloaden

DIY_Reactive_LED_Table_Control MIT App Inventor-projectbestand

1 bestand(en) 208,06 KB downloaden

Hier is de 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);
}Code language: Arduino (arduino)

Beschrijving: Eerst moeten we de seriële communicatie tussen de Arduino en de HC-05 Bluetooth-module definiëren, of de pinnen waarop de module is aangesloten. In het setup-gedeelte moeten we de baudrate instellen waarop deze module werkt. Vervolgens controleren we in de hoofdlus met behulp van de functie Bluetooth.available() of er inkomende gegevens van de smartphone zijn. Als dat waar is, ontvangen we met de functie Bluetooth.readString() de gegevens als string. Vervolgens controleren we met behulp van de functie .startsWith() het eerste teken of de markering en weten op die manier of we de reactieve kleur, de achtergrond of de helderheid willen wijzigen.

Met de functie .substring() extraheren we de rode, groene en blauwe waarden uit de ontvangen tekst en zetten ze om in gehele getallen. Deze waarden worden vervolgens gebruikt in de "for"-lus hieronder die de kleur instelt en de LED's oplicht, zoals eerder uitgelegd. Op dezelfde manier passen we de helderheid van de LED's aan.

Dus dat is alles voor deze tutorial. Stel gerust een vraag in de opmerkingen hieronder.


Productieproces

  1. IR-afstandsbedieningen hacken
  2. Universele afstandsbediening met Arduino, 1Sheeld en Android
  3. Arduino-controlecentrum
  4. Ioed gebruiken om een ​​robotarm op afstand te bedienen
  5. Arduino met Bluetooth om een ​​LED te bedienen!
  6. Bedien Arduino Rover met Firmata en Xbox One Controller
  7. Hoe de massa van de aarde te meten met Arduino
  8. Arduino Quadruped
  9. LED-helderheid regelen met Bolt en Arduino
  10. Volledige controle over uw tv met Alexa en Arduino IoT Cloud
  11. Hoe maak je een kompas met Arduino en Processing IDE?