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