Neste tutorial, vamos ver como controlar um LED com Raspberry Pi e PWM. A ideia do projeto é gerar um sinal de onda quadrada através dos pinos GPIO do Raspberry Pi que vai ligar e desligar uns LEDs a uma velocidade que o olho humano não consegue ver (acima de 50Hz) e pouco a pouco vai aumentar ou diminuir a sua intensidade variando a duração do ciclo de trabalho.
O ciclo de trabalho é a percentagem de tempo que o sinal está como “ON”. Se variamos esta percentagem de tempo, poderemos controlar a intensidade dos LEDs. Um valor de 0 no ciclo de trabalho significa que o LED vai estar completamente apagado, um valor de 100 fará com que esteja totalmente ligado.
Montagem de fios e ligações
O esquema de montagem é muito simples e vamos fazê-lo com dois LEDs, apenas teremos que ligar um pino GND do Raspberry Pi ao protoboard e colocar os LEDs nos pinos 24 e 25 com duas resistências de 330 Ohm ou superior para proteger o circuito, o resto, controla-se via software. Aqui tem o esquema do circuito:
Script Python para o controlo de LEDs com PWM
Com este script, o que vamos fazer será iniciar um loop que altera os ciclos de trabalho dos LEDs, de forma que quando um está a 100% (completamente ligado), e outro estará a 0% (completamente apagado). Esse loop vai funcionar até que se pressione CTRL+C já que o loop ‘while True‘ está dentro de um bloco ‘try: … Except KeyboardInterrupt‘ que vai parar os LEDs e vai limpar as portas GPIO que abrimos ao sair. O código do script é o seguinte, tem comentários para que o interprete melhor:
import RPi.GPIO as GPIO # Carregamos a livraria RPi.GPIO from time import sleep # Carregamos a função sleep do módulo time GPIO.setmode(GPIO.BCM) # Colocamos o Raspberry em modo BCM GPIO.setup(25, GPIO.OUT) # Colocamos o pino GPIO nº25 como saída para o LED #1 GPIO.setup(24, GPIO.OUT) # Colocamos o pino GPIO nº24 como saída para o LED #2 white = GPIO.PWM(25, 100) # Criamos o objeto 'white' no pin 25 a 100 Hz red = GPIO.PWM(24, 100) # Criamos o objeto 'red' no pin 24 a 100 Hz white.start(0) # Iniciamos o objeto 'white' a 0% do ciclo de trabalho (completamente apagado) red.start(100) # Iniciamos o objeto 'red' a 100% do ciclo de trabalho (completamente ligado) # A partir de agora começamos a modificar os valores do ciclo de trabalho pause_time = 0.02 # Declaramos um lapso de tempo para as pausas try: # Abrimos um bloco 'Try...except KeyboardInterrupt' while True: # Iniciamos um laço 'while true' for i in range(0,101): # De i=0 até i=101 (101 porque o script para a 100%) white.ChangeDutyCycle(i) # LED #1 = i red.ChangeDutyCycle(100 - i) # LED #2 subtrair 100 - i sleep(pause_time) # Pequena pausa para não saturar o processador for i in range(100,-1,-1): # A partir de i=100 a i=0 em passos de -1 white.ChangeDutyCycle(i) # LED #1 = i red.ChangeDutyCycle(100 - i) # LED #2 subtrair 100 - i sleep(pause_time) # Pequena pausa para não saturar o processador except KeyboardInterrupt: # Se pressionar CTRL+C!! white.stop() # Parar o objeto 'white' red.stop() # Parar o objeto 'red' GPIO.cleanup() # Limpamos os pinos GPIO e saimos
———————–
Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.
Não se esqueçam de fazer like na nossa página no facebook.
Todos os produtos utilizados neste artigo podem ser encontrados na loja de componentes eletrónicos ElectroFun.