Conteúdo do curso
Como programar a BitDogLab
Vamos aprender sobre o MicroPython, a IDE Thonny e realizar exercícios básicos para a BitDogLab!
0/4
Luz e Cor com LEDs
Vamos explorar como podemos programar a BitDogLab e usar seus LEDs de forma colorida. Haverá um exemplo de programação no final de cada conteúdo resumindo os assuntos abordados. - Interface sem código: https://bitdoglab.webcontent.website/ide-interfaces/neopixel/
0/4
Introdução prática à BitDogLab
    Sobre a Aula

    A combinação de cores é uma arte tanto visual quanto técnica, permitindo a criação de uma infinidade de tonalidades a partir das cores primárias. Na tecnologia, especialmente no controle de LEDs RGB (vermelho, verde e azul), essa combinação é realizada de forma precisa por meio de técnicas digitais. Utilizando a modulação por largura de pulso (PWM), é possível ajustar a intensidade de cada LED individualmente, misturando as cores de maneira controlada para obter a cor desejada. Essa abordagem não apenas facilita a criação de efeitos visuais vibrantes, mas também exemplifica a interseção entre arte e engenharia na geração de cores de forma digital.

    Proporcionalidade e o sinal Modulado por Largura de Pulso (PWM)

    O controle da intensidade de cada LED (R, G e B) é feito por uma tensão em formato digital (que assume dois valores: baixo 0 V ou alto [3,3 V no caso da BitDogLab]). Porém, este chaveamento de baixo para alto e alto para baixo é feito muito rapidamente, com uma frequência igual ou superior a 400 Hz (400 variações no segundo) e o olho uma não é capaz de enxercar esta variação. Porém, o tempo em que este sinal fica no estado alto e no estado baixo é variável, fazendo que, na média, o LED pareça estar acendendo com maior e menor intensidade.

     

    Sinal PWM e o Ciclo de Trabalho (Duty Cycle)

    Na figura, vemos um exemplo de sinal PWM.

    O sinal digital alterna entre os níveis alto (1) e baixo (0).

    • Tempo em Nível Alto (ton): Este é o tempo em que o sinal está no nível alto (1).
    • Tempo em Nível Baixo (toff): Este é o tempo em que o sinal está no nível baixo (0).
    • Período (T): O tempo total para um ciclo completo, somando ton e toff.

    Para calcular o quanto do tempo o sinal fica no nível alto, usamos o Ciclo de Trabalho ou Duty Cycle.

    O Duty Cycle é simplesmente a porcentagem de tempo que o sinal está no nível alto dentro de um ciclo completo.

    A figura a seguir mostra 3 sinais modulados por largura de pulso, com Duty Cycles de 25%, 50% e 75%

     

    Ao variar o Duty Cycle, podemos controlar a média de potência que chega ao LED, fazendo com que ele pareça mais brilhante ou mais fraco.

    Essa técnica é essencial para criar uma vasta gama de cores e intensidades usando LEDs RGB, tudo isso com a precisão da tecnologia digital. Porém ela pode também ser usada para controlar motores, ventiladores, buzzers e outros periféricos.

    Programe na BitDogLab

    O LED RGB, abaixo do Logo do BitDog, está conectado aos pinos ao microcontrolador da seguinte forma:

    GPIO 13 ao LED vermelho,

    GPIO 11 ao LED verde e

    GPIO 12 ao LED azul.

    O programa a seguir usa a função led(r, g, b) para controlar o Duty Cycle de cada cor:

     

    
    # Importa as blibiotecas de função
    from machine import Pin, PWM
    import time
    
    # Configuração dos pinos PWM para o LED RGB
    # Definindo os pinos 13, 12 e 11 como saídas PWM para controlar o LED RGB
    led_r = PWM(Pin(13))  # Pino para o componente vermelho do LED RGB
    led_g = PWM(Pin(11))  # Pino para o componente verde do LED RGB
    led_b = PWM(Pin(12))  # Pino para o componente azul do LED RGB
    
    # Configuração da frequência PWM para 1000 Hz
    # Isso define a velocidade com que o LED pisca para simular diferentes intensidades de cor
    led_r.freq(1000)
    led_g.freq(1000)
    led_b.freq(1000)
    
    def led(r, g, b):
        # Função para definir a cor do LED RGB
        # Convertendo os valores de 0-255 para 0-65535, que é o intervalo aceito pela função duty_u16()
        led_r.duty_u16(int(r * 65535 / 255))
        led_g.duty_u16(int(g * 65535 / 255))
        led_b.duty_u16(int(b * 65535 / 255))
    
    # Função para testar o LED RGB com várias cores
    def test_rgb():
        print("led(50, 0, 0)  resulta em vermelho")  # Mensagem indicando a cor resultante
        led(50, 0, 0)  # Define o LED para vermelho
        time.sleep(2)  # Espera 2 segundos
        
        print("led(0, 50, 0)  resulta em verde")  # Mensagem indicando a cor resultante
        led(0, 50, 0)  # Define o LED para verde
        time.sleep(2)
        
        print("led(0, 0, 50)  resulta em azul")  # Mensagem indicando a cor resultante
        led(0, 0, 50)  # Define o LED para azul
        time.sleep(2)
        
        print("led(50, 50, 0)  resulta em amarelo")  # Mensagem indicando a cor resultante
        led(50, 50, 0)  # Define o LED para amarelo (combinação de vermelho e verde)
        time.sleep(2)
    
        print("led(0, 50, 50)  resulta em ciano")  # Mensagem indicando a cor resultante
        led(0, 50, 50)  # Define o LED para ciano (combinação de verde e azul)
        time.sleep(2)
    
        print("led(50, 0, 50)  resulta em roxo")  # Mensagem indicando a cor resultante
        led(50, 0, 50)  # Define o LED para roxo (combinação de vermelho e azul)
        time.sleep(2)
        
        print("led(50, 50, 50)  resulta em branco")  # Mensagem indicando a cor resultante
        led(50, 50, 50)  # Define o LED para branco (combinação de todas as cores)
        time.sleep(2)
    
        print("led(0, 0, 0)  resulta em led apagado")  # Mensagem indicando que o LED está apagado
        led(0, 0, 0)  # Desliga o LED
        time.sleep(1)
        
        print("                                                                                   ")
        print("Agora você pode tentar digitando o comando led seguido dos argumentos para cada cor")
        time.sleep(1)
        print("Exemplo: led(200,50,25)")  # Exemplo de como o usuário pode definir uma cor específica
    
    # Chama a função de teste para mostrar as cores
    test_rgb()
    
    

    Basta carregar este programa no Thonny e na janela do Shell digitar:

    led(50, 0, 0) para acender o LED na cor vermelha.

    Shopping Basket