Melodía de “Los Vengadores” con Arduino y Buzzer Pasivo (KY-006)



🔩Funcionamiento

El mundo de la electrónica y la programación nos ofrece un sinfín de posibilidades creativas. En esta ocasión, nos embarcaremos en un proyecto fascinante que fusiona la potencia del microcontrolador Arduino con la simplicidad de un buzzer pasivo (KY-006). Nuestro objetivo no es otro que recrear, de manera simplificada pero con todo el espíritu heroico, la majestuosa y mundialmente conocida melodía de “Los Vengadores” (The Avengers Theme). Este proyecto es una excelente puerta de entrada al control de sonido y la manipulación de frecuencias con Arduino.

Antes de sumergirnos en el código y el montaje, es crucial entender cómo funciona la magia.

El Buzzer Pasivo: Un Altavoz en Miniatura

A diferencia de un buzzer activo que solo necesita alimentación constante (positivo y negativo) para emitir un tono fijo, el buzzer pasivo requiere que le suministremos una señal cuadrada de frecuencia variable para producir diferentes tonos. Actúa como un pequeño altavoz, donde la frecuencia de la señal de entrada determinará el tono (nota musical) que escucharemos. Cuanto mayor sea la frecuencia (medida en Hertzios – Hz), más agudo será el sonido.

Arduino y la Función tone()

Arduino posee una función intrínseca, vital para este proyecto, llamada tone(pin, frecuencia, duración).

  • pin: El pin digital de Arduino al que conectamos el buzzer. Es fundamental usar un pin digital.
  • frecuencia: El valor en Hz de la nota musical que queremos generar (ej. 440 Hz para La 4).
  • duración (opcional): El tiempo en milisegundos que durará la nota.

Esta función genera la señal cuadrada precisa en el pin especificado, liberando al programador de la complejidad de generar manualmente la onda mediante ciclos HIGH y LOW. Para detener la emisión del sonido, se utiliza la función noTone(pin).


🔨Componentes

ComponenteCantidadEspecificaciónFunción
Placa Arduino1Arduino Uno, Nano, etcControl de componentes(cerebro)
Buzzer1pasivo (KY-006)Emitir el sonido
Cables de conexiónnUnir componentes


🔌Conexiones

  • Conecta el pin de señal(S) al pin digital 8 de la placa Arduino.
  • Conecta el pin positivo del buzzer al pin 5v de la placa Arduino.
  • Conecta el pin negativo del buzzer al pin GND de la placa Arduino.

0️⃣Código

El código de Arduino (sketch) utilizará arrays para almacenar de manera ordenada las frecuencias de las notas y sus duraciones, haciendo el código escalable y fácil de leer.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
#include <Arduino.h>

int pinBuzzer = 8;
int Do = 261;
int Re = 293;
int Mi = 329;
int Fa = 349;
int Sol = 392;
int La = 440;
int Si = 493;

int negra = 100;
int blanca = 200;
int retardo = 3000;

void setup() {

}

void loop() {
  tone(pinBuzzer,Sol, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Sol, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Sol, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, blanca);
  delay(negra); 
  noTone(pinBuzzer);
  delay(500); 


  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(500);


  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(300);

  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(300);

  tone(pinBuzzer,Si, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Si, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Si, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(300);

  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(500);


  tone(pinBuzzer,Sol, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Sol, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Sol, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, blanca);
  delay(negra); 
  delay(negra); 
  noTone(pinBuzzer);
  tone(pinBuzzer,Sol, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);


  tone(pinBuzzer,Sol, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Sol, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Sol, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(negra);
  tone(pinBuzzer,Mi, blanca);
  delay(negra);   
  noTone(pinBuzzer);
  delay(negra); 
  delay(negra); 

  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(500);


  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(300);

  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Mi, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(300);

  tone(pinBuzzer,Si, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Si, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,Si, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(300);

  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  tone(pinBuzzer,La, negra);
  delay(negra);
  noTone(pinBuzzer);
  delay(500);

  delay(retardo);
}


🖌️Diseños


🎬Videos


📑Conclusión

Este proyecto, aparentemente sencillo, encapsula la esencia de la electrónica creativa y la programación. Hemos transformado un humilde buzzer pasivo y una placa Arduino en un instrumento musical digital, logrando reproducir, nota por nota, el espíritu épico del tema de “Los Vengadores”.

La clave del éxito reside en la comprensión y aplicación de la función tone(), que nos permite navegar por el vasto espectro del sonido al manipular con precisión las frecuencias en Hertzios (Hz). Al mapear notas musicales a valores de frecuencia y luego gestionarlas mediante arrays y ciclos de programación, demostramos que la música no es más que una secuencia organizada de números y tiempos controlados digitalmente.

Más allá de la melodía en sí, este experimento es un pilar fundamental en la electrónica con microcontroladores, enseñándonos sobre:

  1. Generación de Señal (PWM): Entendiendo cómo Arduino genera la onda cuadrada necesaria para que el buzzer pasivo vibre.
  2. Manejo de Arrays: Utilizando estructuras de datos para gestionar secuencias complejas (melodías y ritmos) de manera limpia y escalable.
  3. Sincronización: Controlando el tiempo preciso (milisegundos) para la duración y separación de cada nota, lo que define el ritmo y la musicalidad del proyecto.

En resumen, hemos cruzado la frontera entre el hardware y el software para dar vida a la banda sonora de un universo cinematográfico, probando que incluso el componente más básico puede ser heroico en las manos del programador. ¡Este simple montaje es tu primer paso hacia la composición y el control de audio avanzado con Arduino!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Carrito de compra