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