sábado, 6 de febrero de 2016

Robot controlado por Bluetooth + aplicacion android (apk)


Materiales:

  • Kit motores reductores + llantas (esos chinos amarillos que venden en las tiendas de electrónica).
  • Modulo  driver de motor L298N.
  • Arduino (Uno, Nano, Mega, etc). (recomiendo el  nano por el tamaño reducido)
  • Modulo bluetooth hc05 0 hc06  (solo recibira datos desde el android para manejar el carrito).
  • Cables machos para protoboard ( para unir el circuito en el protoboard).
  • 1 switch, 1 led, 1 resistencia de 1K.
  • Un mini Protoboar. 
  • Ball Caster o rueda loca
  • Tornillos largos (para unir el ball caster o rueda loca al chasis)
  • Baterias de litio, lipo o kit de pilas con voltajes de 7.4v  a 9 v ( mayor a 5 V si no el arduino no  arrancara). 
  • Portapilas AA (si utilizas pilas, compra una que venga de 6 ,  o sino una de 4 y la otra de 2)
  • Celular o tablet android con conectividad bluetooth.
  • El chasis puede ser de acrilico, triplay (darle forma ).

La Forma del Chasis:

Hay que hacer un cuadrado y dentro de el hacer una circunferencia en la plataforma (acrilico, triplay, etc) .
 Luego cortar dos esquinas del cudrado, esto para colocar los motores y las llantas, hacerlo con mucho cuidado de no quebrar.
Los agujeros serviran para colocar tornillos que sujeten alos motores y ball caster o rueda loca.
Las baterias para ahorrar espacio se pueden colocar debajo.


El circuito electrónico:



Programa en Arduino:

En escencia lo que hace el el programa del arduino es recibir un caracter  y adicionalmente una bandera para indicar si es un dato de dirección("d") o de la velocidad("#") y los concatena. De esa manera se podra manejar mejor la comunicación.
Adicionalmente el control del robot tebnra una función para  aumentar o disminuir la velocidad.

////////
#include <SoftwareSerial.h>
#define motor_1_a    7
#define motor_1_r    8
#define motor_2_a    5
#define motor_2_r    6
#define pin_pwm1     9
#define pin_pwm2     10
#define led1         13
#define led2         11
int numero=0;
int direccion=0;
SoftwareSerial bluetooth(2, 3); // RX, TX
String readString="";
void motores(float pwm1,  float pwm2)
{
   int v1, v2;
   if(pwm1 >= 0) //para el motor 1
   {
     digitalWrite(motor_1_a, HIGH);
     digitalWrite(motor_1_r, LOW);
     v1 = pwm1;
   }
   else if(pwm1 < 0)
   {
     digitalWrite(motor_1_a, LOW);
     digitalWrite(motor_1_r, HIGH);
     v1 = pwm1 * (-1);
   }

   //para el motor 2
   if(pwm2 >= 0)
   {
     digitalWrite(motor_2_a, HIGH);
     digitalWrite(motor_2_r, LOW);
     v2 = pwm2;
   }
   else if(pwm2<0)
   {
     digitalWrite(motor_2_a, LOW);
     digitalWrite(motor_2_r, HIGH);
     v2 = pwm2 * (-1);
   }
analogWrite(pin_pwm1, v1);
analogWrite(pin_pwm2, v2);
}

void setup()
{
  delay(500);
  pinMode(led1,  OUTPUT);
  pinMode(led2,  OUTPUT);
  pinMode(motor_1_a,  OUTPUT);
  pinMode(motor_1_r,  OUTPUT);
  pinMode(motor_2_a,  OUTPUT);
  pinMode(motor_2_r,  OUTPUT);
  pinMode(pin_pwm1,  OUTPUT);
  pinMode(pin_pwm2,  OUTPUT);

  digitalWrite(led1,HIGH);
  delay(500);
  digitalWrite(led1,LOW);
  delay(500);
  digitalWrite(led1,HIGH);
  delay(500);
  digitalWrite(led1,LOW);
  delay(500);
  digitalWrite(led1,HIGH);
   delay(500);
   Serial.begin(9600);
 bluetooth.begin(9600);
}

void loop()
{

readString="";
while( bluetooth.available())
  {
    delay(2);
    char c=bluetooth.read();
    if(c=='#')//bandera velocidad
    {
       numero=readString.toInt(); //convierte cadena a entero numero
        numero=numero*2.54;
       Serial.println(numero);
     }
    if(c=='d')//bandera direccion
    {
      direccion=readString.toInt();
      Serial.print("dato direccion ");
       Serial.println(direccion);
    }  
 
    readString+=c; //concatena datos que llegan
  }
        if(direccion==0)   {digitalWrite(led2,LOW); motores(0,0);}
        if(direccion==1)   {digitalWrite(led2,HIGH);motores(numero,numero-5);}
        if(direccion==2)   {digitalWrite(led2,HIGH);motores(-numero,-numero);}
        if(direccion==3)   {digitalWrite(led2,HIGH);motores(0,numero-3);}
        if(direccion==4)   {digitalWrite(led2,HIGH);motores(numero,0);}      
}





Aplicacion Android ".apk":

Lo que hace la aplicación es enviar caracteres numéricos  seguido de una bandera para identificar que tipo de dato es. Si es de dirección (avanzar=1, retroceder=2, izquierda=3, derecha=4) adicionando la bandera "d" que indicara que es justamente de direccion. Si no se preciona nada, entonces enviara "0" (detenido). De esta forma el robot funcionara si solamente es presionado algún boton de direccion.
Ln el slider de velocidad la logica es similar, pero en este caso enviara datos numerico que van desde 0 hasta 255, que justamente es el pwm con el cual variaremos la velocidad en el arduino, seguido de la bandera "#" que justamente identifica que es un dato de direccion.
Todo esos datos son enviados mediante la rutina  call bluetoothClient como se nota en la imagen.

Puedes descargarlo desde aqui : apk carrito bluetooth
clave de cifrado: !H2nwlNrYYt_EaM-xcvGrmQKe1VcPZl8lv_xcqZQKjkI

Imagen de la aplicacion desde dispositivo android:


Nota: antes de presionar los botones, primero hay que conectarse con el modulo bluetooth desde el botón correspondiente, sino dara un mensaje de error.





12 comentarios:

Disculpe, me pide una contraseña al descargar el archivo apk, me la puede proporcionar?

CUAL ES LA CLAVE DE CIFRADO DE LA APLICACION EN ANDROID?

clave de cifrado: !H2nwlNrYYt_EaM-xcvGrmQKe1VcPZl8lv_xcqZQKjkI

muchas gracias por la respuesta tan rapida.

Gracias por el gran aporte, como sería las conecciones de arduino uno con el driver l298n y el bluetooth HC-06 lo necesito con urgencia como cambio las definiciones. Gracias de antemano.

Alguien me puede decir como sería el mapeo con aduino uno por favor.
Gracias por siempre

hola amigo muy chevere me podrias regalar el archivo .aia el cual creo con la aplicacion app inventor, no a la aplicacion apk ese ya lo tengo gracias mi correo es fachame12@hotmail.com

Ese es todo el codigo de arduino

Hola!
Me gustaría saber si solamente puede llevarse a cabo con un dispositivo Android

Betway casino review for 2021 - Wooricasinos.info
Find out if Betway 애니팡 포커 is a legitimate, trusted and reliable online 카드 게임 종류 casino 수있습니다 in the world with reliable reviews. ✓ Find the best 바카라카운팅 site for 알바로 모라타

Publicar un comentario