Montaje 2: Tuning

Requisitos:

  • 4 LEDs, 4 resistencias de 220 ohmios.
  • Un pulsador, una resistencia de 1Kohmio.
  • Un zumbador piezoeléctrico.

Planteamiento: Personaliza tu coche con juegos de luces y un claxón musical.

TUNING 1

En el primer ejemplo(Tuning 1) tenemos un juego de luces e independientemente, un claxon que suena al presionar el pulsador.

Usamos el procedimiento nota( )del ejercicio para la ruleta musical? para producir cada nota individual. La secuencia de notas la construimos reordenando la cadena del ejercicio escala musical?. Las secuencias de luces son las del ejercicio ruleta luminosa? y su variación que consiste en recorrer la cadena a la inversa.

Para que el efecto quede más conseguido añadimos el recorrido inverso de la cadena de notas detrás del recorrido directo, con lo que queda una melodía de ida y vuelta con un sonsonete apropiado al caso.

VIDEO DEL MONTAJE 2: Tuning 1

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 zumb=10;
 int puls=5;
 int cadenaLeds[]={6,7,8,9};
 //int notas[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
 int notas[] = {1915,1519, 1700, 1275, 1432, 1014, 1136, 956};
 int n=0;
 int m= 0;
 int tiempo=100;                      //duración del parpadeo de las luces
 int tnota=50;                        //duración de la nota(en nº de repeticiones)
 int pausa=1000;
 void setup() { 
   for(n=0;n<4;n++){
     pinMode(cadenaLeds[n],OUTPUT);
   }
   pinMode(zumb,OUTPUT);
 } 
 void nota(){                         //procedimiento que da la nota leyendo el valor del tiempo de pulso
   for(m=0;m<=tnota;m++){             // de la cadena
     digitalWrite(zumb,HIGH);
     delayMicroseconds(notas[n]);
     digitalWrite(zumb,LOW);
     delayMicroseconds(notas[n]);
   }
 }
 void secuencia1(){                   //recorrido de luces en un sentido
   for(n=0;n<4;n++){
     digitalWrite(cadenaLeds[n],HIGH);
     delay(tiempo);
     digitalWrite(cadenaLeds[n],LOW);
   }
 }
 void secuencia2(){                   //recorrido de luces en el sentido contrario
   for(n=3;n>-1;n--){
     digitalWrite(cadenaLeds[n],HIGH);
     delay(tiempo);
     digitalWrite(cadenaLeds[n],LOW);
   }
 }
 void claxon1(){                      //primera parte de la melodía del claxon
   for(n=0;n<8;n++){ 
     nota();
   }
 }  
 void claxon2(){                      //segunda parte de la melodía del claxon
   for(n=7;n>-1;n--){                 //con las notas en secuencia inversa a la primera
     nota();
   }
 }  
 void loop(){
   secuencia1();
   secuencia2();
   if(digitalRead(puls)==HIGH){
     claxon1();
     claxon2();
     delay(pausa);                    //tiempo entre bocinazos si mantienes el pulsador presionado
   }       
 } 

TUNING 2

En el segundo (Tuning 2) las luces y sonidos van sincronizados. Es una pequeña variante del ejercicio para la ruleta musical? en la que hemos creado un procedimiento para hacer parpadear cada LED por separado.

VIDEO DEL MONTAJE 2: Tuning 2

CODIGO FUENTE

 int zumb=10;
 int cadenaLeds[]={6,7,8,9};
 //int notas[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
 int notas[] = {956, 1915, 1136, 956};        //lista de tiempos de pulso para cada nota  que asociaremos a un LED
 int n=0;
 int m= 0;
 int tiempo=100;
 int tnota=50;
 int pausa=500;
 void setup() { 
   for(n=0;n<4;n++){
     pinMode(cadenaLeds[n],OUTPUT);
   }
   pinMode(zumb,OUTPUT);
 }  
 void luz(){                          //procedimiento que hace parpadear un LED
   digitalWrite(cadenaLeds[n],HIGH);
   delay(tiempo);
   digitalWrite(cadenaLeds[n],LOW);
 }
 void nota(){                         //usamos la misma variable, n, para recorrer la cadena
   for(m=0;m<=tnota;m++){             //de LEDs y la de notas para sincronizarlos
     digitalWrite(zumb,HIGH);
     delayMicroseconds(notas[n]);
     digitalWrite(zumb,LOW);
     delayMicroseconds(notas[n]);
   }
 }  
 void loop(){
   for(n=0;n<4;n++){
     nota();
     luz();
   } 
   for(n=3;n>-1;n--){
     nota();
     luz();
   } 
   delay(pausa);       
 }

SIRENA CON LUCES

En el tercer ejemplo (Sirena con luces) usamos una aproximación distinta, que consiste en insertar en el ejercicio de la sirena? una variable que cambie de estado (como en el ejercicio interruptor del intermitente?) tras cada tono correspondiente a una frecuencia. Con cada cambio de estado de esta variable encendemos o apagamos los LEDs. Esto lo hacemos con dos condicionales que comprueban el estado de dicha variable.

El resultado es que cada vez que cambia la frecuencia del sonido los LEDs se encienden si estaban apagados o se apagan si estaban encendidos.

Aunque cada frecuencia de sonido( o “nota”) se repite el mismo nº de veces, como la duración de los pulsos es distinta, los tiempos totales en los que están sonando disminuyen según aumenta la frecuencia, con lo que también disminuyen los tiempos en que los LEDs están encendidos o apagados.

Así se consigue el efecto de que la aceleración en el ritmo del parpadeo de los LEDs acompañe al aumento de frecuencia.

Hacemos la duración de cada puso algo mayor que en el ejercicio de la sirena? para que el efecto sea más visible.

VIDEO DEL MONTAJE 2: Sirena Luminosa

CODIGO FUENTE

 int zumb=10;
 int cadenaLeds[]={6,7,8,9};
 //int notas[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
 int n=0;
 int c=1;
 int m=3000;
 int tiempo=100;
 int pausa=1000;
 void setup() { 
   for(n=0;n<4;n++){
     pinMode(cadenaLeds[n],OUTPUT);
   }
   pinMode(zumb,OUTPUT);
  } 
 void loop(){
   for(n=0;n<20;n++){                 //tiempo(en nº de repeticiones) que dura el pulso que genera cada "nota"
     digitalWrite(zumb,HIGH);
     delayMicroseconds(m);
     digitalWrite(zumb,LOW);
     delayMicroseconds(m);
     if(c==1){                        //para cada "nota" impar
       digitalWrite(cadenaLeds[n],HIGH);
     }
     if(c==-1){                       //para cada "nota" par
       digitalWrite(cadenaLeds[n],LOW);
     }
   }
   c=c*-1;                            //actualización de la variable que marca si la "nota" es par o impar
   m=m-50;                            //actualización de la variable que disminuye el tiempo del pulso de cada "nota"
   if(m<800){
    m=3000;
    delay(pausa);
   }    
 }

Variaciones:

  • Cambia los valores para conseguir otros sonidos y otros ritmos.

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