Arduino POV

Publicado el: 1 de mayo de 2015
Principiante
Acerca de este proyecto
Proyecto que consiste en un POV (persistence of vision) con arduino.
arduino pov
Publicidad
DETALLES

En este artículo construiremos un proyecto muy conocido para los amantes de la electrónica 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 fracción de segundo asi esta ya haya desaparecido, podemos visualizar la palabra o frase completa. Este efecto es aprovechado también 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) Batería de 9V

- (1) Motor pequeño (para acoplar el protoboard.)

- Cables de conexión


Para que las letras comienzen a formarse siempre desde una misma posición y evitar que se vea el mensaje corrido o difícil de leer, hay que contar con un sistema que detecte cuando se pase por esa posición. Se puede optar por colocar o un sensor magnético 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 ESQUEMATICO




Como vemos en el diagrama,es fácil de realizar, sólo 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 través de la resistencia de 10kΩ, y su cátodo 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:

Ubicación del fotodiodo




Ubicación del led emisor de infrarojos


El algoritmo para mostrar los carácteres es el siguiente:

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

Descargar codigo fuente arduino POV.


CODIFICACIÓN
Codigo arduino POV-

/* Código para circuito POV con Arduino 
http://sistemasymicros.com.co
twitter/sistemasymicros
José Luis Bejarano Vásquez - 2015 */
int leds[]={4,5,6,7,8,9,10};  //Array para los leds
const int sensor=2;  // sensor de posición
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};
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 los espacios 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(_);
    }
  
}
 



Autor: sistemasymicros
26 proyectos 6 seguidores 0 siguiendo

Ingeniero en electrónica. Maker, apasionado por la programación. Sigueme en sistemasymicros.

PROYECTOS RELACIONADOS
COMENTARIOS
Para publicar un comentario debes