Posted on Leave a comment

Sonnerie avec Raspberry Pi jouant une mélodie

Raspberry Pi buzzer melody

Dans ce tutoriel, nous apprenons comment une sonnerie peut jouer des notes de musique. Découvrez comment jouer une mélodie avec un script Python sur votre Raspberry Pi. Lorsque vous aurez terminé ce didacticiel, vous aurez le code de base pour que votre sonnerie joue une mélodie.

Ce dont vous aurez besoin pour ce tutoriel

Tout d’abord, vous devez avoir un Raspberry Pi 3 avec la dernière version de Raspbian. Cette version comprend “Thonny”. Nous utiliserons cet EDI convivial pour écrire notre code Python. Si vous n’êtes pas familier avec Python ou avec Thonny ou avec les broches GPIO, je vous suggère de consulter nos tutoriels “Débuter à programmer en Python sur Raspberry Pi” et/ou “Commencer à programmer les GPIO du Raspberry Pi” pour une introduction rapide. Pour une compréhension de base de la sonnerie active et comment la connecter à votre Pi, consultez notre tutoriel “Sonnerie active avec Raspberry Pi”.

Ensuite, vous aurez besoin d’un peu de matériel supplémentaire:

    • un breadboard (nous utilisons un breadboard de 400 points)
    • une sonnerie active de 5V
    • un transistor NPN (Si vous n’avez pas de transistor, consultez notre tutoriel “Sonnerie active avec Raspberry Pi”, pour voir comment vous pouvez configurer le matériel sans transistor)
    • des câbles Dupont
    • un T-cobbler (optionnel)
    • un câble GPIO 40 broches (optionnel)

    Raspberry Pi GPIO discovery kit

    Si vous manquez des pièces, n’hésitez pas à visiter notre boutique. Nous avons un kit bien conçu contenant toutes les pièces dont vous avez besoin pour démarrer.

    A propos des notes de musique

     

    music notes

    Sur la page Wikipedia, nous pouvons apprendre qu’une note de musique est représentée par la hauteur et la durée d’un son. Chaque hauteur est un élément d’une catégorie de hauteur et a une fréquence bien définie. Cette fréquence peut être calculée. Mais nous ne traiterons pas ces sujets dans ce tutoriel. Pour notre projet, nous allons juste retenir que nous avons besoin de la fréquence et de la durée pour chaque note que nous voulons jouer sur la sonnerie. Nous allons utiliser ces deux éléments dans notre script.

     

    Pour plus d’informations sur les notes de musique, visitez cette page Wikipedia.

    Pour savoir les fréquences des différentes notes de musique, consultez ce tableau.

    Mettre en place la partie matérielle

    Nous utilisons la même configuration matérielle que celle utilisée dans notre tutoriel “Sonnerie active avec Raspberry Pi”.

    buzzer_transistor
    • connectez le câble 40 broches sur les broches GPIO de votre Pi (si nécessaire, retirez d’abord le cache de votre Pi)
    • branchez le T-cobbler sur le breadboard comme indiqué sur la figure ci-dessus ou ci-dessous
    • branchez l’autre extrémité du câble 40 broches dans le T-cobbler
    • placez la sonnerie sur le breadboard, la jambe longue est la jambe positive, assurez-vous de la placer près du bord du breadboard
    • placez le transistor NPN: sur notre image, le courant circule de la broche droite (3) vers la broche gauche (1), la broche centrale (2) est la base (commande).
    • reliez la broche du transistor (3) à une broche 5V du Pi (fil rouge)
    • reliez la broche du transistor (2) à la broche 23 (fil jaune)
    • assurez-vous que la longue jambe (+) de la sonnerie est placée dans la même rangée que de la broche du transistor (1)
    • connectez la jambe courte (-) de la sonnerie à une broche GPIO GND (fil noir)

    buzzer with transistor

    Ecrire le code

    Le but de ce tutoriel est d’écrire un script Python simple qui permet à la sonnerie de jouer une mélodie simple. Pour écrire le code, nous utilisons l’EDI Thonny. Vous pouvez trouver Thonny dans le menu d’applications de votre Raspberry Pi.

    Écrivez ou collez le code suivant dans l’EDI:

    import RPi.GPIO as GPIO
    import time
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    BUZZER = 23
    GPIO.setup(BUZZER, GPIO.OUT)
    
    def buzz(noteFreq, duration):
        halveWaveTime = 1 / (noteFreq * 2 )
        waves = int(duration * noteFreq)
        for i in range(waves):
           GPIO.output(BUZZER, True)
           time.sleep(halveWaveTime)
           GPIO.output(BUZZER, False)
           time.sleep(halveWaveTime)
    
    def play():
        t=0
        notes=[262,294,330,262,262,294,330,262,330,349,392,330,349,392,392,440,392,349,330,262,392,440,392,349,330,262,262,196,262,262,196,262]
        duration=[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,1,0.25,0.25,0.25,0.25,0.5,0.5,0.25,0.25,0.25,0.25,0.5,0.5,0.5,0.5,1,0.5,0.5,1]
        for n in notes:
            buzz(n, duration[t])
            time.sleep(duration[t] *0.1)
            t+=1
    
    #buzz(262, 0.5)
    
    play()
    

    Quelques explications à propos du code:

    • GPIO.setmode (GPIO.BCM): L’option GPIO.BCM signifie que nous faisons référence aux broches par le numéro “Broadcom SOC channel”, ce sont les numéros après “GPIO”
    • GPIO.setwarnings (False): Nous l’utilisons ceci pour éviter les messages d’avertissement si nous ne terminons pas correctement la connexion GPIO lorsque nous interrompons le programme
    • GPIO.setup(BUZZER, GPIO.OUT): Nous définissons la broche BUZZER (= 23) comme une broche de sortie
    • def buzz(noteFreq, duration): Ici, nous définissons la fonction “buzz” avec les arguments “noteFreq” et “duration”
    • Attention, Python est sensible aux espaces. Ne supprimez pas le “tab” avant les prochaines lignes de code
    • halveWaveTime = 1 / (noteFreq * 2 ): Le calcul pour la moitié d’une onde d’une fréquence donnée
    • int(duration * noteFreq): Le calcul pour le nombre d’ondes à émettre
    • for i in range(waves):: Une boucle qui se répétera jusqu’à ce que le nombre d’ondes soit atteint
    • def play():: Nous définissons la fonction “play”
    • notes=[…]: Un tableau avec toutes les fréquences des notes de musique à jouer (Hz)
    • duration=[…]: Un tableau avec toutes les durées des notes de musique à jouer (secondes)
    • for n in notes:: Ce qui suit sera répété pour chaque élément du tableau “notes”
    • buzz(n, duration[t]): Appel de la fonction “buzz” avec les éléments des deux tableaux
    • time.sleep(duration[t] *0.1): Attendez un court moment entre chaque note de musique
    • #buzz(262, 0.5): Cette ligne a été mis en commentaire. Enlevez le “#” pour jouer juste une note de musique
    • play(): En appelant la fonction “play”, la mélodie sera jouée.

     Lorsque vous avez terminé avec le code, cliquez sur le bouton Exécuter. Vous entendrez une mélodie bien connue.

    Félicitations! Avec cette configuration, vous pouvez maintenant jouer une mélodie avec une simple sonnerie sur votre Raspberry Pi. N’hésitez pas à modifier ou à ajouter des notes dans les tableaux “notes” et “duration” pour différentes mélodies. Encore beaucoup de plaisir!

Laissez nous un commentaire

Your email address will not be published. Required fields are marked *

Abonnez-vous à notre newsletter

En vous abonnant, vous acceptez notre politique de protection de la vie privée.