proyecto coche 4x4 con brazo robot.

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.

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.

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.

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.

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.

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.

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.

Sinceramente quede con la boca abierta :open_mouth:

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?

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.

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.

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,

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:

video 2, La programación:

video 3, Montaje y funcionamiento:

Por último os dejo el codigo que han utilizado para hacer funcionar el brazo:

#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

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.

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:

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.

Buenas tardes,
llevo una temporada bastante liado y no he podido dedicar ni un solo segundo al arduino.
Este fin de semana quiero volver ha meterle mano.
A alguien se le ocurre que es lo que le puede estar pasando a mi robot?
no sé por donde empezar, no tengo claro si el problema reside en el sketch o reside en la propia APP y desde ahí me está fallando todo....

Alguna sugerencia de por donde debería empezar a revisar el problema que tengo?

un saludo.

Buenas tardes,

Sigo investigando acerca de mi problema con el robot, es posible que el problema resida en el bluetooth que se me bloquea? (Es la única explicación lógica que se me ocurre ahora mismo)
Quizá sería más efectivo hacerlo mediante wifi?

Un saludo

Buenos días,
tras muchos quebraderos de cabeza y no saber por donde actuar,
finalmente me he decantado por rehacer mi APP y hacerla mediante sliders como habiamos comentado inicialmente.
el resultado de la app es el siguiente:

Ahora me pondré con el sketch.

Otro de mis mayores problemas era hacer parpaderar de forma continua un Led, finalmente lo haremos con un circuito independiente y no mediante el propio arduino.

ire actualizando a medida que vaya progresando.
No tengo demasiado tiempo libre y la cosa va muy pero que muy lenta.

un saludo..

Buenos días,

hacía mucho tiempo que no tocaba este proyecto.
Por fin lo he retomado y vamos a ir por partes. primero haremos que funcione lo más simple que es la funcion del coche, que giren las ruedas, pero me ha surgido un problema:
utilizando el siguiente scketck:

 int izqA = 5;
int izqB = 6;
int derA = 9;
int derB = 10;
int vel = 255; // Velocidad de los motores (0-255)
int estado = 'g'; // inicia detenido

void setup() {
Serial.begin(9600); // inicia el puerto serial para comunicacion con el Bluetooth
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);
}

void loop() {

if(Serial.available()>0){ // lee el bluetooth y almacena en estado
estado = Serial.read();
}
if(estado=='G'){ // Forward
Serial.println(estado);
analogWrite(derB, vel);
analogWrite(izqB, 0);
analogWrite(izqA, vel);
analogWrite(derA, 0);
}
if(estado=='J'){ // right
Serial.println(estado);
analogWrite(derB, vel);
analogWrite(izqB, vel);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
if(estado=='K'){ // Stop
Serial.println(estado);
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
if(estado=='I'){ // left
Serial.println(estado);
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(izqA, vel);
analogWrite(derA, vel);
}

if(estado=='H'){ // Reverse
Serial.println(estado);
analogWrite(derB, 0);
analogWrite(izqB, vel);
analogWrite(izqA, 0);
analogWrite(derA, vel);
}
if (estado =='f'){ // Boton ON se mueve sensando distancia

}
if (estado=='g'){ // Boton OFF, detiene los motores no hace nada
}
}

el skecth lo he sacado de internet y la aplicación para el movíl tambén.
primero probé con la misma app que el que hizó el scketch pero la aplicación a los pocos segundos se bloqueaba y el coche dejaba de responder.

al principio creia que el probloema podría residir en la propia app, por lo que me hicé mi propia app desde el app inventor.
Después de hacer la prueba el problema persiste, a los pocos segundos la app se bloquea y el coche deja de responder.
Creo que el problema está en que la señal bluetooth se pierde y deja de conectar el movil con el coche.
El problema podría ser que utilizo un modulo HC-05 en vez de el mítico HC-06?

Un saludo.

Ese sketch no puede bloquearse, eso ya te lo aseguro.

Respecto de la app no se que decirte porque no esta.

Si luego hablas de que usas un sensor HC-05 no pones el sketch que lo utiliza entonces para que posteas el código anterior?

Si se pierde el enlace considera entonces informarlo de algún modo en el Arduino, con un led, o bien haciendo que la aplicación envíe algo de manera continua. Supongamos que la aplicación envie siempre el estado del contador digamos cada 500 mseg por sugerir algo. Si no recibes ese cambio de contador en 500 mseg en el arduino, lo informas via el LED y eso te servirá para comprender que pasa.

Ahora has leido sobre el alcance de BT? Tomate un tiempo e investiga si estas o no en rango cuando ocurre lo que comentas.

Buenas noches surbyte,
gracias por tu respuesta.
vamos por partes.

surbyte:
Si luego hablas de que usas un sensor HC-05 no pones el sketch que lo utiliza entonces para que posteas el código anterior?

no entiendo esta pregunta...

el código que estoy planteando es el que utilizo con el HC-05

surbyte:
Si se pierde el enlace considera entonces informarlo de algún modo en el Arduino, con un led, o bien haciendo que la aplicación envíe algo de manera continua. Supongamos que la aplicación envie siempre el estado del contador digamos cada 500 mseg por sugerir algo. Si no recibes ese cambio de contador en 500 mseg en el arduino, lo informas via el LED y eso te servirá para comprender que pasa.

Ahora has leido sobre el alcance de BT? Tomate un tiempo e investiga si estas o no en rango cuando ocurre lo que comentas.

Pondré un led que esté encendido mientras la conexión esté activa. Investigaré un poco, así podré introducir un código que me avise mediante el led si se pierde la conexión.
respecto al rango, no me he alejado más de 2 metros el emisor y el receptor....

Nuevamente muchas gracias por tu respuesta.

un saludo