miércoles, 20 de marzo de 2019

Practica 2 BUZZER

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 imperial
int 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 wars
int 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() {
// Melodia1
for (int i=0; i<MAX_COUNT; i++) {
tonoM = melodia1[i];
duracion = beat * tempo;
beat = beats1[i];
playTone();
delayMicroseconds(pause);
}
// Melodia2
MAX_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