Ola garagistas no tutorial de hoje iremos demonstrar como controlar através do Arduíno UNO uma fita de LED de 1 metro  com 60 LEDs endereçados.

Material utilizados:

1x Fita de LED 1M 60 LEDs

1x Arduíno UNO Rev.3

1x Protoboard

1x Resistor 330R

1Capacitor 10uF

1. Fita de LED Endereçada

Imagem 1 - Fita de LED Endereçada

Características:

Esta fita de LED mede 1 metro e vem com 60 LEDs endereçados. Como está fita não é selada, ela não tem proteção contra água, porém, você tem acesso a eles, então poderá fazer modificações facilmente. Você conseguirá controlar cada LED RGB individualmente podendo assim criar vários efeitos bacanas, para seu carro, seu quarto, ou outro lugar que sua imaginação permitir.

Obs: Está fita tem 1M e vem em um rolo, estes LEDs são determinados com um espaço de 0.25 cm entre eles, conectores de 3 pinos e um conector de alimentação de 2 fios.

2. Endereço Hexa da cores utilizadas 

Figura 1 - Tabela de cores em Hexadecimal 

A tabela acima foi utilizada como base em nosso tutorial, temos mais de 16 milhões de cores que podem ser implementadas em cada LED (256³), podemos enviar esses códigos em Hexa e os LEDs iram apresentar exatamente a mesma cor.

3. Opção de fonte externa

Imagem 2 - Fonte universal

Cada LED consome 60mA, logo 60 LEDs no nosso caso 60mA x 60 = 3,6A. Nesse tutorial não foi utilizado fonte, quando acionamos cada LED individualmente o brilho manteve no máximo, já quando acionamos todos de uma vez seu brilho diminuiu devido a falta de corrente o que não é recomendado manter por muito tempo pois  pode danificar o seu computador.

4. Montagem

Figura 2 - Montagem

O resistor utilizado em série com o pino de dados deve estar no valor entre 220R e 470R e o capacitor utilizado em paralelo com a fonte de alimentação deve estar entre 10uF/16v e 100uF/16v.

Para fazer o download da biblioteca clique aqui.

Para fazer o download do WS2812_Definitions.h.

5. Sketch 1


/* SparkFun WS2812 Breakout Board Example
 SparkFun Electronics
 date: July 25, 2013
 license: GNU GENERAL PUBLIC LICENSE
 
 Requires the Adafruit NeoPixel library. It's awesome, go get it.
 https://github.com/adafruit/Adafruit_NeoPixel
 
 This simple example code runs three sets of animations on a group of WS2812
 breakout boards. The more boards you link up, the better these animations
 will look. 
 
 For help linking WS2812 breakouts, checkout our hookup guide:
 https://learn.sparkfun.com/tutorials/ws2812-breakout-hookup-guide
 
 Before uploading the code, make sure you adjust the two defines at the
 top of this sketch: PIN and LED_COUNT. Pin should be the Arduino pin
 you've got connected to the first pixel's DIN pin. By default it's
 set to Arduino pin 4. LED_COUNT should be the number of breakout boards
 you have linked up.
 */
#include <Adafruit_NeoPixel.h>


#define P 0x000000//PRETO
#define Z 0x0000FF//AZUL
#define E 0x008000//VERDE
#define R 0x800080//ROXO
#define V         0xFF0000//VERMELLHO
#define L         0xFFA500//LARANJA
#define R 0xFFC0CB//ROSE
#define A 0xFFFF00//AMARELO
#define B 0xFFFFFF//BRANCO


#define PIN 4// Pino de controle
#define LED_COUNT 60// Quantidade de LED's
//Cria uma instância da Classe Adafruit NeoPixel chamado "leds"
Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_COUNT, PIN, NEO_GRB + NEO_KHZ800);

unsigned long time;//Contará o tempo
unsigned long timeout;//Estouro
int brilho[3];//Recebe os valores da serial
int i=0;//Quantidade de caracteres recebida pela serial
int posicao=0;
int flag=0;//Indica que foi recebida informação pela serial
char temp,cor;//Armazena dados recebidos pela serial


void setup()
{
  Serial.begin(9600);//Inicia a serial com baud rate
  leds.begin(); // Inicia a fita de LED
  clearLEDs();   // Apaga todos os LEDs
  leds.show(); // Atualiza o estados dos LEDs
 
  
}


void loop()
{
  //------------------------------------------------------------------------------------------
  // Retorna o tempo em milisegundos desde que o Arduíno começou a rodar,
  time = millis()%2;//Divide por 2 e salva o resto
  if(time==1||time==0)//Compara se o resto é igual a 0 ou 1 e sempre vai ser
  {
  timeout++;// Cronômetro
    if (timeout>500)// Compara se houve estouro do tempo
    {
    i=0;// Zera o quantidades de caracteres recebidos
    flag=0;// Zera o aviso de que foi recebido algum dado na serial
    }  
   }
 
  //-------------------------------------------------------------------------------------------
  

  //--------------------------------------------------------------------------------------------
  if (Serial.available()>0)// Verifica se houve recepção
  {
    flag=1;//Sinaliza que houve recepção
    timeout=0;// Zera o o tempo de reset
    //------------------------------------------------------------------------------------------
    temp = Serial.read();// Armazena o que foi recebido pela serial
    brilho[i]=temp-48;// Decrementa 48 na tabela ascii para converter de decimal para char
    i++;// Contabiliza um recebimento
  }
   //---------------------------------------------------------------------------
if (timeout>200&&flag==1)// Compara se houve estouro do timeout(se ficou um tempo sem recepção) e se houve recepção
{
  flag=0;// Sera aviso de recepção
  

   // Envia para serial informações em % e resolução de disparo
    posicao=brilho[0];
    cor= brilho[1]+ 48;
   
    switch (cor)
    {
    case 'Z'://AZUL
    leds.setPixelColor(posicao,Z);//Aciona o LED requerido
    leds.show();//Atualiza o LED
    break;
    
     case 'E'://VERDE
    leds.setPixelColor(posicao,E);//Aciona o LED requerido
    leds.show();//Atualiza o LED
    break;
    
     case 'V'://VERMELHO
    leds.setPixelColor(posicao,V);//Aciona o LED requerido
    leds.show();//Atualiza o LED
    break;
    
     case 'A'://AMARELO
    leds.setPixelColor(posicao,A);//Aciona o LED requerido
    leds.show();//Atualiza o LED
    break;
    
     case 'B'://BRANCO
    leds.setPixelColor(posicao,B);//Aciona o LED requerido
    leds.show();//Atualiza o LED
    break;
    
    case 'P'://APAGA
    leds.setPixelColor(posicao,0);//Aciona o LED requerido
    leds.show();//Atualiza o LED
    break;
    }
}
}


//Função liga led individual
void ligaLED(int g, unsigned long fita)//Recebe a posição e tempo de Delay
{
leds.setPixelColor(g, fita);//Aciona o LED requerido
 leds.show();//Atualiza o LED
}



//Função apaga LED individual
void apagaLED(int g, unsigned long fita)//Recebe a posição e tempo de Delay
{
leds.setPixelColor(g, 0);//Desaciona o LED requerido
 leds.show();//Atualiza o LED
}

//Função apaga LEDs geral
void clearLEDs()
{
  for (int p=0; p<LED_COUNT; p++)
  {
    leds.setPixelColor(p, 0);
    leds.show();
  }
}

6. Sketch 2



/* SparkFun WS2812 Breakout Board Example
 SparkFun Electronics
 date: July 25, 2013
 license: GNU GENERAL PUBLIC LICENSE
 
 Requires the Adafruit NeoPixel library. It's awesome, go get it.
 https://github.com/adafruit/Adafruit_NeoPixel
 
 This simple example code runs three sets of animations on a group of WS2812
 breakout boards. The more boards you link up, the better these animations
 will look. 
 
 For help linking WS2812 breakouts, checkout our hookup guide:
 https://learn.sparkfun.com/tutorials/ws2812-breakout-hookup-guide
 
 Before uploading the code, make sure you adjust the two defines at the
 top of this sketch: PIN and LED_COUNT. Pin should be the Arduino pin
 you've got connected to the first pixel's DIN pin. By default it's
 set to Arduino pin 4. LED_COUNT should be the number of breakout boards
 you have linked up.
 */
#include <Adafruit_NeoPixel.h>
#include "WS2812_Definitions.h"

#define PIN 4// Pino de controle
#define LED_COUNT 60// Quantidade de LED's
unsigned long fita=0x000000;// recebe valores em hexa referente as cores
unsigned long pri=0x000033;
unsigned long seg=0x003201;
unsigned long ter=0x320001;
//Cria uma instância da Classe Adafruit NeoPixel chamado "leds"
Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_COUNT, PIN, NEO_GRB + NEO_KHZ800);

void setup()
{
  leds.begin(); // Inicia a fita de LED
  clearLEDs();   // Apaga todos os LEDs
  leds.show(); // Atualiza o estados dos LEDs
}


void loop()
{
  int l=0;//conta a posição dos LEDs
  int DD=50;//Variavel de envio do valor do delay

  for(int k=0; k<6;k++)//1º laço
  {
    for(int j=0;j<6;j++)//2º laço
    {
      for(int i=0;i<5;i++)//3º laço
      {
        if( l>= LED_COUNT) l=0;//Verifica se ultrapassou o limite da fita
        fita=fita+pri;//Coforme a tabela inseri o valor na constante e incrementa
        ligaLED(l,DD);//Envia a posição na fita e envia o tempo ligado
        //apagaLED(l,DD);//Envia a posição na fita e envia o tempo desligad//// Tirar comentario caso queira utilizar um unico LED
         l++;//Incrementa posição na fita
      }
       if(j<5)//Compara se não ultrapassou o limite pois foram feitas duas somas seguidas e uma tera que ser ignorada
         {
          if(l>= LED_COUNT)l=0;
           fita=fita+seg;
           ligaLED(l,DD);
          // apagaLED(l,DD);// Tirar comentario caso queira utilizar um unico LED
           l++;//Incrementa posição na fita
           }

      }
       if(k<5)//Compara se não ultrapassou o limite pois foram feitas duas somas seguidas e uma tera que ser ignorada
         {
          if(l>= LED_COUNT)l=0;
             fita=fita+ter;
             ligaLED(l,DD);
             //apagaLED(l,DD);// Tirar comentario caso queira utilizar um unico LED
             l++;//Incrementa posição na fita
          }
     }  
}


//Função liga led individual
void ligaLED(int g, int d)//Recebe a posição e tempo de Delay
{
delay(d); //Seta o tempo

leds.setPixelColor(g, fita);//Aciona o LED requerido
 leds.show();//Atualiza o LED
}



//Função apaga LED individual
void apagaLED(int g, int d)//Recebe a posição e tempo de Delay
{
delay(d); //Seta o tempo
leds.setPixelColor(g, 0);//Desaciona o LED requerido
 leds.show();//Atualiza o LED
}

//Função apaga LEDs geral
void clearLEDs()
{
  for (int p=0; p<LED_COUNT; p++)
  {
    leds.setPixelColor(p, 0);
    leds.show();
  }
}

Referências:

https://learn.sparkfun.com/tutorials/ws2812-breakout-hookup-guide

http://www.labdegaragem.org/loja/fita-de-led-enderecada.html

Exibições: 49531

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de paulo varella em 14 maio 2018 às 0:02

e possivel cortar a fita e fazer 2 linhas?

Comentário de Danilo Assis em 25 janeiro 2016 às 10:51

Bom dia

Como eu faria para cortar essa fita e criar linhas de 1m e ainda integrar com arduino?

Comentário de Jefferson Santiago em 28 outubro 2014 às 15:43

Seu usar uma fonte de 6V 5Amperes no arduino, posso ligar os a fita led no vin do arduino? estes 5Amperes podem ser aproveitados pela fita ligada no vin sem "perda" de amperes?

Comentário de Mario filho em 14 setembro 2014 às 11:20

Por que não tenho acesso para baixar o tutorial? (searamf@gmail.com)

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço