.. note::

    Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

    **Perché unirti a noi?**

    - **Supporto esperto**: Risolvi i problemi post-vendita e le sfide tecniche con l'aiuto della nostra comunità e del nostro team.
    - **Impara e condividi**: Scambia suggerimenti e tutorial per migliorare le tue competenze.
    - **Anteprime esclusive**: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime speciali.
    - **Sconti esclusivi**: Approfitta di sconti riservati sui nostri prodotti più recenti.
    - **Promozioni festive e concorsi**: Partecipa a concorsi e promozioni durante le festività.

    👉 Sei pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso!

.. _1.3.3_py:

1.3.3 Relè
==============

Introduzione
--------------

In questo progetto, impareremo a utilizzare un relè. È uno dei componenti più comuni 
nei sistemi di controllo automatico. Quando tensione, corrente, temperatura, pressione,
 ecc. raggiungono, superano o sono inferiori al valore prestabilito, il relè si attiva 
 o si disattiva, controllando e proteggendo l'apparecchiatura.


Componenti Necessari
------------------------------

In questo progetto, abbiamo bisogno dei seguenti componenti. 

.. image:: ../img/list_1.3.4.png

È sicuramente comodo acquistare un kit completo, ecco il link: 

.. list-table::
    :widths: 20 20 20
    :header-rows: 1

    *   - Nome	
        - ARTICOLI IN QUESTO KIT
        - LINK
    *   - Kit Raphael
        - 337
        - |link_Raphael_kit|

Puoi anche acquistarli separatamente dai link qui sotto.

.. list-table::
    :widths: 30 20
    :header-rows: 1

    *   - INTRODUZIONE AI COMPONENTI
        - LINK PER L'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_transistor`
        - |link_transistor_buy|
    *   - :ref:`cpn_relay`
        - |link_relay_buy|
    *   - :ref:`cpn_diode`
        - |link_diode_buy|

Schema Elettrico
---------------------

.. image:: ../img/image345.png


Procedure Sperimentali
-----------------------

**Passo 1:** Costruisci il circuito.

.. image:: ../img/image144.png

**Passo 2:** Apri il file del codice.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/raphael-kit/python


**Passo 3:** Esegui.

.. raw:: html

   <run></run>

.. code-block::

    sudo python3 1.3.3_Relay.py

Durante l'esecuzione del codice, il LED si accende. Inoltre, puoi sentire un ticchettio 
causato dall'interruzione del contatto normalmente chiuso e dall'attivazione del contatto 
normalmente aperto.

**Codice**

.. note::

    Puoi **Modificare/Reimpostare/Copiare/Eseguire/Interrompere** il codice qui sotto. Ma prima devi accedere al percorso del codice come ``raphael-kit/python``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l'effetto.


.. raw:: html

    <run></run>

.. code-block:: python

    #!/usr/bin/env python3

    import RPi.GPIO as GPIO
    import time

    # Imposta GPIO17 come pin di controllo
    relayPin = 17

    # Definisci una funzione di configurazione per alcune impostazioni
    def setup():
        # Imposta la modalità BCM per il GPIO
        GPIO.setmode(GPIO.BCM)
        # Imposta il pin relayPin come output,
        # e il livello iniziale su High (3.3V)
        GPIO.setup(relayPin, GPIO.OUT, initial=GPIO.HIGH)

    # Definisci una funzione principale per il processo principale
    def main():
        while True:
            print ('Relay open...')
            # Tick
            GPIO.output(relayPin, GPIO.LOW)
            time.sleep(1)
            print ('...Relay close')
            # Tock
            GPIO.output(relayPin, GPIO.HIGH)
            time.sleep(1)

    # Definisci una funzione di distruzione per pulire tutto dopo
    # la fine dello script
    def destroy():
        # Spegni il LED
        GPIO.output(relayPin, GPIO.HIGH)
        # Rilascia le risorse
        GPIO.cleanup()                    

    # Se esegui questo script direttamente, fai:
    if __name__ == '__main__':
        setup()
        try:
            main()
        # Quando viene premuto 'Ctrl+C', il programma figlio
        # destroy() verrà eseguito.
        except KeyboardInterrupt:
            destroy()

**Spiegazione del Codice**

.. code-block:: python

    GPIO.output(relayPin, GPIO.LOW)

Imposta il pin del transistor su livello basso per aprire il relè, il LED non si accende.

.. code-block:: python

    time.sleep(1)

Attendi 1 secondo. 

.. code-block:: python

    GPIO.output(relayPin, GPIO.HIGH)

Imposta il pin del transistor su livello alto per attivare il relè, il LED si accende.

Immagine del Fenomeno
----------------------------

.. image:: ../img/image145.jpeg
