martes, 11 de mayo de 2010

POV



Unos de los primeros proyectos que realice fue un POV o traducido objeto de persistencia visual, que consiste en una linea de leds que parpadean a una velocidad constante y que al moverlos en una direcccion puede verse en el aire la figura o texto que se programa. es el equivalente a una linea vertical de un display de texto de matriz de puntos, que al deslizar el testo esta linea va enciendiendo y apagando cada uno de los leds para componer la palabra que pasa por esa columna.
Bien mi primer intento fue realizar una placa para que sea montada sobre una placa Arduino, este primer proyecto fue muy rudimentario, para convinar las pines he debido imprimir mucho papales y colocarlo sobre la placa para ver como convinaban los agujeros, todo esto lo hice con el soft Eagle para realizar diagramas de circuitos impresos, aun no habia descubierto el  Fritzing,  espectacular soft muy intuitivo especialmente diseñado para ardino se los recomiendo, ya que directamente deja los pines a la distancia justa para ser miontados sobre las salidas y entradas de la arduino.
Luego decidi hacerlo con una placa esperimental y colocar 5 leds y se monto sobre la placa Arduino.
y asi quedo:

Esa es la placa esperimental con los 5 leds y resistencias de 200 ohms por cada led.


aca la placa esta montada sobre la Arduino

Ahora veamoslo Funcianando.


Aquí les dejo el codigo:

// define el alfabeto
// cada 5 digitos es una linea vertical de la letra
// cada letra esta compuesta por tres lineas verticales
int _[] = {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0};
int A[] = {0,1,1,1,1, 1,0,1,0,0, 0,1,1,1,1};
int B[] = {1,1,1,1,1, 1,0,1,0,1, 0,1,0,1,0};
int C[] = {0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1};
int D[] = {1,1,1,1,1, 1,0,0,0,1, 0,1,1,1,0};
int E[] = {1,1,1,1,1, 1,0,1,0,1, 1,0,1,0,1};
int F[] = {1,1,1,1,1, 1,0,1,0,0, 1,0,1,0,0};
int G[] = {0,1,1,1,0, 1,0,1,0,1, 0,0,1,1,0};
int H[] = {1,1,1,1,1, 0,0,1,0,0, 1,1,1,1,1};
int I[] = {0,0,0,0,1, 1,0,1,1,1, 0,0,0,0,1};
int J[] = {1,0,0,0,0, 1,0,0,0,1, 1,1,1,1,1};
int K[] = {1,1,1,1,1, 0,0,1,0,0, 0,1,0,1,1};
int L[] = {1,1,1,1,1, 0,0,0,0,1, 0,0,0,0,1};
int M[] = {1,1,1,1,1, 0,1,1,0,0, 0,1,1,1,1};
int N[] = {1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1};
int O[] = {0,1,1,1,0, 1,0,0,0,1, 0,1,1,1,0};
int P[] = {1,1,1,1,1, 1,0,1,0,0, 0,1,0,0,0};
int Q[] = {0,1,1,1,1, 1,0,0,1,1, 0,1,1,1,1};
int R[] = {1,1,1,1,1, 1,0,1,0,0, 0,1,0,1,1};
int S[] = {0,1,0,0,1, 1,0,1,0,1, 1,0,0,1,0};
int T[] = {1,0,0,0,0, 1,1,1,1,1, 1,0,0,0,0};
int U[] = {1,1,1,1,1, 0,0,0,0,1, 1,1,1,1,1};
int V[] = {1,1,1,1,0, 0,0,0,0,1, 1,1,1,1,0};
int W[] = {1,1,1,1,0, 0,0,1,1,0, 1,1,1,1,0};
int X[] = {1,1,0,1,1, 0,0,1,0,0, 1,1,0,1,1};
int Y[] = {1,1,0,0,0, 0,0,1,0,0, 1,1,1,1,1};
int Z[] = {1,0,0,1,1, 1,0,1,0,1, 1,1,0,0,1};

int letterSpace;
int dotTime;

void setup()
{
// define puertos de salida
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);

// define el espacio entre letras (ms)
letterSpace = 6;
// define el tiempo del punto (ms)
dotTime = 3;

}

void printLetter(int letter[]) //
{
int y; // inicializa la variable como un entero
// recorre el array de cada letra
// la primera linea Y de la letra
for (y=0; y<5; y++) // setea y=0, limita y hasta 5 puntos horizontales, comienza a sumar
{
digitalWrite(y+2, letter[y]); // (pin 2 al 6, asigna valor 1 o 0) empieza del 1 al 5 de la array
}
delay(dotTime); // retiene encendido

// la segunda linea Y de la letra
for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y+5]); // empieza del 6 al 10 de la array
}
delay(dotTime);

// la tercera Linea Y de la letra
for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y+10]); // empieza del 11 al 15 de la array
}
delay(dotTime);

// imprime espacio entre letras
for (y=0; y<5; y++)
{
digitalWrite(y+2, 0);
}
delay(letterSpace);
}

void loop()
{
// palabras
printLetter(J);
printLetter(U);
printLetter(L);
printLetter(I);
printLetter(_);
}



No hay comentarios:

Publicar un comentario