.. 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