3.2 Tono Personalizado¶
Hemos utilizado un zumbador activo en el proyecto anterior, esta vez usaremos un zumbador pasivo.
Al igual que el zumbador activo, el zumbador pasivo también utiliza el fenómeno de inducción electromagnética para funcionar. La diferencia es que un zumbador pasivo no tiene fuente oscilante, por lo que no emitirá un pitido si se utilizan señales de CC. Pero esto permite que el zumbador pasivo ajuste su propia frecuencia de oscilación y pueda emitir diferentes notas como «do, re, mi, fa, sol, la, si».
¡Hagamos que el zumbador pasivo emita una melodía!
Componentes Requeridos
Para este proyecto, necesitamos los siguientes componentes.
Definitivamente es conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ELEMENTOS EN ESTE KIT |
ENLACE |
---|---|---|
Kit de Inicio ESP32 |
320+ |
También puedes comprarlos por separado en los enlaces a continuación.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
---|---|
- |
|
- |
|
Pines Disponibles
Aquí hay una lista de pines disponibles en la placa ESP32 para este proyecto.
Pines Disponibles |
IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23 |
Esquemático
Cuando la salida IO14 es alta, después de la resistencia limitadora de corriente de 1K (para proteger el transistor), el S8050 (transistor NPN) conducirá, haciendo que el zumbador suene.
El papel de S8050 (transistor NPN) es amplificar la corriente y hacer que el zumbador suene más fuerte. De hecho, también puedes conectar el zumbador directamente a IO14, pero encontrarás que el sonido del zumbador es más bajo.
Conexión
El kit incluye dos tipos de zumbadores. Necesitamos usar el zumbador activo. Voltéalos, el lado sellado (no el PCB expuesto) es el que queremos.
El zumbador necesita usar un transistor cuando funciona, aquí usamos S8050 (Transistor NPN).
Código
Nota
Abre el archivo
3.2_custom_tone.py
ubicado en la rutaesp32-starter-kit-main\micropython\codes
o copia y pega el código en Thonny. Luego, haz clic en «Ejecutar script actual» o presiona F5 para ejecutarlo.Asegúrate de seleccionar el intérprete «MicroPython (ESP32).COMxx» en la esquina inferior derecha.
import machine
import time
# Define the frequencies of several musical notes in Hz
C4 = 262
D4 = 294
E4 = 330
F4 = 349
G4 = 392
A4 = 440
B4 = 494
# Create a PWM object representing pin 14 and assign it to the buzzer variable
buzzer = machine.PWM(machine.Pin(14))
# Define a tone function that takes as input a Pin object representing the buzzer, a frequency in Hz, and a duration in milliseconds
def tone(pin, frequency, duration):
pin.freq(frequency) # Set the frequency
pin.duty(512) # Set the duty cycle
time.sleep_ms(duration) # Pause for the duration in milliseconds
pin.duty(0) # Set the duty cycle to 0 to stop the tone
# Play a sequence of notes with different frequency inputs and durations
tone(buzzer, C4, 250)
time.sleep_ms(500)
tone(buzzer, D4, 250)
time.sleep_ms(500)
tone(buzzer, E4, 250)
time.sleep_ms(500)
tone(buzzer, F4, 250)
time.sleep_ms(500)
tone(buzzer, G4, 250)
time.sleep_ms(500)
tone(buzzer, A4, 250)
time.sleep_ms(500)
tone(buzzer, B4, 250)
¿Cómo funciona?
Si al zumbador pasivo se le da una señal digital, solo puede continuar empujando el diafragma sin producir sonido.
Por lo tanto, utilizamos la función tone()
para generar la señal PWM y hacer que el zumbador pasivo emita sonido.
Esta función tiene tres parámetros:
pin
: El pin que controla el zumbador.frecuencia
: El tono del zumbador está determinado por la frecuencia; cuanto mayor sea la frecuencia, más alto será el tono.Duración
: La duración del tono.
Usamos la función duty()
para establecer el ciclo de trabajo en 512 (alrededor del 50%). Puede ser otros números, y solo necesita generar una señal eléctrica discontinua para oscilar.
Aprender Más
Podemos simular tonos específicos y así reproducir una pieza musical completa.
Nota
Abre el archivo
3.2_custom_tone_music.py
ubicado en el caminoesp32-starter-kit-main\micropython\codes
, o copia y pega el código en Thonny. Luego, haz clic en «Ejecutar script actual» o presiona F5 para ejecutarlo.Asegúrate de seleccionar el intérprete «MicroPython (ESP32).COMxx» en la esquina inferior derecha.
import machine
import time
# Define the GPIO pin that is connected to the buzzer
buzzer = machine.PWM(machine.Pin(14))
# Define the frequencies of the notes in Hz
C5 = 523
D5 = 587
E5 = 659
F5 = 698
G5 = 784
A5 = 880
B5 = 988
# Define the durations of the notes in milliseconds
quarter_note = 250
half_note = 300
whole_note = 1000
# Define the melody as a list of tuples (note, duration)
melody = [
(E5, quarter_note),
(E5, quarter_note),
(F5, quarter_note),
(G5, half_note),
(G5, quarter_note),
(F5, quarter_note),
(E5, quarter_note),
(D5, half_note),
(C5, quarter_note),
(C5, quarter_note),
(D5, quarter_note),
(E5, half_note),
(E5, quarter_note),
(D5, quarter_note),
(D5, half_note),
(E5, quarter_note),
(E5, quarter_note),
(F5, quarter_note),
(G5, half_note),
(G5, quarter_note),
(F5, quarter_note),
(E5, quarter_note),
(D5, half_note),
(C5, quarter_note),
(C5, quarter_note),
(D5, quarter_note),
(E5, half_note),
(D5, quarter_note),
(C5, quarter_note),
(C5, half_note),
]
# Define a function to play a note with the given frequency and duration
def tone(pin,frequency,duration):
pin.freq(frequency)
pin.duty(512)
time.sleep_ms(duration)
pin.duty(0)
# Play the melody
for note in melody:
tone(buzzer, note[0], note[1])
time.sleep_ms(50)
La función
tone
establece la frecuencia del pin al valor defrecuencia
usando el métodofreq
del objetopin
.Luego establece el ciclo de trabajo del pin en 512 usando el método
duty
del objetopin
.Esto hará que el pin produzca un tono con la frecuencia y volumen especificados durante la duración de
duración
en milisegundos usando el métodosleep_ms
del módulo de tiempo.El código luego reproduce una melodía iterando a través de una secuencia llamada
melody
y llamando a la funcióntone
para cada nota en la melodía con la frecuencia y duración de la nota.También inserta una breve pausa de 50 milisegundos entre cada nota usando el método
sleep_ms
del módulo de tiempo.