PR.FT5_15· Kit RPi› Básicos› LEDs Coloridos Próximo →
⬤ Iniciante · GPIO · PWM

💡 LEDs Coloridos

Ligar e piscar LEDs com saída digital GPIO. Aprender PWM por software para controlo de brilho. Componentes: 5× vermelho, 5× verde, 5× amarelo.

Material necessário

Circuito

LED ânodo (+) → Resistência 220Ω → GPIO 18 (BCM)
LED cátodo (−) → GND (pino 6)
⚠️
Nunca ligar um LED diretamente ao GPIO sem resistência — o pino pode ficar danificado. A resistência de 220Ω limita a corrente a ~15mA, dentro do máximo de 16mA por pino do RPi.

Exercício 1 — Piscar simples

Python · led_piscar.py
import RPi.GPIO as GPIO
import time

LED = 18
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(LED, GPIO.OUT)

print("LED a piscar — Ctrl+C para parar")

try:
    while True:
        GPIO.output(LED, GPIO.HIGH)
        time.sleep(1)
        GPIO.output(LED, GPIO.LOW)
        time.sleep(1)

except KeyboardInterrupt:
    GPIO.cleanup()

Exercício 2 — Múltiplos LEDs em sequência

Python · led_sequencia.py
import RPi.GPIO as GPIO
import time

LEDS = [18, 23, 24]  # vermelho, verde, amarelo

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
for led in LEDS:
    GPIO.setup(led, GPIO.OUT)
    GPIO.output(led, GPIO.LOW)

try:
    while True:
        for led in LEDS:
            GPIO.output(led, GPIO.HIGH)
            time.sleep(0.3)
            GPIO.output(led, GPIO.LOW)

except KeyboardInterrupt:
    GPIO.cleanup()

Exercício 3 — Controlo de brilho com PWM

O PWM (Pulse Width Modulation) varia o brilho do LED mudando a percentagem de tempo que o pino fica em HIGH. O olho humano interpreta isso como variação de intensidade:

Python · led_pwm.py
import RPi.GPIO as GPIO
import time

LED = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)

# Criar objeto PWM: pino 18, frequência 1000 Hz
pwm = GPIO.PWM(LED, 1000)
pwm.start(0)  # começa apagado

try:
    while True:
        # Aumentar brilho gradualmente
        for dc in range(0, 101, 5):
            pwm.ChangeDutyCycle(dc)
            time.sleep(0.05)
        # Diminuir brilho gradualmente
        for dc in range(100, -1, -5):
            pwm.ChangeDutyCycle(dc)
            time.sleep(0.05)

except KeyboardInterrupt:
    pwm.stop()
    GPIO.cleanup()
💡
Duty Cycle: 0% = sempre LOW (apagado), 50% = metade do tempo HIGH, 100% = sempre HIGH (brilho máximo). A frequência de 1000 Hz é suficientemente alta para que o LED não pareça piscar.