.. note::
Hola, bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros apasionados.
**¿Por qué unirse?**
- **Soporte de Expertos**: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
- **Aprende y Comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades.
- **Avances Exclusivos**: Obtén acceso anticipado a nuevos lanzamientos y anuncios de productos.
- **Descuentos Especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes.
- **Promociones Festivas y Sorteos**: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy.
1.2.2 Zumbador Pasivo
========================
Introducción
--------------
En esta lección, aprenderemos cómo hacer que un zumbador pasivo reproduzca música.
Componentes
-------------
.. image:: img/list_1.2.2.png
Diagrama Esquemático
------------------------
En este experimento, se utiliza un zumbador pasivo, un transistor PNP y una
resistencia de 1k entre la base del transistor y GPIO para proteger el transistor.
Cuando el GPIO17 recibe diferentes frecuencias, el zumbador pasivo emite
distintos sonidos, permitiendo así que reproduzca música.
.. image:: img/image333.png
Procedimiento Experimental
----------------------------
**Paso 1:** Construye el circuito.
.. image:: img/image106.png
:width: 800
Para Usuarios de Lenguaje C
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**Paso 2:** Cambia al directorio del código.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/c/1.2.2/
**Paso 3:** Compila el código.
.. raw:: html
.. code-block::
gcc 1.2.2_PassiveBuzzer.c -lwiringPi
**Paso 4:** Ejecuta el código.
.. raw:: html
.. code-block::
sudo ./a.out
Cuando el código se ejecuta, el zumbador reproduce una melodía.
.. note::
Si no funciona tras ejecutarlo, o aparece un mensaje de error: \"wiringPi.h: No such file or directory", consulta :ref:`faq_c_nowork`.
**Código**
.. code-block:: c
#include
#include
#include
#define BuzPin 0
#define CL1 131
#define CL2 147
#define CL3 165
#define CL4 175
#define CL5 196
#define CL6 221
#define CL7 248
#define CM1 262
#define CM2 294
#define CM3 330
#define CM4 350
#define CM5 393
#define CM6 441
#define CM7 495
#define CH1 525
#define CH2 589
#define CH3 661
#define CH4 700
#define CH5 786
#define CH6 882
#define CH7 990
int song_1[] = {CM3,CM5,CM6,CM3,CM2,CM3,CM5,CM6,CH1,CM6,CM5,CM1,CM3,CM2,
CM2,CM3,CM5,CM2,CM3,CM3,CL6,CL6,CL6,CM1,CM2,CM3,CM2,CL7,
CL6,CM1,CL5};
int beat_1[] = {1,1,3,1,1,3,1,1,1,1,1,1,1,1,3,1,1,3,1,1,1,1,1,1,1,2,1,1,
1,1,1,1,1,1,3};
int song_2[] = {CM1,CM1,CM1,CL5,CM3,CM3,CM3,CM1,CM1,CM3,CM5,CM5,CM4,CM3,CM2,
CM2,CM3,CM4,CM4,CM3,CM2,CM3,CM1,CM1,CM3,CM2,CL5,CL7,CM2,CM1
};
int beat_2[] = {1,1,1,3,1,1,1,3,1,1,1,1,1,1,3,1,1,1,2,1,1,1,3,1,1,1,3,3,2,3};
int main(void)
{
int i, j;
if(wiringPiSetup() == -1){ // si la inicialización de wiring falla, imprime mensaje en pantalla
printf("setup wiringPi failed !");
return 1;
}
if(softToneCreate(BuzPin) == -1){
printf("setup softTone failed !");
return 1;
}
while(1){
printf("music is being played...\n");
delay(100);
for(i=0;i
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/python/
**Paso 3: Ejecuta.**
.. raw:: html
.. code-block::
sudo python3 1.2.2_PassiveBuzzer.py
Al ejecutar el código, el zumbador reproduce una melodía.
**Código**
.. note::
Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Pero antes de eso, debes ir a la ruta del código fuente como ``davinci-kit-for-raspberry-pi/python``.
.. raw:: html
.. code-block:: python
import RPi.GPIO as GPIO
import time
Buzzer = 11
CL = [0, 131, 147, 165, 175, 196, 211, 248] # Frecuencia de tono bajo en Do mayor
CM = [0, 262, 294, 330, 350, 393, 441, 495] # Frecuencia de tono medio en Do mayor
CH = [0, 525, 589, 661, 700, 786, 882, 990] # Frecuencia de tono agudo en Do mayor
song_1 = [ CM[3], CM[5], CM[6], CM[3], CM[2], CM[3], CM[5], CM[6], # Notas de song1
CH[1], CM[6], CM[5], CM[1], CM[3], CM[2], CM[2], CM[3],
CM[5], CM[2], CM[3], CM[3], CL[6], CL[6], CL[6], CM[1],
CM[2], CM[3], CM[2], CL[7], CL[6], CM[1], CL[5] ]
beat_1 = [ 1, 1, 3, 1, 1, 3, 1, 1, # Duración de cada nota de song1, 1 significa 1/8 tiempo
1, 1, 1, 1, 1, 1, 3, 1,
1, 3, 1, 1, 1, 1, 1, 1,
1, 2, 1, 1, 1, 1, 1, 1,
1, 1, 3 ]
song_2 = [ CM[1], CM[1], CM[1], CL[5], CM[3], CM[3], CM[3], CM[1], # Notas de song2
CM[1], CM[3], CM[5], CM[5], CM[4], CM[3], CM[2], CM[2],
CM[3], CM[4], CM[4], CM[3], CM[2], CM[3], CM[1], CM[1],
CM[3], CM[2], CL[5], CL[7], CM[2], CM[1] ]
beat_2 = [ 1, 1, 2, 2, 1, 1, 2, 2, # Duración de cada nota de song2, 1 significa 1/8 tiempo
1, 1, 2, 2, 1, 1, 3, 1,
1, 2, 2, 1, 1, 2, 2, 1,
1, 2, 2, 1, 1, 3 ]
def setup():
GPIO.setmode(GPIO.BOARD) # Numeración de GPIOs por posición física
GPIO.setup(Buzzer, GPIO.OUT) # Configura el pin como salida
global Buzz # Asigna una variable global para GPIO.PWM
Buzz = GPIO.PWM(Buzzer, 440) # 440 es la frecuencia inicial.
Buzz.start(50) # Inicia el pin del Buzzer con un ciclo de trabajo del 50%
def loop():
while True:
print ('\n Playing song 1...')
for i in range(1, len(song_1)): # Reproduce song1
Buzz.ChangeFrequency(song_1[i]) # Cambia la frecuencia según la nota de la canción
time.sleep(beat_1[i] * 0.5) # Mantiene la nota durante beat * 0.5s
time.sleep(1) # Espera un segundo para la siguiente canción.
print ('\n\n Playing song 2...')
for i in range(1, len(song_2)): # Reproduce song2
Buzz.ChangeFrequency(song_2[i]) # Cambia la frecuencia según la nota de la canción
time.sleep(beat_2[i] * 0.5) # Mantiene la nota durante beat * 0.5s
def destroy():
Buzz.stop() # Detiene el zumbador
GPIO.output(Buzzer, 1) # Configura el pin del zumbador en alto
GPIO.cleanup() # Libera recursos
if __name__ == '__main__': # El programa empieza aquí
setup()
try:
loop()
except KeyboardInterrupt: # Cuando se presiona 'Ctrl+C', se ejecuta la función destroy()
destroy()
**Explicación del Código**
.. code-block:: python
CL = [0, 131, 147, 165, 175, 196, 211, 248] # Frecuencia de tono bajo en Do mayor
CM = [0, 262, 294, 330, 350, 393, 441, 495] # Frecuencia de tono medio en Do mayor
CH = [0, 525, 589, 661, 700, 786, 882, 990] # Frecuencia de tono alto en Do mayor
Estas son las frecuencias de cada nota. El primer 0 es para omitir CL[0],
de modo que los números 1-7 correspondan a las notas CDEFGAB de la escala.
.. code-block:: python
song_1 = [ CM[3], CM[5], CM[6], CM[3], CM[2], CM[3], CM[5], CM[6],
CH[1], CM[6], CM[5], CM[1], CM[3], CM[2], CM[2], CM[3],
CM[5], CM[2], CM[3], CM[3], CL[6], CL[6], CL[6], CM[1],
CM[2], CM[3], CM[2], CL[7], CL[6], CM[1], CL[5] ]
Estos arreglos representan las notas de una canción.
.. code-block:: python
beat_1 = [ 1, 1, 3, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1,
1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
1, 1, 3 ]
Cada número en beat_1 representa un octavo de tiempo, es decir, 0,5 segundos.
.. code-block:: python
Buzz = GPIO.PWM(Buzzer, 440)
Buzz.start(50)
Define el pin Buzzer como un pin PWM, establece su frecuencia en 440 Hz
y ejecuta PWM con Buzz.start(50), además de configurar el ciclo de trabajo en un 50%.
.. code-block:: python
for i in range(1, len(song_1)):
Buzz.ChangeFrequency(song_1[i])
time.sleep(beat_1[i] * 0.5)
Ejecuta un bucle for, y el zumbador reproducirá las notas en el arreglo song_1[]
según los tiempos especificados en el arreglo beat_1[].
Ahora puedes escuchar el zumbador pasivo reproduciendo música.
Imagen del Fenómeno
----------------------
.. image:: img/image107.jpeg