.. 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:
2.1.7 Potentiometer
===================
.. 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
----------
Die ADC-Funktion kann verwendet werden, um analoge Signale in digitale
Signale zu konvertieren. In diesem Experiment wird ADC0834 verwendet, um die Funktion
mit ADC zu realisieren. Hier implementieren wir diesen Prozess mit einem Potentiometer.
Ein Potentiometer verändert die physikalische Größe – die Spannung, die dann durch die ADC-Funktion umgewandelt wird.
Benötigte Komponenten
---------------------
Für dieses Projekt benötigen wir die folgenden Komponenten:
.. image:: ../img/list_2.1.4_potentiometer.png
Es ist definitiv praktisch, ein komplettes Set 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 separat über die untenstehenden 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_led`
- |link_led_buy|
* - :ref:`cpn_potentiometer`
- |link_potentiometer_buy|
* - :ref:`cpn_adc0834`
- \-
Schaltplan
------------
.. image:: ../img/image311.png
.. image:: ../img/image312.png
Experimentelle Verfahren
----------------------------
**Schritt 1:** Bauen Sie den Schaltkreis.
.. image:: ../img/image180.png
.. note::
Bitte platzieren Sie den Chip entsprechend der Darstellung im Bild. Beachten Sie, dass die Rillen des Chips nach links zeigen sollten, wenn er platziert wird.
**Schritt 2:** Öffnen Sie die Code-Datei.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python/
**Schritt 3:** Starten Sie.
.. raw:: html
.. code-block::
sudo python3 2.1.7_Potentiometer.py
Nachdem der Code ausgeführt wurde, drehen Sie den Knopf am Potentiometer. Die Intensität der LED wird entsprechend verändert.
**Code**
.. note::
Sie können den untenstehenden Code **Modifizieren/Zurücksetzen/Kopieren/Starten/Stoppen**. Aber bevor Sie das tun, müssen Sie zum Quellcode-Pfad, wie ``raphael-kit/python`` 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
import RPi.GPIO as GPIO
import ADC0834
import time
LedPin = 22
def setup():
global led_val
# Set the GPIO modes to BCM Numbering
GPIO.setmode(GPIO.BCM)
# Set all LedPin's mode to output and initial level to High(3.3v)
GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH)
ADC0834.setup()
# Set led as pwm channel and frequece to 2KHz
led_val = GPIO.PWM(LedPin, 2000)
# Set all begin with value 0
led_val.start(0)
# Define a MAP function for mapping values. Like from 0~255 to 0~100
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
def destroy():
# Stop all pwm channel
led_val.stop()
# Release resource
GPIO.cleanup()
def loop():
while True:
res = ADC0834.getResult()
print ('res = %d' % res)
R_val = MAP(res, 0, 255, 0, 100)
led_val.ChangeDutyCycle(R_val)
time.sleep(0.2)
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
import ADC0834
Importieren Sie die ADC0834-Bibliothek. Den Inhalt der Bibliothek können Sie
mit dem Befehl nano ADC0834.py einsehen.
.. code-block:: python
def setup():
global led_val
# Set the GPIO modes to BCM Numbering
GPIO.setmode(GPIO.BCM)
# Set all LedPin's mode to output and initial level to High(3.3v)
GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH)
ADC0834.setup()
# Set led as pwm channel and frequece to 2KHz
led_val = GPIO.PWM(LedPin, 2000)
# Set all begin with value 0
led_val.start(0)
In setup() wird die Benennungsmethode als BCM definiert, LedPin als PWM-Kanal
festgelegt und ihm eine Frequenz von 2 kHz zugewiesen.
**ADC0834.setup():** Initialisiert ADC0834 und verbindet die definierten CS,
CLK, DIO von ADC0834 jeweils mit GPIO17, GPIO18 und GPIO27.
.. code-block:: python
def loop():
while True:
res = ADC0834.getResult()
print ('res = %d' % res)
R_val = MAP(res, 0, 255, 0, 100)
led_val.ChangeDutyCycle(R_val)
time.sleep(0.2)
Die Funktion getResult() dient zum Auslesen der analogen Werte der vier
Kanäle von ADC0834. Standardmäßig liest die Funktion den Wert von CH0.
Wenn Sie andere Kanäle auslesen möchten, geben Sie bitte die Kanalnummer
in **( )** ein, z. B. getResult(1).
Die Funktion loop() liest zuerst den Wert von CH0 und weist diesen Wert
der Variablen res zu. Danach wird die Funktion MAP aufgerufen, um den gelesenen
Wert des Potentiometers auf 0~100 abzubilden. Dieser Schritt dient zur Steuerung
des Tastverhältnisses von LedPin. Nun sollten Sie feststellen, dass die Helligkeit
der LED sich mit dem Wert des Potentiometers ändert.
Phänomen-Bild
--------------------
.. image:: ../img/image181.jpeg