Arduino 12: Usando LEDs endereçáveis

Neste último experimento iremos programar o Arduino para que ele execute uma sequência luminosa em um LED endereçável WS2812. Baixaremos as bibliotecas e os programas para executar as sequências da Internet através da IDE do Arduino.

Experimento 33 – Usando LEDs RGB endereçáveis

LEDs WS2812 são pixels RGB frequentemente usados em painéis digitais coloridos de alta-definição. Eles também são muito populares em produtos de wearables (eletrônica para vestir), usados em roupas, jóias e calçados. Geralmente eles são distribuídos em conjuntos contendo vários LEDs, organizados em matrizes quadradas, sequências circulares, fitas e painéis flexíveis.

A foto abaixo mostra um circuito usando dois conjuntos de LEDs WS2812 (1 + 16) piscando em uma sequência programada no Arduino. No kit foi incluído um LED WS2812.

Material necessário

  • Arduino Nano + cabo USB + computador
  • LED RGB endereçável WS2812
  • Resistor de 470 ohms
  • Capacitor de 100uF
  • Protoboard, fios e jumpers

Monte o circuito abaixo. É necessário soldar terminais no LED WS2812 distribuído no kit. Veja como fazer isto no tutorial de soldagem no final da apostila. Você também pode adquirir LEDs WS2812 montados em placas com vários LEDs e adaptados para uso em projetos de eletrônica para vestir.

Existem várias bibliotecas para usar LEDs endereçáveis. As mais populares são as bibliotecas NeoPixel e FastLED. Todas têm diversos programas de exemplo que você pode usar imediatamente, fazendo poucas alterações. Vamos instalar uma delas e rodar seus exemplos.

Selecione o menu Sketch/Include Library/Manage Libraries no IDE do Arduino. Você verá a janela abaixo. No campo de pesquisa digite FastLED, e a janela filtrará a biblioteca FastLED que usaremos para programar os LEDs:

Clique no botão Install, que aparece do lado direito. Quando a instalação terminar, você poderá abrir os exemplos que usam a biblioteca selecionando o menu File/Examples. No final há uma seção “Examples from Custom Libraries” e você encontrará FastLED.

Abra o exemplo Blink. Verifique que a variável NUM_LEDS contém o valor 1 (um LED), e altere DATA_PIN para 4 (que é o pino onde conectamos o LED). Depois faça upload para o Arduino. O LED deverá piscar na cor vermelha. Você pode mudar a cor alterando o código em loop(), por exemplo, troque por:

leds[0] = CRGB::Blue;

para piscar na cor azul.

Abra o exemplo ColorPalette. Este programa realiza uma série de animações passando por várias cores. Como temos apenas um LED, mude NUM_LEDS para 1, e LED_PIN para 4. Faça upload para o Arduino e observe as variações de cor e pulsos que o LED vai fazer.

É muito mais interessante usar esse programa com vários LEDs WS2812. Se você adquirir um outro LED endereçável, ou melhor ainda, uma placa com diversos LEDs WS2812 montados, você pode conectá-los em sequência ligando o pino Dout de uma placa à entrada Din da seguinte. Você então deve alterar os programas que fazem o sequenciamento de LEDs e informar a quantidade total de LEDs que serão controlados.

Por exemplo, no circuito abaixo adicionamos um anel de 16 LEDs em série com o WS2812 que já estava ligado ao circuito, resultando no total de 17 LEDs endereçáveis. Altere a variável NUM_LEDS novamente (para 17) e faça upload para ver os LEDs piscarem e mudarem de cor sequencialmente.

O circuito acima só deve ser usado em Arduino estabelecendo um limite de brilho para os LEDs (controlado pelo programa), já que o uso de 17 LEDs em brilho máximo exige muita corrente da saída 5V do Arduino Nano chinês (limite máximo de 500mA via USB e 800mA via fonte externa conectada a Vin). O LED com brilho máximo consome 60mA, portanto 17 LEDs com brilho máximo podem ultrapassar 1 ampere. O ColorPalette usa apenas ¼ do brilho (64) máximo. Há um fusível nos reguladores de tensão que desliga temporariamente o fornecimento de energia se ela ultrapassar esses limites.

O ideal é alimentar circuitos que tenham 7 ou mais LEDs WS2812 usando uma fonte externa. Nessa configuração, o Arduino fornece apenas o sinal de controle, através de seu pino de saída. A fonte externa pode até ser a mesma bateria, se ela fornecer até 5V.

O esquema abaixo mostra como construir o mesmo circuito acima de maneira mais segura, usando uma fonte externa. Com essa configuração, como a corrente não passará por dentro do Arduino, podemos acender os LEDs na intensidade máxima e alimentar muito mais LEDs:

No esquema acima o Arduino pode estar sendo alimentado por USB ou por outra fonte a partir da sua entrada Vin. Mas é possível também usar a mesma fonte que fornece energia para os pixels WS2812, se ela tiver capacidade de fornecimento de corrente suficiente. Por exemplo, 3 pilhas AAA de 1,5V cada poderiam alimentar o Arduino e os LEDs.

Com 4,5V não seria possível alimentar o Arduino pelo pino Vin, já que o limite mínimo é de 6V. A alimentação do Arduino teria que ser feita diretamente via pino 5V. É preciso tomar cuidado ao utilizar esse pino como entrada, já que ele está ligado diretamente ao microcontrolador (sem fusível), e poderá queimar o Arduino se a tensão passar de 5,5V.