Introduction: 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.

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