.. note:: Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati. **Perché unirti a noi?** - **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 agli annunci di 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 durante le festività. 👉 Sei pronto a esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti oggi stesso! .. _2.1.5_py_pi5: 2.1.5 Interruttore di Inclinazione ================================== Introduzione ------------ Questo è un interruttore a sfera inclinabile con una pallina metallica all'interno. Viene utilizzato per rilevare piccole inclinazioni angolari. Componenti Necessari ------------------------------ Per questo progetto, avremo bisogno dei seguenti componenti. .. image:: ../python_pi5/img/2.1.5_tilt_switch_list.png È decisamente conveniente 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_tilt_switch` - \- Schema Elettrico -------------------- .. image:: ../python_pi5/img/2.1.5_tilt_switch_schematic_1.png .. image:: ../python_pi5/img/2.1.5_tilt_switch_schematic_2.png Procedure Sperimentali -------------------------- **Passo 1:** Costruisci il circuito. .. image:: ../python_pi5/img/2.1.5_tilt_switch_circuit.png **Passo 2:** Accedi alla cartella del codice. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Passo 3:** Esegui. .. raw:: html .. code-block:: sudo python3 2.1.5_Tilt_zero.py Posiziona l'interruttore inclinabile in verticale e il LED verde si accenderà. Se lo inclini, verrà stampato "Tilt!" sullo schermo e il LED rosso si accenderà. Riposizionalo verticalmente e 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 accedere alla directory 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 il sensore di inclinazione e i LED usando GPIO Zero TiltPin = Button(17, pull_up=False) # Sensore di inclinazione collegato al pin GPIO 17, resistenza pull-up disabilitata green_led = LED(27) # LED verde collegato al pin GPIO 27 red_led = LED(22) # LED rosso collegato al pin GPIO 22 def detect(): """ Detect the tilt sensor state and control the LEDs. Turns on the red LED and turns off the green LED when tilted. Turns off the red LED and turns on the green LED when not tilted. """ if TiltPin.is_pressed: # Verifica se il sensore è inclinato print(' *************') print(' * Tilt! *') print(' *************') red_led.on() # Accendi LED rosso green_led.off() # Spegni LED verde else: # Se il sensore non è inclinato red_led.off() # Spegni LED rosso green_led.on() # Accendi LED verde try: while True: # Controlla continuamente lo stato del sensore di inclinazione e aggiorna i LED TiltPin.when_pressed = detect TiltPin.when_released = detect except KeyboardInterrupt: # Gestisci un'interruzione da tastiera (Ctrl+C) per uscire dal ciclo in modo pulito pass **Spiegazione del Codice** #. Questa linea imposta lo script per essere eseguito con Python 3 e importa ``LED`` e ``Button`` da ``gpiozero`` per controllare i dispositivi GPIO. .. code-block:: python #!/usr/bin/env python3 from gpiozero import LED, Button #. Inizializza il sensore di inclinazione collegato al pin GPIO 17 (con resistenza pull-up disabilitata) e due LED collegati ai pin GPIO 27 e 22. .. code-block:: python # Inizializza il sensore di inclinazione e i LED usando GPIO Zero TiltPin = Button(17, pull_up=False) # Sensore di inclinazione collegato al pin GPIO 17, resistenza pull-up disabilitata 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 ``detect``, che controlla lo stato del sensore di inclinazione. Se inclinato, accende il LED rosso e spegne il LED verde. Se non inclinato, fa il contrario. .. code-block:: python def detect(): """ Detect the tilt sensor state and control the LEDs. Turns on the red LED and turns off the green LED when tilted. Turns off the red LED and turns on the green LED when not tilted. """ if TiltPin.is_pressed: # Verifica se il sensore è inclinato print(' *************') print(' * Tilt! *') print(' *************') red_led.on() # Accendi LED rosso green_led.off() # Spegni LED verde else: # Se il sensore non è inclinato red_led.off() # Spegni LED rosso green_led.on() # Accendi LED verde #. Il ciclo principale assegna la funzione ``detect`` sia agli eventi ``when_pressed`` che ``when_released`` del sensore di inclinazione. Il blocco ``try-except`` gestisce un'interruzione da tastiera per una chiusura pulita. .. code-block:: python try: while True: # Controlla continuamente lo stato del sensore di inclinazione e aggiorna i LED TiltPin.when_pressed = detect TiltPin.when_released = detect except KeyboardInterrupt: # Gestisci un'interruzione da tastiera (Ctrl+C) per uscire dal ciclo in modo pulito pass