🛠 Jouer une mélodie avec un buzzer passif et le PWM

RP2040 (placa genérica / chip) · debutant · Schéma : IMG-rp2040-generic-debutant-3-rp2040-buzzer-pwm-melodie.svg — buzzer passif relié à GP8 et GND d'une carte RP2040 générique, forme d'onde carrée 440 Hz annotée, portée avec les notes

Objetivos

Construir un pequeño sintetizador: un zumbador pasivo no es más que una membrana que se hace vibrar con una señal cuadrada. El RP2040 proporciona el reloj ideal: 16 canales PWM (8 segmentos × 2 canales) alimentados por el reloj de 125 MHz (hoja de datos RP2040). Calcularás el periodo y el ciclo de trabajo para tocar notas afinadas, y luego una melodía completa.

Material

Código completo

# melodie.py — GP8, PWM 50 % de rapport cyclique, gamme ~31 Hz..62 kHz
from machine import Pin, PWM
import time

buz = PWM(Pin(8))
buz.duty_u16(32768)          # 50 % = son le plus fort (16 bits)

NOTE = {                       # fréquences tempérées (LA4 = 440 Hz)
    'C4': 262, 'D4': 294, 'E4': 330, 'F4': 349, 'G4': 392,
    'A4': 440, 'B4': 494, 'C5': 523, ' ': 0,
}

def note(nom, duree_ms):
    f = NOTE.get(nom, 0)
    if f:
        buz.freq(f)
        buz.duty_u16(32768)
    else:                      # silence
        buz.duty_u16(0)
    time.sleep_ms(duree_ms)
    buz.duty_u16(0)
    time.sleep_ms(20)          # petite articulation entre notes

# « Au clair de la lune » (début)
partition = [('C4',400),('C4',400),('C4',400),('D4',400),
             ('E4',800),('D4',800),('C4',1200),(' ',400)]
while True:
    for n, d in partition:
        note(n, d)
    time.sleep_ms(800)

Verificación esperada

La melodía suena afinada (compara el LA4 con el diapasón de tu teléfono). Cambiando buz.freq(440) en directo en el REPL, el sonido sube o baja de forma continua: controlas la altura. Un duty_u16 más bajo (por ejemplo, 8000) baja el volumen sin cambiar la nota — el PWM también sirve como amplitud.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales