Nota

¡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 [Aquí] y únete hoy mismo!

4.1.8 Indicador de Batería

Nota

../_images/mcp3008_and_adc0834.jpg

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.

Advertencia

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.

../_images/4.1.11_battery_indicator_list.png

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ARTÍCULOS EN ESTE KIT

ENLACE

Kit Raphael

337

Raphael Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Resistor

COMPRAR

Gráfico de Barras LED

-

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

../_images/4.1.11_battery_indicator_schematic.png

Procedimientos Experimentales

Paso 1: Construye el circuito.

../_images/4.1.11_battery_indicator_circuit.png

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

cd ~/raphael-kit/python-pi5

Paso 3: Ejecuta el archivo ejecutable.

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

Advertencia

Si recibe el mensaje de error RuntimeError: Cannot determine SOC peripheral base address, consulte Si «gpiozero» no funciona.

Código

Nota

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.

#!/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

  1. 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.

    #!/usr/bin/env python3
    from gpiozero import LED
    import ADC0834
    import time
    
  2. 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.

    # 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]
    
  3. Inicializa el módulo ADC0834 para la conversión de analógico a digital.

    # Configurar módulo ADC0834
    ADC0834.setup()
    
  4. 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.

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

    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))
    
  6. Asegura que todos los LEDs estén apagados cuando el programa se interrumpe (por ejemplo, al presionar Ctrl+C).

    except KeyboardInterrupt:
        # Apagar todos los LEDs cuando se interrumpe el programa
        for i in range(10):
            leds[i].off()