Como fazer um pisca-pisca com Arduino 10

Você que acompanhou o nosso último post e montou uma árvore de natal com placa de fenolite, tem agora a oportunidade de decorar uma árvore de natal de verdade utilizando leds endereçáveis RGB WS2812B. Vamos usar esses leds para montar um pisca-pisca com Arduino.

Pisca-pisca com Arduino

Cada led endereçável tem embutido um chip de driver, o WS2812B (datasheet), que permite  que você possa atribuir a cada led uma cor diferente. Com isso você pode criar efeitos incríveis para o seu projeto.

Como ligar os leds endereçáveis WS2812B

Cada led endereçável tem 6 pinos na parte traseira, sendo 3 de entrada (5V, Din e GND) e 3 de saída (5V, Dout e GND), e você pode ligá-los em cascata seguindo o esquema abaixo. Atenção à seta, que indica a direção da conexão: a saída Dout de um led deve ser conectada à entrada Din do próximo led.

Conexão Leds endereçáveis

Com essa ligação em cascata você pode conectar vários leds ao mesmo tempo, controlando todos eles com apenas um pino do microcontrolador.

A alimentação dos leds é de 5V, e como a corrente de cada um deles pode chegar à 60mA em luminosidade máxima, é recomendado o uso de uma fonte externa. O fabricante recomenda que seja conectado um capacitor de 1000 µF entre os pinos GND e 5V  como forma de proteção, evitando variações bruscas de tensão que podem danificar o componente.

Lembrando que você também pode usar fitas de leds prontas, como a Fita de Led RGB WS2812 1M à prova dágua, ou a Fita de Led RGB WS2812 5M para este projeto.

Circuito pisca-pisca com Arduino

No nosso circuito vamos utilizar, além de 10 leds endereçáveis, um Kit Controle Remoto IR (infravermelho), para controlar à distância os efeitos luminosos da árvore. O pino de sinal dos leds será o pino digital 6, e o pino de dados do receptor IR será ligado ao pino digital 2.

Circuito Arduino Leds Endereçáveis

Procure manter uma distância não muito grande entre o Arduino e o primeiro led, e não se esqueça de que a saída de um led (Dout), deve se conectar à entrada do led seguinte (Din), ok?

Programa controle pisca-pisca

Nesse programa vamos utilizar a biblioteca Neopixel, da Adafruit (download), e também a biblioteca IRremote (download). Faça o download das duas bibliotecas e coloque-as dentro da pasta LIBRARIES da IDE do Arduino.

O programa aguarda o sinal do controle remoto (qualquer tecla), e vai alternando entre os quatro efeitos disponíveis, variando o valor de armazenavalor_menu (entre 1 e 4), e executando a rotina seleciona_efeito().

//Programa: Pisca-pisca com Arduino
//Autor: MakerHero

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>
#include <IRremote.h>

#define PIN 6 //Pino controle leds
#define RECV_PIN 2  //Pino receptor IR
int armazenavalor_menu = 1;

Adafruit_NeoPixel strip=Adafruit_NeoPixel(10,PIN,NEO_GRB + NEO_KHZ800);

IRrecv irrecv(RECV_PIN);
decode_results results;
int cor = 0;

void setup()
{
  Serial.begin(9600);
  //Inicializa o receptor IR
  irrecv.enableIRIn(); 
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop()
{
  //Utilize a linha abaixo para modificar o brilho dos leds
  //strip.setBrightness(50);
  CHECK_IR();
}

void CHECK_IR()
{
  if (irrecv.decode(&results))
  {
    armazenavalor_menu++;
    Serial.print("Armazena valor = ");
    Serial.println(armazenavalor_menu);
    if (armazenavalor_menu >= 5)
    {
      armazenavalor_menu = 1;
    }
    strip.clear();
    strip.show();

  }
  irrecv.resume(); //Le o próximo valor
  seleciona_efeito(armazenavalor_menu);
}

void seleciona_efeito(int valor)
{
  Serial.println(armazenavalor_menu);
  switch (valor)
  {
    case 1:
      //Efeito 1 - Cores
      cor++;
      Serial.println(cor);
      if (cor >= 256)
      {
        cor = 0;
      }
      colorWipe(strip.Color(0, 127, 0), 200);
      colorWipe(strip.Color(0, 0, 127), 200);
      colorWipe(strip.Color(127, 0, 0), 200);
      break;
    case 2: 
      //Efeito 2 - Branco
      colorWipe2(strip.Color(127, 127, 127), 100);
      break;
    case 3:
      //Efeito 3 - Alternado
      colorWipe3(strip.Color(0, 0, 255), 300);
      break;
    case 4:
      //Efeito 4 - Arco-iris
      rainbow1(20);
      break;
  }
  CHECK_IR();
}

void colorWipe(uint32_t c, uint8_t wait) 
{
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void colorWipe2(uint32_t c, uint8_t wait) 
{
  strip.clear();
  strip.show();
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void colorWipe3(uint32_t c, uint8_t wait) 
{
  for (uint16_t i = 0; i < strip.numPixels(); i++)
  {
    delay(200);
    int ran = random(0, 10);
    int ran2 = random(0, 127);
    strip.setPixelColor(ran, strip.Color(0, 0, ran2));
    delay(wait);
    strip.setPixelColor(ran + 2, strip.Color(0, ran2, 0));
    delay(wait);
    strip.setPixelColor(ran + 4, strip.Color(ran2, 0, 0));
    delay(wait);
    strip.show();
  }
}

void rainbow1(uint8_t wait) 
{
  uint16_t i, j;
  for (j = 0; j < 256; j++) { // 5 cycles of all colors on wheel
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i,Wheel(((i*256/strip.numPixels())+j)&255));
    }
    strip.show();
    delay(wait);
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) 
{
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

Carregue o programa no Arduino e acione qualquer tecla do controle remoto. Veja no vídeo abaixo os efeitos:

E se você quiser montar um estrela para a sua árvore, como essa da imagem acima, acesse este link.

Gostou deste artigo? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

10 Comentários

  1. Cara, achei muito legal, mas tem como mudar de controle remoto para um simples botão?

  2. Olá tudo bem? Comprei dois conjuntos de 10 leds endereçáveis e fiz a ligação deles conforme o tutorial, minha ideia é utilizar eles para fazer um ambilight, porém nos testes simples somente para ligar em cores diferentes cada um eu só consigo acessar até o led de numero 11, os outros ficam deligados. Oque poderia estar acontecendo? testei eles individualmente e estão funcionando. Será que pode solucionar esta dúvida meu colega?

  3. porque copiei seu programa mais quando quando vou verificar antes de de fazer o upload aparece varios erros

    1. Boa tarde Geraldo,

      Que tipo de erro está aparecendo ?

      Abraço!

      Adilson – Equipe MakerHero

  4. Qual o limite de placas 8×8 que da pra controlar? Se eu ligar cada uma com fonte própria. O sinal DIN conseguiria controlar quantas placas? Obrigado!

  5. como eu faco para ligar 15 lampadas de 15w no arduino para que elas fique piscando comopisca pisca

    lindemarque de jesus santos
  6. Olá, quero saber se consigo fazer a ligação e acender cada led de forma individual, exemplo, tenho 100 leds endereçáveis, quero acender o 50, ou o 21, isso e possível? Claro, usando apesar um porta do arduino

    1. Estou com o seguinte problema, liguei 126 leds endereçáveis, preciso ligar todos na cor BRANCA de uma vez só, estou usando um fonte de 5V 10A, quando dou o comando para ligar todos os primeiros leds acontece um problema, eles acendem, mas os que estão mais pro final nao ficam branco, vao ficando amarelado, como eu faço pra corrigir isso?

      1. Sei que estou atrasado, porém outros podem ter a mesma dúvida, creio que seja falta de corrente(por excesso de consumo, ou por a fita não conseguir conduzir toda essa corrente), sugiro na metade da fita interromper a alimentação e colocar mais uma fonte, abraços

Trackbacks and Pingbacks

  1. […] de comunicação. Inclusive, você aprendeu como funciona a sua comunicação no nosso post sobre como fazer um pisca-pisca com Arduino. Dessa forma, somos capazes de criar diversos efeitos com os […]