.. 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!
.. _2.1.7_py_pi5:
2.1.7 Potenziometer
=============================
.. 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.
Einleitung
-------------------
Die ADC-Funktion kann verwendet werden, um analoge Signale in digitale Signale umzuwandeln. In diesem Experiment wird ADC0834 verwendet, um die Funktion mit ADC einzubeziehen. Hier implementieren wir diesen Prozess mit einem Potenziometer. Ein Potenziometer ändert die physikalische Größe -- Spannung, die durch die ADC-Funktion umgewandelt wird.
Benötigte Komponenten
-----------------------------
Für dieses Projekt benötigen wir die folgenden Komponenten.
.. image:: ../python_pi5/img/2.1.7_potentiometer_list.png
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Name
- IN DIESEM KIT ENTHALTENE TEILE
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Sie können sie auch separat über die unten stehenden 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_potentiometer`
- |link_potentiometer_buy|
* - :ref:`cpn_adc0834`
- \-
Schaltplan
--------------------
.. image:: ../python_pi5/img/2.1.7_potentiometer_second_1.png
.. image:: ../python_pi5/img/2.1.7_potentiometer_second_2.png
Experimentelle Verfahren
--------------------------------
**Schritt 1:** Bauen Sie den Schaltkreis auf.
.. image:: ../python_pi5/img/2.1.7_Potentiometer_circuit.png
.. note::
Bitte platzieren Sie den Chip entsprechend der Abbildung im Bild. Beachten Sie, dass die Kerben auf dem Chip links sein sollten, wenn er platziert wird.
**Schritt 2:** Öffnen Sie die Code-Datei
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Schritt 3:** Führen Sie den Code aus.
.. raw:: html
.. code-block::
sudo python3 2.1.7_Potentiometer_zero.py
Nachdem der Code ausgeführt wurde, drehen Sie den Knopf am Potenziometer, die Intensität der LED ändert sich entsprechend.
.. 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 unten stehenden Code **modifizieren/zurücksetzen/kopieren/ausführen/stoppen**. Aber zuvor müssen Sie zum Quellcodepfad wie ``raphael-kit/python-pi5`` gehen. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um den Effekt zu sehen.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import PWMLED
import ADC0834
import time
# Initialize a PWM LED on GPIO pin 22
led = PWMLED(22)
# Set up the ADC0834 module
ADC0834.setup()
def MAP(x, in_min, in_max, out_min, out_max):
"""
Map a value from one range to another.
:param x: The value to be mapped.
:param in_min: The lower bound of the value's current range.
:param in_max: The upper bound of the value's current range.
:param out_min: The lower bound of the value's target range.
:param out_max: The upper bound of the value's target range.
:return: The mapped value.
"""
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
try:
while True:
# Get the current reading from the ADC0834 module
res = ADC0834.getResult()
print('res = %d' % res)
# Map the ADC value to a range suitable for setting LED brightness
R_val = MAP(res, 0, 255, 0, 100)
# Set the LED brightness
led.value = float(R_val / 100)
# Wait for 0.2 seconds before reading again
time.sleep(0.2)
# Graceful exit when 'Ctrl+C' is pressed
except KeyboardInterrupt:
led.value = 0 # Turn off the LED
**Code-Erklärung**
#. Importiert ``PWMLED`` aus ``gpiozero`` für die PWM LED-Steuerung, ``ADC0834`` für die Analog-Digital-Umwandlung und ``time`` für Verzögerungen.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import PWMLED
import ADC0834
import time
#. Initialisiert ein PWMLED-Objekt verbunden mit GPIO-Pin 22 und richtet den ADC0834-Wandler ein.
.. code-block:: python
# Initialize a PWM LED on GPIO pin 22
led = PWMLED(22)
# Set up the ADC0834 module
ADC0834.setup()
#. Definiert eine Funktion mit dem Namen ``MAP``, um einen Wertebereich in einen anderen zu konvertieren, nützlich für die Zuordnung von ADC-Werten zu angemessenen LED-Helligkeitsstufen.
.. code-block:: python
def MAP(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
#. Liest kontinuierlich den ADC-Wert in einer Schleife, ordnet den ADC-Wert (0-255) einer Helligkeitsstufe (0-100) für die LED zu. Stellt die LED-Helligkeit basierend auf diesem zugeordneten Wert ein. Führt eine Verzögerung von 0,2 Sekunden für eine bessere Lesbarkeit und Stabilität ein.
.. code-block:: python
try:
while True:
# Get the current reading from the ADC0834 module
res = ADC0834.getResult()
print('res = %d' % res)
# Map the ADC value to a range suitable for setting LED brightness
R_val = MAP(res, 0, 255, 0, 100)
# Set the LED brightness
led.value = float(R_val / 100)
# Wait for 0.2 seconds before reading again
time.sleep(0.2)
# Graceful exit when 'Ctrl+C' is pressed
except KeyboardInterrupt:
led.value = 0 # Turn off the LED