Dans cet article, nous passons au buzzer passif KY-006, beaucoup plus flexible que le buzzer actif. Il permet de contrôler la hauteur du son, le volume et les variations dans le temps. C’est avec lui que l’on peut produire des alertes évoluées et, progressivement, de véritables mélodies.
Un buzzer passif ne produit aucun son tout seul. Il doit être piloté par un signal PWM.
Avec un buzzer passif :
On contrôle donc trois paramètres, contre un seul pour le buzzer actif.
S (Signal) → GPIO15 (PWM)- (GND) → GND+ → non connecté (c'est le S qui sert à générer le signal dans notre cas)from machine import Pin, PWM
import utime
buzzer = PWM(Pin(15))
buzzer.duty_u16(2000)
À ce stade, le buzzer est prêt, mais silencieux tant qu’aucune fréquence n’est définie.
On alterne deux fréquences distinctes.
while True:
buzzer.freq(600)
utime.sleep(0.5)
buzzer.freq(900)
utime.sleep(0.5)
while True:
for freq in range(400, 1000, 20):
buzzer.freq(freq)
utime.sleep(0.02)
La fréquence augmente progressivement, ce qui donne une sensation de montée de tension.
while True:
for freq in range(1000, 400, -20):
buzzer.freq(freq)
utime.sleep(0.02)
while True:
for freq in range(400, 1000, 20):
buzzer.freq(freq)
utime.sleep(0.02)
for freq in range(1000, 400, -20):
buzzer.freq(freq)
utime.sleep(0.02)
La durée de chaque note diminue de 25 % à chaque itération.
duration = 2.0
while duration > 0.3:
buzzer.freq(600)
utime.sleep(duration)
buzzer.freq(900)
utime.sleep(duration)
duration = duration * 0.75
duration = 2.0
pause = 1.0
while duration > 0.3:
buzzer.freq(600)
utime.sleep(duration)
utime.sleep(pause)
buzzer.freq(900)
utime.sleep(duration)
utime.sleep(pause)
duration = duration * 0.75
pause = pause * 0.75
On peut associer des noms de notes à des fréquences.
notes = {
'C': 262,
'D': 294,
'E': 330,
'F': 349,
'G': 392,
'A': 440,
'B': 494,
'C5': 523,
'D5': 587,
'E5': 659,
'F5': 698,
'G5': 784,
'A5': 880
}
melody = ['C', 'D', 'E', 'F', 'G', 'A', 'G', 'F']
for note in melody:
buzzer.freq(notes[note])
utime.sleep(0.4)
Chaque élément contient :
melody = [
('C', 0.4),
('D', 0.4),
('E', 0.6),
('C', 0.6)
]
Lecture :
for note, duration in melody:
buzzer.freq(notes[note])
utime.sleep(duration)
melody = [
('C', 0.4), ('D', 0.4), ('E', 0.4), ('C', 0.4),
('C', 0.4), ('D', 0.4), ('E', 0.4), ('C', 0.4)
]
for note, duration in melody:
buzzer.freq(notes[note])
utime.sleep(duration)
melody = [
('G', 0.4), ('G', 0.2),
('A', 0.6),
('G', 0.6),
('C5', 0.6),
('B', 1.0)
]
for note, duration in melody:
buzzer.freq(notes[note])
utime.sleep(duration)
melody = [
('A4', 0.3), ('B4', 0.3), ('D5', 0.4), ('B4', 0.4),
('F5', 0.6), ('F5', 0.6),
('E5', 0.8)
]
notes.update({
'A4': 440,
'B4': 494,
'D5': 587,
'E5': 659,
'F5': 698
})
for note, duration in melody:
buzzer.freq(notes[note])
utime.sleep(duration)
Avec ces trois articles, les élèves disposent désormais :