.. note::
Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 con altri appassionati.
**Perché Unirti?**
- **Supporto Tecnico Esperto**: Risolvi i problemi post-vendita e le sfide tecniche con l'aiuto della nostra comunità e del nostro team.
- **Impara e Condividi**: Scambia consigli e tutorial per migliorare le tue competenze.
- **Anteprime Esclusive**: Ottieni accesso anticipato alle novità sui nuovi prodotti e alle anteprime.
- **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
- **Promozioni Festive e Giveaway**: Partecipa a giveaway e promozioni festive.
👉 Sei pronto a esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti oggi stesso!
.. _2.2.4_py_pi5:
2.2.4 Modulo Interruttore Reed
==================================
Introduzione
---------------
In questo progetto, impareremo a conoscere l'interruttore reed, che è un interruttore elettrico che funziona mediante un campo magnetico applicato.
Componenti Necessari
-----------------------
Per questo progetto, avremo bisogno dei seguenti componenti.
.. image:: ../python_pi5/img/2.2.4_reed_switch_list.png
:width: 700
:align: center
È decisamente comodo acquistare un kit completo, ecco il link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nome
- COMPONENTI NEL KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Puoi anche acquistarli separatamente dai link sottostanti.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUZIONE AI COMPONENTI
- LINK D'ACQUISTO
* - :ref:`cpn_gpio_extension_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_reed_switch`
- |link_reed_switch_buy|
Schema Elettrico
--------------------
============ ======== ======== ===
T-Board Name physical wiringPi BCM
GPIO17 Pin 11 0 17
GPIO27 Pin 13 2 27
GPIO22 Pin 15 3 22
============ ======== ======== ===
.. image:: ../python_pi5/img/2.2.4_reed_switch_schematic_1.png
:width: 400
:align: center
.. image:: ../python_pi5/img/2.2.4_reed_switch_schematic_2.png
:width: 400
:align: center
Procedure Sperimentali
-----------------------------
**Passo 1:** Costruisci il circuito.
.. image:: ../python_pi5/img/2.2.4_reed_switch_circuit.png
:width: 700
:align: center
**Passo 2:** Cambia directory.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Passo 3:** Esegui.
.. raw:: html
.. code-block::
sudo python3 2.2.4_ReedSwitch_zero.py
Quando il codice viene eseguito, il LED verde si accenderà. Se un magnete viene posto vicino al modulo interruttore reed, il LED rosso si accenderà; allontanando il magnete, il LED verde si riaccenderà.
.. warning::
Se viene visualizzato l'errore ``RuntimeError: Cannot determine SOC peripheral base address``, fare riferimento a :ref:`faq_soc`..
**Code**
.. note::
Puoi **Modificare/Resettare/Copiare/Eseguire/Fermare** il codice qui sotto. Ma prima, devi andare al percorso sorgente del codice come ``raphael-kit/python-pi5``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l'effetto.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import LED, Button
# Inizializza l'interruttore reed e i LED utilizzando GPIO Zero
reed_switch = Button(17, pull_up=True) # Interruttore reed su GPIO 17, utilizzando una resistenza di pull-up interna
green_led = LED(27) # LED verde collegato al pin GPIO 27
red_led = LED(22) # LED rosso collegato al pin GPIO 22
def update_leds():
"""
Update the state of the LEDs based on the reed switch.
Turns the red LED on and green LED off when the reed switch is pressed, and vice versa.
"""
if reed_switch.is_pressed:
green_led.off() # Spegne il LED verde
red_led.on() # Accende il LED rosso
else:
green_led.on() # Accende il LED verde
red_led.off() # Spegne il LED rosso
try:
green_led.on() # Accende il LED verde all'inizio
while True:
# Imposta le funzioni di callback per i cambiamenti di stato dell'interruttore reed
reed_switch.when_pressed = update_leds # Callback quando l'interruttore viene attivato
reed_switch.when_released = update_leds # Callback quando l'interruttore viene disattivato
except KeyboardInterrupt:
# Pulisce le risorse e esce con Ctrl+C
green_led.off()
red_led.off()
pass
**Spiegazione del Codice**
#. Questa linea specifica che lo script deve essere eseguito utilizzando Python 3. Importa ``LED`` e ``Button`` (utilizzati per l'interruttore reed) dalla libreria gpiozero.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import LED, Button
#. Inizializza l'interruttore reed sul pin GPIO 17 con una resistenza di pull-up interna. Inizializza anche due LED collegati ai pin GPIO 27 e 22.
.. code-block:: python
# Inizializza l'interruttore reed e i LED utilizzando GPIO Zero
reed_switch = Button(17, pull_up=True) # Interruttore reed su GPIO 17, utilizzando una resistenza di pull-up interna
green_led = LED(27) # LED verde collegato al pin GPIO 27
red_led = LED(22) # LED rosso collegato al pin GPIO 22
#. Definisce la funzione ``update_leds``, che aggiorna lo stato dei LED in base allo stato dell'interruttore reed. Il LED rosso si accende e il LED verde si spegne quando l'interruttore viene attivato, e il contrario quando viene rilasciato.
.. code-block:: python
def update_leds():
if reed_switch.is_pressed:
green_led.off() # Spegne il LED verde
red_led.on() # Accende il LED rosso
else:
green_led.on() # Accende il LED verde
red_led.off() # Spegne il LED rosso
#. Imposta lo stato iniziale del LED verde su acceso. Il ciclo principale assegna la funzione ``update_leds`` come callback per gli eventi ``when_pressed`` e ``when_released`` dell'interruttore reed. Include la gestione delle eccezioni per KeyboardInterrupt per pulire e uscire dal programma in modo ordinato.
.. code-block:: python
try:
green_led.on() # Accende il LED verde all'inizio
while True:
# Imposta le funzioni di callback per i cambiamenti di stato dell'interruttore reed
reed_switch.when_pressed = update_leds # Callback quando l'interruttore viene attivato
reed_switch.when_released = update_leds # Callback quando l'interruttore viene disattivato
except KeyboardInterrupt:
# Pulisce le risorse e esce con Ctrl+C
green_led.off()
red_led.off()
pass