.. 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.2.1_py_pi5:
2.2.1 Fotowiderstand
=========================
.. 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
-----------------
Ein Fotowiderstand ist eine häufig verwendete Komponente zur Messung der Lichtintensität im Alltag. Er hilft dem Controller, Tag und Nacht zu erkennen und Lichtsteuerungsfunktionen wie Nachtlicht zu realisieren. Dieses Projekt ähnelt sehr einem Potentiometer, und man könnte meinen, es ändert die Spannung, um Licht zu erfassen.
Benötigte Komponenten
-------------------------------
Für dieses Projekt benötigen wir die folgenden Komponenten.
.. image:: ../python_pi5/img/2.2.1_photoresistor_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_resistor`
- |link_resistor_buy|
* - :ref:`cpn_led`
- |link_led_buy|
* - :ref:`cpn_adc0834`
- \-
* - :ref:`cpn_photoresistor`
- |link_photoresistor_buy|
Schaltplan
--------------------
.. image:: ../python_pi5/img/2.2.1_photoresistor_schematic_1.png
.. image:: ../python_pi5/img/2.2.1_photoresistor_schematic_2.png
Experimentelle Verfahren
----------------------------------
**Schritt 1:** Bauen Sie den Schaltkreis auf.
.. image:: ../python_pi5/img/2.2.1_photoresistor_circuit.png
**Schritt 2:** Wechseln Sie zum 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 2.2.1_Photoresistor_zero.py
Wenn der Code läuft, ändert sich die Helligkeit der LED entsprechend der vom Fotowiderstand erfassten Lichtintensität.
.. 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()
# Define a function for mapping values from one range to another
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
# Main loop for reading ADC value and controlling LED brightness
def loop():
while True:
# Read analog value from ADC
analogVal = ADC0834.getResult()
print('value = %d' % analogVal)
# Map the ADC value to a PWM value and set LED brightness
led.value = float(analogVal/255)
# Wait for 0.2 seconds
time.sleep(0.2)
# Run the main loop and handle KeyboardInterrupt for graceful shutdown
try:
loop()
except KeyboardInterrupt:
# Turn off LED before exiting
led.value = 0
**Code-Erklärung**
#. Dieser Abschnitt importiert die Klasse PWMLED aus der gpiozero-Bibliothek, die für die Steuerung von PWM-LEDs erforderlich ist. Es werden auch das ADC0834-Modul für die Schnittstelle mit dem Analog-Digital-Wandler und das time-Modul für zeitbasierte Funktionen wie sleep importiert.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import PWMLED
import ADC0834
import time
#. Initialisiert eine PWM-LED, die mit dem GPIO-Pin 22 verbunden ist, und richtet das ADC0834-Modul ein, um es im Projekt zu verwenden.
.. code-block:: python
# Initialize a PWM LED on GPIO pin 22
led = PWMLED(22)
# Set up the ADC0834 module
ADC0834.setup()
#. Definiert eine Funktion zur Umrechnung eines Eingabewertes von einem Bereich in einen anderen. Diese Funktion ist entscheidend für die Übersetzung der ADC-Lesungen in einen geeigneten Bereich für die PWM-Steuerung.
.. code-block:: python
# Define a function for mapping values from one range to another
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
#. Dieser Abschnitt enthält eine Schleife, die kontinuierlich den analogen Wert vom ADC0834 liest, ihn in einen entsprechenden PWM-Wert umrechnet und die LED-Helligkeit anpasst. Eine kurze Verzögerung (`time.sleep(0.2)`) ist enthalten, um die Änderungen sichtbar zu machen und eine Überlastung der CPU zu vermeiden.
.. code-block:: python
# Main loop for reading ADC value and controlling LED brightness
def loop():
while True:
# Read analog value from ADC
analogVal = ADC0834.getResult()
print('value = %d' % analogVal)
# Map the ADC value to a PWM value and set LED brightness
led.value = float(analogVal/255)
# Wait for 0.2 seconds
time.sleep(0.2)
#. Führt die Funktion loop aus und beinhaltet Fehlerbehandlung für einen anmutigen Abbruch bei KeyboardInterrupt. Es wird sichergestellt, dass die LED ausgeschaltet ist, wenn das Programm gestoppt wird.
.. code-block:: python
# Run the main loop and handle KeyboardInterrupt for graceful shutdown
try:
loop()
except KeyboardInterrupt:
# Turn off LED before exiting
led.value = 0