.. note:: ¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas. **¿Por qué unirse?** - **Soporte experto**: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo. - **Aprender y compartir**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Avances exclusivos**: Obtén acceso temprano a nuevos anuncios de productos y adelantos. - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes. - **Promociones y sorteos festivos**: Participa en sorteos y promociones de temporada. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy. .. _1.1.2_py: 1.1.2 LED RGB ====================== Introducción ----------------- En este proyecto, controlaremos un LED RGB para que parpadee con varios colores. Componentes requeridos --------------------------------- En este proyecto, necesitaremos los siguientes componentes. .. image:: ../img/list_rgb_led.png :align: center Es muy conveniente comprar un kit completo, aquí está el enlace: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nombre - ELEMENTOS EN ESTE KIT - ENLACE * - Kit Raphael - 337 - |link_Raphael_kit| También puedes comprarlos por separado en los enlaces a continuación. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCCIÓN DEL COMPONENTE - ENLACE DE COMPRA * - :ref:`cpn_gpio_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| Diagrama Esquemático -------------------------- Después de conectar los pines de R, G y B a una resistencia limitadora de corriente, conéctalos a los GPIO17, GPIO18 y GPIO27 respectivamente. El pin más largo (GND) del LED se conecta al GND de la Raspberry Pi. Cuando los tres pines reciben diferentes valores PWM, el LED RGB mostrará diferentes colores. ================== ======== ======== === Nombre del T-Board físico wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 ================== ======== ======== === .. image:: ../img/rgb_led_schematic.png Procedimientos Experimentales --------------------------------- **Paso 1:** Construye el circuito. .. image:: ../img/image61.png **Paso 2:** Abre el archivo de código. .. raw:: html .. code-block:: cd ~/raphael-kit/python **Paso 3:** Ejecuta. .. raw:: html .. code-block:: sudo python3 1.1.2_rgbLed.py Después de ejecutar el código, verás que el LED RGB muestra los colores rojo, verde, azul, amarillo, rosa y cian. **Código** .. note:: Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como ``raphael-kit/python``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto. .. raw:: html .. code-block:: python import RPi.GPIO as GPIO import time # Set up a color table in Hexadecimal COLOR = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF] # Set pins' channels with dictionary pins = {'Red':17, 'Green':18, 'Blue':27} def setup(): global p_R, p_G, p_B GPIO.setmode(GPIO.BCM) # Set all LedPin's mode to output and initial level to High(3.3v) 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) # Define a MAP function for mapping values. Like from 0~255 to 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 # Define a function to set up colors def setColor(color): # configures the three LEDs' luminance with the inputted color value. R_val = (color & 0xFF0000) >> 16 G_val = (color & 0x00FF00) >> 8 B_val = (color & 0x0000FF) >> 0 # Map color value from 0~255 to 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) # Change the colors 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)# change the color of the RGB LED time.sleep(0.5) def destroy(): # Stop all pwm channel p_R.stop() p_G.stop() p_B.stop() # Release resource GPIO.cleanup() if __name__ == '__main__': setup() try: main() except KeyboardInterrupt: destroy() **Explicación del Código** .. 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) Llama a la función ``GPIO.PWM()`` para definir los pines Rojo, Verde y Azul como pines PWM y establece la frecuencia de los pines PWM en 2000Hz. Luego, utiliza la función ``start()`` para establecer el ciclo de trabajo inicial en cero. .. 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 Define una función MAP para mapear valores. Por ejemplo, x=50, in_min=0, in_max=255, out_min=0, out_max=100. Después del mapeo con la función MAP, devuelve ``(50-0) * (100-0)/(255-0) + 0=19.6``, lo que significa que 50 en el rango 0-255 equivale a 19.6 en el rango 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 luminancia de los tres LEDs con el valor de color ingresado, asigna los primeros dos valores del hexadecimal a R_val, los dos del medio a G_val y los últimos dos valores a B_val. Por ejemplo, si 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) Utiliza la función MAP para mapear los valores de R, G, B en el rango 0~255 al rango del ciclo de trabajo PWM 0-100. .. code-block:: python p_R.ChangeDutyCycle(R_val) p_G.ChangeDutyCycle(G_val) p_B.ChangeDutyCycle(B_val) Asigna el valor del ciclo de trabajo mapeado al canal PWM correspondiente para cambiar la luminancia. .. code-block:: python for color in COLOR: setColor(color) time.sleep(0.5) Asigna cada elemento de la lista COLOR al color respectivamente y cambia el color del LED RGB mediante la función ``setColor()``. Imagen del Fenómeno ------------------------ .. image:: ../img/image62.jpeg