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.
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.
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.
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.
Cara, achei muito legal, mas tem como mudar de controle remoto para um simples botão?
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?
porque copiei seu programa mais quando quando vou verificar antes de de fazer o upload aparece varios erros
Boa tarde Geraldo,
Que tipo de erro está aparecendo ?
Abraço!
Adilson – Equipe MakerHero
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!
como eu faco para ligar 15 lampadas de 15w no arduino para que elas fique piscando comopisca pisca
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
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?
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