.. note::

    Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

    **Warum beitreten?**

    - **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
    - **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
    - **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
    - **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
    - **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

    👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!

.. _4.1.11_py:

4.1.11 Batterieanzeige
===================================

Einführung
--------------

In diesem Projekt werden wir ein Gerät für die Batterieanzeige erstellen, welches
den Batteriestatus visuell auf der LED-Balkenanzeige darstellen kann.

Benötigte Komponenten
------------------------------

Für dieses Projekt benötigen wir folgende Komponenten.

.. image:: ../img/list_Battery_Indicator.png
    :align: center

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

.. list-table::
    :widths: 20 20 20
    :header-rows: 1

    *   - Name	
        - ARTIKEL IN DIESEM KIT
        - LINK
    *   - Raphael Kit
        - 337
        - |link_Raphael_kit|

Sie können diese auch einzeln über die folgenden Links kaufen.

.. list-table::
    :widths: 30 20
    :header-rows: 1

    *   - KOMPONENTENBESCHREIBUNG
        - KAUF-LINK

    *   - :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`
        - \-

Schaltplan
-------------------

============ ======== ======== ===
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:: ../img/Schematic_three_one5.png
   :align: center

Experimentelle Verfahren
-------------------------

**Schritt 1:** Schaltung aufbauen.

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

**Schritt 2:** Zum Ordner des Codes navigieren.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/raphael-kit/python/

**Schritt 3:** Die ausführbare Datei starten.

.. raw:: html

   <run></run>

.. code-block::

    sudo python3 4.1.11_BatteryIndicator.py

Nachdem das Programm gestartet ist, verbinden Sie den 3. Pin des ADC0834 und den GND 
mit jeweils einem Draht und führen Sie diese dann zu den beiden Polen einer 
Batterie. Sie können sehen, dass die entsprechende LED auf der LED-Balkenanzeige 
aufleuchtet, um den Ladestand anzuzeigen (Messbereich: 0-5V).

**Code**

.. note::
    Sie können den untenstehenden Code **Modifizieren/Zurücksetzen/Kopieren/Starten/Stoppen**. Aber zuvor müssen Sie zum Quellcode-Pfad wie ``raphael-kit/python`` navigieren. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um den Effekt zu sehen.

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

**Code-Erklärung**

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

Diese Funktion dient dazu, das Ein- oder Ausschalten der **10** 
LEDs auf der LED-Balkenanzeige zu steuern. Zuerst schalten wir diese **10** 
LEDs durch hohe Pegel **aus** und entscheiden dann, wie viele LEDs 
leuchten, indem wir den empfangenen Analogwert ändern.

.. code-block:: python

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

analogVal liefert Werte (**0-255**) basierend auf unterschiedlichen Spannungswerten 
(**0-5V**). Zum Beispiel, wenn eine Spannung von 3V an einer Batterie erkannt wird, 
wird der entsprechende Wert **152** auf dem Voltmeter angezeigt.

Die **10** LEDs auf der LED-Balkenanzeige dienen zur Anzeige der 
**analogVal**-Messwerte. 255/10=25, das bedeutet, dass für alle **25**, 
um die der Analogwert steigt, eine weitere LED eingeschaltet wird. Zum Beispiel, 
wenn "analogVal=150 (etwa 3V) sind, leuchten 6 LEDs."

Phänomen-Bild
------------------------------

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