Melodía de Star Wars con Buzzer
Hoy os traemos el siguiente experimento con el buzzer ( un zumbador piezoeléctrico (buzzer en inglés), es un transductor electroacústico que produce un sonido o zumbido continuo o intermitente de un mismo tono. Sirve como mecanismo de señalización o aviso, y son utilizados en múltiples sistemas como en automóviles o en electrodomésticos ).
Su construcción consta de dos elementos, un electroimán y una lámina metálica de acero. El zumbador puede ser conectado a circuitos integrados especiales para así lograr distintos tonos o en nuestro caso controlarlo mediante Arduino UNO.
Cuando se acciona, la corriente pasa por la bobina del electroimán y produce un campo magnético variable que hace vibrar la lámina de acero sobre la armadura produciéndose de esta manera el sonido. Variando la frecuencia de vibración de la lámina podemos conseguir multitud de tonos en un mismo zumbador, además si esos tonos les aplicamos durante una duración determinada podremos conseguir reproducir cualquier tipo de canción con un parecido razonable, aunque este proceso es bastante complejo.Cuando encendemos el programa suena la cancion de Star Wars.
Aquí os dejo el una imagen de fritzing para que os sea mas facil realizar la tarea, y a continuacion un video y una imagen de como funciona.

Por último teneis el codigo de programación el cual no es muy dificil, basicamente es como el del semaforo que lo teneis mas abajo.
Todo siempre hay que escribirlo con puntos, comas, puntos y comas, comillas... para que el programa funcione.
#define c3 7634
#define d3 6803#define e3 6061#define g3 5102#define f3 5714#define a3 4545#define c4 3816 // 261 Hz#define b3 4049#define d4 3401 // 294 Hz#define e4 3030 // 329 Hz#define f4 2865 // 349 Hz#define g4 2551 // 392 Hz#define a4 2272 // 440 Hz#define a4s 2146#define b4 2028 // 493 Hz#define c5 1912 // 523 Hz#define d5 1706#define d5s 1608#define e5 1517 // 659 Hz#define f5 1433 // 698 Hz#define g5 1276#define a5 1136#define b5 1012#define a5s 1073#define c6 955#define R 0// Melodia 1 tono imperialint melodia1[] = { a4, R, a4, R, a4, R, f4, R, c5, R, a4, R, f4, R, c5, R, a4, R, e5, R, e5, R, e5, R, f5, R, c5, R, g5, R, f5, R, c5, R, a4, R};int beats1[] = { 50, 20, 50, 20, 50, 20, 40, 5, 20, 5, 60, 10, 40, 5, 20, 5, 60, 80, 50, 20, 50, 20, 50, 20, 40, 5, 20, 5, 60, 10, 40, 5, 20, 5, 60, 40};// Melodia 2 de star warsint melodia2[] = { f4, f4, f4, a4s, f5, d5s, d5, c5, a5s, f5, d5s, d5, c5, a5s, f5, d5s, d5, d5s, c5};int beats2[] = { 21, 21, 21, 128, 128, 21, 21, 21, 128, 64, 21, 21, 21, 128, 64, 21, 21, 21, 128 };int MAX_COUNT = sizeof(melodia1) / 2;long tempo = 10000;int pause = 1000;int rest_count = 50;int tonoM = 0;int beat = 0;long duracion = 0;int potVal = 0;int speakerOut = 9;int led = 6;void setup() {pinMode(speakerOut, OUTPUT);pinMode(led, OUTPUT);Serial.begin(9600);}void loop() {// Melodia1for (int i=0; i<MAX_COUNT; i++) {tonoM = melodia1[i];duracion = beat * tempo;beat = beats1[i];playTone();delayMicroseconds(pause);}// Melodia2MAX_COUNT = sizeof(melodia2) / 2;for (int i = 0; i < MAX_COUNT; i++) {tonoM = melodia2[i];duracion = beat * tempo;beat = beats2[i];playTone();delayMicroseconds(pause);}}void playTone() {long elapsed_time = 0;if (tonoM > 0) {digitalWrite(led,HIGH);while (elapsed_time < duracion) {digitalWrite(speakerOut,HIGH);delayMicroseconds(tonoM / 2);digitalWrite(speakerOut, LOW);delayMicroseconds(tonoM / 2);elapsed_time += (tonoM);}digitalWrite(led,LOW);}else {for (int j = 0; j < rest_count; j++) {delayMicroseconds(duracion);}}}
No hay comentarios:
Publicar un comentario