You are on page 1of 7

En este artculo construiremos un proyecto muy conocico para los amantes de la electrnica

y los microcontroladores y se trata de un POV (Persistence Of Vision), o como le dicen


para escribir en el aire. Se trata de formar una palabra o frase en un arreglo de 7 leds, ir
formando cada letra y gracias al defecto de la retina de mantener una imagen por una
fraccin de segundo asi esta ya haya desaparecido, podemos visualizar la palabra o frase
completa. Este efecto es aprovechado tambin en la speliculas donde se toman 30
fotogramas por segundo pero nosotros observamos la imagen en movimiento, sin pausas.
La imagen muestra una vista previa del proyecto armado, en el cual se form la palabra
ARDUINO

Lista de materiales:
- (1) Tarjeta Arduino cualqueir modelo.
- (7) Led's de cualquier color.
- (1) Led infrarojo.
- (1) Diodo Fotoreceptor de infrarojos
- (8) Resistencias de 220
- (1) Resistencia de 10K
- (1) Batera de 9V
- (1) Motor pequeo (para acoplar el protoboard.)

- Cables de conexin

Para que las letras comienzen a formarse siempre desde una misma posicin y evitar que se
vea el mensaje corrido o difcil de leer, hay que contar con un sistema que detecte cuando se
pase por esa posicin. Se puede optar por colocar o un sensor magntico ligado a un iman o
un fotodiodo o fototransistor que se active cada vez que reciba la luz proveniente de un diodo
led emisor de infrarojos. Este ltimo ser el sistema usado en este proyecto.

Diagrama Esquemtico
Como vemos en el diagrama,es fcil de realizar, slo usaremos 8 pines del arduino. Tener
cuidado de que el fotodiodo debe conectarse de manera inversa, es decir, el nodo va
conectado a tierra a travs de la resistencia de 10k, y su ctodo va hacia el positivo de la
fuente.
Se recomienda usar una pila o bateria para alimentar el circuito, ya que como este va a estar
acoplado mecanicamente al eje del motor para que pueda girar, no debe tener ningun cable
externo para que no se enrede.
Se debe colocar un diodo emisor de infrarojos, de esos usados en los controles remotos,
encima de la base donde se apoyar el motor; y en la parte giratoria se coloca el fotodiodo,
asi como se muestra en la siguiente imagen:

Ubicacin del fotodiodo

Ubicacin del led emisor de infrarojos


El algoritmo para mostrar los carcteres es el siguiente:

Encender leds de primera columna de la letra.


Mantenerla encendida por una fraccin de tiempo.
Apagar la columna.
Encender leds de la segunda columna de la letra, y asi sucesivamente hasta
completar todas las cinco columnas.

**** Cdigo en Arduino *********


int leds[]={4,5,6,7,8,9,10}; //Array para los leds
const int sensor=2; // sensor de posicin
int estado=0;
int _[] = {0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0};
int A[] = {0,1,1,1,1,1,1, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 0,1,1,1,1,1,1};
int B[] = {1,1,1,1,1,1,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 0,1,1,0,1,1,0};
int C[] = {0,1,1,1,1,1,0, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1};
int D[] = {1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 0,1,1,1,1,1,0};
int E[] = {1,1,1,1,1,1,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1};
int F[] = {1,1,1,1,1,1,1, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0};
int G[] = {1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,1,1,1};
int H[] = {1,1,1,1,1,1,1, 0,0,0,1,0,0,0, 0,0,0,1,0,0,1, 0,0,0,1,0,0,0, 1,1,1,1,1,1,1};
int I[] = {1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1};
int J[] = {0,0,0,0,1,1,0, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 1,1,1,1,1,1,0};
int K[] = {1,1,1,1,1,1,1, 0,0,0,1,0,0,0, 0,0,1,0,1,0,0, 0,1,0,0,0,1,0, 1,0,0,0,0,0,1};
int L[] = {1,1,1,1,1,1,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1};
int M[] = {1,1,1,1,1,1,1, 0,1,0,0,0,0,0, 0,0,1,1,0,0,0, 0,1,0,0,0,0,0, 1,1,1,1,1,1,1};
int N[] = {1,1,1,1,1,1,1, 0,1,0,0,0,0,0, 0,0,1,0,0,0,0, 0,0,0,1,0,0,0, 1,1,1,1,1,1,1};
int O[] = {0,1,1,1,1,1,0, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 0,1,1,1,1,1,0};
int P[] = {1,1,1,1,1,1,1, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 0,1,1,0,0,0,0};
int Q[] = {0,1,1,1,1,0,0, 1,0,0,0,0,1,0, 1,0,0,0,0,1,0, 1,0,0,0,0,1,0, 0,1,1,1,1,0,1};
int R[] = {1,1,1,1,1,1,1, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 0,1,1,0,1,1,1};
int S[] = {0,1,1,0,0,0,0, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 0,0,0,0,1,1,0};
int T[] = {1,0,0,0,0,0,0, 1,0,0,0,0,0,0, 1,1,1,1,1,1,1, 1,0,0,0,0,0,0, 1,0,0,0,0,0,0};
int U[] = {1,1,1,1,1,1,0, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 1,1,1,1,1,1,0};
int V[] = {1,1,1,1,1,0,0, 0,0,0,0,0,1,0, 0,0,0,0,0,0,1, 0,0,0,0,0,1,0, 1,1,1,1,1,0,0};
int W[] = {1,1,1,1,1,1,1, 0,0,0,0,0,1,0, 0,0,0,0,1,0,0, 0,0,0,0,0,1,0, 1,1,1,1,1,1,1};
int X[] = {1,0,0,0,0,0,1, 0,1,0,0,0,1,0, 0,0,1,1,1,0,0, 0,1,0,0,0,1,0, 1,0,0,0,0,0,1};
int Y[] = {1,1,1,0,0,0,0, 0,0,0,1,0,0,0, 0,0,0,0,1,1,1, 0,0,0,1,0,0,0, 1,1,1,0,0,0,0};
int Z[] = {1,0,0,0,0,1,1, 1,0,0,0,1,0,1, 1,0,0,1,0,0,1, 1,0,1,0,0,0,1, 1,1,0,0,0,0,1};
//Para los nmeros hay que anteponerle el simbolo "_" debido a que no se permite que los
nombres de arrays comienzen con un nmero
int _0[] = {0,1,1,1,1,1,0, 1,0,0,0,1,0,1, 1,0,0,1,0,0,1, 1,0,1,0,0,0,1, 0,1,1,1,1,1,0};
int _1[] = {0,0,0,0,0,0,0, 0,0,1,0,0,0,0, 0,1,0,0,0,0,0, 1,1,1,1,1,1,1, 0,0,0,0,0,0,0};
int _2[] = {0,1,0,0,0,0,1, 1,0,0,0,0,1,1, 1,0,0,0,1,0,1, 1,0,0,1,0,0,1, 0,1,1,0,0,0,1};
int _3[] = {0,1,0,0,0,1,0, 1,0,0,0,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 0,1,1,0,1,1,0};
int _4[] = {0,0,0,1,1,0,0, 0,0,1,0,1,0,0, 0,1,0,0,1,0,0, 1,1,1,1,1,1,1, 0,0,0,0,1,0,0};

int _5[] = {1,1,1,0,0,1,0, 1,0,1,0,0,0,1, 1,0,1,0,0,0,1, 1,0,1,0,0,0,1, 1,0,0,1,1,1,0};


int _6[] = {0,1,1,1,1,1,0, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 0,1,0,0,1,1,0};
int _7[] = {1,0,0,0,0,0,0, 1,0,0,0,0,0,0, 1,0,0,0,1,1,1, 1,0,0,1,0,0,0, 1,1,1,0,0,0,0};
int _8[] = {0,1,1,0,1,1,0, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 0,1,1,0,1,1,0};
int _9[] = {0,1,1,0,0,1,0, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 0,1,1,1,1,1,0};
int espaciado;
int retardo;
void setup()
{
//Configuro los LEDS como salidas y el sensor como entrada
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(sensor,INPUT);
//Espacio entre cada letra en milisegundos
espaciado = 6;
retardo =3;
}
//***** Para limpiar la columna************
void borrar() {
for(int z=0;z<7;z++)
{
digitalWrite(z+4,LOW);
}
}
//*****************************************
void imprimir(int caracter[])
{
int y;
// Imprime la primera columna
for (y=0; y<7; y++)
{
digitalWrite(y+4, caracter[y]);
}
delay(retardo);
borrar();
// Imprime la segunda columna
for (y=0; y<7; y++)
{
digitalWrite(y+4, caracter[y+7]);
}
delay(retardo);

borrar();
// Imprime la tercera columna
for (y=0; y<7; y++)
{
digitalWrite(y+4, caracter[y+14]);
}
delay(retardo);
borrar();
// Imprime la cuarta columna
for (y=0; y<7; y++)
{
digitalWrite(y+4, caracter[y+21]);
}
delay(retardo);
borrar();
// Imprime la quinta columna
for (y=0; y<7; y++)
{
digitalWrite(y+4, caracter[y+28]);
}
delay(retardo);
borrar();
// Imprime el espacio entre las letras
for (y=0; y<7; y++)
{
digitalWrite(y+4, 0);
}
delay(espaciado);
}
void loop()
{
estado = digitalRead(sensor);
if(estado==HIGH)
{
imprimir(A);
imprimir(R);
imprimir(D);
imprimir(U);
imprimir(I);
imprimir(N);
imprimir(O);
imprimir(_);
}

Descargar cdigo de Arduino POV


https://www.dropbox.com/s/hconsexnpkfjpxx/ArduinoPov.ino?dl=0
Siguenos en twitter
Ver videotutorial en youtube
https://www.dropbox.com/s/hconsexnpkfjpxx/ArduinoPov.ino?dl=0
Suscribete a mi canal en youtube

You might also like