Arduino POV Controlado Desde Android

About: My name is José Luis Bejarano Vásquez.Tecnólogo en electrónica, estudiante de ing electrónica, desarrollador de software. Aficionado a la robótica. Blogger.

Proyecto de un POV con Arduino controlado desde el celular.

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.

Nota: (Es mi primer proyecto montado en instructable)

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

La lista de materiales es la siguiente:

  • Una tarjeta Arduino Uno o cualquier modelo.
  • Módulo de Bluetooth HC-05
  • 7 leds de cualquier color.
  • 8 Resistencias de 220.
  • 1 Resistencia de 10K.
  • 1 Diodo emisor de infrarojos.
  • 1 Fotodiodo receptor.
  • 1 Batería de 9V.
  • 1 motor de CC para colocar el circuito.
  • Cables de conexión.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: 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 poruna bateria por que va a estar girando constantemente y asi no se enreden los cables.
  • Las conexiones del bluettooth 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.

Step 2: 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.

Step 3: 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 empieze a "dibujar" las letras.

Step 4: 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.

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.

Si deseas descargar la APP:Haz clic aca

Step 5: El Código De Arduino

Si deseas descargar el código haz clic aca

byte largo=0; //Tamaño de la palabra / Size of the word
char letra; //Almacena cada caracter /Stores each letter

String palabra;

int caracterDepurado;

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 espaciado;
int retardo;

void setup() {

// Configuro los puertos de entrada y salida / Setting the ports of the leds to OUTPUT and sensor to INPUT 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();

//Espacio entre cada letra /Space between each letter

espaciado = 9;

// defining the time dots appear (ms)

retardo =3;

}

//***** 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(W);

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


Step 6: Video De Funcionamiento


Move It

Participated in the
Move It

Be the First to Share

    Recommendations

    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    16 Discussions

    0
    None
    Hiraimomo1313

    10 days ago on Step 1

    Bueno y el fotodiodo. Es necesario que vaya conectado al photoboard con el resto o lo puedo poner aparte con su propia energia

    6 replies
    0
    None
    Hiraimomo1313Hiraimomo1313

    Reply 8 days ago

    Bueno si. Igual he comprado casi todo los materiales(solo me falta el fotoDiodo y ch5).. esto es para un proyecto del colegio. y de verdad que ni siquiera se como programar el arduino.y menos he podido descargar el programa para hacerlo. Esto es difícil de verdad.

    0
    None
    afiq97

    2 years ago

    not function...why?

    0
    None
    afiq97

    2 years ago

    hello sir, can i use this program for cylinder pov led

    0
    None
    KrlosL1

    2 years ago

    es una pena que no funciones :(

    0
    None
    NixonM1

    2 years ago

    quien me puede ayudar para que funcione en arduino uno

    0
    None
    NixonM1

    2 years ago

    no funciona con arduino uno

    0
    None
    NixonM1

    2 years ago

    no permite cargar el programa

    0
    None
    Jorge AdrianM

    2 years ago

    El Sketch usa 6.698 bytes (2%) del espacio de almacenamiento de programa. El máximo es 253.952 bytes.

    Las variables Globales usan 1.960 bytes (23%) de la memoria dinámica, dejando 6.232 bytes para las variables locales. El máximo es 8.192 bytes.

    avrdude: stk500v2_ReceiveMessage(): timeout

    avrdude: stk500v2_ReceiveMessage(): timeout

    avrdude: stk500v2_ReceiveMessage(): timeout

    avrdude: stk500v2_ReceiveMessage(): timeout

    avrdude: stk500v2_ReceiveMessage(): timeout

    avrdude: stk500v2_ReceiveMessage(): timeout

    avrdude: stk500v2_getsync(): timeout communicating with programmer

    Ha ocurrido un error mientras se enviaba el sketch

    0
    None
    tomatoskins

    4 years ago on Introduction

    Idea muy guay! Gracias por compartir y felicitaciones por su primera instructable!