Fala Pessoal! Tudo Bom!? 😎
Hoje não vamos nos prolongar tanto 🙄 , mas resolvi compartilhar com vocês a experiência bacana que tive por aqui de poder controlar e “alimentar” uma fita de LEDs endereçáveis WS2812B utilizando apenas a nossa já conhecida placa Roduino (Arduino Standalone)!
Então, hoje vamos falar sobre o Controle de uma Fita de LED`s Endereçáveis, do tipo e modelo WS2812B (o modelo WS2812 também é funcional e até mesmo modelos do tipo “não WS2812”)!
Clica em PLAY e “Bora” assistir Pessoal!
Segue abaixo o Sketch/Código que utilizamos para mostrar o funcionamento da Fita de LEDs neste video.
Sim, isso mesmo pessoal!
O mesmo código, que utilizei no video (sem qualquer modificação) – que por sinal, as modificações deverão ser realizadas por vocês mesmos! Aí entra a parte bacana de “makers” que somos! 😉
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
// PROTOTIPO DE FITA DE LED 1M (30 LEDS) - WS2812B (5050) CONTROLADA PELA RODUINO // DATA: 16/02/2018 // BLOG: ELETRONICAPARATODOS.COM // ============================================================================= //*** BIBLIOTECA IR REMOTE E RESPECTIVAS CONFIGURACOES ***// #include <IRremote.h> int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); decode_results tecla_cRemoto; long int decCode; //*** BIBLIOTECA FastLED E RESPECTIVAS CONFIGURACOES***// #include <FastLED.h> #define LED_PIN 5 //DEFINIMOS O PINO DIGITAL "5" DO ARDUINO PARA SER O PINO DE DADOS (DO OU Din) //** ATENCAO! ALTERAR A VARIAVEL "NUM_LEDS" PARA O NUMERO DE LEDs QUE NOSSA FITA DE LEDs REALMENTE POSSUI ***// #define NUM_LEDS 30 // O NUMERO DE LEDs QUE TEM NA NOSSA "REGUA/TIRA" DE LEDs. int brilho = 255; #define BRIGHTNESS brilho // AUMENTA OU DIMINUI A "VELOCIDADE" QUE OS LEDs MUDAM DE CORES (1 ~ 255). //#define BRIGHTNESS 255 // AUMENTA OU DIMINUI A "VELOCIDADE" QUE OS LEDs MUDAM DE CORES (1 ~ 255). #define LED_TYPE WS2812B // O MODELO DA NOSSA REGUA DE LEDs (PODERIA SER A WS2812B). #define COLOR_ORDER GRB // A ORDEM DAS CORES DA TIRA DE LEDs. (ESSE MODELO É O DA MINHA FITA WS2812B 1m da FilipeFlop - RCosta.) //#define COLOR_ORDER BGR // A ORDEM DAS CORES DA TIRA DE LEDs. //#define COLOR_ORDER RGB //#define COLOR_ORDER RBG //#define COLOR_ORDER GBR //#define COLOR_ORDER BGR CRGB leds[NUM_LEDS]; //#define UPDATES_PER_SECOND 10 //ATUALIZACAO DO DISPLAY DE LEDs EM 1 SEGUNDO. #define UPDATES_PER_SECOND 70 //ATUALIZACAO DO DISPLAY DE LEDs EM 1 SEGUNDO. //#define UPDATES_PER_SECOND 120 //ATUALIZACAO DO DISPLAY DE LEDs EM 1 SEGUNDO. //#define UPDATES_PER_SECOND 250 //ATUALIZACAO DO DISPLAY DE LEDs EM 1 SEGUNDO. CRGBPalette16 currentPalette; TBlendType currentBlending; int LedEmbutido = 13; // O LED "built-in" da RODUINO servirá como um "DEBUG Visual" :) int estadoFitaLED = 0; // Variavel que guarda o estado (ON-OFF) da fita de LEDs // ======================================================================== // //*** INICIO DAS FUNCOES RESPONSAVEIS PELO FUNCIONAMENTO DA FITA DE LEDS ***// // ======================================================================== // void FillLEDsFromPaletteColors(uint8_t colorIndex){ uint8_t brilho = 70; //AUMENTA OU DIMINUI A "INTENSIDADE DE LUMINOSIDADE" QUE OS LEDs EMITEM (1 ~ 255) R.COSTA. //uint8_t brilho = 200; //AUMENTA OU DIMINUI A "INTENSIDADE DE LUMINOSIDADE" QUE OS LEDs EMITEM (1 ~ 255) R.COSTA. for( int i = 0; i < NUM_LEDS; i++){ leds[i] = ColorFromPalette( currentPalette, colorIndex, brilho, currentBlending); //colorIndex += 30; //CONTROLA DE QUANTOS EM QUANTOS LEDs A BARRA "ANDA" //colorIndex += 3; //CONTROLA DE QUANTOS EM QUANTOS LEDs A BARRA "ANDA" //colorIndex += 5; //CONTROLA DE QUANTOS EM QUANTOS LEDs A BARRA "ANDA" //colorIndex += 7; //CONTROLA DE QUANTOS EM QUANTOS LEDs A BARRA "ANDA" colorIndex += 1; //CONTROLA DE QUANTOS EM QUANTOS LEDs A BARRA "ANDA" //colorIndex += 10; //CONTROLA DE QUANTOS EM QUANTOS LEDs A BARRA "ANDA" } } void ChangePalettePeriodically(){ uint8_t secondHand = (millis() / 1000) % 60; //static uint8_t lastSecond = 99; static uint8_t lastSecond = 59; if(lastSecond != secondHand){ lastSecond = secondHand; if(secondHand == 0) { currentPalette = HeatColors_p; currentBlending = LINEARBLEND;} } } // ============================================================= // //*** FUNCAO ESPECIFICA PARA ACIONAMENTO (ON) DA FITA DE LEDS ***// // ============================================================= // void acionaFitaLED(){ // RODANDO FITA DE LEDS WS2812B ChangePalettePeriodically(); static uint8_t startIndex = 0; startIndex = startIndex + 1; FillLEDsFromPaletteColors(startIndex); FastLED.show(); //FastLED.delay(2000 / UPDATES_PER_SECOND); // MAIS LENTA A MUDANCA DE CORES FastLED.delay(4000 / UPDATES_PER_SECOND); // MAIS RAPIDA A MUDANCA DE CORES } void setup() { Serial.begin(9600); //iniciamos a comunicacao serial irrecv.enableIRIn(); //inicia o receptor infravermelho (IR) // SETUP DA BIBLIOTECA FASTLED E A FITA DE LEDs delay(1500); //Atraso de segurança na inicialização FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(brilho); //currentPalette = RainbowColors_p; //PALHETA DE CORES SENDO UTILIZADA ATUALMENTE! //currentPalette = RainbowStripeColors_p; //PALHETA DE CORES SENDO UTILIZADA ATUALMENTE! //currentPalette = PartyColors_p; //OUTRA PALHETA DE CORES QUE PODE SER UTILIZADA. //currentPalette = LavaColors_p; //OUTRA PALHETA DE CORES QUE PODE SER UTILIZADA. //currentPalette = ForestColors_p; //OUTRA PALHETA DE CORES QUE PODE SER UTILIZADA. //currentPalette = OceanColors_p; //OUTRA PALHETA DE CORES QUE PODE SER UTILIZADA. currentPalette = HeatColors_p; //PALHETA DE CORES SENDO UTILIZADA ATUALMENTE! currentBlending = LINEARBLEND; // MATIZ DE COR - MIX DE COR a ser UTILIZADO //currentBlending = NOBLEND; // MATIZ DE COR - MIX DE COR a ser UTILIZADO //*** AO ENERGIZAR O CIRCUITO, A FITA DE LED INICIA "DESLIGADA" ***// FastLED.clear(); FastLED.delay(1000 / UPDATES_PER_SECOND); //*** SETAMOS O PINO DO LED COMO SAIDA ***// pinMode(LedEmbutido, OUTPUT); // O pino 13 do MCU (onde o LED está ligado) se torna um Pino de "Saída" } void loop() { FastLED.setBrightness(brilho); if(estadoFitaLED == 1){ acionaFitaLED(); } else{ //FastLED.clear(); //FastLED.delay(10 / UPDATES_PER_SECOND); } // LEMOS OS VALORES DAS TECLAS QUE ESTAO CHEGANDO DO C.REMOTO AO SENSOR IR if(irrecv.decode(&tecla_cRemoto)) { decCode = tecla_cRemoto.value; Serial.println(tecla_cRemoto.value); // IMPRIME NA SERIAL O VALOR DA TECLA DO C. REMOTO EM FORMATO HEXADECIMAL if(decCode == 16593103) { //delay(50); // Serve como um "debouncing" para o botao do controle remoto (MAS AQUI "ATRASA" O AVANCO DOS LEDs NA FITA! RCosta.) estadoFitaLED = 1; // Fita de LEDs LIGADA digitalWrite(LedEmbutido, HIGH); Serial.println(estadoFitaLED); } if(decCode == 16609423) { //delay(80); // Serve como um "debouncing" para o botao do controle remoto estadoFitaLED = 0; // Fita de LEDs DESLIGADA digitalWrite(LedEmbutido, LOW); Serial.println(estadoFitaLED); FastLED.clear(); FastLED.delay(10 / UPDATES_PER_SECOND); } if(decCode == 4294967295 or decCode != 16593103) { //delay(80); // Serve como um "debouncing" para o botao do controle remoto estadoFitaLED = 0; // Fita de LEDs DESLIGADA digitalWrite(LedEmbutido, LOW); //Serial.println(estadoFitaLED); FastLED.clear(); FastLED.delay(10 / UPDATES_PER_SECOND); } irrecv.resume(); // SENSOR IR PRONTO PARA RECEBER O PROXIMO VALOR delay(10); // ESPERA "100" MILISSEGUNDOS (ideal) } } |
Dica 💡 Nosso código faz uso da biblioteca “FastLED” para realizar os efeitos luminosos na fita de LEDs endereçáveis. Deixo essa dica para que vocês interessados em prototipagem, possam então desde já irem dando uma “estudada” nos variados efeitos que essa biblioteca para Arduino UNO pode realizar, e para que possam ir se acostumando com as possibilidades de configuração do código para determinar o “comportamento” dos LEDs endereçáveis WS2812B – a própria Fita de LEDs.
Espero que tenham gostado! 😀
Um Abraço,
Rodrigo Costa.
- Medindo e Monitorando a Temperatura com Arduino (Sensor LM35) - 5 de setembro de 2021
- Controle de Cargas através de Entrada Analógica com Arduino - 30 de agosto de 2021
- REVIEW E DICAS – ALICATE AMPERÍMETRO (UNI-T UT210E PRO) - 28 de agosto de 2021