🎯 Fita de LED WS2812B

Em poucas palavras

Definição técnica ou simplificada do conceito.


📝 Notas e Desenvolvimento


🔗 Conexões e Contexto


📚 Referências e Fontes

Citações Diretas

📂 Outros Conteúdos Preservados

PRINCIPAIS CARACTERÍSTICAS

  • Tensão: 5V (não use tensão mais alta) para VCC
  • Transmissão de dados: Controle usando PWM.
  • Corrente: 60MA por LED com brilho máximo (RGB - 255, 255, 255)

Dicas para Usar a Faixa de LED

  • Geralmente a entrada de dados é feita através do pino 18 ou 13 do Raspberry Pi. A comunicação PWM é necessária para controlar os LEDs. Verifique GPIO para a Raspberry Pi 3 model B+ para mais informações
  • Existem fitas de LED mais antigas operando com dados de 5V e versões mais novas operando a 3.3V. Certifique-se de verificar o que você tem!
  • Cuidado com o dimensionamento dos LEDs. 1m de faixa de 60 LEDs (a faixa mais comum) pode consumir 3.6A com brilho máximo (o que significa RGB 255,255,255). Certifique-se de ter a fonte de alimentação externa apropriada, se necessário.

Código de Teste no Raspberry Pi

O código para usar com Raspberry Pi pode ser visto abaixo. Este código executa uma série de diferentes modos de iluminação em sequência. É uma maneira simples de validar a operação do LED.

Import Time
From RPI_WS281X Import Pixelstrip, Color, WS
import argparse
 
### Configuração da Fita de LED:
 
LED_COUNT = 20 # Número de pixels de LED.
LED_PIN = 18 # PINO GPIO CONECTADO AOS PIXELS (18 PWM!).
 
### LED_PIN = 10 # PINO GPIO CONECTADO AOS PIXELS (10 USA SPI /DEV/SPIDEV0.0).
 
LED_FREQ_Hz = 800000 # FREQUÊNCIA DO SINAL DO LED EM HERTZ (Geralmente 800KHz)
Led_dma = 10 # Canal DMA a ser usado para gerar o sinal (Tente 10)
Led_brightness = 240 # defina 0 para o mais escuro e 255 para o mais brilhante
LED_INVERT = false # verdadeiro para inverter o sinal
LED_CHANNEL = 0 # defina para '1' para pinos 13, 19, 41, 45 ou 53
Led_strip = ws.ws2811_strip_brg # Tipo de fita e Ordem de Cores
 
### Define Funções Que Animam LEDs de Várias Maneiras.
 
def ColorWipe (strip, color, wait_ms = 50):
    "" "Apaga a cor na tela um pixel por vez." ""
    for i in range (strip.numpixels ()):
        Strip.setpixelcolor (i, color)
        Strip.show ()
        time.sleep (wait_ms / 1000.0)
 
 
def theaterchase (strip, color, wait_ms = 50, iteractions = 10):
    "" "Animação de perseguição estilo luz de cinema." ""
    For J In Range (itractions):
        for q in range (3):
            for i in range (0, strip.numpixels (), 3):
                strip.setpixelcolor (i + q, color)
            Strip.show ()
            time.sleep (wait_ms / 1000.0)
            for i in range (0, strip.numpixels (), 3):
                strip.setpixelcolor (i + q, 0)
 
 
DEF Wheel (POS):
    "" "Gera cores de arco-íris em posições de 0-255." ""
    if pos <85:
        Return Color (POS * 3, 255 - POS * 3, 0)
    ELIF POS <170:
        POS -= 85
        Return Color (255 - POS * 3, 0, POS * 3)
    else:
        POS -= 170
        Return Color (0, Pos * 3, 255 - POS * 3)
 
 
def Rainbow (strip, wait_ms = 20, iteractions = 1):
    "" "Desenha um arco-íris que desvanece em todos os pixels de uma vez." ""
    For J In Range (256 * Itertations):
        for i in range (strip.numpixels ()):
            strip.setpixelcolor (I, Wheel ((i + j) & 255)))
        Strip.show ()
        time.sleep (wait_ms / 1000.0)
 
 
def Rainbowcycle (strip, wait_ms = 20, iteractions = 5):
    "" Desenha um Arco-Íris Que Se Distribui Uniformemente Por Todos os Pixels. ""
    For J In Range (256 * Itertations):
        for i in range (strip.numpixels ()):
            strip.setpixelcolor (I, Wheel (
                (int (i * 256 / strip.numpixels ()) + j) & 255))))
        Strip.show ()
        time.sleep (wait_ms / 1000.0)
 
 
def theaterchaserainbow (strip, wait_ms = 50):
    "" "Animação de perseguição estilo luz de cinema arco-íris." ""
    For J In Range (256):
        for q in range (3):
            for i in range (0, strip.numpixels (), 3):
                strip.setpixelcolor (i + q, Wheel ((i + j) % 255)))
            Strip.show ()
            time.sleep (wait_ms / 1000.0)
            for i in range (0, strip.numpixels (), 3):
                strip.setpixelcolor (i + q, 0)
 
### A Lógica Principal do Programa Segue:
 
if __name__ == '__main__':
    # Processa Argumentos
    parser = argparse.argumentparser ()
    parser.add_argument ('-c', '-clerk', action = 'store_true', help = 'Limpar o display na saída')
    args = parser.pass_args ()
 
    # Cria Objeto Neopixel com Configuração Apropriada.
    Strip = pixelstrip (led_count, led_pin, led_freq_hz, led_invert, led_brightness, led_channel, led_strip)
    # Inicializa a Biblioteca (Deve Ser Chamada Uma Vez Antes de Outras Funções).
    Strip.begin ()
 
    Print ('Pressione Ctrl-C para Sair.')
    if not args.Clear:
        Print ('Use o argumento "-c" para Apagar os LEDs ao Sair')
 
    Try:
 
        While True:
            Print ('Animações de Limpeza de Cor.')
            colorWipe (strip, color (255, 0, 0)) # Limpeza Vermelha
            colorWipe (strip, color (0, 255, 0)) # Limpeza Verde
            colorWipe (strip, color (0, 0, 255)) # Limpeza Azul
            Print ('Animações de Perseguição de Cinema.')
            Theaterchase (strip, color (127, 127, 127)) # Perseguição de Cinema Branca
            Theaterchase (strip, color (127, 0, 0)) # Perseguição de Cinema Vermelha
            Theaterchase (strip, color (0, 0, 127)) # Perseguição de Cinema Azul
            Print ('Animações de Arco-Íris.')
            Rainbow (strip)
            Rainbowcycle (strip)
            Theaterchaserainbow (strip)
 
    Exception Keyboardinterruct:
        if args.Clear:
            colorWipe (strip, color (0, 0, 0), 10)