.. 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 .. code-block:: cd ~/raphael-kit/python/ **Étape 3 : Exécutez.** .. raw:: html .. 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 .. 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