Ejercicio 10: Escala musical

El zumbador produce repetidamente una escala musical.

Novedades hardwareNovedades software
Onda cuadradaControl 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

NotaFrecuenciaPeriodoAnchura del pulso
do261 Hz38301915
re294 Hz34001700
mi329 Hz30381519
fa349 Hz28641432
sol392 Hz25501275
la440 Hz22721136
si493 Hz20281014
do523 Hz1912956

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?.