Como ligar uma Fita LED endereçável WS2812B a um Arduino
O desenvolvimento da tecnologia de iluminação baseada em LED continua a um ritmo acelerado. Até ontem, as fitas RGB controladas pelo controlador, cujo brilho e cor podem ser ajustados por controlo remoto, pareciam um milagre. Hoje, existem novas luminárias no mercado com ainda mais possibilidades.
Fita LED baseada no WS2812B
As diferenças entre as tiras de LED endereçáveis e o padrão RGB é a O brilho e a relação de cor de cada elemento é ajustável separadamente. Isto torna possível obter efeitos de iluminação que não estão disponíveis para outros tipos de aparelhos de iluminação. A faixa LED endereçável é controlada de uma forma bem conhecida - por meio da modulação da largura do pulso. Uma característica do sistema é que cada LED está equipado com o seu próprio controlador PWM. O chip WS2812B é um díodo emissor de luz a três cores e um circuito de controlo, combinados num único pacote.
Os elementos são ligados em paralelo à fonte de alimentação e são controlados através de um bus de série - a saída do primeiro elemento é ligada à entrada de controlo do segundo elemento, etc. Na maioria dos casos, os autocarros em série são construídos em duas linhas, uma das quais transmite estroboscópios (impulsos do relógio) e a outra - dados.
O autocarro de controlo do WS2812B é constituído por uma linha - é utilizado para transferir dados. Os dados são codificados como pulsos com uma frequência constante mas com frequências diferentes. Um pulso é um bit.. A duração de cada bit é de 1,25 µs, o bit zero consiste num nível alto de 0,4 µs e um nível baixo de 0,85 µs. A unidade aparece como um nível alto de 0,8µs e um nível baixo de 0,45µs. Um pacote de 24 bits (3 bytes) é enviado para cada LED, seguido de uma pausa como um nível baixo durante 50µs. Isto significa que os dados para o próximo LED serão transmitidos a seguir, e assim por diante para todos os elementos da cadeia. A transferência de dados é terminada por uma pausa de 100 µs. Isto significa que o ciclo de programação da fita está completo e que o próximo conjunto de pacotes de dados pode ser enviado.
Este protocolo permite dispensar uma única linha para a transferência de dados, mas requer um timing preciso. É permitido um desvio de 150 ns, no máximo. Além disso, a imunidade ao ruído deste autocarro é muito baixa. Qualquer interferência de amplitude suficiente pode ser captada pelo controlador como dados. Isto impõe limitações aos comprimentos dos condutores do circuito de controlo. Por outro lado, oferece a possibilidade de para verificar o correcto funcionamento do cinto sem dispositivos adicionais. Se for aplicada energia à luminária e um dedo tocar na área de contacto do autocarro de controlo, alguns LEDs podem acender-se e apagar-se aleatoriamente.
Características técnicas dos elementos WS2812B
Para criar sistemas de iluminação com fitas endereçáveis, é necessário conhecer os parâmetros importantes dos elementos emissores de luz.
Dimensões do LED | 5x5 mm |
Frequência de modulação PWM | 400 Hz |
Consumo de corrente com a máxima luminosidade | 60mA por elemento |
Tensão de alimentação | 5 volts |
Arduino e WS2812B
A plataforma Arduino mundialmente popular permite a criação de esboços (programas) para controlar fitas endereçáveis. As capacidades do sistema são suficientemente amplas, mas se a qualquer nível já não forem suficientes, as capacidades obtidas serão suficientes para mudar sem problemas para C++ ou mesmo assembler. Embora seja mais fácil obter os conhecimentos básicos do Arduino.
Ligação de uma fita com base WS2812B a um Arduino Uno (Nano)
No início, uma simples prancha Arduino Uno ou Arduino Nano é suficiente. Mais tarde, placas mais complexas podem ser utilizadas para construir sistemas mais complexos. Ao ligar fisicamente a fita LED endereçável à placa Arduino, é necessário certificar-se de que algumas condições são cumpridas:
- Devido à baixa imunidade ao ruído, os condutores de ligação da linha de dados devem ser tão curtos quanto possível (tente fazê-los dentro de 10 cm);
- Ligue a linha de dados a uma saída digital livre da placa Arduino - será indicada mais tarde pelo software;
- Devido ao elevado consumo de energia, não é necessário alimentar a tira do quadro - são fornecidas fontes de alimentação separadas para este fim.
A linha comum de alimentação eléctrica entre a faixa e o Arduino deve ser ligada.
Fundamentos do controlo do software WS2812B
Já foi mencionado que, para controlar os chips WS2812B, é necessário gerar impulsos de um determinado comprimento com alta precisão. Na língua Arduino existem comandos para formar impulsos curtos delayMicroseconds и micros. O problema é que a resolução destes comandos é de 4 microssegundos. Isto significa que não é possível gerar atrasos de tempo com uma dada precisão. É necessário utilizar ferramentas C++ ou Assembler. Também é possível controlar a faixa LED endereçável através do Arduino com a ajuda de bibliotecas especialmente criadas para o efeito. A introdução começa com Blink, um programa que faz piscar os elementos emissores de luz.
FastLed .
Esta biblioteca é versátil. Para além da fita endereçável, suporta muitos dispositivos, incluindo fitas controladas por SPI. É muito poderoso.
Primeiro é necessário ligar a biblioteca. Isto é feito antes do bloco de configuração, e a corda tem este aspecto:
#incluir
O passo seguinte é criar uma matriz para armazenar as cores de cada díodo emissor de luz. Terá a faixa de nome e a dimensão 15 - pelo número de elementos (é melhor atribuir uma constante a este parâmetro).
Faixa CRGB[15]
No bloco de configuração deve especificar a banda com a qual o guião irá funcionar:
configuração inválida() {
FastLED.addLeds< WS2812B, 7, RGB>(strip, 15);
int g;
}
O parâmetro RGB define a ordem de alternância de cores, 15 significa o número de LEDs, 7 é o número da saída atribuída ao controlo (é melhor atribuir também uma constante ao último parâmetro).
O bloco de laço começa com um laço que escreve sequencialmente em cada secção da matriz Vermelha (brilho vermelho):
para (g=0; g< 15;g++)
{strip[g]=CRGB::Red;}
Em seguida, a matriz gerada é enviada para a luminária:
FastLED.show();
Atraso de 1000 milissegundos (um segundo):
atraso(1000);
Depois todos os elementos podem ser desligados da mesma forma, escrevendo neles de preto.
para (int g=0; g< 15;g++)
{strip[g]=CRGB::Black;}
FastLED.show();
atraso(1000);
Depois de compilar e carregar o esboço, a fita piscará com um período de 2 segundos. Se quiser controlar cada componente de cor separadamente, então em vez de cordel {strip[g]=CRGB::Red;} são usadas múltiplas cordas:
{
strip[g].r=100;// definir o nível de luminescência do elemento vermelho
strip[g].g=11;// o mesmo para o verde
strip[g].b=250;// o mesmo para o azul
}
NeoPixel
Esta biblioteca só funciona com os LEDs NeoPixel Ring, mas é menos intensiva em recursos e contém apenas o essencial. Na língua Arduino, o programa tem este aspecto:
#include
Tal como no caso anterior, a biblioteca é incluída e o objecto lento é declarado:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Onde 15 é o número de elementos e 6 é o resultado atribuído
A lenta é inicializada no bloco de configuração:
configuração inválida() {
lenta.begin ()
}
No bloco do laço todos os elementos são iluminados a vermelho, uma variável é passada para a fita e um atraso de 1 segundo é criado:
para (int y=0; y<15;y++)// 15 - número de elementos na lenta
{lenta.setPixelColor(y, lenta.Color(255,0,0))}};
{lenta.show();
atraso(1000);
A lenta deixa de brilhar em preto:
para (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))}};
lenta.show();
atraso(1000);
Vídeo lição: Amostras de efeitos visuais usando fitas endereçáveis.
Depois de aprender a piscar LEDs, pode continuar a aprender a criar efeitos de cor, incluindo o popular Rainbow e Northern Lights com transições suaves. O WS2812B e os LEDs endereçáveis Arduino oferecem possibilidades quase ilimitadas para tal.