Boomerang LED (Vai e Vem)

dnetto, arduinoc-plus-plusledembeddedhardware
Back

Este projeto implementa o clássico efeito de Scanner de LED (frequentemente associado ao carro K.I.T.T. da série Supermáquina/Knight Rider ou aos Cylons de Battlestar Galactica). O feixe de luz vai de uma ponta à outra da fita de LEDs e retorna, deixando um rastro de brilho suave (cauda) atrás dele.

É um efeito altamente visual e simples de implementar em fitas de LED endereçáveis WS2812B (NeoPixels) utilizando microcontroladores como Arduino.


🛠️ Como Funciona?

O projeto utiliza a biblioteca EasyNeoPixels.h para abstrair a comunicação com a fita.

A suavidade do movimento e o comprimento da cauda de luz são controlados por parâmetros lógicos no início do código. O decaimento de brilho é calculado usando deslocamento de bits (brightness >> t) para obter excelente performance mesmo em microcontroladores de 8 bits.

📐 Configurações e Parâmetros

#define PIN 6    // Pino de dados conectado à fita de LEDs
#define LEN 10   // Quantidade total de LEDs na fita
#define TAIL 3   // Comprimento da cauda de rastro do LED
#define DELAY 50 // Velocidade da transição (em milissegundos)

💻 Implementação do Algoritmo

Abaixo está o código completo em C++ para carregar no seu Arduino:

#include <EasyNeoPixels.h>

#define PIN 6	
#define LEN 10
#define TAIL 3
#define DELAY 50

void setup() {
  setupEasyNeoPixels(PIN, LEN);
}

void loop() {
  // Movimento de Ida (Forward)
  for (int i = 0; i < LEN; i++) {
    writeEasyNeoPixel(i, 255, 0, 0); // Liga o LED atual com brilho máximo (Vermelho)
    
    // Gera a cauda esmaecendo os LEDs anteriores
    for (int t = 1; t <= TAIL; t++) {
      if (i - t >= 0) {
        writeEasyNeoPixel(i - t, 255 >> t, 0, 0); // Reduz o brilho (shift right)
      }
    }
    
    // Desliga o LED que saiu do alcance da cauda
    if (i - TAIL - 1 >= 0) {
      writeEasyNeoPixel(i - TAIL - 1, 0, 0, 0);
    }
    delay(DELAY);
  }

  // Movimento de Volta (Backward)
  for (int i = LEN - 1; i >= 0; i--) {
    writeEasyNeoPixel(i, 255, 0, 0);
    
    for (int t = 1; t <= TAIL; t++) {
      if (i + t < LEN) {
        writeEasyNeoPixel(i + t, 255 >> t, 0, 0);
      }
    }
    
    if (i + TAIL + 1 < LEN) {
      writeEasyNeoPixel(i + TAIL + 1, 0, 0, 0);
    }
    delay(DELAY);
  }
}

📸 Demonstração Visual

Demonstração do Efeito Boomerang LED

🔗 Código Fonte

Daniel Netto Logo2026 © Daniel Netto. Todos os direitos reservados.
Hospedado por Verceldnetto.dev