Nota
Ciao, benvenuto nella community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.
Perché Unirsi?
Supporto Esperti: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Accedi in anteprima agli annunci di nuovi prodotti e alle anticipazioni.
Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni Festive e Giveaway: Partecipa ai giveaway e alle promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca su [qui] e unisciti oggi stesso!
2.3 Luce Colorata¶
In questo progetto, esploreremo l’affascinante mondo della miscelazione additiva dei colori utilizzando un LED RGB.
Un LED RGB combina tre colori primari, ossia Rosso, Verde e Blu, in un unico pacchetto. Questi tre LED condividono un pin catodico comune, mentre ogni pin anodico controlla l’intensità del colore corrispondente.
Variando l’intensità del segnale elettrico applicato a ciascun anodo, possiamo creare una vasta gamma di colori. Ad esempio, mescolando luce rossa e verde ad alta intensità otterremo luce gialla, mentre combinando luce blu e verde produrremo ciano.
Attraverso questo progetto, esploreremo i principi della miscelazione additiva dei colori e libereremo la nostra creatività manipolando il LED RGB per visualizzare colori accattivanti e vivaci.
Componenti Necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
OGGETTI IN QUESTO KIT |
LINK |
|---|---|---|
ESP32 Starter Kit |
320+ |
Puoi anche acquistarli separatamente dai link qui sotto.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
Pin Disponibili
Ecco un elenco dei pin disponibili sulla scheda ESP32 per questo progetto.
Pin Disponibili |
IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23 |
Schema
I pin PWM pin27, pin26 e pin25 controllano rispettivamente i pin Rosso, Verde e Blu del LED RGB, e collegano il pin catodico comune a GND. Questo permette al LED RGB di visualizzare un colore specifico sovrapponendo la luce su questi pin con diversi valori PWM.
Cablatura
Il LED RGB ha 4 pin: il pin lungo è il pin catodico comune, che di solito è collegato a GND; il pin a sinistra accanto al pin più lungo è Rosso; e i due pin a destra sono Verde e Blu.
Codice
Nota
Apri il file
2.3_colorful_light.pysituato nel percorsoesp32-starter-kit-main\micropython\codes, oppure copia e incolla il codice in Thonny. Successivamente, fai clic su «Esegui lo script corrente» o premi F5 per eseguirlo.Assicurati di selezionare l’interprete «MicroPython (ESP32).COMxx» nell’angolo in basso a destra.
from machine import Pin, PWM
import time
# Definisci i pin GPIO per il LED RGB
RED_PIN = 27
GREEN_PIN = 26
BLUE_PIN = 25
# Configura i canali PWM
red = PWM(Pin(RED_PIN))
green = PWM(Pin(GREEN_PIN))
blue = PWM(Pin(BLUE_PIN))
# Imposta la frequenza PWM
red.freq(1000)
green.freq(1000)
blue.freq(1000)
def set_color(r, g, b):
red.duty(r)
green.duty(g)
blue.duty(b)
while True:
# Imposta colori diversi e attendi un po'
set_color(1023, 0, 0) # Rosso
time.sleep(1)
set_color(0, 1023, 0) # Verde
time.sleep(1)
set_color(0, 0, 1023) # Blu
time.sleep(1)
set_color(1023, 0, 1023) # viola
time.sleep(1)
Quando il programma viene eseguito, vedrai i LED RGB visualizzare rosso, verde, blu e viola, e così via.
Per Saperne di Più
Puoi anche impostare il colore che desideri con il seguente codice utilizzando i familiari valori dei colori da 0 a 255.
Nota
Apri il file
2.3_colorful_light_rgb.pysituato nel percorsoesp32-starter-kit-main\micropython\codes, oppure copia e incolla il codice in Thonny. Successivamente, fai clic su «Esegui lo script corrente» o premi F5 per eseguirlo.Assicurati di selezionare l’interprete «MicroPython (ESP32).COMxx» nell’angolo in basso a destra.
from machine import Pin, PWM
import time
# Definisci i pin GPIO per il LED RGB
RED_PIN = 27
GREEN_PIN = 26
BLUE_PIN = 25
# Configura i canali PWM
red = PWM(Pin(RED_PIN))
green = PWM(Pin(GREEN_PIN))
blue = PWM(Pin(BLUE_PIN))
# Imposta la frequenza PWM
red.freq(1000)
green.freq(1000)
blue.freq(1000)
# Mappa i valori di input da un intervallo a un altro
def interval_mapping(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
# Converti i valori dei colori (0-255) in valori di duty cycle (0-1023)
def color_to_duty(rgb_value):
rgb_value = int(interval_mapping(rgb_value,0,255,0,1023))
return rgb_value
def set_color(red_value,green_value,blue_value):
red.duty(color_to_duty(red_value))
green.duty(color_to_duty(green_value))
blue.duty(color_to_duty(blue_value))
while True:
# Imposta colori diversi e attendi un po'
set_color(255, 0, 0) # Rosso
time.sleep(1)
set_color(0, 255, 0) # Verde
time.sleep(1)
set_color(0, 0, 255) # Blu
time.sleep(1)
set_color(255, 0, 255) # viola
time.sleep(1)
Questo codice si basa sull’esempio precedente, ma mappa i valori dei colori da 0 a 255 a un intervallo di duty cycle da 0 a 1023.
La funzione
interval_mappingè una funzione di utilità che mappa un valore da un intervallo a un altro. Prende cinque argomenti: il valore di input, i valori minimo e massimo dell’intervallo di input, e i valori minimo e massimo dell’intervallo di output. Restituisce il valore di input mappato all’intervallo di output.def color_to_duty(rgb_value): rgb_value = int(interval_mapping(rgb_value,0,255,0,1023)) return rgb_value
La funzione
color_to_dutyprende un valore RGB intero (es. 255,0,255) e lo mappa a un valore di duty cycle adatto per i pin PWM. Il valore RGB di input viene prima mappato dall’intervallo 0-255 all’intervallo 0-1023 utilizzando la funzioneinterval_mapping. L’output diinterval_mappingviene quindi restituito come valore di duty cycle.def color_to_duty(rgb_value): rgb_value = int(interval_mapping(rgb_value,0,255,0,1023)) return rgb_value
La funzione
color_setprende tre argomenti interi: i valori rosso, verde e blu per il LED. Questi valori vengono passati acolor_to_dutyper ottenere i valori di duty cycle per i pin PWM. I valori di duty cycle vengono quindi impostati per i pin corrispondenti utilizzando il metododuty.def set_color(red_value,green_value,blue_value): red.duty(color_to_duty(red_value)) green.duty(color_to_duty(green_value)) blue.duty(color_to_duty(blue_value))