.. note:: 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 [|link_sf_facebook|] e unisciti oggi stesso! .. _1.1.2_py: 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. .. image:: ../img/list_rgb_led.png :align: center È sicuramente comodo acquistare un kit completo, ecco il link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nome - ARTICOLI IN QUESTO KIT - LINK * - Kit Raphael - 337 - |link_Raphael_kit| Puoi anche acquistarli separatamente dai link qui sotto. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUZIONE AI COMPONENTI - LINK PER L'ACQUISTO * - :ref:`cpn_gpio_extension_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_rgb_led` - |link_rgb_led_buy| 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 ============ ======== ======== === .. image:: ../img/rgb_led_schematic.png Procedure Sperimentali ---------------------------- **Passo 1:** Costruisci il circuito. .. image:: ../img/image61.png **Passo 2:** Apri il file del codice. .. raw:: html .. code-block:: cd ~/raphael-kit/python **Passo 3:** Esegui il codice. .. raw:: html .. code-block:: 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** .. note:: 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. .. raw:: html .. code-block:: python 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** .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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 ------------------------ .. image:: ../img/image62.jpeg