Go Down

Topic: proyecto coche 4x4 con brazo robot.  (Read 651 times) previous topic - next topic

aitorGTI

Buenos días,
En estas navidades me he puesto serio con uno de mis proyectos.
Ha toca al coche con brazo robot.
Ya lo tengo casi listo para empezar a programar, solo me queda colocar los cables en la protoboard y el arduino.

Os cuento un poco en lo que se compone el proyecto.
Es un coche con tracción a las 4 ruedas(motores independientes, es decir, 4 motores), se le ha añadido un brazo robot con 6 servomotores, lleva 3 sensores ultrasónicos, un sensor seguidor de lineas oscuras, varios leds, arduino mega y modulo bluetooth.

el coche va ha tener 3 modos de funcionamiento.
1- seguidor de lineas oscuras.
2- automatico, el cual se guiará por los sensores ultrasonicos.
3- Manual, donde se tendrá acceso al coche y al brazo.
todo esto manejado desde una APP para android.

os dejo unas fotos de como avanza la cosa.








 iremos actualizando a medida que la cosa vaya avanzando.

un saludo.

hiddenotebook

Muy chulo si señor una pasada, Yo también me tengo que poner serio con un robot que tengo a medias un wall-E radio control lo que mas me cuesta es la parte de las baterías recargables y alimentar todo.

Un saludo aquí me quedo a ver si aprendo cositas un saludo y gracias por compartir. 

aitorGTI

En mi caso la alimentación no creo que sea un problema, soy bastantr friki en el tema de radiocontroles y tengo bastantes baterías por casa.
Dale duro a los robots jeje
Un saludo.

Omar1011

Se mira de lujo tu auto. Empece a construir uno similar al tuyo con la idea de la app para android solo que estaba pensando en la solución al problema de la alimentación de el auto. Podrías compartir el tipo de baterias que vas a utilizar para alimentar el auto?

Seria un placer ver a ese grande en acción!

saludos.

aitorGTI

Buenos días, actualmente tengo un par de dudas las cuales creo que tengo mas o menos claro como hacerlo,
la primera es de mantener los leds parpadeando en todo momento, lo cual probaré a resolverlo con las ideas de los compañeros del siguiente link:
http://forum.arduino.cc/index.php?topic=444381.0

por otra parte me surge otra duda con los servomotores, en mi caso no se van ha manejar con angulos como es lo habitual, lo haran desde un dispositivo bluetooth con android y me haré la APP en vez de hacerlo con botones lo haré con sliders, si alguien quiere aportar algo, aqui tiene el linik:
http://forum.arduino.cc/index.php?topic=444037.0

Ahora mismo estoy recopilando información de tutoriales etc para seguir poco a poco con el proyecto.
El robot está montado al 90%, me quedan por colocar unos pocos cables en la protoboard (he agotado todas mis existencias de cables y he tenido que pedir más por internet, hasta que no los reciba no podré terminar. )

Poco a poco voy aclarando dudas y sacando adelante mi proyecto, que puede que sea demasiado ambicioso para el nivel de programación que tengo en arduino(que basicamente es NULO).

seguiré actualizando y estoy abierto a cualquier sugerencia. Tambien estoy abierto ha ayudar a quien lo necesite con las cosas que ya he echo o por lo menos tenga conocimientos de ello.

un saludo.

aitorGTI

Se mira de lujo tu auto. Empece a construir uno similar al tuyo con la idea de la app para android solo que estaba pensando en la solución al problema de la alimentación de el auto. Podrías compartir el tipo de baterias que vas a utilizar para alimentar el auto?

Seria un placer ver a ese grande en acción!

saludos.

Buenas tardes,
yo en mi caso utilizaré 3 fuentes de alimentación diferentes ( aunque con 2 también funcionaría yo utilizaré estas 3).

Para alimentar Arduino utilizaré una pila de 9v(en mi caso la utlizo recargable ya que estas tienen muy poca capacidad y se descargan rapidamente)
te dejo una foto para que veas la conexión:


Para alimentar los 4 motores, utlizo 4 pilas AA de 1.5v con el portapilas que me traía el KIT:



Por último para alimentar el brazo, utlizaré una batería LIPO de 7,4v y 1600mAh de un coche radio control (que espero que sea sucificiente para alimentar todos los servomotores) junto con un Cable casero que yo mismo he fabricado para alimentar directamente la protoboard:


espero haberte ayudado.

Un saludo.

MrLuck_7

Sinceramente quede con la boca abierta :O

surbyte

Bueno ahora que todo tu proyecto esta concentrado en este hilo es mas fácil seguirlo y darle apoyo.
Dime si los problemas anteriores estan resueltos?

aitorGTI

De momento no está solucionado, pero creo que me ha quedado claro.
Si lo prefieres los marco como solucionados y en caso de tener alguna duda la comento por aquí,
Que te parece surbyte?
Siento no hacerte quote, desde el iPad no me carga la barra de encima del texto, solo puedo responder a comentarios de esta forma.

Un saludo y feliz año nuevo.

surbyte

Resolvamos esos temas en los hilos abiertos y demosle solución como corresponde.
NO hace falta dar quote a algo que se lee en el mismo hilo. SI me respondes un serie de cosas o una frase si.

aitorGTI

#10
Jan 05, 2017, 06:35 pm Last Edit: Jan 05, 2017, 06:41 pm by aitorGTI
Perfecto.
Hoy por fin(gracias a las navidades y la gestión de correos ha llegado Bastante tarde) ha llegado mi paquete con cables a casa.
Hoy he dejado medió terminada la conexión, me quedan conectar unos pocos cables más.
Mañana espero dejarlo listo, hacer una gráfica con las conexiones, y ya empezaría a programar(que la verdad que es lo que más pereza me da, la parte electrónica y de montaje me apasiona más jeje)
Un saludo,

aitorGTI

Buenos días,
Tengo el proyecto un poco abandonado...
Os comento un poquito.
El robot está completamente montado, aunque de momento solo se encienden los leds de luz delantera y luz trasera.

Hoy toca empezar con la APP para android, la cual la voy ha hacer mediante APP inventor.

En principio tenía en mente hacer el programa mediante sliders para poder manipular el brazo robot, pero en este tutorial de youtube veo que lo hacen mediante botónes y parece que funciona correctamente. os dejo los 3 links del proyecto de youtube.

video 1, la aplicación para android:

https://www.youtube.com/watch?v=WWzf3HUl6nI


video 2, La programación:

https://www.youtube.com/watch?v=Pv0e8pJdkfw


video 3, Montaje y funcionamiento:

https://www.youtube.com/watch?v=EtrlbmLCx8E



Por último os dejo el codigo que han utilizado para hacer funcionar el brazo:
Code: [Select]
#include <Servo.h>

char dato;
Servo hombro, codo, muneca, pinzas, base;
int phombro, pcodo, pmuneca, ppinzas, pbase, contador=0;

void setup()
{
  hombro.attach(13);
  codo.attach(12);
  muneca.attach(11);
  pinzas.attach(10);
  base.attach(9);
  Serial.begin(9600);
}

void loop()
{
  if(contador==0)
  {
    // Leer posicion inicial
    phombro=hombro.read();
    pcodo=codo.read();
    pmuneca=muneca.read();
    ppinzas=pinzas.read();
    pbase=base.read();
   
    //Escribir posicion inicial
    hombro.write(phombro);
    codo.write(pcodo);
    muneca.write(pmuneca);
    pinzas.write(ppinzas);
    base.write(pbase);
    contador++;
  }
  dato='x';
  dato=Serial.read();
  switch(dato)
  {
    case 'A': //HOMBRO DERECHA
    {
       while(Serial.read()!='x')
       {
          if(phombro>=175)
              phombro=175;
          if(phombro<=180 && phombro>=0)
          {
           
            phombro++;
            hombro.write(phombro);
            delay(15);
          }
       }
      break; 
    }
   
    case 'a': //HOMBRO IZQUIERDA
    {
       while(Serial.read()!='x')
       {
         if(phombro<=5)
              phombro=5;
         if(phombro<=180 && phombro>=0)
          {
            phombro--;
            hombro.write(phombro);
            delay(15);
          }
      }
      break; 
    }
    case 'C': //CODO ARRIBA
    {
         if(pcodo>=175)
              pcodo=175;
        while(Serial.read()!='x')
        {
          if(pcodo<=180 && pcodo>=0)
          {
            pcodo++;
            codo.write(pcodo);
            delay(15);
          }
        }
      break;   
    }
    case 'c': //CODO ABAJO
    {
       if(pcodo<=5)
              pcodo=5;
       while(Serial.read()!='x')
       {
          if(pcodo<=180 && pcodo>=0)
          {
            pcodo--;
            codo.write(pcodo);
            delay(15);
          }
       }
      break;   
    }
    case 'I': //MUÑECA ARRIBA
    {
      if(pmuneca>=170)
          pmuneca=170;
      while(Serial.read()!='x')
       {
          if(pmuneca<=180 && pmuneca>=0)
          {
            pmuneca++;
            muneca.write(pmuneca);
            delay(15);
          }
       }
      break;     
    }
    case 'i': //MUÑECA ABAJO
    {
        if(pmuneca<=10)
              pmuneca=10;
       while(Serial.read()!='x')
       {
          if(pmuneca<=180 && pmuneca>=0)
          {
            pmuneca--;
            muneca.write(pmuneca);
            delay(15);
          }
       }
      break;
    }
    case 'P': //PINZA ABRIR
    {
      if(ppinzas>=165)
          ppinzas=165;
      while(Serial.read()!='x')
       {
           if(ppinzas<=180 && ppinzas>=0)
          {
            ppinzas++;
            pinzas.write(ppinzas);
            delay(15);
          }
       }
      break;
    }
    case 'p': //PINZA CERRAR
    {
        if(ppinzas<=15)
              ppinzas=15;     
       while(Serial.read()!='x')
       {
          if(ppinzas<=180 && ppinzas>=0)
          {
            ppinzas--;
            pinzas.write(ppinzas);
            delay(15);
          }
       }
      break;
    }
    case 'B': //BASE IZQUIERDA
    {  if(pbase>=175)
          pbase=175;
       while(Serial.read()!='x')
       {
           if(pbase<=180 && pbase>=0)
          {
            pbase++;
            base.write(pbase);
            delay(15);
          }
       }
      break;
    }
    case 'b': //BASE DERECHA
    {
        if(pbase<=5)
              pbase=5;
       while(Serial.read()!='x')
       {
          if(pbase<=180 && pbase>=0)
          {
            pbase--;
            base.write(pbase);
            delay(15);
          }
       }
      break;
    }
  }
}






Mi pregunta es la siguiente:

Hago el metodo de estos chicos y hago que se mameje el brazo mediante botones o utilizo un slider?

visualmente para la APP me parece bastante más bonito mediante botones que mediante sliders.

Que inconvenientes tienen los botones?

Un saludo

aitorGTI

#12
Jan 15, 2017, 04:34 pm Last Edit: Jan 15, 2017, 05:31 pm by aitorGTI
Buenas tardes,
Al final lo he hecho con botones.
Al pulsar el botón se envía un caracter en mayusculas, para dar la orden de movimiento.
Para detener el movimiento basta con soltar el botón, la APP enviará el mismo valor en minuscula indicando que detenga el movimiento, os dejo un par de fotos de como lo he hecho:





veremos como progresa el asunto.

 

Un saludo.

aitorGTI

Buenas tardes,
ya hemos echo las primeras pruebas con el brazo robot y la APP.
He detectado un problema.
Cuando un servo alcanza su recorrido final, no me permite volver ha utlizar ese servo, queda desactivado hasta que desenchufo la alimentación del arduino y vuelvo ha alimentarlo.
El codigo que he utlilizado es el siguiente:
Code: [Select]
include <Servo.h>

char dato;
Servo hombro, codo, muneca, pinzas, base, postbase;
int phombro, pcodo, pmuneca, ppinzas, pbase,ppostbase, contador=0;

void setup()
{
  hombro.attach(13);
  codo.attach(12);
  muneca.attach(11);
  pinzas.attach(10);
  base.attach(9);
  postbase.attach(8);
  Serial.begin(9600);
}

void loop()
{
  if(contador==0)
  {
    // Leer posicion inicial
    phombro=hombro.read();
    pcodo=codo.read();
    pmuneca=muneca.read();
    ppinzas=pinzas.read();
    pbase=base.read();
    ppostbase=base.read();
   
    //Escribir posicion inicial
    hombro.write(phombro);
    codo.write(pcodo);
    muneca.write(pmuneca);
    pinzas.write(ppinzas);
    base.write(pbase);
    postbase.write(ppostbase);
    contador++;
  }
  dato='x';
  dato=Serial.read();
  switch(dato)
  {
    case 'I': //HOMBRO SUBIR
    {
       while(Serial.read()!='x')
       {
          if(phombro>=175)
              phombro=175;
          if(phombro<=180 && phombro>=0)
          {
           
            phombro++;
            hombro.write(phombro);
            delay(15);
          }
       }
      break; 
    }
   
    case 'J': //HOMBRO BAJAR
    {
       while(Serial.read()!='x')
       {
         if(phombro<=5)
              phombro=5;
         if(phombro<=180 && phombro>=0)
          {
            phombro--;
            hombro.write(phombro);
            delay(15);
          }
      }
      break; 
    }
    case 'K': //CODO ARRIBA
    {
         if(pcodo>=175)
              pcodo=175;
        while(Serial.read()!='x')
        {
          if(pcodo<=180 && pcodo>=0)
          {
            pcodo++;
            codo.write(pcodo);
            delay(15);
          }
        }
      break;   
    }
    case 'L': //CODO ABAJO
    {
       if(pcodo<=5)
              pcodo=5;
       while(Serial.read()!='x')
       {
          if(pcodo<=180 && pcodo>=0)
          {
            pcodo--;
            codo.write(pcodo);
            delay(15);
          }
       }
      break;   
    }
    case 'M': //MUÑECA IZQUIERDA
    {
      if(pmuneca>=170)
          pmuneca=170;
      while(Serial.read()!='x')
       {
          if(pmuneca<=180 && pmuneca>=0)
          {
            pmuneca++;
            muneca.write(pmuneca);
            delay(15);
          }
       }
      break;     
    }
    case 'N': //MUÑECA DERECHA
    {
        if(pmuneca<=10)
              pmuneca=10;
       while(Serial.read()!='x')
       {
          if(pmuneca<=180 && pmuneca>=0)
          {
            pmuneca--;
            muneca.write(pmuneca);
            delay(15);
          }
       }
      break;
    }
    case 'O': //PINZA ABRIR
    {
      if(ppinzas>=165)
          ppinzas=165;
      while(Serial.read()!='x')
       {
           if(ppinzas<=180 && ppinzas>=0)
          {
            ppinzas++;
            pinzas.write(ppinzas);
            delay(15);
          }
       }
      break;
    }
    case 'P': //PINZA CERRAR
    {
        if(ppinzas<=15)
              ppinzas=15;     
       while(Serial.read()!='x')
       {
          if(ppinzas<=180 && ppinzas>=0)
          {
            ppinzas--;
            pinzas.write(ppinzas);
            delay(15);
          }
       }
      break;
    }
    case 'E': //BASE IZQUIERDA
    {  if(pbase>=175)
          pbase=175;
       while(Serial.read()!='x')
       {
           if(pbase<=180 && pbase>=0)
          {
            pbase++;
            base.write(pbase);
            delay(15);
          }
       }
      break;
    }
    case 'F': //BASE DERECHA
    {
        if(pbase<=5)
              pbase=5;
       while(Serial.read()!='x')
       {
          if(pbase<=180 && pbase>=0)
          {
            pbase--;
            base.write(pbase);
            delay(15);
          }
       }
      break;
    }
    case 'G': //POSTBASE SUBIR
    {  if(ppostbase>=175)
          ppostbase=175;
       while(Serial.read()!='x')
       {
           if(ppostbase<=180 && ppostbase>=0)
          {
            ppostbase++;
            postbase.write(ppostbase);
            delay(15);
          }
       }
      break;
    }
    case 'H': //POSTBASE BAJAR
    {
        if(ppostbase<=5)
              ppostbase=5;
       while(Serial.read()!='x')
       {
          if(ppostbase<=180 && ppostbase>=0)
          {
            ppostbase--;
            postbase.write(ppostbase);
            delay(15);
          }
       }
      break;
    }
  }
}


practicamente está copiado tal cual de internet salvo por que le he añadido un servo más y he modificado 4 cositas...

es normal esto que me pasa?

un saludo.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy