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