.. 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!
.. _1.3.3_py_pi5:
1.3.3 Relais
=====================
Einleitung
------------------
In diesem Projekt lernen wir den Einsatz eines Relais kennen. Es ist eine der häufig verwendeten Komponenten in automatischen Steuerungssystemen. Wenn Spannung, Strom, Temperatur, Druck usw. einen vorbestimmten Wert erreichen, überschreiten oder unterschreiten, wird das Relais den Stromkreis schließen oder unterbrechen, um die Ausrüstung zu steuern und zu schützen.
Benötigte Komponenten
---------------------------
Für dieses Projekt benötigen wir die folgenden Komponenten.
.. image:: ../python_pi5/img/1.3.3_relay_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_transistor`
- |link_transistor_buy|
* - :ref:`cpn_relay`
- |link_relay_buy|
* - :ref:`cpn_diode`
- |link_diode_buy|
Schaltplan
-----------------
.. image:: ../python_pi5/img/1.3.3_relay_schematic.png
Experimentelle Verfahren
---------------------------------
**Schritt 1:** Bauen Sie den Schaltkreis auf.
.. image:: ../python_pi5/img/1.3.3_relay_circuit.png
**Schritt 2:** Öffnen Sie die Code-Datei.
.. 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 1.3.3_Relay_zero.py
Während der Code läuft, leuchtet die LED auf. Zusätzlich kann man ein Klicken hören, verursacht durch das Öffnen des normalerweise geschlossenen Kontakts und das Schließen des normalerweise offenen Kontakts.
.. 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 OutputDevice # Import the class for controlling GPIO pins
from time import sleep # Import the sleep function for delay
# Initialize the relay connected to GPIO pin 17, starting in the 'off' state
relay = OutputDevice(17, initial_value=False)
try:
# Loop to continuously toggle the relay's state every second
while True:
print('Relay open...') # Inform that the relay is being activated
relay.on() # Turn on the relay (assuming active low configuration)
sleep(1) # Maintain the relay in the on state for 1 second
print('...Relay close') # Inform that the relay is being deactivated
relay.off() # Turn off the relay
sleep(1) # Maintain the relay in the off state for 1 second
except KeyboardInterrupt:
# Handle a keyboard interrupt (Ctrl+C) to exit the loop
relay.off() # Ensure the relay is turned off before exiting
pass
**Code-Erklärung**
#. Es importiert ``OutputDevice`` aus ``gpiozero`` zur Steuerung von GPIO-Pins und ``sleep`` aus ``time`` für Verzögerungen.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import OutputDevice # Import the class for controlling GPIO pins
from time import sleep # Import the sleep function for delay
#. Initialisiert ein ``OutputDevice``-Objekt für das Relais, verbunden mit GPIO-Pin 17. ``initial_value=False`` setzt das Relais anfänglich in den Zustand „aus“ (unter der Annahme einer aktiven Low-Konfiguration).
.. code-block:: python
# Initialize the relay connected to GPIO pin 17, starting in the 'off' state
relay = OutputDevice(17, initial_value=False)
#. Im ``try``-Block befindet sich eine ``while True``-Schleife, die den Zustand des Relais kontinuierlich umschaltet. Das Relais wird ein- und ausgeschaltet, jeweils mit einer 1-Sekunden-Verzögerung zwischen den Zuständen, begleitet von Konsolenausgaben.
.. code-block:: python
try:
# Loop to continuously toggle the relay's state every second
while True:
print('Relay open...') # Inform that the relay is being activated
relay.on() # Turn on the relay (assuming active low configuration)
sleep(1) # Maintain the relay in the on state for 1 second
print('...Relay close') # Inform that the relay is being deactivated
relay.off() # Turn off the relay
sleep(1) # Maintain the relay in the off state for 1 second
#. Fängt eine Tastaturunterbrechung (wie Strg+C) ab, um das Skript anmutig zu beenden. Das Relais wird vor dem Beenden des Skripts ausgeschaltet.
.. code-block:: python
except KeyboardInterrupt:
# Handle a keyboard interrupt (Ctrl+C) to exit the loop
relay.off() # Ensure the relay is turned off before exiting
pass