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
Lista completa de produtos
comprarVespa
Fita LED RGB Endereçável WS2812B 5050 - 1 metro
Adaptador P4 Fêmea - Borne
Fonte Chaveada 5V 5A
Potenciômetro 10kΩ
Protoboard 400 Pontos
Cabo USB Micro B 80cm
Jumpers Macho-Macho x40 Unidades
Jumpers Macho-Fêmea x40 Unidades
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.
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.
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.
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.
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.
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.
Após alguns instantes a biblioteca estará instalada, e estará escrito logo abaixo do nome da biblioteca, como na imagem abaixo.
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.
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.
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.
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.