Fita LED Endereçável com a Vespa




Introdução

Desde a época que os LEDs foram criados, o mundo vem se atualizado para o uso desta tecnologia como substituta das antigas lâmpadas incandescentes e das não tão antigas lâmpadas fluorescentes. Em certo momento os LEDs RGB foram criados, e cada vez mais os ambientes em que vivemos tem se tornado mais coloridos.

Neste tutorial veremos como controlar a fita de LEDs RGB endereçável WS2812B utilizando a Vespa, para o controle total dos LEDs da extensão da fita, e para o controle unitário de cada LED da extensão da fita.

Lista de Materiais

Conceitos Teóricos

LED RGB

LEDs RGB são componentes que basicamente possuem 3 componentes diferentes dentro de um único encapsulamento. Isso se deve pelo fato de que o LED RGB nada mais é do que 3 LEDs de cores distintas, que são, vermelho ("Red" - R), verde ("Green" - G) e azul ("Blue" - B). Inclusive é desta combinação que seu nome é concebido.

Assim como todo LED comum, os LEDs RGB também possuem polaridade, porém de uma maneira um pouco diferente. Este tipo de LED geralmente possui 4 terminais, sendo que 3 deles são para controle individual das cores do componente, ou seja, um terminal para a cor vermelha, um terminal para a cor verde, e um terminal para a cor azul. O quarto terminal restante é chamado de "comum", pois ele é internamente conectado aos 3 LEDs do componente, para completar o circuito e fazer com que cada LED seja aceso. Entretanto, dependendo da fabricação do componente, o terminal "comum" pode ser o ânodo ou o cátodo de todos os LEDs, como nas imagens abaixo, por exemplo.

led-rgb-anodo-comum
LED RGB Ânodo Comum
led-rgb-anodo-comum
LED RGB Cátodo Comum
Fonte: CircuitBread

Como cada cor do LED RGB pode ser controlada individualmente, é possível criar uma imensidade de combinações e cores distintas, como mostrado na tabela abaixo. No caso da cor preta, listada abaixo, o resultado é obtido mantendo todos as cores em seu valor mínimo, ou seja, no caso do LED RGB, todos os LEDs internos estariam desligados, e como o encapsulamento destes LEDs são normalmente transparentes, infelizmente não é possível replicar a cor preta.

tabela-cores-rgb
Tabela de Cores RGB
Fonte: Wikipedia

Em algumas aplicações foi necessário o controle paralelo de diversos LEDs RGB, e para sanar essa necessidade foi criado a fita de LED RGB, que ensinamos como controlar no tutorial Controle de uma Fita LED RGB com o Arduino.

LED RGB Endereçável

Já os LEDs RGB endereçáveis foram desenvolvidos para suprir uma nova necessidade do mercado. Embora o controle paralelo de LEDs RGB seja o suficiente para a maioria das aplicações no passado, começaram a surgir aplicações mais complexas e que dependiam do controle individual de inúmeros LEDs RGB. Este novo componente criado, não só possui um LED RGB em seu encapsulamento, como também possui um microcontrolador que é responsável por receber um sinal digital de um protocolo de comunicação específico para o controle deste modelo de componente, como também de retransmitir esse sinal para o componente em série seguinte, e controlar o LED RGB interno. Um esquema básico de ligação e controle pode ser visto na próxima imagem.

conexao-comunicacao-led-rgb-enderecavel
Conexão e Comunicação do LED RGB Endereçável
Fonte: Tim's Blog

Como é possível observar na imagem acima, este novo modelo de componente também possui 4 terminais, porém neste caso, 2 são para alimentação positiva e negativa, enquanto os outros dois são para receber e enviar os sinais digitais do protocolo de comunicação. Neste momento vale ressaltar que, como o LED RGB endereçável possui um pino para receber e outro para enviar sinais, é necessário atentar-se ao sentido de transmissão de dados da fita de LEDs.

Outro ponto interessante que vale ressaltar no controle destes componentes é que, diferentemente dos LEDs RGB comuns, o controle dos modelos endereçáveis não são tão diretos. O valor de acionamento de cada cor de LED deve ser primeiramente salvo na memória RAM do microcontrolador do componente, e então, através de um comando de controle específico o microcontrolador irá acionar os LEDs do componente, exibindo a cor desejada.

Controle Conjunto dos LEDs

Neste primeiro projeto iremos controlar todos os LEDs da extensão da fita em conjunto, como se fosse o controle paralelo de LEDs RGB comuns, para exibir gradualmente as cores RGB e então criar algumas combinações de cores.

Circuito

Para este primeiro projeto monte o circuito a seguir.

circuito-eletrico
Circuito Elétrico

A fita de LED RGB Endereçável WS2812B possui tensão operacional de 5V, portanto para o controle com a Vespa devemos utilizar os pinos de controle de servos (S1 - S4), pois eles possuem conversão de nível lógico de 3,3V do ESP32 para 5V (tensão operacional dos servos também).

Observação: embora a fita de LED tenha que ser alimentada com uma tensão de 5V, e a Vespa possua saída nesta tensão, não é recomendado alimentá-la diretamente pelas saídas da placa, pois o consumo de corrente da extensão da fita é maior do que a placa é capaz de fornecer. Portanto o uso de uma fonte externa é recomendado.

Biblioteca

Para fazer o controle da fita de LED RGB Endereçável com a Vespa, é necessário instalar uma biblioteca. Para isso, acesse o "Gerenciador de Bibliotecas" pelo caminho da imagem a seguir. Se preferir, basta pressionar as teclas "Ctrl + Shift + l" no seu teclado.

caminho-gerenciador-bibliotecas
Caminho para o "Gerenciador de Bibliotecas"

Com o "Gerenciador de Bibliotecas" aberto, digite "adafruit neopixel" na barra de pesquisa, e então pressione "Enter" para pesquisar. Assim que as opções forem listadas, instale a terceira biblioteca listada, como mostrado na próxima imagem.

biblioteca-encontrada
Biblioteca Encontrada

Após alguns instantes a biblioteca estará instalada, e estará escrito logo abaixo do nome da biblioteca, como na imagem abaixo.

biblioteca-instalada
Biblioteca Instalada

Código

Com a biblioteca instalada e o circuito montado, carregue o código a seguir para a sua Vespa. Caso nunca tenha utilizado a Vespa antes, siga os passos do tutorial Primeiros Passos com a Vespa.

Entendendo o Código

O código se inicia com a inclusão da biblioteca "Adafruit_NeoPixel" que nos ajudará a fazer o controle da fita de LED RGB Endereçável WS2812B. Em seguida, declaramos as variáveis PINO_FITA_LED e NUMERO_LEDS, que armazenam, o pino de controle da fita de LED, e o número de LEDs na extensão da fita. Na RoboCore vendemos esta fita de LED por metro, e em um metro de fita estão presentes 60 LEDs. Portanto, se quiser controlar uma metragem maior desta fita de LED, atualize o número salvo nesta variável, para que todos os LEDs sejam acionados. Para finalizar as declarações globais do código, criamos o objeto fita_LED como a instância Adafruit_NeoPixel para a biblioteca, levando em conta o número de LEDs e o pino de controle salvo nas variáveis anteriores.

Já nas configurações do código (função void setup()), o controle da fita de LED é iniciado através do comando fita_LED.begin(). Em seguida, os dados de controle salvos na memória dos LEDs apagados pelo comando fita_LED.clear(), e então os LEDs são mantidos apagados através do comando fita_LED.show() que exibe os últimos dados de controle salvos nos componentes. Neste momento é importante ressaltar que, esses comandos só serão realizados pelos LEDs que estiverem dentro da extensão configurada na variável NUMERO_LEDS, ou seja, se a sua fita de LEDs tiver 70 LEDs ao total, apenas 60 serão apagados, e executarão as demais funções do código.

Após garantir que os LEDs da fita serão iniciados apagados, iniciamos as animações de controle conjunto, que inicialmente realizarão um aparecimento gradual de cada cor RGB. Para realizar essa animação são utilizados dois laços "for". O primeiro deles varia o valor da variável i que será o controle de cada cor RGB do seu valor mínimo (0) até o seu valor máximo (255), incrementando esse valor de controle em uma unidade a cada repetição. Dentro deste laço "for" há outro laço "for", que varia o valor da variável j entre 0 e o número de LEDs salvo na variável NUMERO_LEDS, incrementando o seu valor em uma unidade. Isso garante que todos os LEDs da extensão da fita de LED receberão todos os valores de controle das cores RGB. Os dados de controle dos LEDs RGB são enviados para todos os componentes da extensão da fita através do comando fita_LED.setPixelColor(j , i, 0, 0) (cor vermelha como exemplo), lembrando que a variável j é o LED que receberá o dado, enquanto a variável i é o valor da cor RGB de controle. Após salvar os dados de controle em todos os LEDs, eles são acionados com o comando fita_LED.show(). Os LEDs são mantidos ligados nesta cor por um breve período, e então os dados de controle são apagados, juntamente com os LEDs.

Esse processo é repetido para as cores verde e azul, encerrando a configuração de código.

Já na repetição do código, inicializamos o gerador de números aleatórios tomando como base a leitura analógica "vazia" do pino VP (GPIO 36) da Vespa pelo comando randomSeed(analogRead(36)). Feito isso, criamos variáveis, sendo elas vermelho, verde e azul, cada uma recebendo um valor aleatório diferente entre 0 e 255. Com essas variáveis atualizadas com os novos valores, enviamos os dados de controle com esses valores aleatórios para todos os LEDs da extensão da fita, e então exibimos a cor gerada.

O Que Deve Acontecer

Assim que o código for carregado para a sua Vespa com o circuito do projeto montado, você verá uma crescente no brilho das cores RGB, e logo em seguida, você verá diversas cores aleatórias sendo exibidas pela fita de LED, como no GIF abaixo.

Resultado Final

Controle Individual dos LEDs

Já neste projeto veremos como realizar o controle individual de cada LED da extensão da fita, e aproveitar a grande vantagem do LED RGB endereçável. Para isso, utilizaremos um potenciômetro para controlar a posição dos LEDs que serão acionados na extensão da fita de LED.

Circuito

Para este projeto, monte o circuito a seguir.

circuito-eletrico
Legenda

Código

Com o circuito montado, carregue o código a seguir para a sua Vespa.

Entendendo o Código

Neste projeto, além da inclusão da biblioteca, das variáveis do número de LEDs da extensão da fita, do pino de controle, e da criação do objeto fita_LED, também temos a criação de algumas variáveis adicionais. A variável PINO_POT armazena o GPIO da Vespa conectado ao potenciômetro no circuito. O vetor COR_LEDS armazena os três valores RGB para a cor que será exibida nos LEDs (se preferir pode alterar esses valores para outra cor, inclusive existem algumas ferramentas online que auxiliam esta escolha, como esta, por exemplo). Para finalizar as declarações globais do código, temos a declaração das variáveis leitura_analogica, que receberá as leituras analógicas do potenciômetro; posicao que receberá a posição dentro da extensão da fita para o acionamento dos LEDs; e posicao_antes que receberá o último valor salvo na variável posicao para atualizarmos os LEDs apenas quando a posição for alterada, ou seja, quando o eixo do potenciômetro for movido.

Já nas configurações do código, apenas configuramos o pino conectado ao potenciômetro como uma entrada, e iniciamos o controle da fita de LED com todos os LEDs apagados.

Na repetição do código mantemos a Vespa constantemente realizando a leitura analógica do pino conectado ao potenciômetro, e armazenando a leitura na variável leitura_analogica. Feito isso, através do comando posicao = map(leitura_analogica, 0, 4095, 0, NUMERO_LEDS) convertemos a leitura analógica do potenciômetro e um número entre 0 e o número de LEDs na extensão da fita de LED, que basicamente representa a posição do LED que será aceso na fita. Em seguida, verificamos pela condição if (posicao != posicao_antes) se a recém convertida é diferente da última posição lida. Se for, apagamos os dados de controle de todos os LEDs e então acionamos o LED correspondente à posição convertida com os valores de cor RGB salvos no vetor COR_LEDS. Além disso, se a posição for maior do que zero, acendemos o LED anterior, e caso a posição seja menor do que número de LEDs da extensão da fita, também acionamos o LED seguinte, ambos com metade dos valores RGB salvos no vetor COR_LEDS.

O Que Deve Acontecer

Após carregar o código para a sua Vespa, mova o eixo do potenciômetro do circuito, e veja que a posição dos LEDs que estão sendo acionados irá mudar conforme a movimentação, como no GIF abaixo.

Resultado Final

Indo Além

Como a Vespa possui conexão Wi-Fi, por que não criar uma aplicação Web para controlar remotamente qual a cor e quais LEDs da extensão da fita serão acesos? Isso é possível utilizando plataformas IoT prontas (como o Blynk, por exemplo), ou até mesmo criando sua própria plataforma ou página Web para realizar o controle da maneira que preferir.

Conclusão

Neste tutorial vimos como controlar os LEDs RGB da fita de LED RGB Endereçável WS2812B, tanto em conjunto, quanto individualmente em projetos simples.

Avatar