.. note:: ¡Hola, bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas. **¿Por qué unirte?** - **Soporte Experto**: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo. - **Aprende y Comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Preestrenos Exclusivos**: Obtén acceso anticipado a anuncios de nuevos productos y avances exclusivos. - **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 mismo! .. _4.1.11_py_pi5: 4.1.8 Indicador de Batería ====================================== .. 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 ----------------- En este proyecto, crearemos un dispositivo indicador de batería que puede mostrar visualmente el nivel de la batería en la barra de LED. .. warning:: No utilices componentes de batería que superen los 3.3V para evitar sobrecargas, lo que puede dañar el chip o la Raspberry Pi. Componentes Necesarios --------------------------------- En este proyecto, necesitamos los siguientes componentes. .. image:: ../python_pi5/img/4.1.11_battery_indicator_list.png :align: center 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_bar_graph` - \- * - :ref:`cpn_adc0834` - \- Diagrama Esquemático ------------------------ ============== ====== ======== === Nombre T-Board física WiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 GPIO25 Pin 22 6 25 GPIO12 Pin 32 26 12 GPIO16 Pin 36 27 16 GPIO20 Pin 38 28 20 GPIO21 Pin 40 29 21 GPIO5 Pin 29 21 5 GPIO6 Pin 31 22 6 GPIO13 Pin 33 23 13 GPIO19 Pin 35 24 19 GPIO26 Pin 37 25 26 ============== ====== ======== === .. image:: ../python_pi5/img/4.1.11_battery_indicator_schematic.png :align: center Procedimientos Experimentales --------------------------------- **Paso 1:** Construye el circuito. .. image:: ../python_pi5/img/4.1.11_battery_indicator_circuit.png **Paso 2:** Ve a la carpeta del código. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Paso 3:** Ejecuta el archivo ejecutable. .. raw:: html .. code-block:: sudo python3 4.1.11_BatteryIndicator_zero.py Después de que el programa se ejecute, conecta un cable de salida desde el 3er pin del ADC0834 y el GND, y luego llévalos a los dos polos de una batería por separado. Podrás ver que el LED correspondiente en la barra de LED se enciende para mostrar el nivel de energía (rango de medición: 0-5V). .. 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, necesitas 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 LED import ADC0834 import time # Lista de pines GPIO a los que están conectados los LEDs ledPins = [25, 12, 16, 20, 21, 5, 6, 13, 19, 26] # Inicializar objetos LED para cada pin en la lista leds = [LED(pin) for pin in ledPins] # Configurar módulo ADC0834 ADC0834.setup() def LedBarGraph(value): # Apagar todos los LEDs for i in range(10): leds[i].off() # Encender LEDs hasta el valor especificado for i in range(value): leds[i].on() try: # Bucle principal para actualizar continuamente la barra de LEDs while True: # Leer valor analógico del ADC0834 analogVal = ADC0834.getResult() # Convertir valor analógico a nivel de barra de LEDs LedBarGraph(int(analogVal/25)) except KeyboardInterrupt: # Apagar todos los LEDs cuando se interrumpe el programa for i in range(10): leds[i].off() **Explicación del Código** #. Esta sección importa las bibliotecas necesarias. ``gpiozero`` es para controlar los LEDs, ``ADC0834`` para interactuar con el módulo ADC, y ``time`` para operaciones relacionadas con el tiempo. .. code-block:: python #!/usr/bin/env python3 from gpiozero import LED import ADC0834 import time #. Define los pines GPIO a los que están conectados los LEDs e inicializa un arreglo de objetos LED para cada pin. Esto permite un control fácil de cada LED en el arreglo. .. code-block:: python # Lista de pines GPIO a los que están conectados los LEDs ledPins = [25, 12, 16, 20, 21, 5, 6, 13, 19, 26] # Inicializar objetos LED para cada pin en la lista leds = [LED(pin) for pin in ledPins] #. Inicializa el módulo ADC0834 para la conversión de analógico a digital. .. code-block:: python # Configurar módulo ADC0834 ADC0834.setup() #. Esta función apaga todos los LEDs y luego enciende un número de LEDs basado en el valor de entrada, creando efectivamente una representación de gráfico de barras. .. code-block:: python def LedBarGraph(value): # Apagar todos los LEDs for i in range(10): leds[i].off() # Encender LEDs hasta el valor especificado for i in range(value): leds[i].on() #. Lee continuamente el valor analógico del ADC0834 y actualiza la barra de LEDs basada en este valor. El valor analógico se escala a un rango de 0-10 para los 10 LEDs. .. code-block:: python try: # Bucle principal para actualizar continuamente la barra de LEDs while True: # Leer valor analógico del ADC0834 analogVal = ADC0834.getResult() # Convertir valor analógico a nivel de barra de LEDs LedBarGraph(int(analogVal/25)) #. Asegura que todos los LEDs estén apagados cuando el programa se interrumpe (por ejemplo, al presionar Ctrl+C). .. code-block:: python except KeyboardInterrupt: # Apagar todos los LEDs cuando se interrumpe el programa for i in range(10): leds[i].off()