.. note::

    Bonjour et bienvenue dans la communauté des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder sur Facebook ! Plongez plus profondément dans l'univers de Raspberry Pi, Arduino et ESP32 avec d'autres passionnés.

    **Pourquoi nous rejoindre ?**

    - **Support d'experts** : Résolvez les problèmes après-vente et les défis techniques grâce à l'aide de notre communauté et de notre équipe.
    - **Apprendre et partager** : Échangez des astuces et des tutoriels pour perfectionner vos compétences.
    - **Aperçus exclusifs** : Accédez en avant-première aux annonces de nouveaux produits.
    - **Remises spéciales** : Bénéficiez de réductions exclusives sur nos derniers produits.
    - **Promotions festives et tirages au sort** : Participez à des concours et à des promotions lors des fêtes.

    👉 Prêt à explorer et à créer avec nous ? Cliquez sur [|link_sf_facebook|] pour nous rejoindre dès aujourd'hui !

1.3.4 Relais
============

Introduction
----------------

Dans cette leçon, nous allons apprendre à utiliser un relais. C'est l'un des 
composants couramment utilisés dans les systèmes de contrôle automatique. 
Lorsque la tension, le courant, la température ou la pression atteignent, 
dépassent ou sont inférieurs à une valeur prédéterminée, le relais connecte ou 
interrompt le circuit pour contrôler et protéger les équipements.

Composants
-----------

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

Principe
----------

**Diode**

Une diode est un composant électronique à deux bornes qui permet un flux de courant 
unidirectionnel. Elle offre une faible résistance dans le sens du courant et une haute 
résistance dans le sens opposé. Les diodes sont principalement utilisées pour éviter 
les dommages aux composants, notamment en raison de la force électromotrice dans les 
circuits polarisés.

.. image:: img/image344.png

Les deux bornes d'une diode sont polarisées : l'anode (pôle positif) et la cathode 
(pôle négatif). La cathode est généralement en argent ou comporte une bande colorée. 
Le courant dans une diode circule de l'anode à la cathode. Ce comportement est similaire 
à celui d'une soupape de non-retour. Si une tension plus élevée est appliquée à l'anode, 
le courant circule, c'est le biais direct. Si la tension plus élevée est appliquée à la 
cathode, le courant ne passe pas, c'est le biais inverse.

**Relais**

Un relais est un dispositif utilisé pour établir une connexion entre deux ou plusieurs 
points en réponse à un signal d'entrée. En d'autres termes, il assure une isolation entre 
le contrôleur et l'appareil, notamment lorsque des dispositifs fonctionnent en courant 
alternatif (AC) ou continu (DC). Les relais sont très utiles pour contrôler de grandes 
quantités de courant ou de tension à l'aide de faibles signaux électriques.

Il y a 5 parties dans chaque relais :

**Électroaimant** - Il est constitué d'un noyau en fer enroulé de fils. Lorsque 
l'électricité passe à travers, il devient magnétique.

**Armature** - Une bande magnétique mobile appelée armature. Lorsque du courant 
circule, le champ magnétique attire l'armature, activant les contacts normalement 
ouverts (N/O) ou fermés (N/C).

**Ressort** - Lorsque le courant ne passe pas dans l'électroaimant, le ressort 
tire l'armature pour que le circuit soit interrompu.

**Jeu de contacts électriques** :
- Normalement ouvert - connecté lorsque le relais est activé, déconnecté lorsqu'il 
est inactif.
- Normalement fermé - non connecté lorsque le relais est activé, connecté lorsqu'il 
est inactif.

**Cadre moulé** - Protégé par un boîtier en plastique.

**Fonctionnement du relais**

Le principe de fonctionnement est simple. Lorsque le relais est alimenté, le courant 
circule dans la bobine de commande, ce qui active l'électroaimant. L'armature est alors 
attirée et connecte les contacts normalement ouverts, fermant ainsi le circuit. Lors de 
la rupture du circuit, le ressort ramène l'armature vers les contacts normalement fermés, 
interrompant le circuit. Ce processus permet de contrôler l'état d'un circuit de charge.

.. image:: img/image142.jpeg

Schéma
---------

.. image:: img/image345.png


Procédures expérimentales
---------------------------

**Étape 1 :** Construisez le circuit.

.. image:: img/image144.png
    :width: 800

Pour les utilisateurs du langage C
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Étape 2 :** Ouvrez le fichier de code.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/davinci-kit-for-raspberry-pi/c/1.3.4

**Étape 3 :** Compilez le code.

.. raw:: html

   <run></run>

.. code-block::

    gcc 1.3.4_Relay.c -lwiringPi

**Étape 4 :** Exécutez le fichier exécutable.

.. raw:: html

   <run></run>

.. code-block::

    sudo ./a.out

Après l'exécution du code, la LED s'allumera. De plus, vous entendrez un « tic-tac 
» dû à l'ouverture du contact normalement fermé et à la fermeture du contact 
normalement ouvert.

.. note::

    Si cela ne fonctionne pas après l'exécution ou si un message d'erreur apparaît : \"wiringPi.h : Aucun fichier ou répertoire de ce type\", veuillez vous référer à :ref:`C code is not working?`.

**Code**

.. code-block:: c

    #include <wiringPi.h>
    #include <stdio.h>
    #define RelayPin 0

    int main(void){
        if(wiringPiSetup() == -1){ //si l'initialisation de wiringPi échoue, affichez un message à l'écran
            printf("setup wiringPi failed !");
            return 1;
        }
        pinMode(RelayPin, OUTPUT);   //définir la sortie GPIO17(GPIO0)
        while(1){
            // Tick
            printf("Relay Open......\n");
            delay(100);
            digitalWrite(RelayPin, LOW);
            delay(1000);
            // Tock
            printf("......Relay Close\n");
            delay(100);
            digitalWrite(RelayPin, HIGH);
            delay(1000);
        }

        return 0;
    }

**Explication du Code**

.. code-block:: c

    digitalWrite(RelayPin, LOW);

Configurez le port I/O à un niveau bas (0V), ce qui désactive le transistor et 
la bobine n'est pas alimentée. Il n'y a donc pas de force électromagnétique, le 
relais s'ouvre et la LED ne s'allume pas.

.. code-block:: c

    digitalWrite(RelayPin, HIGH);

Configurez le port I/O à un niveau haut (5V) pour alimenter le transistor. La bobine 
du relais est alimentée, générant une force électromagnétique, et le relais se ferme, 
allumant la LED.

Pour les utilisateurs de Python
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Étape 2 :** Ouvrez le fichier de code.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/davinci-kit-for-raspberry-pi/python

**Étape 3 :** Exécutez le code.

.. raw:: html

   <run></run>

.. code-block::

    sudo python3 1.3.4_Relay.py

Pendant l'exécution du code, la LED s'allume. De plus, vous entendrez 
un « tic-tac » dû à l'ouverture et à la fermeture du relais.

**Code**

.. note::

    Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code 
    ci-dessous. Mais avant cela, vous devez vous rendre au chemin du code 
    source tel que ``davinci-kit-for-raspberry-pi/python``.

.. raw:: html

    <run></run>

.. code-block:: python

    import RPi.GPIO as GPIO
    import time

    # Définir GPIO17 comme broche de contrôle
    relayPin = 17

    # Définir une fonction de configuration
    def setup():
        # Configurer le mode GPIO en numérotation BCM
        GPIO.setmode(GPIO.BCM)
        # Configurer le mode de relayPin en sortie,
        # avec un niveau initial à High (3,3V)
        GPIO.setup(relayPin, GPIO.OUT, initial=GPIO.HIGH)

    # Définir une fonction principale pour le processus principal
    def main():
        while True:
            print ('Relay open...')
            # Tic
            GPIO.output(relayPin, GPIO.LOW)
            time.sleep(1)
            print ('...Relay close')
            # Tac
            GPIO.output(relayPin, GPIO.HIGH)
            time.sleep(1)

    # Définir une fonction destroy pour nettoyer après la fin du script
    def destroy():
        # Éteindre la LED
        GPIO.output(relayPin, GPIO.HIGH)
        # Libérer les ressources
        GPIO.cleanup()

    # Si ce script est exécuté directement, exécuter :
    if __name__ == '__main__':
        setup()
        try:
            main()
        # Lorsque 'Ctrl+C' est pressé, le programme enfant
        # destroy() sera exécuté.
        except KeyboardInterrupt:
            destroy()

**Explication du Code**

.. code-block:: python

    GPIO.output(relayPin, GPIO.LOW)

Configurez les broches du transistor en niveau bas pour ouvrir le relais, et la LED ne s'allume pas.

.. code-block:: python

    time.sleep(1)

Attendre 1 seconde.

.. code-block:: python

    GPIO.output(relayPin, GPIO.HIGH)

Configurez les broches du transistor en niveau haut pour activer le relais, et la LED s'allume.

Image du Phénomène
-----------------------

.. image:: img/image145.jpeg
