.. note::

    ¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 con otros entusiastas.

    **¿Por qué unirse?**

    - **Soporte experto**: Resuelve problemas postventa 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**: Accede anticipadamente a nuevos anuncios de productos y adelantos exclusivos.
    - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes.
    - **Promociones y sorteos festivos**: Participa en sorteos y promociones navideñas.

    👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo.

.. _4.1.11_py:

4.1.11 Indicador de Batería
===============================

Introducción
---------------

En este proyecto, haremos un dispositivo indicador de batería que pueda mostrar 
visualmente el nivel de la batería en el gráfico de barras LED.

Componentes Necesarios
--------------------------

En este proyecto, necesitamos los siguientes componentes.

.. image:: ../img/list_Battery_Indicator.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_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_bar_graph`
        - \-
    *   - :ref:`cpn_adc0834`
        - \-

Diagrama Esquemático
------------------------

============== =============== ======== ===
Nombre T-Board cableado físico 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:: ../img/Schematic_three_one5.png
   :align: center

Procedimientos Experimentales
----------------------------------

**Paso 1:** Construye el circuito.

.. image:: ../img/image248.png

**Paso 2:** Ve a la carpeta del código.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/raphael-kit/python/

**Paso 3:** Ejecuta el archivo ejecutable.

.. raw:: html

   <run></run>

.. code-block::

    sudo python3 4.1.11_BatteryIndicator.py

Después de que el programa se ejecute, conecta un cable al tercer pin del ADC0834 
y al GND por separado y luego conéctalos a los dos polos de una batería por separado. 
Podrás ver que el LED correspondiente en el gráfico de barras LED se enciende para mostrar 
el nivel de energía (rango de medición: 0-5V).

**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

    <run></run>

.. code-block:: python

    import RPi.GPIO as GPIO
    import ADC0834
    import time

    ledPins = [25, 12, 16, 20, 21, 5, 6, 13, 19, 26]

    def setup():
        GPIO.setmode(GPIO.BCM)
        ADC0834.setup()
        for i in ledPins:
            GPIO.setup(i, GPIO.OUT)
            GPIO.output(i, GPIO.HIGH)

    def LedBarGraph(value):
        for i in ledPins:
            GPIO.output(i,GPIO.HIGH)
        for i in range(value):
            GPIO.output(ledPins[i],GPIO.LOW)

    def destroy():
        GPIO.cleanup()

    def loop():
        while True:
            analogVal = ADC0834.getResult()
            LedBarGraph(int(analogVal/25))

    if __name__ == '__main__':
        setup()
        try:
            loop()
        except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the program destroy() will be executed.
            destroy()

**Explicación del Código**

.. code-block:: python

    def LedBarGraph(value):
        for i in ledPins:
            GPIO.output(i,GPIO.HIGH)
        for i in range(value):
            GPIO.output(ledPins[i],GPIO.LOW)

Esta función sirve para controlar el encendido o apagado de los **10** LEDs en el gráfico 
de barras LED. Primero, damos a estos **10** LEDs niveles altos para que estén **apagados** 
al principio, luego decidimos cuántos LEDs se encenderán cambiando el valor analógico recibido.

.. code-block:: python

    def loop():
        while True:
            analogVal = ADC0834.getResult()
            LedBarGraph(int(analogVal/25))

El valor de analogVal produce valores (**0-255**) con diferentes valores de voltaje (**0-5V**), 
por ejemplo, si se detectan 3V en una batería, el valor correspondiente **152** se muestra en el 
voltímetro.

Los **10** LEDs en el gráfico de barras LED se utilizan para mostrar las lecturas de **analogVal**
. 255/10=25, por lo que cada **25** que aumenta el valor analógico, se enciende un LED más, por 
ejemplo, si “analogVal=150 (aproximadamente 3V), se encienden 6 LEDs.”

Imagen del Fenómeno
------------------------------

.. image:: ../img/image249.jpeg
   :align: center
