.. 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_pi5:
4.1.8 Batterieanzeige
===================================
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
Abhängig von Ihrer Kit-Version identifizieren Sie bitte, ob Sie **ADC0834** oder **MCP3008** haben, und fahren Sie mit dem entsprechenden Abschnitt fort.
Einführung
--------------
In diesem Projekt werden wir eine Batterieanzeige bauen, die den Batteriestatus visuell auf dem LED-Balkendiagramm anzeigt.
.. warning::
Verwenden Sie keine Batteriekomponenten, die 3,3 V überschreiten, um eine Überlastung zu vermeiden, die den Chip oder den Raspberry Pi beschädigen könnte.
Benötigte Komponenten
------------------------------
Für dieses Projekt benötigen wir die folgenden Komponenten.
.. image:: ../python_pi5/img/4.1.11_battery_indicator_list.png
:align: center
Es ist definitiv praktisch, ein komplettes 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 sie auch einzeln über die untenstehenden Links kaufen.
.. list-table::
:widths: 30 20
:header-rows: 1
* - KOMPONENTENVORSTELLUNG
- 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:: ../python_pi5/img/4.1.11_battery_indicator_schematic.png
:align: center
Experimentelle Verfahren
-----------------------------------
**Schritt 1:** Bauen Sie den Schaltkreis auf.
.. image:: ../python_pi5/img/4.1.11_battery_indicator_circuit.png
**Schritt 2:** Gehen Sie in den Ordner des Codes.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Schritt 3:** Führen Sie die ausführbare Datei aus.
.. raw:: html
.. code-block::
sudo python3 4.1.11_BatteryIndicator_zero.py
Nachdem das Programm ausgeführt wurde, geben Sie dem 3. Pin des ADC0834 und dem GND jeweils ein Anschlusskabel und führen Sie diese dann separat an die beiden Pole einer Batterie. Sie können sehen, wie die entsprechende LED auf dem LED-Balkendiagramm aufleuchtet, um den Ladestand anzuzeigen (Messbereich: 0-5V).
.. warning::
Wenn die Fehlermeldung ``RuntimeError: Cannot determine SOC peripheral base address`` angezeigt wird, lesen Sie bitte :ref:`faq_soc`
**Code**
.. note::
Sie können den untenstehenden Code **Modifizieren/Zurücksetzen/Kopieren/Ausführen/Stoppen**. Aber zuerst müssen Sie zum Quellcodepfad wie ``raphael-kit/python-pi5`` gehen. Nach der Modifikation des Codes können Sie ihn direkt ausführen, um das Ergebnis zu sehen.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import LED
import ADC0834
import time
# List of GPIO pins to which LEDs are connected
ledPins = [25, 12, 16, 20, 21, 5, 6, 13, 19, 26]
# Initialize LED objects for each pin in the list
leds = [LED(pin) for pin in ledPins]
# Setup ADC0834 module
ADC0834.setup()
def LedBarGraph(value):
# Turn off all LEDs
for i in range(10):
leds[i].off()
# Turn on LEDs up to the specified value
for i in range(value):
leds[i].on()
try:
# Main loop to continuously update LED bar graph
while True:
# Read analog value from ADC0834
analogVal = ADC0834.getResult()
# Convert analog value to LED bar graph level
LedBarGraph(int(analogVal/25))
except KeyboardInterrupt:
# Turn off all LEDs when program is interrupted
for i in range(10):
leds[i].off()
**Code-Erklärung**
#. Dieser Abschnitt importiert die notwendigen Bibliotheken. ``gpiozero`` wird zur Steuerung der LEDs verwendet, ``ADC0834`` zur Schnittstelle mit dem ADC-Modul und ``time`` für zeitbezogene Operationen.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import LED
import ADC0834
import time
#. Definiert die GPIO-Pins, an die die LEDs angeschlossen sind, und initialisiert ein Array von LED-Objekten für jeden Pin. Dies ermöglicht eine einfache Steuerung jeder LED im Array.
.. code-block:: python
# List of GPIO pins to which LEDs are connected
ledPins = [25, 12, 16, 20, 21, 5, 6, 13, 19, 26]
# Initialize LED objects for each pin in the list
leds = [LED(pin) for pin in ledPins]
#. Initialisiert das ADC0834-Modul für die Analog-Digital-Umwandlung.
.. code-block:: python
# Setup ADC0834 module
ADC0834.setup()
#. Diese Funktion schaltet alle LEDs aus und schaltet dann eine Anzahl von LEDs basierend auf dem Eingabewert ein, wodurch effektiv eine Balkendiagrammdarstellung erzeugt wird.
.. code-block:: python
def LedBarGraph(value):
# Turn off all LEDs
for i in range(10):
leds[i].off()
# Turn on LEDs up to the specified value
for i in range(value):
leds[i].on()
#. Liest kontinuierlich den analogen Wert vom ADC0834 und aktualisiert das LED-Balkendiagramm basierend auf diesem Wert. Der analoge Wert wird auf einen Bereich von 0-10 für die 10 LEDs skaliert.
.. code-block:: python
try:
# Main loop to continuously update LED bar graph
while True:
# Read analog value from ADC0834
analogVal = ADC0834.getResult()
# Convert analog value to LED bar graph level
LedBarGraph(int(analogVal/25))
#. Stellt sicher, dass alle LEDs ausgeschaltet werden, wenn das Programm unterbrochen wird (z.B. durch Drücken von Ctrl+C).
.. code-block:: python
except KeyboardInterrupt:
# Turn off all LEDs when program is interrupted
for i in range(10):
leds[i].off()