.. note:: ¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Únete a otros entusiastas y explora más a fondo Raspberry Pi, Arduino y ESP32. **¿Por qué unirse?** - **Soporte de expertos**: 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. - **Vistas previas exclusivas**: Obtén acceso anticipado a anuncios de nuevos productos y adelantos. - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes. - **Promociones festivas y sorteos**: Participa en sorteos y promociones de temporada. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo. .. _py_pi5_btr_indicator: 3.1.5 Indicador de Batería ============================= .. note:: .. image:: ../img/mcp3008_and_adc0834.jpg :width: 25% :align: left Dependiendo de la versión de tu kit, identifica si tienes **ADC0834** o **MCP3008** y procede con la sección correspondiente. Introducción --------------- En este proyecto, crearemos un dispositivo de indicador de batería que muestra visualmente el nivel de batería en el Bargraph LED. 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 .. - 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 AL COMPONENTE .. - ENLACE DE COMPRA .. * - :ref:`gpio_extension_board` .. - |link_gpio_board_buy| .. * - :ref:`breadboard` .. - |link_breadboard_buy| .. * - :ref:`wires` .. - |link_wires_buy| .. * - :ref:`resistor` .. - |link_resistor_buy| .. * - :ref:`bar_graph` .. - \- .. * - :ref:`adc0834` .. - \- Diagrama Esquemático ------------------------ ============ ======== ======== === T-Board Name physical 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:** Construir el circuito. .. image:: ../python_pi5/img/4.1.11_battery_indicator_circuit.png **Paso 2:** Ir a la carpeta del código. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/python-pi5 **Paso 3:** Ejecutar el archivo ejecutable. .. raw:: html .. code-block:: sudo python3 3.1.5_BatteryIndicator.py Después de ejecutar el programa, conecta un cable desde el tercer pin del ADC0834 y otro desde el GND, y dirígelos a los dos polos de una batería. Verás que el LED correspondiente en el Bargraph LED se ilumina para mostrar el nivel de carga (rango de medición: 0-5V). .. warning:: Si aparece el error ``RuntimeError: Cannot determine SOC peripheral base address``, consulta :ref:`faq_soc` **Código** .. note:: Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Pero antes, debes ir a la ruta del código fuente, como ``davinci-kit-for-raspberry-pi/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] # Inicializa objetos LED para cada pin en la lista leds = [LED(pin) for pin in ledPins] # Configura el módulo ADC0834 ADC0834.setup() def LedBarGraph(value): # Apaga todos los LEDs for i in range(10): leds[i].off() # Enciende LEDs hasta el valor especificado for i in range(value): leds[i].on() try: # Bucle principal para actualizar continuamente el gráfico de barras de LEDs while True: # Lee el valor analógico del ADC0834 analogVal = ADC0834.getResult() # Convierte el valor analógico al nivel del gráfico de barras LED LedBarGraph(int(analogVal/25)) except KeyboardInterrupt: # Apaga 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 la interfaz 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 una matriz de objetos LED para cada pin, lo que permite un control fácil de cada LED en la matriz. .. 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] # Inicializa 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 # Configura el 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 gráfica de barras. .. code-block:: python def LedBarGraph(value): # Apaga todos los LEDs for i in range(10): leds[i].off() # Enciende LEDs hasta el valor especificado for i in range(value): leds[i].on() #. Lee continuamente el valor analógico del ADC0834 y actualiza el gráfico de barras de LEDs según este valor. El valor analógico se reduce a un rango de 0-10 para los 10 LEDs. .. code-block:: python try: # Bucle principal para actualizar continuamente el gráfico de barras LED while True: # Lee el valor analógico del ADC0834 analogVal = ADC0834.getResult() # Convierte el valor analógico al nivel del gráfico de barras LED LedBarGraph(int(analogVal/25)) #. Asegura que todos los LEDs se apaguen cuando se interrumpe el programa (por ejemplo, al presionar Ctrl+C). .. code-block:: python except KeyboardInterrupt: # Apaga todos los LEDs cuando se interrumpe el programa for i in range(10): leds[i].off()