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