Como conectar a faixa de LED endereçável WS2812B ao Arduino
O desenvolvimento da tecnologia de iluminação baseada em LEDs continua rapidamente. Ainda ontem, fitas RGB controladas por controlador, cujo brilho e cor podem ser ajustados usando um controle remoto, pareciam um milagre. Hoje, surgiram no mercado lâmpadas com ainda mais recursos.
Fita de LED baseada em WS2812B
A diferença entre a faixa de LED endereçável e a padrão RGB coisa é brilho e proporção de cor de cada elemento são ajustados separadamente. Isso permite que você obtenha efeitos de iluminação que são fundamentalmente inacessíveis a outros tipos de dispositivos de iluminação. O brilho da faixa de LED endereçável é controlado de maneira conhecida - usando modulação de largura de pulso. Uma característica do sistema é equipar cada LED com seu próprio controlador PWM. O chip WS2812B é um diodo emissor de luz tricolor e um circuito de controle combinados em um único pacote.

Os elementos são combinados em uma fita de energia em paralelo e são controlados por meio de um barramento serial - a saída do primeiro elemento é conectada à entrada de controle do segundo, etc. Na maioria dos casos, os barramentos seriais são construídos em duas linhas, uma das quais transmite estroboscópios (pulsos de clock) e a outra - dados.

O barramento de controle do chip WS2812B consiste em uma linha - os dados são transmitidos por ela. Os dados são codificados como pulsos de frequência constante, mas com diferentes ciclos de trabalho. Um pulso - um bit. A duração de cada bit é de 1,25 µs, o bit zero consiste em um nível alto com duração de 0,4 µs e um nível baixo de 0,85 µs. A unidade parece um nível alto para 0,8 µs e um nível baixo para 0,45 µs. Uma rajada de 24 bits (3 bytes) é enviada para cada LED, seguida por uma pausa de baixo nível de 50 µs. Isso significa que os dados serão transmitidos para o próximo LED e assim por diante para todos os elementos da cadeia. A transferência de dados termina com uma pausa de 100 µs. Isso indica que o ciclo de programação da fita está completo e o próximo conjunto de pacotes de dados pode ser enviado.

Tal protocolo permite passar com uma linha para transmissão de dados, mas requer precisão na manutenção dos intervalos de tempo. A discrepância é permitida não mais que 150 ns. Além disso, a imunidade a ruído de tal barramento é muito baixa. Qualquer interferência de amplitude suficiente pode ser percebida pelo controlador como dados. Isso impõe restrições no comprimento dos condutores do circuito de controle. Por outro lado, isso possibilita verificação de integridade da fita sem dispositivos adicionais.Se você aplicar energia à lâmpada e tocar o teclado de contato do barramento de controle com o dedo, alguns LEDs podem acender e apagar aleatoriamente.
Especificações dos elementos WS2812B
Para criar sistemas de iluminação baseados em uma fita de endereço, você precisa conhecer os parâmetros importantes dos elementos emissores de luz.
| Dimensões do LED | 5x5mm |
| Frequência de modulação PWM | 400Hz |
| Consumo de corrente com brilho máximo | 60 mA por célula |
| Tensão de alimentação | 5 volts |
Arduino e WS2812B
A plataforma Arduino, popular no mundo, permite criar sketches (programas) para gerenciamento de fitas de endereços. As capacidades do sistema são amplas o suficiente, mas se não forem mais suficientes em algum nível, as habilidades adquiridas serão suficientes para mudar sem dor para C++ ou mesmo para assembler. Embora o conhecimento inicial seja mais fácil de obter no Arduino.
Conectando a fita WS2812B ao Arduino Uno (Nano)
Na primeira etapa, placas simples Arduino Uno ou Arduino Nano são suficientes. No futuro, placas mais complexas poderão ser usadas para construir sistemas mais complexos. Ao conectar fisicamente a faixa de LED endereçável à placa Arduino, várias condições devem ser observadas:
- devido à baixa imunidade a ruídos, os condutores de conexão da linha de dados devem ser o mais curtos possível (você deve tentar fazê-los dentro de 10 cm);
- você precisa conectar o condutor de dados à saída digital livre da placa Arduino - ela será especificada programaticamente;
- devido ao alto consumo de energia, não é necessário alimentar a fita da placa - fontes de alimentação separadas são fornecidas para esse fim.
O fio de alimentação comum da lâmpada e do Arduino deve estar conectado.

Noções básicas de controle de programa WS2812B
Já foi mencionado que para controlar os microcircuitos WS2812B é necessário gerar pulsos com um determinado comprimento, mantendo alta precisão. Existem comandos na linguagem Arduino para a formação de pulsos curtos delayMicrosegundos e micro. O problema é que a resolução desses comandos é de 4 microssegundos. Ou seja, não funcionará para formar atrasos de tempo com uma determinada precisão. É necessário mudar para as ferramentas C++ ou Assembler. E você pode organizar o controle da faixa de LED endereçável através do Arduino utilizando bibliotecas especialmente criadas para isso. Você pode começar a se familiarizar com o programa Blink, que faz os elementos emissores de luz piscarem.
rápido conduzido
Esta biblioteca é universal. Além da fita de endereço, ele suporta uma variedade de dispositivos, incluindo fitas controladas pela interface SPI. Tem amplas possibilidades.
Primeiro, a biblioteca deve ser incluída. Isso é feito antes do bloco de configuração, e a linha se parece com isso:
#include <FastLED.h>
O próximo passo é criar um array para armazenar as cores de cada diodo emissor de luz. Ele terá a faixa de nome e dimensão 15 - pelo número de elementos (é melhor atribuir uma constante a esse parâmetro).
Tira CRGB[15]
No bloco de configuração, você precisa especificar com qual fita o sketch irá trabalhar:
void configuração() {
FastLED.addLeds< WS2812B, 7, RGB>(faixa, 15);
intg;
}
O parâmetro RGB define a ordem da sequência de cores, 15 significa o número de LEDs, 7 é o número da saída atribuída para controle (também é melhor atribuir uma constante ao último parâmetro).
O bloco de loop começa com um loop que grava sequencialmente em cada seção da matriz Red (brilho vermelho):
para (g=0; g< 15; g++)
{tira[g]=CRGB::Vermelho;}
Em seguida, o array formado é enviado para a lâmpada:
FastLED.show();
Atraso 1000 milissegundos (segundo):
atraso(1000);
Então você pode desligar todos os elementos da mesma maneira escrevendo preto neles.
for (int g=0; g< 15; g++)
{tira[g]=CRGB::Preto;}
FastLED.show();
atraso(1000);

Depois de compilar e carregar o esboço, a fita piscará com um período de 2 segundos. Se você precisar gerenciar cada componente de cor separadamente, em vez da linha {tira[g]=CRGB::Vermelho;} várias linhas são usadas:
{
tira[g].r=100;// definir o nível de brilho do elemento vermelho
tira[g].g=11;// o mesmo para verde
tira[g].b=250;// o mesmo para azul
}
NeoPixelName
Esta biblioteca só funciona com anéis de LED NeoPixel Ring, mas consome menos recursos e contém apenas o essencial. Na linguagem Arduino, o programa fica assim:
#include <Adafruit_NeoPixel.h>
Como no caso anterior, a biblioteca é conectada e o objeto lenta é declarado:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// onde 15 é o número de elementos e 6 é a saída atribuída
No bloco de configuração, a fita é inicializada:
void configuração() {
lenta.begin()
}
No bloco de loop, todos os elementos são destacados em vermelho, a variável é passada para o feed e é criado um atraso de 1 segundo:
for (int y=0; y<15; y++)// 15 - o número de elementos na lâmpada
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
fita.show();
atraso(1000);
O brilho pára com um registro preto:
for (int y=0; y< 15; y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
fita.show();
atraso(1000);

Tutorial em vídeo: Amostras de efeitos visuais usando fitas de endereço.
Depois de aprender a piscar os LEDs, você pode continuar aprendendo a criar efeitos de cores, incluindo os populares Rainbow e Aurora Borealis com transições suaves. Os LEDs endereçáveis WS2812B e Arduino oferecem possibilidades quase ilimitadas para isso.
