martes, 2 de diciembre de 2014

8. Estrella fugaz

Descripción del ejercicio
Este ejercicio muestra como realizar un rayo de luz, o más poéticamente, una estrella
fugaz, moviéndose a través de una línea de LED-s. Podremos configurar tanto la
velocidad de de la estrella, así como la longitud de la cola. No es muy elegante porque
la cola brilla con la misma intensidad que la estrella, y al final, parecerá como si un rayo
sólido cruzase la línea de LED-s.

Elementos necesarios:
· 11 LED-s.
· 11 resistencias de 220 Ohmios.
· Una placa protoboard.
· Cables para realizar las conexiones.

Esquema

¿Cómo funciona?
Hay que conectar 11 LED-s a los pines digitales de la placa a través de resistencias de
220 Ohmios tal y como se muestra en la imagen superior.


El programa comienza encendiendo LED-s hasta que llegue al número de LED-s
establecido para la cola. En ese momento seguirá encendiendo LED-s hacia la izquierda
(si se monta tal y como se muestra en la fotografía inferior), para mantener el
movimiento de la estrella, al mismo tiempo que apaga LED-s por la derecha, para
asegurarnos de que vemos la cola. De otra forma seguiría encendiendo LED-s hasta
encenderlos todos. Esto ocurre cuando el tamaño de la cola es igual o mayor que el
número de LED-s.
El tamaño de la cola debería ser relativamente pequeño en comparación con el número
de LED-s de forma que podamos ver la estrella.



Código fuente
/* Estrella fugaz
*--------------
* Este programa es una variante del ejemplo del coche fantástico. Muestra mediante
* un loop una estrella fugaz que es dibujada en una línea de LED-s
* directamente conectados a la placa Arduino. Puedes controlar la velocidad a la que
* la estrella se mueve gracias a una variable llamada "waitNextLed". También
* puedes controlar la longitud de la cola de la estrella a través de la variable "tail
* length"
* @author: Cristina Hoffmann
* @hardware: Cristina Hofmann
*/
// Variable declaración
// Declaración de los PIN-es mediante un array
int pinArray [] = { 2,3,4,5,6,7,8,9,10,11,12 };
int controlLed = 13; // LED de control
int waitNextLed = 100; // Tiempo antes de encender el siguiente LED
// Número de LED-s que permanecen encendidos antes de empezar a apagarlos para
//formar la cola
int tailLength = 4;
// Número de LED-s conectados (que es también el tamaño del array)
int lineSize = 11;
void setup() // Configuración de los PIN-es como salida digital
{
int i;
pinMode (controlLed, OUTPUT);
for (i=0; i< lineSize; i++)
{
pinMode(pinArray[i], OUTPUT);
}
}
void loop()
{
int i;
// Se establece la longitud de la cola en un contador
int tailCounter = tailLength;
// Se enciende el LED de control para indicar el inicio del loop
digitalWrite(controlLed, HIGH);
for (i=0; i<lineSize; i++)
{
digitalWrite(pinArray[i],HIGH); // Se encienden consecutivamente los LED
// Esta variable de tiempo controla la velocidad a la que se mueve la estrella
delay(waitNextLed);
if (tailCounter == 0)
{
// Se apagan los LED-s en función de la longitud de la cola.
digitalWrite(pinArray[i-tailLength],LOW);
}
else
if (tailCounter > 0)
tailCounter--;
}
for (i=(lineSize-tailLength); i<lineSize; i++)
{
digitalWrite(pinArray[i],LOW); // Se apagan los LED
// Esta variable de tiempo controla la velocidad a la que se mueve la estrella
delay(waitNextLed);
}
}

Video: 


1 comentario: