Buzzer

L’objectif de cette activité est de faire fonctionner un buzzer avec un Arduino.
Dans un premier temps, le buzzer devra émettre un son dont la fréquence varie en fonction de la position d’un potentiomètre.
Dans la deuxième partie, l’objectif est de générer un signal sonore dont la fréquence est modulée (façon sirène de police) lors de l’appui sur un bouton poussoir.
 
Matériel nécessaire :
  • Microcontrôleur Arduino
  • Ordinateur avec Python
  • Buzzer passif (HYDZ)
  • Potentiomètre 10kΩ
  • Bouton poussoir
 
Suite logicielle utilisée : FirmataExpress + pymata4
 

Variation de fréquence au potentiomètre

Câbler sur la platine de prototypage un buzzer (sur un port numérique compatible PWM) et un potentiomètre (voir les potentiomètres).
 
On se propose d’utiliser le programme suivant (incomplet) :
from pymata4 import pymata4
import time

# Objet représentant la carte Arduino
carte = pymata4.Pymata4()

# Constantes
DELAY = 0.01 # période de la boucle infinie (s)
OUT_PIN = 3
A_IN_PIN = 0

F_MINI = 50   # fréquence minimale (Hz)
F_MAXI = 3000 # fréquence maximale (Hz)

# Initialisation ....................................
carte.set_pin_mode_digital_output(OUT_PIN)
carte.set_pin_mode_analog_input(A_IN_PIN)


# Fonction de test
def loop():
    N = carte.analog_read(A_IN_PIN)[0]
    f = ????????? # fréquence en fonction de N ... et des constantes
    carte.play_tone_continuously(OUT_PIN, f)

    time.sleep(DELAY)

# Lancement du programme ............................
try:
    # Boucle infinie ................................
    while True:
        loop()
except KeyboardInterrupt:
    carte.play_tone_off(OUT_PIN)
    carte.shutdown()
    sys.exit(0)
finally:
    carte.shutdown()  

Analyse du programme

Sur quel port doit être connecté le buzzer ?
×
Sur quel port doit être connectée la borne centrale du potentiomètre ?
×
Quelle constante du programme contient le nom de ce port ?
×
Quelle méthode de la classe Pymata4 permet-elle de spécifier le « mode » (entrée ou sortie) d’un port analogique ?
×
À quelle ligne du programme la valeur représentant la position du potentiomètre est-elle acquise ?
×
À quelle ligne du programme le son est-il généré ?
×

 

Finalisation du programme

Le buzzer est capable de générer des sons entre 50Hz et 3000Hz.
Le port analogique sur lequel est connecté le potentiomètre, permet au programme d’obtenir une valeur entre 0 et 1023.
Il va falloir trouver la « formule » permettant de calculer une fréquence f en fonction de la « position » du potentiomètre N.
 
Compléter le programme suivant (remplacer les ???????) pour que l’action sur le potentiomètre modifie la fréquence du Buzzer.
 

 

On constate que la fréquence semble augmenter plus rapidement dans les graves que dans les aiguës. Ceci est dû au fait qu’une augmentation de 10Hz modifie plus fortement la note entendu dans les basses fréquences.

  • De 50Hz à 60Hz : +20%
  • De 2500 à 2510Hz : 0.4%

Pour éviter cela, il faut provoquer une variation logarithmique de la fréquence plutôt que linéaire :

Modulation de fréquence

Mise en œuvre d’un bouton

On souhaite à présent émettre une note de musique en appuyant sur un bouton poussoir.

Remplacer le potentiomètre par un bouton poussoir.
 
Modifier le programme pour émettre la note LA (440 Hz) lorsque le bouton est pressé (le son doit cesser quand le bouton est relâché !).

Pour connaitre les commandes permettant de lire la valeur d’un port numérique, consulter la documentation de pymata4.

 

Modulation de la fréquence

Au lieu d’émettre une fréquence constante, on souhaite à présent la moduler selon une loi sinusoïdale (voir Les signaux physiques), toujours avec une échelle de fréquence logarithmique :

Élaborer la loi reliant la fréquence \(f\) (en Hz) aux valeurs caractéristiques du signal : F_MINI, F_MAXI et sa période T (en seconde). Implémenter cette loi en langage Python (on créera pour l’occasion une variable globale t pour signifier le temps, qu’on incrémentera à chaque période de la boucle).

 

Terminer le programme pour que lorsqu’on appui sur le bouton poussoir, le son généré ait une fréquence modulée de F_MINI à F_MAXI par période de T = 2 secondes.

 

 

Autres activités …

Suite : télémètre à ultrasons

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.