Para ello vamos a necesitar los siguientes componentes:
- Zumbador piezoelectrico
- Arduino uno
Tan sencillo como los materiales que necesitamos sera nuestro diseño en placa, seria algo parecido al siguiente:
Una vez implementado nuestro diseño, pasaremos a programar nuestra placa arduino. Para ello, tenemos que tener en cuenta lo siguiente:
- Se debe crear un arrayde datos compuesto por los valores correspondientes a las 8 notas que se pretende sacar:
int notas[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
- Se deben definir también el tiempo de pausa entre nota y nota y el tiempo de pausa de fin de secuencia de notas:
int tnota=100;
int tpausa=100;
int tpausa=100;
- Las iteraciones para el recorrido de las 8 notas se realizan con una instrucción de tipo for:
for(n=0;n<8;n++)
- El tiempo de activado y desactivado de la salida del zumbador también se resuelve con un bucle for:
for(m=0;m<=tnota;m++){
Dicho esto, el codigo seria el siguiente:
int notas[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956}; //cadena con los
tiempos que corresponden a las distintas notas
int n=0;
int m= 0;
int tnota=100; //no de repeticiones del pulso. Nos da la duración de la nota
int tpausa=100;
void setup() {
pinMode(10,OUTPUT);
}
void loop(){
for(n=0;n<8;n++){ //iteración que recorre la lista con las duraciones de los
pulsos de cada nota
for(m=0;m<=tnota;m++){
digitalWrite(10,HIGH);
delayMicroseconds(notas[n]); //Tiempo en microsegundos que está a 5V la salida del piezoeléctrico
digitalWrite(10,LOW);
delayMicroseconds(notas[n]); //Tiempo en microsegundos que está a 0V la salida del piezoeléctrico
}
delay(pausa); //tiempo en silencio
}
}
Con esto terminaremos el proyecto de hoy, proximamente ire subiendo nuevos proyectos. Salu2!
Video Comprobación:
ResponderEliminar¿Sabéis de que canción se trata?
http://www.youtube.com/watch?v=pyMT0EDJ1wI
He cambiado un poco el código
int speakerPin = 9;
int length = 73; // the number of notes
char notes[] = "ccdecgfec ccdecG ccdecgagfe ccdecg ggagfefga ffgfedefg eefedcdfa bagfedc "; // a space represents a rest
int beats[] = { 1,1,1,2,2,4,1,1,1,1,1,1,1,2,2,4,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,4,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,4,4 };
int tempo = 300;
void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration) {
char names[] = { 'G','c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1950,1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
// play the tone corresponding to the note name
for (int i = 0; i < 9; i++) {
if (names[i] == note) {
playTone(tones[i], duration);
}
}
}
void setup() {
pinMode(speakerPin, OUTPUT);
}
void loop() {
for (int i = 0; i < length; i++) {
if (notes[i] == ' ') {
delay(beats[i] * tempo); // rest
} else {
playNote(notes[i], beats[i] * tempo);
}
// pause between notes
delay(tempo / 2);
}
}
muy buena.. una pregunta...es que quiero hacer una canción navideña...hay algún código en especifico
ResponderEliminar