Ejercicio 10: Escala musical
El zumbador produce repetidamente una escala musical.
| Novedades hardware | Novedades software |
| Onda cuadrada | Control de tiempos en la escala de los microsegundos |
Requisitos: Un zumbador piezoeléctrico
Planteamiento: Todo aprendiz de músico tiene que practicar escalas.
Presentación de:
- Control de tiempos en el orden de los microsegundos.
- Cómo producir sonidos enviando pulsos.
Vamos a producir notas haciendo oscilar la membrana del zumbador piezoeléctrico con la frecuencia adecuada.
Para producir esta oscilación, enviamos pulsos eléctricos a la salida digital justo a esa frecuencia. Como lo que podemos hacer es usar una versión de delay pero en microsegundos, podemos mandar pulsos cuadrados.
Lo que necesitamos es conocer la mitad de la anchura del pulso para mantener la salida durante ese tiempo sucesivamente a 5V y a 0V.
Mitad de la anchura del pulso = 1/(2 * Frecuencia de la nota) = periodo /2
| Nota | Frecuencia | Periodo | Anchura del pulso |
| do | 261 Hz | 3830 | 1915 |
| re | 294 Hz | 3400 | 1700 |
| mi | 329 Hz | 3038 | 1519 |
| fa | 349 Hz | 2864 | 1432 |
| sol | 392 Hz | 2550 | 1275 |
| la | 440 Hz | 2272 | 1136 |
| si | 493 Hz | 2028 | 1014 |
| do | 523 Hz | 1912 | 956 |
Variaciones:
- Cambia el orden de las notas y/o repítelas para formar una pequeña melodía.
- Sustituye el zumbador por un conector de audio y amplifica la salida conectándolo a la entrada aux o mic de un equipo de sonido o los altavoces de un ordenador. Te sorprenderá la calidad del sonido.
VIDEO DEL EJERCICIO 10
VIDEO DEL EJERCICIO 10 (versión para el montaje del SIMON)
CODIGO FUENTE
Copyright (C) 2006 Juan Carlos Alonso de Mena
This program is free software; you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation;
See the GNU General Public License for more details?
int piezo=10;
int notas[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956}; //cadena con los tiempos que corresponden
int n=0; // a las distintas notas
int m= 0;
int tnota=100; //nº de repeticiones del pulso. Nos da la duración de la nota
int pausa=1000;
void setup() {
pinMode(piezo,OUTPUT);
}
void loop(){
for(n=0;n<8;n++){ //iteración que recorre la lista con las duraciones de los pulsos
for(m=0;m<=tnota;m++){ // de cada nota
digitalWrite(piezo,HIGH);
delayMicroseconds(notas[n]);//Tiempo en microsegundos que está a 5V la salida del piezoeléctrico
digitalWrite(piezo,LOW);
delayMicroseconds(notas[n]);//Tiempo en microsegundos que está a 0V la salida del piezoeléctrico
}
delay(pausa); //tiempo en silencio entre escalas
}
}
Volver?
Copyright (c) 2006 Juan Carlos Alonso de Mena
Permission is granted to copy, distribute and/or modify this document under the terms of
the GNU Free Documentation License, Version 1.2 or any later version published by the
Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no
Back-Cover Texts. A copy of the license is included in the section entitled
GNU Free Documentation License?.