Nota

Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime esclusive.

  • Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e concorsi: Partecipa a concorsi e promozioni durante le festività.

👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

1.1.2 LED RGB

Introduzione

In questo progetto, controlleremo un LED RGB per farlo lampeggiare in vari colori.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/list_rgb_led.png

È sicuramente comodo acquistare un kit completo, ecco il link:

Nome

ARTICOLI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link qui sotto.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED RGB

ACQUISTA

Schema Elettrico

Collega i pin di R, G e B a una resistenza limitatrice di corrente e poi collegali rispettivamente ai GPIO17, GPIO18 e GPIO27. Il pin più lungo (GND) del LED si collega alla GND del Raspberry Pi. Quando i tre pin ricevono valori PWM diversi, il LED RGB mostrerà colori differenti.

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

GPIO27

Pin 13

2

27

../_images/rgb_led_schematic.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/image61.png

Passo 2: Apri il file del codice.

cd ~/raphael-kit/python

Passo 3: Esegui il codice.

sudo python3 1.1.2_rgbLed.py

Dopo l’esecuzione del codice, vedrai che il LED RGB mostra rosso, verde, blu, giallo, rosa e ciano.

Codice

Nota

Puoi Modificare/Reimpostare/Copiare/Eseguire/Interrompere il codice qui sotto. Ma prima devi accedere al percorso del codice come raphael-kit/python. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.

import RPi.GPIO as GPIO
import time
# Imposta una tabella dei colori in esadecimale
COLOR = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF]
# Imposta i canali dei pin con un dizionario
pins = {'Red':17, 'Green':18, 'Blue':27}

def setup():
    global p_R, p_G, p_B
    GPIO.setmode(GPIO.BCM)
    # Imposta tutti i pin del LED come output e il livello iniziale su High (3,3 V)
    for i in pins:
        GPIO.setup(pins[i], GPIO.OUT, initial=GPIO.HIGH)

    p_R = GPIO.PWM(pins['Red'], 2000)
    p_G = GPIO.PWM(pins['Green'], 2000)
    p_B = GPIO.PWM(pins['Blue'], 2000)
    p_R.start(0)
    p_G.start(0)
    p_B.start(0)

# Definisce una funzione MAP per mappare i valori. Ad esempio da 0~255 a 0~100
def MAP(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

# Definisce una funzione per impostare i colori
def setColor(color):
# Configura la luminanza dei tre LED con il valore di colore inserito.
    R_val = (color & 0xFF0000) >> 16
    G_val = (color & 0x00FF00) >> 8
    B_val = (color & 0x0000FF) >> 0

    # Mappa il valore del colore da 0~255 a 0~100
    R_val = MAP(R_val, 0, 255, 0, 100)
    G_val = MAP(G_val, 0, 255, 0, 100)
    B_val = MAP(B_val, 0, 255, 0, 100)

    # Cambia i colori
    p_R.ChangeDutyCycle(R_val)
    p_G.ChangeDutyCycle(G_val)
    p_B.ChangeDutyCycle(B_val)

    print ("color_msg: R_val = %s,  G_val = %s, B_val = %s"%(R_val, G_val, B_val))

def main():
    while True:
        for color in COLOR:
            setColor(color)# Cambia il colore del LED RGB
            time.sleep(0.5)

def destroy():
    # Ferma tutti i canali PWM
    p_R.stop()
    p_G.stop()
    p_B.stop()
    # Libera le risorse
    GPIO.cleanup()

if __name__ == '__main__':
    setup()
    try:
        main()
    except KeyboardInterrupt:
        destroy()

Spiegazione del Codice

p_R = GPIO.PWM(pins['Red'], 2000)
p_G = GPIO.PWM(pins['Green'], 2000)
p_B = GPIO.PWM(pins['Blue'], 2000)

p_R.start(0)
p_G.start(0)
p_B.start(0)

Chiama la funzione GPIO.PWM() per definire Rosso, Verde e Blu come pin PWM e imposta la frequenza dei pin PWM su 2000 Hz, poi usa la funzione Start() per impostare il duty cycle iniziale a zero.

def MAP(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

Definisce una funzione MAP per mappare i valori. Ad esempio, x=50, in_min=0, in_max=255, out_min=0, out_max=100. Dopo la mappatura della funzione MAP, restituisce (50-0) \* (100-0)/(255-0) +0=19.6, il che significa che 50 in un intervallo 0-255 equivale a 19,6 in un intervallo 0-100.

def setColor(color):
    R_val = (color & 0xFF0000) >> 16
    G_val = (color & 0x00FF00) >> 8
    B_val = (color & 0x0000FF) >> 0

Configura la luminanza dei tre LED con il valore di colore inserito, assegnando i primi due valori esadecimali a R_val, i due valori centrali a G_val e gli ultimi due valori a B_val. Ad esempio, se color=0xFF00FF, R_val=(0xFF00FF & 0xFF0000)>> 16 = 0xFF, G_val = 0x00, B_val=0xFF.

R_val = MAP(R_val, 0, 255, 0, 100)
G_val = MAP(G_val, 0, 255, 0, 100)
B_val = MAP(B_val, 0, 255, 0, 100)

Usa la funzione MAP per mappare il valore R,G,B tra 0~255 nell’intervallo del duty cycle PWM 0-100.

p_R.ChangeDutyCycle(R_val)
p_G.ChangeDutyCycle(G_val)
p_B.ChangeDutyCycle(B_val)

Assegna il valore del duty cycle mappato al canale PWM corrispondente per cambiare la luminanza.

for color in COLOR:
    setColor(color)
    time.sleep(0.5)

Assegna ogni elemento della lista COLOR al colore rispettivo e cambia il colore del LED RGB tramite la funzione setColor().

Immagine del Fenomeno

../_images/image62.jpeg