 
.. note::

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

    **Pourquoi rejoindre ?**

    - **Support d'experts** : Résolvez les problèmes après-vente et les défis techniques avec l'aide de notre communauté et de notre équipe.
    - **Apprendre et partager** : Échangez des astuces et des tutoriels pour améliorer vos compétences.
    - **Aperçus exclusifs** : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.
    - **Réductions spéciales** : Profitez de réductions exclusives sur nos produits les plus récents.
    - **Promotions festives et cadeaux** : Participez à des cadeaux et des promotions de vacances.

    👉 Prêt à explorer et à créer avec nous ? Cliquez [|link_sf_facebook|] et rejoignez-nous aujourd'hui !

.. _1.2.2_py:

1.2.2 Buzzer Passif
========================

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

Dans ce projet, nous allons apprendre à faire jouer de la musique à un buzzer passif.

Composants Nécessaires
---------------------------------

Pour ce projet, nous avons besoin des composants suivants.

.. image:: ../img/list_1.2.2.png

Il est certainement pratique d'acheter un kit complet, voici le lien :

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

    *   - Nom
        - ARTICLES DANS CE KIT
        - LIEN
    *   - Kit Raphael
        - 337
        - |link_Raphael_kit|

Vous pouvez également les acheter séparément à partir des liens ci-dessous.

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

    *   - INTRODUCTION AUX COMPOSANTS
        - LIEN D'ACHAT

    *   - :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_buzzer`
        - |link_passive_buzzer_buy|
    *   - :ref:`cpn_transistor`
        - |link_transistor_buy|

Schéma de Principe
--------------------

Dans cette expérience, un buzzer passif, un transistor PNP et une résistance de 1k sont utilisés 
entre la base du transistor et le GPIO pour protéger le transistor.

Lorsque GPIO17 reçoit différentes fréquences, le buzzer passif émet différents sons ; de cette 
manière, le buzzer joue de la musique.

.. image:: ../img/image333.png


Procédures Expérimentales
---------------------------

**Étape 1 :** Construisez le circuit. (Le buzzer passif avec une carte de circuit verte à l'arrière.)

.. image:: ../img/image106.png

**Étape 2 : Changez de répertoire.**

.. raw:: html

   <run></run>

.. code-block::

    cd ~/raphael-kit/python/

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

.. raw:: html

   <run></run>

.. code-block::

    sudo python3 1.2.2_PassiveBuzzer.py

Le code s'exécute, le buzzer joue une mélodie.

**Code**

.. note::

    Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez vous rendre dans le chemin du code source comme ``raphael-kit/python``. Après avoir modifié le code, vous pouvez l'exécuter directement pour voir l'effet.


.. raw:: html

    <run></run>

.. code-block:: python

    import RPi.GPIO as GPIO
    import time

    Buzzer = 11

    CL = [0, 131, 147, 165, 175, 196, 211, 248]     # Frequency of Bass tone in C major
    CM = [0, 262, 294, 330, 350, 393, 441, 495]     # Frequency of Midrange tone in C major
    CH = [0, 525, 589, 661, 700, 786, 882, 990]     # Frequency of Treble tone in C major

    song_1 = [  CM[3], CM[5], CM[6], CM[3], CM[2], CM[3], CM[5], CM[6], # Notes of song1
                CH[1], CM[6], CM[5], CM[1], CM[3], CM[2], CM[2], CM[3],
                CM[5], CM[2], CM[3], CM[3], CL[6], CL[6], CL[6], CM[1],
                CM[2], CM[3], CM[2], CL[7], CL[6], CM[1], CL[5] ]

    beat_1 = [  1, 1, 3, 1, 1, 3, 1, 1,             # Beats of song 1, 1 means 1/8 beat
                1, 1, 1, 1, 1, 1, 3, 1,
                1, 3, 1, 1, 1, 1, 1, 1,
                1, 2, 1, 1, 1, 1, 1, 1,	
                1, 1, 3 ]

    song_2 = [  CM[1], CM[1], CM[1], CL[5], CM[3], CM[3], CM[3], CM[1], # Notes of song2
                CM[1], CM[3], CM[5], CM[5], CM[4], CM[3], CM[2], CM[2],
                CM[3], CM[4], CM[4], CM[3], CM[2], CM[3], CM[1], CM[1],
                CM[3], CM[2], CL[5], CL[7], CM[2], CM[1]    ]

    beat_2 = [  1, 1, 2, 2, 1, 1, 2, 2,             # Beats of song 2, 1 means 1/8 beat
                1, 1, 2, 2, 1, 1, 3, 1,
                1, 2, 2, 1, 1, 2, 2, 1,
                1, 2, 2, 1, 1, 3 ]

    def setup():
        GPIO.setmode(GPIO.BOARD)        # Numbers GPIOs by physical location
        GPIO.setup(Buzzer, GPIO.OUT)    # Set pins' mode is output
        global Buzz                     # Assign a global variable to replace GPIO.PWM
        Buzz = GPIO.PWM(Buzzer, 440)    # 440 is initial frequency.
        Buzz.start(50)                  # Start Buzzer pin with 50% duty cycle

    def loop():
        while True:
            print ('\n    Playing song 1...')
            for i in range(1, len(song_1)):     # Play song 1
                Buzz.ChangeFrequency(song_1[i]) # Change the frequency along the song note
                time.sleep(beat_1[i] * 0.5)     # delay a note for beat * 0.5s
            time.sleep(1)                       # Wait a second for next song.

            print ('\n\n    Playing song 2...')
            for i in range(1, len(song_2)):     # Play song 1
                Buzz.ChangeFrequency(song_2[i]) # Change the frequency along the song note
                time.sleep(beat_2[i] * 0.5)     # delay a note for beat * 0.5s

    def destory():
        Buzz.stop()                 # Stop the buzzer
        GPIO.output(Buzzer, 1)      # Set Buzzer pin to High
        GPIO.cleanup()              # Release resource

    if __name__ == '__main__':      # Program start from here
        setup()
        try:
            loop()
        except KeyboardInterrupt:   # When 'Ctrl+C' is pressed, the program destroy() will be  executed.
            destory()

**Explication du Code**

.. code-block:: python

    CL = [0, 131, 147, 165, 175, 196, 211, 248]     # Frequency of Bass tone in C major
    CM = [0, 262, 294, 330, 350, 393, 441, 495]     # Frequency of Midrange tone in C major
    CH = [0, 525, 589, 661, 700, 786, 882, 990]     # Frequency of Treble tone in C major     

Ce sont les fréquences de chaque note. Le premier 0 est là pour 
ignorer CL[0] afin que les nombres de 1 à 7 correspondent aux notes do, ré, mi, fa, sol, la, si.

.. code-block:: python

    song_1 = [  CM[3], CM[5], CM[6], CM[3], CM[2], CM[3], CM[5], CM[6], 
                CH[1], CM[6], CM[5], CM[1], CM[3], CM[2], CM[2], CM[3],
                CM[5], CM[2], CM[3], CM[3], CL[6], CL[6], CL[6], CM[1],
                CM[2], CM[3], CM[2], CL[7], CL[6], CM[1], CL[5] ]

Ces tableaux représentent les notes d'une chanson.

.. code-block:: python

    beat_1 = [  1, 1, 3, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1,
                1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
                1, 1, 3 ]

Chaque battement (chaque nombre) représente 1/8 de battement, soit 0,5 seconde.

.. code-block:: python

    Buzz = GPIO.PWM(Buzzer, 440)
    Buzz.start(50)  

Définir la broche Buzzer comme une broche PWM, puis définir sa fréquence à 440 et 
Buzz.start(50) est utilisé pour démarrer le PWM. De plus, définir le cycle de service à 50%.

.. code-block:: python

    for i in range(1, len(song_1)): 
                Buzz.ChangeFrequency(song_1[i]) 
                time.sleep(beat_1[i] * 0.5)  

Exécuter une boucle for, puis le buzzer jouera les notes du tableau song_1[] 
avec les battements du tableau beat_1[].

Maintenant, vous pouvez entendre le buzzer passif jouer de la musique.

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

.. image:: ../img/image107.jpeg
