.. 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()