Arduino POV controlado desde el celular

Publicado el: 19 de mayo de 2015
Intermedio
Acerca de este proyecto
Proyecto POV con Arduino en el cual se se envía el mensaje a mostrar a través de un celular con sistema operativo android.
arduino pov android
Publicidad
DETALLES

Proyectos POV hechos con Arduino hay muchos, pero quise realizar uno en el cual se pudiera enviar el mensaje o palabra a visualizar, a través del celular para evitar estar a cada rato cargando el programa en el arduino cada vez que deseba visualizar una palabra diferente. Por esta razón realicé este proyecto que hoy les comparto.

Ha sido montado en la protoboard, y acoplada al eje del motor con pegante super adhesivo.

LISTA DE MATERIALES


  • Tarjeta arduino Uno o equivalente
  • Modulo de bluetooth HC-05
  • 7 leds de cualquier color
  • 8 resistencias de 220 ohms
  • 1 resistencia de 10k ohm
  • 1 diodo emisor infrarojo
  • 1 fotodiodo receptor
  • 1 bateria de 9v
  • 1 motor de CC para acoplar a la protoboard.
  • Cables de conexion

DIAGRAMA DEL CIRCUITO



Para las conexiones se usa el esquema anterior.


  •     El fotodiodo en conjunto con el emisor de infrarojos y es para detectar la posición y asi siempre empezar a escribir el mensaje desde la misma posición y evitar que se muestren las letras corridas.
  •     Recordad que el fotodiodo (receptor) debe ser polarizado inversamente para su correcto funcionamiento, es decir, el cátodo debe ir conectado hacia +5V y en ánodo hacia tierra a través de la resistencia de 10K.
  •     El circuito es alimentado por una bateria por que va a estar girando constantemente y asi no se enreden los cables.
  • Las conexiones del bluetooth con el arduino son cruzadas, es decir, el Tx del BT va con el Rx del Arduino, y el Rx del BT va con el Tx del Arduino.
  •     Tener la precaución que al momento de grabar el código al arduino, el módulo de bluetooth debe estar desconectado.

MONTAJE EN LA PROTOBOARD



Se muestra el montaje realizado en Fritzing.


El fotodiodo receptor debe sr colocado de tal forma que apunte directamente hacia el diodo emisor de infrarojos.


El diodo emisor debe ser energizado por una fuente aparte que proporcione 5V.


Ubicación Del Diodo Emisor Y Del Receptor



Como se dijo anteriormente, estos diodos trabajan en conjunto para detectar la posición, de esta manera, el diodo emisor de infrarojos que se muestra en la parte inferior ( en el protoboard ) está constantemente encendido, y el fotodiodo receptor que se muestra de color café en la parte inferior del protoboard donde está montado el POV cada vez que pasa por el emisor, detecta la luz recibida y envía una señal al arduino para decirle que empiece a "dibujar" las letras.


Diagrama En Bloques De La APP Hecha En App Inventor



Esta es sencilla, como se ve en la figura, sólo se hace uso de un textbox, un botón para enviar el mensaje y unos controles tipo Labels que sirven de información.


En el diagrama de bloques se muestra que primero se selecciona la conexión a Bluetooth a utilizar.

Descargar la APK desde este enlace.

VIDEO DE FUNCIONAMIENTO



Luego se configura la acción a realizar cuando se presiona el botón, en este caso se envía por bluetotth el texto escrito en el textbox.

CODIFICACIÓN
Codigo de arduino-

/* Proyecto de un POV con Arduino controlado desde Android
José Luis Bejarano Vásquez
Mayo 15 de 2015
sistemasymicros.com.co
@sistemasymicros*/
byte largo=0;  //Tamaño de la palabra / Size of the word
char letra;    //Almacena cada caracter /Stores each letter
String palabra;
int caracterDepurado;

const byte leds[]={4,5,6,7,8,9,10};  //Array para los leds
const byte sensor=2;  // sensor de posición
byte estado=0;
//int _[] = {3F912243FxF};
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};



//Espacio entre cada letra /Space between each letter
int espaciado=9;
const byte retardo=3;

void setup()
{

  // Configuro los puertos de entrada y salida / Setting the ports of the leds to OUTPUT and sensor to INPUT
  for(byte i=4;i<=10;i++){
    pinMode(i,OUTPUT);
  }
//  pinMode(4, OUTPUT);
//  pinMode(5, OUTPUT);
//  pinMode(6, OUTPUT);
//  pinMode(7, OUTPUT);
//  pinMode(8, OUTPUT);
//  pinMode(9, OUTPUT);
//  pinMode(10, OUTPUT);
  pinMode(sensor,INPUT);
  Serial.begin(9600);
  Serial.flush();
 
  
  // defining the time dots appear (ms)

 
}
//***** Para limpiar la columna / For cleaning the column************
void borrar()
{
  for(int z=0;z<7;z++)
    {
      digitalWrite(z+4,LOW);
    } 
}
//*******************************************
void imprimir(int caracter[])
{
  int y;

   // Imprime la primera columna /Prints the first column
  for (y=0; y<7; y++)
  { 
    digitalWrite(y+4, caracter[y]);
  }
  delay(retardo);
  borrar();
 
 
  // Imprime la segunda columna /Prints the second column
  for (y=0; y<7; y++)
  {
    digitalWrite(y+4, caracter[y+7]);
  }
  delay(retardo);
    borrar();
   
 
  // Imprime la tercera columna /Prints the third column
  for (y=0; y<7; y++)
  {   
    digitalWrite(y+4, caracter[y+14]);
  }
  delay(retardo);
    borrar();
  
  // Imprime la cuarta columna /Prints the fourth column
  for (y=0; y<7; y++)
  {
    digitalWrite(y+4, caracter[y+21]);
  }
  delay(retardo);
    borrar();
 
  // Imprime la quinta columna /Prints the fifth column
  for (y=0; y<7; y++)
  {
    digitalWrite(y+4, caracter[y+28]);
  }
  delay(retardo);
    borrar();
  
 
  // printing the space between the letters
  for (y=0; y<7; y++)
  {
    digitalWrite(y+4, 0);
  }
  
  delay(espaciado);
}
//*********************************************
void loop()

{
  
  if (Serial.available())
  {
    
    Serial.flush(); //Limpio el buffer/Clean the buffer
    palabra='';
       
    while (Serial.available() >0)
    {      
       delay(5);
       letra = Serial.read();  //Lee cada caracter de la palabra //Reads each letter of the word
       palabra = palabra+letra;
     
     }  // fin del while
   }  // fin del if
  
    estado = digitalRead(sensor);  //verifico si ya pasó por el sensor de posición / check if already cross the position sensor
    
    largo = palabra.length();  //Calculo la longitud de la palabra / Checks the lenght of the word
    
    if(estado==HIGH)  //si ya pasó// if has just crossed
    {
       for(int x=0;x<largo;x++)
      {
        char caracter = palabra.charAt(x);  //Obtengo cada letra y la almacendo en la variable / Obtains each letter and stores at the variable
        
        caracterDepurado=(caracter-'0');  
        
          if (caracterDepurado>0)  //Esto es para evitar que se envien caracteres no deseados
          {
                                                                                                                                                                                                                                                          
               switch (caracter)
                {

                 case 'A':
                    imprimir(A);
                    break;
                  case 'B':
                    imprimir(B);
                    break;
                  case 'C':
                    imprimir(C);
                    break;
                  case 'D':
                    imprimir(D);
                    break;
                  case 'E':
                    imprimir(E);
                    break;   
                  case 'F':
                    imprimir(F);
                    break;             
                  case 'G':
                    imprimir(G);
                    break;              
                  case 'H':    
                    imprimir(H);
                    break;              
                  case 'I':      
                    imprimir(I);
                    break;              
                  case 'J':
                    imprimir(J);
                    break;              
                  case 'K':
                    imprimir(K);
                    break;     
                  case 'L':
                    imprimir(L);
                    break;   
                  case 'M':
                    imprimir(M);
                    break;   
                  case 'N':
                    imprimir(N);
                    break;   
                  case 'O':
                    imprimir(O);
                    break;   
                  case 'P':
                    imprimir(P);
                    break;   
                  case 'Q':
                    imprimir(Q);
                    break;                   
                  case 'R':
                    imprimir(R);
                    break;   
                  case 'S':
                    imprimir(S);
                    break;  
                  case 'T':
                    imprimir(T);
                    break;  
                  case 'U':
                    imprimir(U);
                    break;  
                   case 'V':
                    imprimir(V);
                    break;
                   case 'W':
                    imprimir(X);
                    break;
                 case 'X':
                    imprimir(X);
                    break;      
                  case 'Y':
                    imprimir(Y);
                    break;  
                     case ' ':
                    //imprimir(_);
                    break;  
               
                  
                 }  //fin del switch
                 
             }  //fin del if
        
     } //fin del for
     
} //fin del if estado
  
}  // fin del loop
 




Autor: sistemasymicros
26 proyectos 6 seguidores 0 siguiendo

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

COMENTARIOS
Para publicar un comentario debes