Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Como controlar LEDs endereçáveis ​​individualmente WS2812B usando Arduino


Neste tutorial vamos aprender como controlar LEDs RGB endereçáveis ​​individualmente ou uma fita de LED WS2812B usando Arduino. Você pode assistir ao vídeo a seguir ou ler o tutorial escrito abaixo para obter mais detalhes.

Visão geral


Primeiro, explicaremos o princípio de funcionamento através de alguns exemplos básicos e, em seguida, daremos uma olhada no projeto Arduino muito legal usando esses LEDs, uma mesa de centro LED interativa DIY. A mesa de centro possui LEDs WS2812B, sensores de proximidade infravermelhos para detectar objetos e um módulo Bluetooth HC-05 para controlar as cores por meio de um aplicativo Android personalizado. Este projeto é na verdade uma colaboração entre mim e Marija do canal Creativity Hero no YouTube.

Como funcionam os LEDs WS2812B


Vamos começar dando uma olhada mais de perto na faixa de LED. Consiste em LEDs RGB do tipo 5050 nos quais o IC driver de LED WS2812B muito compacto está integrado.

Dependendo da intensidade dos três LEDs individuais vermelho, verde e azul, podemos simular qualquer cor que desejarmos.

O que é ótimo sobre esses LEDs é que podemos controlar até mesmo toda a faixa de LED com apenas um único pino da nossa placa Arduino. Cada LED possui três conectores em cada extremidade, dois para alimentação e um para dados. A seta indica a direção do fluxo de dados. O pad de saída de dados do LED anterior é conectado ao pad de entrada de dados do próximo LED. Podemos cortar a tira no tamanho que quisermos, além de distanciar os LEDs usando alguns fios.

Quanto à alimentação, eles funcionam em 5V e cada LED vermelho, verde e azul consome cerca de 20mA, ou seja, um total de 60mA para cada LED com brilho total. Observe que quando o Arduino é alimentado via USB, o pino de 5V pode lidar com apenas cerca de 400 mA e, quando alimentado usando o conector de alimentação barril, o pino de 5V pode lidar com cerca de 900 mA.

Se você estiver usando mais LEDs e a quantidade de corrente que eles consumirão exceder os limites mencionados acima, você deve usar uma fonte de alimentação separada de 5V. Nesse caso, você também precisa conectar as duas linhas de aterramento entre si. Além disso, é recomendável usar um resistor de cerca de 330 Ohms entre o Arduino e o pino de dados da tira de LED para reduzir o ruído nessa linha, bem como um capacitor de cerca de 100uF nos 5V e no terra para suavizar a fonte de alimentação .

Exemplos de LEDs do Arduino e WS2812B

Exemplo 1


Agora como exemplo usarei 20 LEDs de longa tira, conectados ao Arduino através de um resistor de 330 Ohms e alimentados com uma fonte de alimentação separada de 5V, conforme explicado acima. Para a programação do Arduino, utilizaremos a biblioteca FastLED. Esta é uma biblioteca excelente e bem documentada que permite o controle fácil dos LEDs WS2812B.

Você pode obter os componentes necessários para este exemplo nos links abaixo:
  • Fita de LED WS2812B  ………………….. 
  • Placa Arduino ………………………………
  • Fonte de alimentação CC de 5V 6A ……………… 

Aqui está o código-fonte do Arduino para o primeiro exemplo:
#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)

Descrição:  Então, primeiro precisamos incluir a biblioteca FastLED, definir o pino ao qual os dados da faixa de LED estão conectados, definir o número de LEDs, bem como definir um array do tipo CRGB. Este tipo contém os LEDs, com três membros de dados de um byte para cada um dos três canais de cores Vermelho, Verde e Azul.

Na seção de configuração, precisamos apenas inicializar o FastLED com os parâmetros definidos acima. Agora no loop principal podemos controlar nossos LEDs da maneira que quisermos. Usando a função CRGB, podemos definir qualquer LED para qualquer cor usando três parâmetros de cor vermelha, verde e azul. Para que a mudança aconteça nos LEDs, precisamos chamar a função FastLED.show().

Exemplo 2


Usando alguns loops “for” podemos facilmente fazer algumas animações.

Aqui está o código-fonte do Arduino para o segundo exemplo:
#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)

Aqui o primeiro loop “for” acende todos os 20 LEDs em azul, do primeiro ao último LED com atraso de 40 milissegundos. O próximo loop “for” acende novamente todos os 20 LEDs, mas desta vez na cor vermelha e na ordem inversa, do último para o primeiro LED.

A biblioteca FastLED possui muitas outras funções que podem ser usadas para criar animações e shows de luzes realmente interessantes, então cabe apenas à sua imaginação fazer seu próximo projeto de LED brilhar.

Mesa de centro de LED interativa usando os LEDs WS2812B


Agora vamos dar uma olhada no projeto de mesa de centro LED interativa DIY que mencionei no início. Então este foi um projeto de colaboração entre mim e Marija do Creativity Hero.

Você pode conferir o artigo no site dela, onde ela explica todo o processo de fabricação da mesa, desde o corte e montagem da construção de madeira, até a soldagem e a conexão de todas as peças eletrônicas. Aqui vou explicar como funciona a parte eletrônica, como construir o aplicativo Android personalizado e programar a placa Arduino.

Aqui está o esquema completo do circuito deste projeto.

Assim, a mesa é composta por 45 LEDs endereçáveis, 45 sensores infravermelhos de proximidade e um módulo Bluetooth HC-05, todos conectados a uma placa Arduino Mega. O circuito é alimentado com uma fonte de alimentação de 5V 6A.

Você pode obter os componentes necessários para este exemplo nos links abaixo:
  • Fita de LED WS2812B  ………………….. 
  • Sensor de proximidade IV …………………… 
  • Módulo Bluetooth HC-05 …….…… 
  • Placa Arduino ………………………………
  • Fonte de alimentação CC de 5V 6A ……………… 

Relacionado: Como usar um LED RGB com Arduino | Tutorial

Códigos-fonte


Aqui está o código do Arduino para este projeto e se excluirmos o recurso de controle de cores Bluetooth, podemos notar que o código é realmente muito simples.
#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)

Descrição: Primeiro precisamos definir os parâmetros básicos como explicado anteriormente e definir os 45 pinos dos sensores de proximidade como entradas.

No loop principal, usando um único loop “for”, configuramos todos os LEDs para uma cor específica e também verificamos se o sensor de proximidade detectou um objeto. Se isso for verdade, ou um estado lógico BAIXO neste caso, a cor reativa específica será definida para o LED específico. Ao final usando a função FastLED.show() atualizamos as cores dos LEDs.

Para incluir o recurso de controle de cores Bluetooth, precisamos adicionar mais algumas linhas de código e criar o aplicativo Android. Já tenho tutoriais separados sobre como usar o módulo Bluetooth HC-05 com Arduino e como fazer seu próprio aplicativo Android usando o aplicativo online MIT App Inventor, para que você possa sempre consultá-los para obter mais detalhes.

Veja como o aplicativo Android funciona. Consiste em uma imagem de paleta de cores de onde podemos pegar cores, dois botões de seleção de onde podemos selecionar se a cor escolhida será aplicada aos LEDs reativos ou de fundo e um controle deslizante para ajustar o brilho.

Se dermos uma olhada nos blocos do aplicativo, podemos ver o que acontece quando tocamos a tela onde a imagem da paleta de cores é colocada. Usando os blocos .GetPixelColor obtemos os valores Red, Green e Blue para a cor captada e usando o bloco Bluetooth SendText enviamos esta informação para o Arduino em forma de texto.

Dependendo da caixa de seleção selecionada, enviamos um primeiro caractere ou marcador diferente que ajuda na hora de receber o texto no Arduino. O mesmo acontece quando mudamos a posição do slider, um valor de 10 a 100 é enviado ao Arduino em forma de texto, com o marcador “3” na frente.

Você pode baixar o aplicativo Android abaixo, bem como o arquivo de projeto do MIT App Inventor:

DIY_Reactive_LED_Table_Control

1 arquivo(s) Download de 0,00 KB

DIY_Reactive_LED_Table_Control MIT App Inventor Arquivo de projeto

1 arquivo(s) Download de 208,06 KB
Segue o código do Arduino:
#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)

Descrição: Primeiramente precisamos definir a comunicação serial entre o Arduino e o módulo Bluetooth HC-05, ou os pinos aos quais o módulo está conectado. Na seção de configuração, precisamos definir a taxa de transmissão em que este módulo funciona. Em seguida, no loop principal, usando a função Bluetooth.available(), verificamos se há dados de entrada do Smartphone. Se for verdade, usando a função Bluetooth.readString() recebemos os dados como string. Em seguida, usando a função .startsWith() verificamos o primeiro caractere ou o marcador e dessa forma sabemos se queremos alterar a cor reativa, o fundo ou o brilho.

Usando a função .substring() extraímos os valores Red, Green e Blue do texto recebido e os convertemos em inteiros. Esses valores são então usados ​​no loop “for” abaixo, que define a cor e acende os LEDs, conforme explicado anteriormente. Da mesma forma, ajustamos o brilho dos LEDs.

Então isso é tudo para este tutorial. Sinta-se à vontade para fazer qualquer pergunta na seção de comentários abaixo.

Processo de manufatura

  1. Como hackear IR Remotes
  2. Controle remoto universal usando Arduino, 1Sheeld e Android
  3. Arduino Control Center
  4. Usando IoT para controlar remotamente um braço robótico
  5. Arduino com Bluetooth para controlar um LED!
  6. Controle o Arduino Rover usando Firmata e o controlador do Xbox One
  7. Como medir a massa da Terra usando o Arduino
  8. Arduino Quadruped
  9. Controle de brilho do LED usando Bolt e Arduino
  10. Como fazer uma bússola usando Arduino e IDE de processamento