Comment faire du son avec un Buzzer ?

Introduction

Un buzzer est un élément électromécanique ou piézoélectrique qui produit un son caractéristique quand on lui applique une tension : le bip.  Il est constitué d’une lame réagissant à l’effet piézoélectrique.

Celui-ci peut être contrôler par la carte Raspberry avec un signal carré qui représente la fréquence de la note.

Voici le schéma électronique pour relier le buzzer à la carte Raspberry Pi :

Programmation

Pour la programmation du buzzer, on vous propose deux programmes, un pour obtenir un bip et l’autre pour avoir une mélodie provenant du buzzer.

Voici le programme pour obtenir plusieurs bips depuis le buzzer :

import RPi.GPIO as GPIO
import time

# Configuration de la broche du buzzer
buzzer_pin = 17  # Remplacez par le numéro de la broche GPIO à laquelle le buzzer est connecté

# Configuration initiale de la GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer_pin, GPIO.OUT)

try:
    while True:
        print("Bip!")
        GPIO.output(buzzer_pin, GPIO.HIGH)  # Allumer le buzzer
        time.sleep(0.1)  # Maintenir le buzzer allumé pendant 0.1 seconde
        GPIO.output(buzzer_pin, GPIO.LOW)  # Éteindre le buzzer
        time.sleep(0.5)  # Attendre 0.5 seconde avant le prochain bip

except KeyboardInterrupt:
    pass

finally:
    # Nettoyer les ressources GPIO
    GPIO.cleanup()

Voici le programme pour obtenir une mélodie venant du buzzer :

import RPi.GPIO as GPIO
import time

# Configuration de la broche du buzzer
buzzer_pin = 17  # Remplacez par le numéro de la broche GPIO à laquelle le buzzer est connecté

# Configuration initiale de la GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer_pin, GPIO.OUT)

# Dictionnaire des fréquences des notes
notes = {
    'C': 261.63,
    'D': 293.66,
    'E': 329.63,
    'F': 349.23,
    'G': 392.00,
    'A': 440.00,
    'B': 493.88,
    'C_high': 523.25,
}

# Fonction pour jouer une note
def jouer_note(note, duree):
    if note == ' ':
        time.sleep(duree)
    else:
        GPIO.output(buzzer_pin, GPIO.HIGH)
        time.sleep(duree)
        GPIO.output(buzzer_pin, GPIO.LOW)

# Fonction pour jouer une mélodie
def jouer_melodie(melodie):
    for note, duree in melodie:
        jouer_note(note, duree)

try:
    # Jouer la mélodie
    melodie_exemple = [
        ('E', 0.5),
        ('D', 0.5),
        ('C', 0.5),
        ('D', 0.5),
        ('E', 0.5),
        ('E', 0.5),
        ('E', 0.5),
        ('D', 0.5),
        ('D', 0.5),
        ('D', 0.5),
        ('E', 0.5),
        ('E', 0.5),
        ('E', 0.5),
        ('E', 0.5),
        ('D', 0.5),
        ('C', 0.5),
        ('D', 0.5),
        ('E', 0.5),
        ('E', 0.5),
        ('E', 0.5),
        ('E', 0.5),
        ('D', 0.5),
        ('D', 0.5),
        ('E', 0.5),
        ('D', 0.5),
        ('C', 0.5),
    ]

    jouer_melodie(melodie_exemple)

except KeyboardInterrupt:
    pass

finally:
    # Nettoyer les ressources GPIO
    GPIO.cleanup()