.. note:: ¡Hola, bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook! Sumérgete más 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. - **Aprende y Comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Avances Exclusivos**: Obtén acceso anticipado a anuncios de nuevos productos y adelantos exclusivos. - **Descuentos Especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos. - **Promociones y Sorteos Festivos**: Participa en sorteos y promociones festivas. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo! .. _2.2.1_py_pi5: 2.2.1 Fotorresistor ====================== .. note:: .. image:: ../img/mcp3008_and_adc0834.jpg :width: 25% :align: left Dependiendo de la versión de su kit, identifique si tiene **ADC0834** o **MCP3008** y continúe con la sección correspondiente. Introducción --------------- El fotorresistor es un componente comúnmente utilizado para medir la intensidad de la luz ambiental. Ayuda al controlador a reconocer el día y la noche y realizar funciones de control de luz, como una lámpara nocturna. Este proyecto es muy similar al del potenciómetro, y podrías pensar que cambia el voltaje para detectar la luz. Componentes Necesarios ------------------------------ En este proyecto, necesitamos los siguientes componentes. .. image:: ../python_pi5/img/2.2.1_photoresistor_list.png Es definitivamente conveniente comprar un kit completo, aquí está el enlace: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nombre - ARTÍCULOS 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_led` - |link_led_buy| * - :ref:`cpn_adc0834` - \- * - :ref:`cpn_photoresistor` - |link_photoresistor_buy| Diagrama Esquemático ------------------------- .. image:: ../python_pi5/img/2.2.1_photoresistor_schematic_1.png .. image:: ../python_pi5/img/2.2.1_photoresistor_schematic_2.png Procedimientos Experimentales --------------------------------- **Paso 1:** Montar el circuito. .. image:: ../python_pi5/img/2.2.1_photoresistor_circuit.png **Paso 2:** Ir a la carpeta del código. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Paso 3:** Ejecutar el archivo ejecutable. .. raw:: html .. code-block:: sudo python3 2.2.1_Photoresistor_zero.py Cuando el código se esté ejecutando, la intensidad del LED cambiará según la intensidad de luz detectada por el fotorresistor. .. warning:: Si recibe el mensaje de error ``RuntimeError: Cannot determine SOC peripheral base address``, consulte :ref:`faq_soc` **Código** .. note:: Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Pero antes de eso, debes ir a la ruta del código fuente como ``raphael-kit/python-pi5``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto. .. raw:: html .. code-block:: python #!/usr/bin/env python3 from gpiozero import PWMLED import ADC0834 import time # Inicializar un LED PWM en el pin GPIO 22 led = PWMLED(22) # Configurar el módulo ADC0834 ADC0834.setup() # Definir una función para mapear valores de un rango a otro 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 # Bucle principal para leer el valor del ADC y controlar el brillo del LED def loop(): while True: # Leer valor analógico del ADC analogVal = ADC0834.getResult() print('value = %d' % analogVal) # Mapear el valor del ADC a un valor PWM y establecer el brillo del LED led.value = float(analogVal/255) # Esperar 0.2 segundos time.sleep(0.2) # Ejecutar el bucle principal y manejar KeyboardInterrupt para un apagado ordenado try: loop() except KeyboardInterrupt: # Apagar el LED antes de salir led.value = 0 **Explicación del Código** #. Este segmento importa la clase PWMLED de la biblioteca gpiozero, necesaria para controlar LEDs PWM. También incluye el módulo ADC0834 para la interfaz con el convertidor analógico-digital, y el módulo time para ejecutar funciones basadas en el tiempo, como sleep. .. code-block:: python #!/usr/bin/env python3 from gpiozero import PWMLED import ADC0834 import time #. Inicializa un LED PWM conectado al pin GPIO 22 y configura el módulo ADC0834, preparándolo para su uso en el proyecto. .. code-block:: python # Inicializar un LED PWM en el pin GPIO 22 led = PWMLED(22) # Configurar el módulo ADC0834 ADC0834.setup() #. Define una función para mapear un valor de entrada de un rango a otro. Esta función es crucial para traducir las lecturas del ADC en un rango adecuado para el control PWM. .. code-block:: python # Definir una función para mapear valores de un rango a otro 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 #. Esta sección contiene un bucle que lee continuamente el valor analógico del ADC0834, lo mapea a un valor PWM correspondiente y ajusta el brillo del LED. Se incluye una breve pausa (`time.sleep(0.2)`) para hacer visibles los cambios y evitar sobrecargar la CPU. .. code-block:: python # Bucle principal para leer el valor del ADC y controlar el brillo del LED def loop(): while True: # Leer valor analógico del ADC analogVal = ADC0834.getResult() print('value = %d' % analogVal) # Mapear el valor del ADC a un valor PWM y ajustar el brillo del LED led.value = float(analogVal/255) # Esperar 0.2 segundos time.sleep(0.2) #. Ejecuta la función loop e incluye el manejo de errores para un apagado ordenado en caso de una interrupción de teclado. Asegura que el LED se apague cuando se detenga el programa. .. code-block:: python # Ejecutar el bucle principal y manejar KeyboardInterrupt para un apagado ordenado try: loop() except KeyboardInterrupt: # Apagar el LED antes de salir led.value = 0