Buzzer
L’objectif de cette activité est de faire fonctionner un buzzer avec un Arduino.- Microcontrôleur Arduino
- Ordinateur avec Python et une IDE ARduino
- Buzzer passif (HYDZ)
- Potentiomètre 10kΩ
- Bouton poussoir
Variation de fréquence au potentiomètre
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
Pymata4 permet-elle de spécifier le « mode » (entrée ou sortie) d’un port analogique ?
Finalisation du programme
f comprise entre 50Hz et 3000Hz.N comprise entre 0 et 1023 (convertisseur A/N de 10 bits : 210 valeurs possibles) ligne 22
f en fonction de la « position » du potentiomètre N et les constantes F_MINI et F_MAXI (ligne 23)???????) 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 d’une valeur \(\Delta f\) de la fréquence modifie plus fortement la note entendue dans les basses fréquences que dans les hautes fréquences :
Par exemple, pour une augmentation de la fréquence de 10 Hz :
- basses fréquences : de 50Hz à 60Hz → +20%,
- hautes fréquences : de 2500 à 2510Hz → +0.4% seulement, très peu audible.
Pour éviter cela, il faut provoquer une variation logarithmique de la fréquence plutôt que linéaire :

La grandeur qui évolue linéairement n’est plus \(f\), mais \(\log(f)\).
En début de programme, ajouter la ligne suivante :
from math import log10
(log10 est la version Python de la fonction \(\log\))
f = ... par logf = ... , ainsi que F_MINI par log10(F_MINI) et F_MAXI par log10(F_MAXI).
f (ajouter une ligne 24) en fonction de logf. Tester le programme.
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.
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 :

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).
F_MINI à F_MAXI par période de \(T = 2\) secondes.
Autres activités …
Suite : télémètre à ultrasons …
