Quantcast
Channel: MakerHero
Viewing all articles
Browse latest Browse all 427

Como fazer um pisca-pisca com Arduino

$
0
0

Como fazer um pisca-pisca com Arduino

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.

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: FILIPEFLOP

#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 ? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP!

Site: Blog FILIPEFLOP


Viewing all articles
Browse latest Browse all 427

Latest Images

Trending Articles