Rolando Textos em Painéis RGB 32×9
Como discutimos no último post, hoje continuamos explorando as possibilidades de painéis 32×8 RGB com controle independente, que nos permitem criar aplicações muito interessantes. No caso de hoje, veremos como obter letreiros publicitários de texto com rolagem (um clássico da publicidade atraente).
Conteudo
Objetivos
- Continuamos brincando com os painéis 8×32 de leds Neopixel.
- Faremos um programa de Rolagem de Texto, movendo o texto lateralmente.
- Veremos como cascatear vários painéis para aumentar o tamanho da nossa tela.
Material Necessário
- Arduino Uno ou (genérico)
- Painel LED RGB 32×8 (Flexível)
- Fios
Painéis de led RGB Flexíveis
Na sessão anterior apresentamos os painéis RGB Neopixel de 8×32 pontos. Vimos como instalar algumas bibliotecas necessárias para brincar com eles e fizemos um primeiro programa, para lançar as bases, no qual vimos como mover um ponto de luz ao longo da matriz.
Não é que fosse um programa de grande interesse, mas certamente precisávamos de um capítulo anterior para desvendar algumas ideias básicas sobre painéis RGB e iniciar o que era necessário para fazer um trabalho mais lucrativo (e interessante) com as pequenas luzes em questão.
Portanto, se você não leu o tutorial anterior, recomendo que comece por lá antes de entrar neste, porque para não nos repetirmos, vamos dar como certo, e seguindo o guia para preguiçosos, você nem precisará procurá-lo, deixo-lhe o link e aqui abaixo:
As meninas muitas vezes ficam surpresas que os homens são fascinados por luzes coloridas, e muitas vezes nos culpam por perder muito tempo brincando com eles, mas o que elas querem que eu diga a elas: eu as amo! E parece que há muitos tão presos quanto eu com isso, porque esses tipos de tutoriais costumam fazer muito sucesso.
Além disso, outro clássico dos displays é mostrar textos movendo-se lateralmente através de painéis luminosos, e já apresentamos sessões com matrizes de LEDs vermelhos 8×8 e 8×24, mas nesta ocasião, vamos aproveitar o fato de que os painéis Neopixel são de cores para melhorar a experiência.
Nesta sessão, veremos como exibir mensagens de rolagem em um painel RGB Neopixel e também veremos como unir vários painéis para obter um painel de letras mais longo e faremos um exemplo unindo dois, dando 8×64, mas eles podem ser combinados de diferentes formas pelo gosto de cada um.
Conexão de Painéis RGB Flexíveis com Arduino
O procedimento de conexão é bastante simples, mas vale a pena descrever as conexões do painel. Se você olhar o painel com os leds na frente, à direita está o conector Data Input onde injetaremos a saída do nosso Arduino. Na parte de trás do painel, esta entrada é rotulada como DIN (Data IN) enquanto o outro conector de 3 pinos é rotulado como DOUT (Data Out)
Se quisermos cascatear vários painéis, basta conectar a saída do primeiro à entrada do segundo e assim sucessivamente. Se quisermos cascatear vários painéis, basta conectar a saída do primeiro à entrada do segundo e assim sucessivamente.
Por fim, há a questão da alimentação. Cada um desses painéis pode ser alimentado pelo conector de entrada que possui 3 pinos: DIN, 5V e GND, mas lembre-se que cada um dos LEDs pode consumir entre 50 e 60 mA se você colocar um branco intenso. Como temos 8 x 32 LEDs no painel, o consumo máximo pode ser:
8 x 32 x 60 = 15.360 mA
São 15 amperes, o que certamente não está ao alcance do seu Arduino alimentado por USB. Na prática, o consumo habitual estará muito longe destes consumos, mas é preciso ter cuidado e calcular o consumo que vai produzir. Em condições normais e se você usar cores simples com meia intensidade, o consumo por painel pode ficar em torno de um ampere ou menos por painel, mas se você colocar 5… bem, é isso.
É por isso que o painel tem um conector específico, no centro, com um par de cabos vermelho e preto, para usar uma fonte externa que evita o problema, mas vocês vão ver que vou usar a fonte direta do Arduino para esses exemplos simples que veremos a seguir.
Agora conectar nosso Arduino é trivial:
Vamos com o programa
Instalando algumas Bibliotecas
Primeiro vamos baixar algumas bibliotecas Adafruit para conduzir o painel. Precisamos de tudo isso:
Adafruit_GFX.h Adafruit_NeoMatrix.h Adafruit_NeoPixel.h
Para isso, vamos instalá-los a partir do gerenciador de bibliotecas.
Você obterá essa tela e, se escrever Neopixel acima, na área de pesquisa, terá que instalar dois dos que aparecem:
Repita a operação com os GFX se você não os tiver instalado (o que é improvável se você vier aqui com frequência) e pronto.
Primeiro Programa com Painel RGB
Como todos os displays Neopixel, esses painéis começam por numerar o primeiro LED RGB como 0 e aumentam a posição consecutivamente, para que possamos endereçar cada LED independentemente dos outros, o que é uma de suas grandes virtudes.
Não é tão claro como a numeração muda quando você pula de linha em coluna e às vezes o bom senso pode enganá-lo e, portanto, você deve fazer alguns testes com sua matriz para descobrir como as coisas estão indo. É por isso que vamos começar com um programa simples que ilumina consecutivamente os pixels para que você possa ver como eles são numerados.
Começamos com as inclusões da biblioteca:
#include <Adafruit_NeoPixel.h>
E agora algumas constantes do nosso programa
const int dinPin = 6; // Pino Din para pino Arduino const int numOfLeds = 256; // número de leds
Os dados em indicam ao programa o pino do Arduino com o qual governamos o painel, e como este é 32 x 8 = 256 pixels, é o que indicamos na segunda constante. Agora temos que instanciar o objeto Neopixel da biblioteca:
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(numOfLeds, dinPin, NEO_GRB + NEO_KHZ800);
Os dois últimos parâmetros indicam o controlador de tudo e a velocidade de comunicação com o sistema
- Dependendo do controlador e sua idade, a velocidade de comunicação pode ser menor (e no futuro, certamente maior)
- Isso é importante, porque se a velocidade de comunicação for baixa, não permitirá que você faça cascata de muitos elementos para fazer telas maiores. Dobre a velocidade, dobre as chances.
Vamos para a configuração:
void setup() { pixels.begin(); // Inicializa a biblioteca NeoPixel pixels.setBrightness(60); // Valor de 0 a 100% }
Sempre precisamos inicializar o objeto com begin() e depois definir o nível de brilho, neste caso 60% (100% é o máximo, claro) para que o consumo de corrente seja baixo.
Como eu quero fazer um programa de teste simples, vamos fazer um ponto de cor aleatória passar do primeiro pixel para o último e para isso começamos definindo a cor aleatória no loop com três parâmetros dentro da iteração que passa os pixels:
void loop() { for(int i=0;i<numOfLeds;i++) { int red = random(128); //Valor de 0(led-off) a 255(). int green = random(128); int blue = random(128);
Agora ligamos os pixels
pixels.setPixelColor(i, pixels.Color(red,green,blue)); pixels.show(); // Isso envia a cor do pixel atualizada para o hardware. delay(50); // Demora por um período de tempo para mudar o próximo led
A primeira linha define a cor (Random) do pixel a pintar, mas no Neopixel ativar um led não significa que ele acende, para isso você tem que executar a instrução pixel.show(), isso permite pintar rapidamente como quantos pixels você quiser… ANTES de mostrá-los!!!
Estas últimas instruções ligam os diferentes pixels em ordem e o atraso regula o tempo entre a iluminação de um ponto e o seguinte. E, finalmente, é conveniente desligar todos os pixels quando terminar.
for (int i=0; i<=numOfLeds; i++) pixels.setPixelColor(i, pixels.Color(0,0,0)); pixels.show(); //Isso envia a cor do pixel atualizada para o hardware.
Aqui deixo o programa para download
(Aqui)